none
Powershell und Codesigning RRS feed

  • Frage

  • Hallo, ich habe mal ein-zwei Fragen zum Thema Codesigning, vielleicht kann einer von euch mir weiterhelfen.

    Ich habe die Richtline auf den Testrechnern auf "AllSigned" gesetzt. 

    Ich habe mir, von der DomainPKI ein Zertifikat für Codesigning beantragt, genehmigen lassen und jetzt im Zertifikatsspeicher liegen.

    (hier schon getestet, hatte aber gelesen, es wäre besser, das Teil auf einem Stick zu "bunkern".

    Hab das Zert, mit PK (das ist nötig?) und hartem Passwort exportiert und auf eine USB-Stick gelegt, und es ist (auf meinem Testrechner) als "vertrauenswürdiger Herausgeber" angegeben, obwohl das bei der Stammzertifizierungstelle schon der Fall war, was es trotzdem nötig, damit er bei signierten Scripts nicht mehr nachfragt).

    Habe es (zum Signieren kurz eingebunden) und ein script signiert:

    $Cert=@()
    $cert=get-pfxcertificate -filepath 'F:\Kode_sign.pfx'

    (hier kommt die Passworteingabe)

    set-authenticodeSignature c:\ordner\scripte\meinscript.ps1 $Cert

    Ab hier ist es Signiert und läuft auch einwandfrei. jihaa!!! :-D

    Aber jetzt die Fragen.

    1. Ist es sinnvoll, das Zertifikat auf einem USB-Stick verschlossen zu bunkern, wenn es eh unter "vertrauenswürdige Herausgeber" liegt (das wäre dann ja irgendwann überall auf den Rechnern) oder sind die Daten, die dort hinterlegt sind kein Risiko? Man kann es ja verschlüsselt im Zertspeicher lassen, aber Theoretisch ist es für Angreifer ja auf dem Rechner erreichbar... 

    Wie bewertet ihr da das Risiko, wie handhabt Ihr das...?

    2. Was passiert, wenn das Zertifikat abläuft?? Muss ich dann alle Scripte neu signieren? Bzw. kann ich einen Timestamp setzen oder ähnliches, damit dies nicht nötig ist [swiss-cert wirbt damit] und wie sicher wäre so ein Timestamp?? (Theoretisch könnte man ja einen zentralen Ordner anlegen und alles darin, mit einer Zeile neusignieren... Nur bei GPOs, SCCM Paketen und Zeug, müsste man das alles wieder einbinden... naja, vermutlich kann man das auch scripten.. 

    Ist jetzt keine Lebenswichtige Sache, aber ich mich würde da mal die Meinung von Leuten interessieren, die damit Erfahrung bzw. tiefere Kenntnisse haben.

    Vielen Dank schon mal und einen guten Start in die Woche. :-)


    Montag, 21. Mai 2012 14:46

