In de Security Tip van de week geeft elke week een andere professional, expert, onderzoeker of lezer een security tip. Persoonlijke tips, variërend van het veilig configureren van Windows, een handige security tool of het juist instellen van een firewall, waarmee de tipgever zijn systeem, applicatie of netwerk veiliger maakt.
Heb jij ook een leuke, originele, maar bovenal goede security tip die niet mag ontbreken, stuur dan een mail naar redactie@security.nl.
Deze week de tip van Erik van Straten
Veiliger downloaden onder Windows: GnuPG/PGP handtekeningen
Inleiding
Een digitale handtekening onder een bestand kan je helpen bij het inschatten van de risico's die je loopt als je met dat bestand op jouw computer (of die van een familielid, vriend of klant) aan de slag gaat. Helaas biedt een geldige digitale handtekening geen volledige garantie dat het niet om malware gaat of dat het programma doet wat je beloofd is, maar middels zo'n handtekening kun je vaak wel redelijk betrouwbaar vaststellen wie de maker is van dat programma.
In de Microsoft wereld worden bestanden vaak met behulp van digitale X.509 certificaten ondertekend. De open source community daarentegen, maakt meestal gebruik van PGP of GnuPG signatures, zie bijvoorbeeld deze pagina, maar ook Windows programma's worden soms met PGP signatures verspreid, zoals KeePass en OpenVPN; vooral van belang voor de sources, alle executables hebben een Authenticode signature.
Indien je als Windows gebruiker dergelijke software zo veilig mogelijk wilt "downloaden" is het verstandig om je in de bijbehorende processen te verdiepen en geschikte software te installeren om dergelijke PGP/GnuPG signatures te kunnen controleren.
In deel 1 van artikel legt Erik van Straten uit hoe PGP en GnuPG werken; in het tweede deel zal hij beschrijven welke Windows software hiervoor beschikbaar is.
Downloaden: bron en integriteit
Hoewel er steeds meer sandbox-achtige omgevingen verschijnen, geldt standaard onder Windows dat elk programma dat jij opstart, alles kan doen wat jij onder Windows mag.
Theoretisch kan de auteur van het Windows programma "rekenmachine" deze zo hebben gemaakt dat dit programma, uit jouw naam, spam gaat versturen op het moment dat je 10 door Pi deelt. De kans op dergelijke kwaadaardige functionaliteit is natuurlijk verwaarloosbaar klein, maar is aanzienlijk groter bij bestanden die je downloadt nadat Windows is geïnstalleerd.
En dat geldt niet alleen voor uitvoerbare bestanden, want bijv. in PDF of Word documenten kunnen exploits en/of kwaadaardige scipts (of zelfs ingebedde exe bestanden) verstopt zijn. Daarom is het verstandig om van elk bestand dat je downloadt, een aantal zaken zo goed mogelijk vast te stellen:
1) Wie is de maker en/of uitgever, en hoe zeker weet ik dat?
2) In welke mate vertrouw ik hen?
3) Hebben zij hun zaken qua security goed genoeg op orde?
4) Is het bestand ongewijzigd sinds de oorspronkelijk uitgifte?
Met name het tweede aspect is erg subjectief, en het derde aspect is vaak erg lastig vast te stellen (denk bijv. aan het incident bij Adobe dit jaar waarbij een aanvaller erin slaagde hun siging infrastructure te misbruiken, zie deze pagina. In dit artikel ga ik niet verder op de middelste twee aspecten in.
Op het eerste en vierde aspect ben ik al vaker ingegaan (onder andere hier, maar heb daarbij nog nooit aandacht besteed aan PGP en GnuPG: bij deze dus!
Nb. er is op dit punt relatief weinig software en informatie in de Nederlandse taal te vinden, en in de gevallen waar wel Nederlandse vertalingen beschikbaar zijn, is dat niet altijd voor de laatste versie van de software. Ik verwijs op de meeste plaatsen dan ook naar Engelstalige resources, en ook van de onderzochte software heb ik uitsluitend de Engelstalige versies bekeken.
PGP en GnuPG
PGP staat voor Pretty Good Privacy en is in 1991 bedacht door Philip Zimmermann. PGP is volledig gebaseerd op asymmetrische (public key) cryptografie en kan zowel voor het versleutelen als digitaal ondertekenen van bestanden (waaronder e-mails) worden gebruikt. Ondertussen is Symantec eigenaar van PGP en verkoopt uitsluitend de commerciële versie.
Later heeft Werner Koch een GPL (GNU General Public License) open source variant van PGP ontwikkeld, genaamd GnuPG, ook bekend als GPG (Gnu Privacy Guard), zie GNUPG. PGP en GnuPG versleutelde en/ofgesigneerde bestanden, alsmede sleutels, zijn gelukkig prima uitwisselbaar tussen PGP en GnuPG.
GnuPG is beschikbaar voor bijna alle denkbare platformen, maar uitsluitend in de vorm van commandline tools, waarvan de sources eenvoudig te vinden zijn via de GPG website. Via
Hoewel ik best een hands-on freak ben, gebruik ik GnuPG te weinig om alle parameters te kunnen onthouden. Deze commandline tools lenen zich dan ook bij uitstek voor een GUI (Graphical User Interface) schil. Bij het commerciële PGP pakket is dit allemaal netjes geïntegreerd, en als geld geen rol speelt, raad ik je aan dat aan te schaffen (en de jaarlijks terugkerende kosten te betalen). Voor het, af en toe, checken van een digitale handtekening is PGP echter overkill.
Meer info over verschillende PGP/GnuPG softwaremakers vind je o.a. in openpgp.org.
Werking en gebruik van PGP en GnuPG
Zoals gezegd, PGP en GnuPG maken gebruik van asymmetrische cryptografie (zie deze pagina en verder voor uitleg daarover).
Om een bestand met PGP of GnuPG digitaal te signeren moet de ondertekenaar beschikken over een eigen asymmetrisch sleutelpaar; als hij dit nog niet heeft, zal hij eerst zo'n sleutelpaar moeten genereren.
Zo'n sleutelpaar bestaat uit een private key en een public key. De eigenaar dient de private key strikt geheim te houden; de public zal hij, aangevuld met metadata zoals naam, e-mail adres, aanmaakdatum en eventueel een vervaldatum, op de een of andere wijze moeten publiceren. Iemand die een digitale handtekening onder een bestand wil controleren heeft daar namelijk de public key van de ondertekenaar voor nodig.
Wie is de maker en/of uitgever?
In onderstaande figuur zie je twee mensen die echt Erik van Straten heten, en een die zich voordoet als een van de echte Erik van Straten's. Elk van hen houdt zijn private key stikt geheim (gesymboliseerd door de kluisjes) terwijl de public keys worden gepubliceerd.
Belangrijk is dat je jezelf de vraag stelt of je de public key van de bedoelde ondertekenaar te pakken hebt. Iedereen kan public keys naar zo'n server uploaden! Het feit dat je een sleutel op zo'n server vindt zegd dus helemaal niets over de betrouwbaarheid van die sleutel.
Digitale handtekening met PGP of GnuPG
Ondertekenen van een bestand gaat als volgt: de GnuPG of PGP software berekent een cryptografische hash (bijv. SHA1SUM) over het bestand en versleutelt de hashwaarde vervolgens met de private key van de ondertekenaar.
Bij binaire bestanden wordt het resultaat als "detached signature" bij dat bestand opgeslagen, met dezelfde bestandsnaam echter met een extensie .sig (voor een binair formaat) of .asc (ASCII "armored" formaat) opgeslagen.
Voorbeelden:
Binair bestand: winpt-1.5.3-exe.zip
Binaire signature: winpt-1.5.3-exe.zip.sig
Binair bestand: openssl-1.0.1c.tar.gz
ASCII signature: openssl-1.0.1c.tar.gz.asc
De inhoud van zo'n ASCII bestand kan er uitzien als volgt (het betreft hier genoemde openssl-1.0.1c.tar.gz.asc):
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.11 (GNU/Linux)
iQEVAwUAT6vcSqLSm3vylcdZAQLlbgfZLcvRLHoZh1yHKxC1ucBSw+yYFut
OmGqSpZBfUU5y7DIA2VK6sgILBx8OCyOYA1s+6dgeCxny+Cdh/fW6RbBSo7
K3efRUhdogOlQm+t9Ns5+FsdgUMZLnYdQ81mMYbZfndO4nEZnkqQ0qKkdaY
Vz12yHkwLtn+6AIW2sUTXUESHOdzEIzAyF08RsFVsQbzrLvqgcHWxY1494O
haxEJP5JvcjWAgMC2hwkDoQbrEsOoleX/IodDydXGHspdez9BVzgSsg0QPU
wk6TxB6+9/VUSHxrqaj9Pys02ddXYj4SlohsunHmXhKsFSyxf31lvMyn2gG
Af44nuD7Mmt8U3OVqLQ===4PCl
-----END PGP SIGNATURE-----
In onderstaande figuur 2 is je het proces van ondertekenen en controleren van een handtekening gevisualiseerd.
PGP en GnuPG Key ID's en fingerprints
De GnuPG software (plus grafische schillen) kunnen uit een signature (zoals in bovenstaand voorbeeld) een Key ID extraheren. Op Internet zijn meerdere publieke keyservers beschikbaar waar je op basis van zo'n Key ID de bijbehorende public key en de gegevens van de eigenaar kunt vinden.
Er bestaan meerdere lengtes en notatiewijzes voor Key ID's, bijvoorbeeld:
4 byte=32 bit Key ID: 0x4F25E3B6Het onderste getal (hexadecimaal, aangeduid door een leidende "0x") is de zogenaamde "fingerprint" van de public key. Deze wordt vaak met spaties tussen elke twee bytes geschreven, als volgt:
8 byte=64 bit Key ID: B5249B39D24F25E3B6
0xD8692123C4065DEA5E0F3AB5249B39D24F25E3B6
D869 2123 C406 5DEA 5E0F 3AB5 249B 39D2 4F25 E3B6
Zoals je kunt zien zijn de korte (32 bits) en lange (64 bits) Key ID's niets anders dan de laatste zoveel bytes van de fingerprint.
Met een Key ID van slechts 32 bits is de kans dat meer dan 1 persoon toevallig dezelfde Key ID heeft, allesbehalve verwaarloosbaar (er zijn immers meer dan 2^32 mensen op deze aarde). Die kans is aanzienlijk kleiner bij een Key ID met een lengte van 64 bits, en verwaarloosbaar bij de getoonde 160 bits. Zie
Zoeken en downloaden van de public key van de ECHTE auteur
Hier bestaan twee aanvliegroutes voor:
1) Zoeken op basis van de Key ID uit de signature
De Key ID extraheren uit de signature en die Key ID opzoeken op keyservers. Dat is handig, maar dit is niet zonder risico: een aanvaller die het binaire bestand heeft weten te wijzigen en terugzetten op een downloadserver, kan zelf een sleutelpaar aanmaken, daar de naam van de oordpronkelijke auteur aan verbinden, de public key met nepgegevens uploaden naar keyservers en het gewijzigde bestand met de nieuwe private key ondertekenen.
Eigenlijk is dit vergelijkbaar met het publiceren van een cryptografische hash naast een bestand op dezelfde server: een aanvaller die toegang tot die server weet te krijgen kan het bestand en de gepubliceerde hash wijzigen! De mweerwaarde van een digitale handtekening is zo erg klein.
2) Zoeken op basis van de naam van de auteur
Zoek op internet naar de public key van de auteur (op basis van haar of zijn naam). Als die key op een geheel andere server staat dan de binaries en signatures, is de kans kleiner dat de aanvaller alle drie weet te wijzigen. Dit is een veiliger methode dan methode 1.
Je kunt jouw vertrouwen in het feit dat de gevonden key daadwerkelijk toebehoort aan de echte auteur vergroten door oudere versies van de software en/of bijv. gesigneerde e-mails met gevonden public key te controleren. De kans dat de aanvaller de boel vervalst heeft, neemt af met de hoeveelheid moeite die dde aanvaller daarvoor heeft moeten doen.
Voorbeeld: de public key van Werner Koch met Key ID 0x4F25E3B6 kun je zowel vanaf
De vraag is hoe paranoïde je moet zijn bij het zoeken en vinden van de public van de ondertekenaar; mijn advies is om dit te laten afhangen van het type applicatie en de omgeving waar deze zal worden toegepast.
Zodra je de -waarschijnlijk- juiste public key gevonden hebt, download je deze en voeg je deze toe aan jouw "keyring" (sleutelbos). Als je een los bestand gedownload hebt (bijv. key.asc vanaf de website van de auteur) kun je deze importeren in de PGP/GnuPG software die je gebruikt. Maar de meeste software kan ook direct dergelijke keys importeren vanaf een keyserver.
Web of Trust
Hiermee bedoel ik niet WOT voor webbrowsers (van
In tegenstelling tot bij een PKI (Public Key Infrastructure), zijn er bij PGP en GnuPG geen certificate authorities die (meer of minder nauwkeurig) vaststellen of een public key daadwerkelijk aan een persoon of instantie toebehoort. In plaats daarvan kan een public keys van "iemand" door anderen (vaak meerdere personen) digitaal worden ondertekend, waarmee die andere personen aangeven dat zij er enig vertrouwen in hebben dat een public key daadwerkelijk aan de bestreffende persoon of instantie toebehoort. Aan een public key hangt dus vaak een lijstje met gegevens van personen die een dergelijk vertrouwen daarin hebben uitgesproken; zie figuur 3.
Een punt van zorg daarbij is dat je vaak geen idee hebt wie die mensen zijn en op welke wijze zij de identiteit van de eigenaar van de public key hebben vastgesteld. Persoonlijk probeer ik er daarom op verschillende manieren achter te komen of een public key daadwerkelijk van de bedoelde persoon is. Bijvoorbeeld in het geval van KeePass levert Googlen naar Dominik Reichl signature interessante pagina's; hierin is informatie uit 2011 te vinden waarvan het niet voor de hand ligt dat deze door een aanvaller daar is geplaatst.
Echter, aan feit dat de public key van Dominique Reichl van schijnbaar verschillende servers kan worden gedownload, namelijk http://keepass.info/integrity/Dominik_Reichl.asc en http://www.dominik-reichl.de/Dominik_Reichl.asc, heb je niks, want zowel keepass.info als www.dominik-reichl.de hebben 46.252.18.237 als IP-adres (het gaat dus om dezelfde server), waarbij je bijvoorbeeld in http://ip.robtex.com/46.252.18.237.html kunt zien dat er nog meer websites draaien op die server.
Een wat lastig aspect van PGP en GnuPG is dat je het vertrouwen dat ook jij hebt in het feit dat een public key daadwerkelijk van de bedoelde persoon is, moet formaliseren, door zelf ook de public key van die persoon te signeren. Het doel hiervan is:
1) Dat het een bewuste actie van jou is die je pas zou moeten uitvoeren op het moment dat je er voldoende vertrouwen in hebt dat de sleutel aan de bedoelde specifieke eigenaar toebehoort;
2) Mocht een aanvaller onbedoeld toegang krijgen tot jouw PC, hij sleutels niet zomaar kan vervangen (mits de aanvaller geen toegang krijgt tot jouw private key);
3) Je kunt de eigenaar van de betreffende sleutel helpen door deze te voorzien van een exportable signature. Dat zou ik alleen doen als ik de sleutel persoonlijk en handmatig (via een USB stick bijvoorbeeld) van de betreffende persoon zou krijgen.
Keyring
Met PGP of GnuPG bouw je al snel een sleutelring (keyring) op. Wat zit er normaal gesproken aan zo'n ring, ook als je slechts digitale handtekeningen wilt controleren? In Figuur 4 zie je bovenin jouw eigen private- en public key. De private key is alleen toegankelijk middels een wachtwoord. De publieke sleutels van Erik en Piet zijn door jou gesigneerd, terwijl die van Erik ook door anderen gesigneerd is. De publieke sleutels van Jan en die van jouzelf zijn nog niet voorzien van handtekeningen.
In het tweede deel van deze serie vertel ik welke Windows software bruikbaar is voor het controleren van PGP/GnuPG handtekeningen onder bestanden.
Erik van Straten is werkzaam bij TriOpSys b.v. als Systems Consultant, met security als bijtaak en vooral als "uit de hand gelopen" hobby. Het voornemen van TriOpSys is dat Erik vanaf 2013 meer voor beveiligingstaken zal worden ingezet.
Dit artikel is geschreven op persoonlijke titel van de auteur en reflecteert niet noodzakelijk de zienswijze van Security.NL.
Deze posting is gelocked. Reageren is niet meer mogelijk.