Code selbst signieren - Teil 1 (Beispiel: Gadgets verpacken)

2007-08-27 | Toni Pohl

sidebar-gadgets

Programm-Code kann selbst mit einem Zertifikat versehen werden um den Herausgeber zu verifizieren. Im ersten Teil dieses Beitrags erfahren Sie anhand eines Sidebar Gadgets, wie dieses vorbereitet werden kann und Sie erfahren Wissenswertes über die Gadget-Technologie.

Viele von uns verwenden sie bereits täglich und wollen sie nicht mehr missen: die Windows Vista Sidebar Gadgets. Nützliche kleine Tools, um rasch Informationen in den verschiedensten Bereichen zu erhalten, sei es den Wetterbericht, Aktienkurse, die Rechnerauslastung, Outlook-Infos oder RSS-Feeds.

Sidebare Gadgets können relativ einfach erstellt werden und sind in Wahrheit nichts anderes als gezippte Dateien mit der Endung .gadget. (Probieren Sie es aus: Benennen Sie eine heruntergeladene Datei von .gadget in .zip um und entpacken Sie das Zip - voila.)
Beim Ausführen einer *.gadget-Datei wird diese in das eigene Application Directory entpackt:

C:\Users\<username>\AppData\Local\Microsoft\Windows Sidebar\Gadgets\<gadgetname>

Eine Manifest-Datei gadget.xml beschreibt das Gadget, die Funktionalität besteht im Wesentlichen meist aus HTML-Seiten, Javascript und einigen Images. Soweit so gut.

gadget-ohne-zertifikat-warnung

Die meisten Gadgets besitzen allerdings keinen Hinweis über den Herausgeber der Software - smybolisiert mit dem roten Schild. Ist ein zu installierendes Gadget wirklich vertrauenswürdig? Wer hat es programmiert und wie können wir sicherstellen, dass es sich um nicht um schädlichen Code handelt?

Nun, zu schädlichem Code muss gesagt werden, dass Gadgets in einem eigenen geschützten Bereich laufen und nur zu bestimmten Teilen des Rechners Zugriff erhalten - hier besteht im Regelfall keine Sorge, dass ein Gadget wirklich "Böses" ausführen kann - dennoch sollten Entwickler einige Richtlinien beachten. Wir gehen davon aus, dass Sie den Code, welchen Sie verteilen wollen, sicher ist. :-)

Aber wie kann nun die Installationsquelle "sicher" gemacht werden, damit die Anwender auf die Identität des Herausgebers vertrauen können?

Wenn Sie Entwickler eines Gadgets oder IT-Pro mit dem Ziel einer sicheren Verteilung sind, benötigen Sie ein Zertifikat. Keine Sorge, wenn Sie kein "offizielles" Zertifikat besitzen, das können Sie sich auch einfach selbst erstellen.

Gadgets werden im Regelfall als einfache Zip-Dateien geliefert. Schritt eins ist, statt eines Zip-Files ein .CAB-File (=Microsoft Cabinet File, ein gepacktes Archiv zur Software-Verteilung) zu erstellen. Warum? Weil .CAB-Dateien signiert werden können!

Dazu benötigen wir das Microsoft Cabinet Software Development Kit.

Ein Hinweis, worüber auch ich anfangs gestolpert bin: CAB-Dateien können nicht mit Visual Studio erzeugt werden, weil Visual Studio in CAB-Projekten keine Verzeichnisstruktur speichern kann - diese wird für Gadgets aber benötigt. Daher empfiehlt sich der Einsatz des Microsoft Cabinet SDK!

Laden Sie Cabsdk.exe herunter und entpacken diese Datei in ein temporäres Verzeichnis.

cabarc2

Die extrahierten Dateien werden in einen allgemeinen Folder kopiert, damit die Tools im PATH gefunden werden können (wenn Sie Visual Studio 2005 installiert haben, empfiehlt sich das Verzeichnis C:\Program Files\Microsoft Visual Studio 8\VC\bin).

Nun das Visual Studio 2005 Command Prompt starten und in das Verzeichnis des Gadgets navigieren. Nun wird das Gadget in eine neue .CAB-Datei gepackt:

cabarc -p -r N pwdgen.gadget *

Ersetzen Sie "pwdgen.gadget" durch den gewünschten Gadget-Namen.
-p behält die Verzeichnis-Struktur, -r steht für rekursiv und N für ein neues Archiv.

cabarc

Als Ergebnis erhalten Sie eine neue Datei pwdgen.gadget. Es handelt sich hierbei um eine gepackte Datei vom Typ CAB, welche signiert werden kann - aber nicht muss. Das Gadget kann nun (genauso wie auch .gadgets vom Typ Zip) verteilt werden.

Damit wäre der erste Schritt - das Packen des Gadgets - erfüllt. In Teil Zwei sehen wir uns an, wie wir das CAB-Gadget (oder beliebigen anderen Code) mit einem eigenen Zertifikat versehen können!

Beitrag von Toni Pohl

Categories: Developer, Security, Tools

Source: https://blog.atwork.at/post/Code-selbst-signieren-Teil-1-(Beispiel-Gadgets-verpacken)