Antworten

  • Ich bin kein Zertifikatsexperte deshalb kann ich dir nicht alle Fragen beantworten.

    Zu 1. Ein Zertifikat ist genauso zu betrachten wie ein Personalausweis. Das Zertifikat ist nur Persönlich auf die Firma oder die Person gültig. Diese Person ist der Eigentümer des Zertifikats. Somit ist es eine gute Idee das Zertifikat immer bei sich zu tragen um überall Signieren zu können.
    Zertifikate die von einer Weltweit anerkannten Zertifizierungsstelle (public certification authority (CA)) kommen  (VeriSign, Thawte, Comodo, Geotrust, GlobalSign u.a.) kannst du also überall einsetzen. Wenn dein Unternehmen eine eigene CA hat (Active Directoy mit PKI infrastruktur), dann ist dein Zertifikat nur in dem Unternehmen (AD) gültig. Hier macht das Kopieren auf einem USB stick wenig Sinn, da man an das Original immer wieder leicht heran kommt.

    Ich habe oben das Wort Kopie anstatt Backup genutzt !
    1. Ein Backup sollte auf einem sicheren Medium geschehen (nicht USB stick)
    2. Ein Backup ist nicht für den Täglichen Einsatz gedacht!
    2a. Ein Backup ist ein ort an dem etwas gesichert wegelegt wird, bis es aus einer Notsituation wieder gebracht wird!
    Eine Kopie ist für den Täglichen Einsatz geeignet, weil man ja noch ein Backup hat ;-)))

    Zu 2. Alle mir bekannten Zertifikatanbieter bieten auch den Time Stamp Service an!
    Wenn eine Code Signiert ist und bei der Signierung der Time Stamp mit angegeben wird dann läuft die Signierung des Codes nicht ab. Ein weiteres Signieren ist nicht nötig (es sei den der Code wird verändert).
    Bei dem Signieren mit Time Stamp wird dein Signatur Hash an die Zertifikatsstelle gesendet (Time Stamp Server) diese Prüft die Signatur und schickt die Signatur mit einem Time Stamp wieder zurück.

    Wenn man z.B. ein Aktive Directory mit PKI Infrastruktur hat, so bleibt die ganze Kommunikation „im hause“ und man benötigt auch eine Time Stamp Server „im Hause“.

    Siehe: Time Stamping Authenticode Signatures
    http://msdn.microsoft.com/en-us/library/windows/desktop/bb931395%28v=vs.85%29.aspx

    >>>>>Hab das Zert, mit PK (das ist nötig?) und hartem Passwort exportiert

    Ich nehme mal an mit PK meinst du den Public Key ?

    Ich denke, zum Signieren brauchst du immer beide Schlüssel!?
    Als Backup MUSS man wohl den PK mit sichern! ;-))

    "PSSkripte signieren"
    http://www.powershellpraxis.de/PSSkripte-signieren.951.0.html

    Introduction to Code Signing
    http://msdn.microsoft.com/en-us/library/ms537361%28VS.85%29.aspx


    Please click “Mark as Answer” if my post answers your question and click Vote as Help if my Post helps you.
    Bitte markiere hilfreiche Beiträge von mir als Hilfreich und Beiträge die deine Frage ganz oder teilweise beantwortet haben als Antwort.
    My PowerShell Blog http://www.admin-source.info
    [string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '



    Dienstag, 22. Mai 2012 06:26

Alle Antworten

  • Ich bin kein Zertifikatsexperte deshalb kann ich dir nicht alle Fragen beantworten.

    Zu 1. Ein Zertifikat ist genauso zu betrachten wie ein Personalausweis. Das Zertifikat ist nur Persönlich auf die Firma oder die Person gültig. Diese Person ist der Eigentümer des Zertifikats. Somit ist es eine gute Idee das Zertifikat immer bei sich zu tragen um überall Signieren zu können.
    Zertifikate die von einer Weltweit anerkannten Zertifizierungsstelle (public certification authority (CA)) kommen  (VeriSign, Thawte, Comodo, Geotrust, GlobalSign u.a.) kannst du also überall einsetzen. Wenn dein Unternehmen eine eigene CA hat (Active Directoy mit PKI infrastruktur), dann ist dein Zertifikat nur in dem Unternehmen (AD) gültig. Hier macht das Kopieren auf einem USB stick wenig Sinn, da man an das Original immer wieder leicht heran kommt.

    Ich habe oben das Wort Kopie anstatt Backup genutzt !
    1. Ein Backup sollte auf einem sicheren Medium geschehen (nicht USB stick)
    2. Ein Backup ist nicht für den Täglichen Einsatz gedacht!
    2a. Ein Backup ist ein ort an dem etwas gesichert wegelegt wird, bis es aus einer Notsituation wieder gebracht wird!
    Eine Kopie ist für den Täglichen Einsatz geeignet, weil man ja noch ein Backup hat ;-)))

    Zu 2. Alle mir bekannten Zertifikatanbieter bieten auch den Time Stamp Service an!
    Wenn eine Code Signiert ist und bei der Signierung der Time Stamp mit angegeben wird dann läuft die Signierung des Codes nicht ab. Ein weiteres Signieren ist nicht nötig (es sei den der Code wird verändert).
    Bei dem Signieren mit Time Stamp wird dein Signatur Hash an die Zertifikatsstelle gesendet (Time Stamp Server) diese Prüft die Signatur und schickt die Signatur mit einem Time Stamp wieder zurück.

    Wenn man z.B. ein Aktive Directory mit PKI Infrastruktur hat, so bleibt die ganze Kommunikation „im hause“ und man benötigt auch eine Time Stamp Server „im Hause“.

    Siehe: Time Stamping Authenticode Signatures
    http://msdn.microsoft.com/en-us/library/windows/desktop/bb931395%28v=vs.85%29.aspx

    >>>>>Hab das Zert, mit PK (das ist nötig?) und hartem Passwort exportiert

    Ich nehme mal an mit PK meinst du den Public Key ?

    Ich denke, zum Signieren brauchst du immer beide Schlüssel!?
    Als Backup MUSS man wohl den PK mit sichern! ;-))

    "PSSkripte signieren"
    http://www.powershellpraxis.de/PSSkripte-signieren.951.0.html

    Introduction to Code Signing
    http://msdn.microsoft.com/en-us/library/ms537361%28VS.85%29.aspx


    Please click “Mark as Answer” if my post answers your question and click Vote as Help if my Post helps you.
    Bitte markiere hilfreiche Beiträge von mir als Hilfreich und Beiträge die deine Frage ganz oder teilweise beantwortet haben als Antwort.
    My PowerShell Blog http://www.admin-source.info
    [string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '



    Dienstag, 22. Mai 2012 06:26
  • Moin, vielen Dank für die schnelle Antwort.

    Also, ist echt nett, dass du mir erklärst was ein Backup ist, aber so weit bin ich dann doch schon.. ;-)

    Und das man bei Backups PKs mitsichert, jaaaa, vielen Dank... (Ich werd gleich mal bei den Jungs von Symantec anrufen, denen Berichten, die werden Augen machen)...

    Nee, also (ähem... Spaß beiseite... :-D  ) ich wollte sagen, sooooooo weit an die Basis wollte ich jetzt eigentlich nicht. :-D  

    Mir ging es darum zu erfahren, ob ich dadurch irgendeinen Sicherheitsvorteil hätte (Kam mir so unlogisch vor, ist es [wie du mir nun anschaulich gemacht hast] wohl auch), aber ich hatte ein zwei Tutorials, wo das so Empfohlen wurde, oft unterscheiden die Leute aber nicht mal, zwischen Interner und Public PKI, das stiftet schon etwas Verwirrung, wenn man thematisch noch nicht so sattelfest ist.. :-D

    Aber vielen Dank (!) für die Info mit den Timestamps, ich wusste nicht, dass die Zertifikatanbieter das 4-Free "stampen", machen die übrigens auch, wenn ich mein Script, mit dem internen Zertifikat signiere, sollte auch offline laufen, da Verisign ja auf allen Windows-Kisten bekannt/vertrauenswürdig ist. Das hat mir sehr weitergeholfen.

    Hab hier auch einen Link im Technet (US) gefunden (Sorry, zu spät entdeckt!!)

    Timestamping

    Auch für die Links vielen dank (den von Powershellpraxis hatte ich mir auch schon vorgenommen gehabt, der ist als Einstieg echt sehr Hilfreich!).

    Beispielcode (falls noch andere das Problem haben):

    $Cert=@()
    $cert=get-pfxcertificate -filepath 'F:\Script_sign.pfx'
    set-authenticodeSignature c:\ordner\scripte\meinscript.ps1 -TimeStampServer "http://timestamp.verisign.com/scripts/timstamp.dll" $Cert

    #Ganzen Ordner durchsignieren (der ein oder andere hat vielleicht mehr auf Lager)

    set-authenticodeSignature (GCI *.ps1) -TimeStampServer "http://timestamp.verisign.com/scripts/timstamp.dll" $Cert

    Nochmal vielen Dank für die Hilfe Herr Kriegel. 

    MfG 

    Nicolai

    Dienstag, 22. Mai 2012 08:51
  • Bin wie gesagt nicht der Zerti Experti !
    Vielleicht kommt ja noch jemand, mit einer helleren Lampe vorbei.


    Please click “Mark as Answer” if my post answers your question and click Vote as Help if my Post helps you.
    Bitte markiere hilfreiche Beiträge von mir als Hilfreich und Beiträge die deine Frage ganz oder teilweise beantwortet haben als Antwort.
    My PowerShell Blog http://www.admin-source.info
    [string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '

    Dienstag, 22. Mai 2012 10:21
  • Nee, war schon klasse, hast mir wirklich geholfen, ich hab echt nicht gewusst, dass beispielsweise verisign timestamped für lau..  das hat schon geholfen. 

    set-authenticodeSignature (GCI *.ps1) -TimeStampServer "http://timestamp.verisign.com/scripts/timstamp.dll" $Cert //das klappt ganz supi...

    :-D

    Dienstag, 22. Mai 2012 12:06