[b]Inleiding deel 1: digitaal ondertekenen van bestanden[/b]
Om bestanden digitaal te kunnen ondertekenen met "de zegen" van een CA (Certificate Authority) heb je een asymmetrisch sleutelpaar en een certificaat nodig:
- Genereer een asymmetrisch sleutelpaar (private key en public key);
- Stop de public key in een CSR (Certificate Signing Request) waarin ook de naam van je bedrijf staat;
- Ga daarmee naar een CA en overtuig deze ervan dat jij dat bedrijf vertegenwoordigt en betaal;
- De CA zal jouw CSR omzetten in een geldig certificaat (dat niets anders dan een bestandje is dat [i]die CA[/i] ondertekent).
Ondertekenen van een bestand gaat dan als volgt:
- Bereken een cryptografische hash van het bestand (bijv. SHA1);
- Versleutel die hash met je private key;
- Plak de versleutelde hash en je certificaat (met daarin bijbehorende public key) achter het bestand zodanig dat duidelijk is over welk deel van het nieuwe bestand de cryptografische hash geldt.
[b]Inleiding deel 2: verifiëren van digitaal ondertekende bestanden[/b]
Dat gaat als volgt:
- Check het certificaat achteraan het bestand op geldigheid (vertrouwd door een trusted CA, en niet verlopen of ingetrokken?)
- Haal de public key eruit;
- Decrypt de cryptografische hash met die public key;
- Bereken zelf de cryptografische hash over het bestand;
- Vergelijk beide hashes - die moeten hetzelfde zijn.
[b]Inleiding deel 3: Authenticode[/b]
Authenticode is een door Microsoft bedachte aanpassing van het bovenstaande. Het bijzondere zit hem er in dat zo'n handtekening nog geldig kan zijn op het moment dat het certificaat al is [i]verlopen[/i]. Het idee erachter is dat het certificaat [i]nog wel[/i] geldig was op het moment van ondertekenen. Bijvoorbeeld het bestand wuauclt.exe in C:\windows\system32 op mijn XP SP3 PC heeft volgens Windows een geldige digitale handtekening - terwijl het certificaat geldig was tot 26 april 2010!
Omdat elke aanvaller de klok op zijn PC terug kan zetten op het moment dat hij malware digitaal ondertekent, moeten met Authenticode ondertekende bestanden, naast de digitale handtekening, ook zijn voorzien van een betrouwbare [i]timestamp[/i] (online, op het moment van ondertekenen, op te vragen bij de CA) die zodanig in de digitale handtekening is opgenomen dat deze (redelijkerwijs) niet vervalst kan worden. De eerder genoemde wuauclt.exe is dan ook op 7 augustus 2009 ondertekend.
[b]Probleem[/b]
Norman constateert vandaag een probleem (zie [url]http://blogs.norman.com/2011/malware-detection-team/invisible-ynk-a-code-signing-conundrum[/url]): van het Japanse bedrijf YNK is op een gegeven moment een private key gestolen waar vervolgens malware digitaal mee is ondertekend (natuurlijk is ook het certificaat met de bijpassende public "gestolen" maar dat setje zit onder elk ondertekend bestand en is dus geen geheim).
[i]Daarna[/i] is de diefstal ontdekt en is het certificaat ingetrokken (revoked). Het probleem hierbij is de datum van revocation! In het betreffende geval is niet met terugwerkende kracht "gerevoked" waardoor de digitale handtekening onder de malware niet ongeldig is geworden.
[b]Conclusie van Norman:[/b] [quote][i][/i]The conclusion on this must be that unless you know exactly when a certificate was stolen ([i]nb. bedoeld wordt de private key[/i]), there is going to be uncertainty as to whether signed malware still exists and validates. It places a large responsibility on the CA’s to set revocation date with proper margins of error. If not they will create a false sense of security and, in worst case, help signed malware stay below the radar longer than needed.[/quote]
Overigens geeft Authenticode sowieso al een vals gevoel van veiligheid; 1 van de redenen dat het goed is dat certificaten na enige tijd verlopen is dat ze "versleten" algoritmes kunnen gebruiken. Zo staat er in dezelfde c:\windows\system32 een bestand genaamd MSMAPI32.OCX op mijn PC met een, volgens Windows, geldige digitale handtekening (gezet op 24 juni 1998, met een certificaat geldig tot 17 april 1999. Het probleem hierbij is het gebruikte hash algoritme: "md2RSA". md2 staat nou niet meer bepaald bekend als veilig (zie [url]http://en.wikipedia.org/wiki/MD2_(cryptography)#Security[/url]). De vraag is dan ook wat de waarde is van een digitale handtekening als het gebruikte certificaat is verlopen, en nu dus ook, ingetrokken.
Bron: [url]http://www.heise.de/security/meldung/Kompromittierte-Zertifikate-Sperren-allein-genuegt-nicht-1380802.html[/url]
Deze posting is gelocked. Reageren is niet meer mogelijk.