image

NCSC: Citadel maakte cliëntcertificaten buit

vrijdag 17 augustus 2012, 09:59 door Redactie, 10 reacties

Het Nationaal Cyber Security Center (NCSC) waarschuwt dat de Citadel-malware, die bij gemeenten, ministeries en andere instellingen het Dorifelvirus verspreidde, ook cliëntcertificaten heeft buitgemaakt. In een nieuwe aankondiging vraagt het NCSC aandacht voor Citadel. Eerder waarschuwde de overheidsinstelling al dat de malware volledige toegang tot het systeem had en mogelijk ook andere informatie heeft buitgemaakt.

Uit nader onderzoek blijkt dit inderdaad het geval te zijn. "Citadel gaat op zoek naar inloggegevens gebruikt en opgeslagen in applicaties, zoals browsers en FTP-programma’s. Ook zijn cliëntcertificaten verzameld." Eerder publiceerde het NCSC al een factsheet met advies hoe om te gaan met een Citadel- of Dorifelbesmetting.

Reacties (10)
17-08-2012, 10:28 door Bitwiper
Door Redactie: Het Nationaal Cyber Security Center (NCSC) waarschuwt dat de Citadel-malware, die bij gemeenten, ministeries en andere instellingen het Dorifelvirus verspreidde, ook cliëntcertificaten heeft buitgemaakt.
Dat is geen enkel probleem! Een digitaal (client) certificaat is een bestandje met een public key en de gegevens van het "subject" (bijv. de naam van de eigenaar of de FQDN van een server) voorzien van een digitale handtekening door een TTP (Trusted Third Party), meestal een CA (Certificate Authority). Daar is niets geheims aan!


Of zou het NCSC bedoelen dat de absoluut geheim te houden private keys (behorende bij public keys in vrij beschikbare digitale certificaten) zijn gekopieerd door aanvallers? Zo ja, waarom noemt men niet man en paard? Zou blijf je de verwarring in stand houden!!!
Uit https://www.ncsc.nl/binaries/nl/dienstverlening/expertise-advies/kennisdeling/factsheets/factsheet-verlos-me-van-een-botnet/1/Verlos%2Bme%2Bvan%2Been%2BBotnet.pdf: Als er gebruik wordt gemaakt van clientcertificaten, dan dienen deze opnieuw uitgegeven te worden en de huidige clientcertificaten moeten ingetrokken worden.
En vergeet daarbij niet stap één, voordat je nieuwe CSR's genereert: genereer nieuwe sleutelparen (bij RSA keys moeten deze tenminste 2048 bits lang zijn)! Wat ik probeer te zeggen is: hergebruik onder geen enkele voorwaarde oude sleutelparen!

Betere oplossing: we moeten ophouden met private keys in bestandjes op bewezen kraakbare PC's en/of servers te genereren en te laten staan. We hebben deugdelijke USB sticks en/of smartcards en/of TPM chips nodig die:

- Deugdelijke asymmetrische sleuteplaren genereren (d.w.z. dat ze onder andere over een bewezen goede random number generator moeten beschikken, iets wat ik me bijzonder afvraag bij goedkope smartcards made in China)

- Zo zijn gemaakt dat private keys er hooguit met fysiek geweld uit te halen zijn

- Aantoonbaar deugdelijke cryptoroutines aan boord hebben om berekeningen, waar de private key bij nodig is, te kunnen uitvoeren.

Alleen op deze manier voorkom je dat aanvallers met private keys aan de haal gaan en, meestal geruime tijd, de identiteit van de eigenaar kunnen spoofen voordat dit ontdekt wordt (als het al ooit ontdekt wordt).
17-08-2012, 10:31 door Erik Loman
Het stelen van certificaten is een standaard eigenschap van Zeus en Citadel.
Dit doet het onder andere door de functie PFXImportCertStore van crypt32.dll te onderscheppen.

Zie hier de API hooks van Citadel (destijds screenshot gemaakt n.a.v. omroepzeeland.nl besmetting):
https://twitter.com/erikloman/status/185473596251058177/photo/1
17-08-2012, 11:48 door WhizzMan
Door Bitwiper:
Door Redactie: Het Nationaal Cyber Security Center (NCSC) waarschuwt dat de Citadel-malware, die bij gemeenten, ministeries en andere instellingen het Dorifelvirus verspreidde, ook cliëntcertificaten heeft buitgemaakt.
Dat is geen enkel probleem! Een digitaal (client) certificaat is een bestandje met een public key en de gegevens van het "subject" (bijv. de naam van de eigenaar of de FQDN van een server) voorzien van een digitale handtekening door een TTP (Trusted Third Party), meestal een CA (Certificate Authority). Daar is niets geheims aan!

