Door KorhalDragonir: Wat betreft het certificaat was de beste methode die ze hadden kunnen doen gewoon een Key laten genereren en op basis van die nieuwe key een CSR genereren. En dan aan de admin de keuze aanbieden wil je hem Self-Signed of wil je de CSR naar een CA opsturen om te signen (denk aan GeoTrust, VeriSign, etc).
Je begrijpt SSL/TLS DPI niet.
We hebben het hier over een "legitieme" Man-In-The-Middle attack. Als een gebruiker
https://mijn.ing.nl/ opent
zal de Fortigate een gespoofed certificaat van mijn.ing.nl genereren en dat naar de webbrowser sturen. Om dat te kunnen doen heeft de Fortigate een
CA-certificaat nodig.
Die kun je echter niet zomaar kopen. Als GeoTrust, Verisign etc. een door jou ingediende CSR voor een
CA-certificaat zouden accepteren, snijden ze zichzelf driedubbel in de vingers: 1) jij kunt zelf CA gaan spelen (dat kost hen inkomsten), 2) als zij dit soorts certs zouden uitgeven wordt het complete publieke PKI model ondermijnd en 3) als Microsoft, Mozilla, Opera etc. (en gebruikers!) hier achter komen, zal het gebruikte root certificaat van de CSP (GeoTrust, Verisign etc.) uit webbrowsers worden verwijderd (of dat dan
echt zou gebeuren weet ik niet, maar volgens de richtlijnen van webbrowser fabrikanten zou dat wel moeten). GeoTrust en Verisign zouden net zo goed de Comodo/Diginotar hacker een RDP accountje kunnen geven...
Kortom, om SSL/TLS DPI te kunnen doen heb je een CA-certificaat nodig, en, omdat je er MITM (spoofing) aanvallen mee gaat uitvoeren, zal dit certificaat by default (en terecht)
niet door webbrowsers worden vertrouwd.
FortigateIn de FortiGate zit zo'n self-signed CA certificaat. Zelf zien? Open
http://www.fortigate.com/login, name:
demo, password:
fortigate, klik links op
Certificates en dan op
Local Certificates, dan staat ie bovenaan. Zet er een vinkje voor en download deze op je bureaublad. Open het bestand door dubbel-klikken en constateer dat het een, niet vertrouwd, CA certificaat is en dat deze geen revocation URL's bevat (geen CRL en OCSP servers). Logisch, want het enige van waarde in dit certificaat is de public key, een kwaadwillende kan deze probleemloos in een
eigen self-signed certificaat opnemen zonder revocation URL's (het is een fundamental PKI flaw dat
certificaten i.p.v. public keys worden gerevoked).
De "enige" fout die Fortinet hier maakt is dat ze elke Fortigate unit met
hetzelfde certificaat (en bijbehorende public key uitleveren). Ik vermoed dat beide (cert + private key), net als bij RuggedCom, in de firmware zitten. Nb.
dat vermoeden is de reden dat ik de vergelijking maak (mocht iemand dit nog niet snappen).
Voor wie het maar horen wil: het is FUNDAMENTEEL FOUT om private keys in firmware te stoppen, DON'T EVEN THINK ABOUT IT! Ook obfuscation helpt je niet; zodra de software de onversleutelde private key nodig heeft, zal deze (al is het maar héél even) in het geheugen te vinden en dus te extracten zijn. Een private key in firmware verstoppen is bijna hetzelfde als deze meteen op internet publiceren, zeker als firmware updates bij een (onder-) leverancier te downloaden zijn, of als een beheerder deze voor het gemak op z'n eigen website gezet heeft.
Off the record: Hmm, account nodig op
https://support.fortinet.com/EndUser/FirmwareImages.aspx. Tap tap tap ah, gevonden:
http://emea.fortinet.net/fortinet/aht/index.php (geen account nodig). Downloadiing.... Done. Hmmm een .OUT file? Ah bovenin de file zie ik een bestandsnaam, kennelijk packed. Okay, 7Zip opent de file gewoon. TotalCommander ook. Is kennelijk gzip. Er zit een 4GB file in (vermoedelijk voor compactflash kaartje), maar die wil maar deels uitpakken. Google
fortinet firmware gzip ... Ah, interessante slides op
http://www.slideshare.net/Naruenart/cigarette-vs-bubble-gum. Info over het rooten van UTM's. Details over Fortigate. Hmm, firmware downloads lijken versleuteld te zijn. Als de key daarvoor niet te vinden is op internet zul je wellicht een 2e hands Fortigate op de kop moeten tikken, een account zien aan te maken en met een debugger aan de gang gaan (Fortigate draait Linux zo weet ik uit bovengenoemde slides). Maar weet je,
ik heb wel wat beters te doen, en bovendien, als het
mij zou lukken de private key te achterhalen zou ik deze toch niet hier publiceren. Get the point?
Zodra de private key op straat ligt (als dat al niet zo is) zijn alle Fortinet klanten pnwed! En dan bedoel ik vooral
eindgebruikers (denk ook aan zakelijke laptops en BYOD), met name als zij door aanvallers, die weten dat hun bedrijf, organisatie of universiteit van een Fortigate met SSL/TLS DPI gebruik maakt, "te vinden" zijn.
Elke SSL/TLS sessie (o.a. voor internetbankieren) kan dan gespoofed zijn zonder dat de gebruikers het merken, en schijnbaar door bijv. Microsoft gesigneerde software (updates!) kan malware zijn etc. Om een voorbeeld te geven: dit betekent dat bijv. een student, die de private key te pakken heeft gekregen, eenvoudig https sessies van zijn huisgenotes kan afluisteren als zo'n huisgenote ooit Fortinet_CA_SSLProxy.cer in haar browser heeft geladen. Ook kan hij dan ongemerkt malware planten op haar PC.
OplossingDe oplossing is simpel; Fortinet moet voor
elke Fortigate unit die ze verschepen een uniek keypair plus een self signed CA certificaat genereren. Dan kan de klant (die niet zelf een CA wil opzetten en onderhouden) er meteen veilig mee aan de slag!
Wordt de Fortigate van die betreffende klant gecompromitteerd (en de private key gekopieerd door de aanvaller), dan is dat heel vervelend voor
die klant maar geen enkel probleem voor alle andere Fortinet klanten.
Actie van Fortinet is dus noodzakelijk!
Door KorhalDragonir: Ik ga hier bij de eerst volgende keer bij Fortinet over informeren waarom dit zo is, en of dit anders kan.
Als je een "ingang" hebt bij Fortigate, stel ik het, namens alle Fortigate gebruikers zeer op prijs als je ze ASAP informeert...