Je vergeet hier dat deze certificaten gebruikt worden als authenticatiemiddel. Bij bijvoorbeeld intranetwebsites en VPNverbindingen is dit niet ongebruikelijk. Degene die deze certificaten steelt, zou ze dan dus kunnen gebruiken om in te loggen op VPNs en daar gegevens te stelen, meer infecties te veroorzaken, en dergelijke. Het lijkt me dus wel degelijk een vrij serieus probleem.
17-08-2012, 12:02 door Bitwiper
Door WhizzMan: Je vergeet hier dat deze certificaten gebruikt worden als authenticatiemiddel.
Dan weet je niet hoe certificaten (en meestal daaromheen PKI) werken.

Het certificaat is een identificatiemiddel (het beschrijft wie je bent). De bijbehorende private key, die alleen jij in bezit zou mogen hebben, is het authenticatiemiddel.

Als je https://secure.security.nl/ opent, stuurt de webserver ongevraagd direct haar webservercertificaat naar jouw browser. Dat kun je zo in een bestandje opslaan en op je eigen server zetten.

Kun je daarmee ook faken dat je secure.security.nl bent? Nee, omdat je de private key niet hebt (als het goed is ;)
17-08-2012, 13:41 door Anoniem
Door WhizzMan: Je vergeet hier dat deze certificaten gebruikt worden als authenticatiemiddel. Bij bijvoorbeeld intranetwebsites en VPNverbindingen is dit niet ongebruikelijk. Degene die deze certificaten steelt, zou ze dan dus kunnen gebruiken om in te loggen op VPNs en daar gegevens te stelen, meer infecties te veroorzaken, en dergelijke. Het lijkt me dus wel degelijk een vrij serieus probleem.
Een certificaat is een verklaring dat iets echt of geldig is. Een opleidingsinstituut geeft bijvoorbeeld een certificaat af waarin ze verklaren dat jij die opleiding met goed gevolg hebt afgelegd.

In deze context is een certificaat niet opeens iets heel anders, de term certificaat wordt niet voor niets gebruikt. Het is een verklaring, voorzien van een digitale handtekening, dat een publieke sleutel authentiek is en (samen met de bijbehorende privésleutel) geschikt om gebruikt te worden voor de in de verklaring genoemde doelen. Het is geen privésleutel, en het is ook geen publieke sleutel, het certificaat bevat de publieke sleutel waar de echtheidsverklaring over gaat, maar het certificaat is de echtheidsverklaring zelf.

Zoals anderen al aangeven bevat een certificaat niets dat niet publiek gemaakt mag worden. Sterker nog, het is niet bruikbaar als je het geheim houdt. Ofwel doet NCSC moeilijk over iets wat helemaal niet erg is ofwel is het wel erg en hebben ze het verkeerde woord gebruikt om privésleutels te benoemen.
17-08-2012, 15:01 door Bitwiper
Door Erik Loman: Het stelen van certificaten is een standaard eigenschap van Zeus en Citadel.
Dit doet het onder andere door de functie PFXImportCertStore van crypt32.dll te onderscheppen.
Aan uitsluitend een certificaat heeft een aanvaller niks en vaak kun je die ook op andere wijze verkrijgen (bijv. via een MITM aanval op het netwerk). Waar het ook hier om gaat zijn private keys.

De 1e regel van Microsoft's beschrijving van PFXImportCertStore wijst er dan ook op dat die API functie ook gebruikt kan worden voor het uitlezen van private keys uit de (protected) certificate store:
Uit http://msdn.microsoft.com/en-us/library/windows/desktop/aa387314%28v=vs.85%29.aspx:
The PFXImportCertStore function imports a PFX BLOB and returns the handle of a store that contains certificates and any associated private keys.

Waarbij in genoemde Microsoft pagina "private keys" verwijst naar http://msdn.microsoft.com/en-us/library/windows/desktop/ms721603(v=vs.85).aspx#_security_private_key_gly.
17-08-2012, 19:50 door Anoniem
Door Bitwiper:
Door WhizzMan: Je vergeet hier dat deze certificaten gebruikt worden als authenticatiemiddel.
Dan weet je niet hoe certificaten (en meestal daaromheen PKI) werken.

Het certificaat is een identificatiemiddel (het beschrijft wie je bent). De bijbehorende private key, die alleen jij in bezit zou mogen hebben, is het authenticatiemiddel.

Als je https://secure.security.nl/ opent, stuurt de webserver ongevraagd direct haar webservercertificaat naar jouw browser. Dat kun je zo in een bestandje opslaan en op je eigen server zetten.

Kun je daarmee ook faken dat je secure.security.nl bent? Nee, omdat je de private key niet hebt (als het goed is ;)

Je praat de hele tijd over certificaten alsof je die maar één kant op kent, namelijk van een server naar de client toe.

In PKI spraakgebruik is een "client certificaat" een certificaat (inderdaad ook met onderliggende private key) waarmee de client (computer, of gebruiker) zich naar een server toe kan authenticeren.
Dat zijn dus client credentials ,die in een heel mooie setup in smartcards zitten, maar vaak in de browser store.
17-08-2012, 20:11 door Anoniem
Het buitmaken van client certificaten is absoluut geen probleem.
Een certificaat is immers publiek.
Vraag is of er ook een bijbehorende private key is buitgemaakt.
17-08-2012, 20:27 door Anoniem
Door Bitwiper:
Door WhizzMan: Je vergeet hier dat deze certificaten gebruikt worden als authenticatiemiddel.
Dan weet je niet hoe certificaten (en meestal daaromheen PKI) werken.

Het certificaat is een identificatiemiddel (het beschrijft wie je bent). De bijbehorende private key, die alleen jij in bezit zou mogen hebben, is het authenticatiemiddel.

Wat meestal met "client certificaat" wordt bedoeld is een certificaat wat ondertekend is door een andere partij, en vervolgens geinstalleerd in de webbrowser.

Dit werkt precies hetzelfde als een HTTPS-certificaat waarmee een webserver zichzelf identificeert als zijnde "security.nl", bijvoorbeeld. Dit server-side certificaat wordt door de webserver aangeboden aan jouw webbrowser. Doordat dit certificaat is ondertekend met de prive-sleutel van een partij als Verisign (die jouw browser ultiem vertrouwt) neemt jouw browser aan dat dit inderdaad de website is die opgevraagd was, omdat "Verisign niet liegt".

Op eenzelfde manier kan jouw browser ook aan de webserver een certificaat aanbieden, waarbij vervolgens wordt gechecked of dit certificaat is ondertekend door een partij die de webserver vertrouwt (meestal de aanbieder van de dienst). In het certificaat kan jouw gebruikersnaam of andere identiteit zijn vastgelegd zodat de webserver meteen weet als wie jij bent ingelogd.

Een client-certificaat gecombineerd met server-certificaat is dus een mechanisme van wederzijds vertrouwen, mits ze beide zijn ondertekend door een partij die de ontvangende partij "vertrouwt". Het is dus wel degelijk een probleem als men een certificaat jat; dat is net zo erg als een server van Google.com kraken en _hun_ certificaat jatten om jouw server zich vervolgens te laten voordoen als google.com. De browser geeft netjes met een slotje aan dat je met google.com bent verbonden, zelfs als dat jouw server is, omdat het certificaat is ondertekend door een vertrouwde partij.

Ik hoop dat het nu helder is :)
22-08-2012, 09:05 door Anoniem
Op basis van de opmerkingen wil ik nog wel geloven dat de posters de essentie van PKI begrijpen.
Maar tegelijkertijd boort het mijn hoop om dit ooit uitgelegd te krijgen aan de rest van de wereld volledig de grond in, omdat zelfs hier er geen gemeenschappelijke vlag-lading associatie is en dus verwarring.
Ik ga ervan uit dat het gesignaleerde probleem betekent dat de privé sleutel van de gebruikers gestolen wordt.

Dat is niet echt nieuw(s). Eigenlijk ben je met software certificaten niet veel beter af dan met paswoorden:
snif paswoord of PIN: done, versus snif paswoord + copy file: done.

Smartcards verbeteren de situatie enigszins: de kaart moet in de kaartlezer zitten en deze moet verbonden zijn.

Een usb data token is maar een heel klein beetje beter, omdat op het moment van connecteren de data toch te lezen is.
Typisch is dat als je de sleutel nodig hebt en typisch is op dat moment de malware "alert".

En dan hebben we het nog niet gehad over WYSINWYS (what you see is not what you sign) problemen.
Reageren

Deze posting is gelocked. Reageren is niet meer mogelijk.