Kormányablak, Ügyfélkapu, magyarorszag.hu, kormany.hu
KORMÁNYABLAK, ÜGYFÉLKAPU - A ZÁRT AJTÓK MÖGÖTT...
(nem hivatalos e-kormányzati témájú oldal)
  
BEMUTATKOZÁS 
E-KÖZIGAZGATÁS 
IT BIZTONSÁG 
  
































  Mottó:
From the silent hill
we scream loud your name
Mighty power of
the dragonflame
/Rhapsody of Fire:
Power of the Dragonflame/
2012. július 17.  
 Ez nem kis fellángolás... 
   
2012. június 4-én került ki a hírportálokra, hogy a Flame (vagy Flamer, vagy sKyWIper) nevű trójai WuSetupV.exe állományán Microsoft root tanúsítvány alá tartozó kulcsokkal készült digitális aláírás található (ez is egy fontos feltétele volt az észrevétlenségnek, illetve annak, hogy Windows Update-eket tudjon kezelni a háttérben). A trójai visszafejtett kódjai alapján nagymértékű hasonlóságot találtak a villamosenergia-ipari SCADA-rendszereket riogató Stuxnet, illetve utódja, a DuQu és a most felfedezett Flame között (ezek kiderítéséhez pedig nagymértékben járult hozzá a magyar CrySyS labor, elsősorban Bencsáth Boldi). Az egész történetből azonban számomra leginkább a "code signer" kulcs az érdekes, hiszen a régóta ismert MD5-gyengeséget használták ki, éles helyzetben, új módszerekkel, ráadásul a Microsoft tanúsítványlánc az érintett a támadásban. Az eset komolyságát mutatja, hogy az azonnali intézkedések megtétele után a Microsoft egy átfogóbb vizsgálatot is tartott, amely eredményeképpen 2012. július 10-én bejelentették több tanúsítványuk visszavonását is (Microsoft Security Advisory (2728973)).



A témában megszólalt Marc Stevens, az MD5-collision kutatás és a HashClash Project egyik atyja is, de a legrészletesebb esettanulmányt Alex Sotirov készítette a 2012. június 9-i SummerCon konferenciára. Az első ütközéseknél 2004-ben két azonos bemenethez tudtak különböző adatokat hozzátoldani, amelyek végül mégis azonos MD5 lenyomatot produkáltak, azonban 2006 - "Chosen-prefix collisions" - óta különböző bemenetekhez is készíthetők MD5-ütközések. Erre volt példa a Flame esete is, ahol a Microsoft tanúsítványa adta a rögzített, "lemásolandó" prefix-et.

A fejlettebb technikák kipróbálása sok időt igényel: akár több napi számolásra is szükség lehet egyetlen próbálkozáshoz. Éppen ezért az egyszerűbb - azonos bemenetek, prefix-ek alkalmazása - esetet használom fel, hogy be tudjam mutatni a technika működését, a lépéseket, amelyek révén el lehet jutni az azonos lenyomatú, de különböző tartalmú tanúsítványokig. A 2004-es esettel szemben itt azonban nem "csak" két tanúsítvány (.cer/.crt), hanem a hozzájuk tartozó kulcsokkal (.p12/.pfx) együtti ütközéséről is szó lesz. Az ütközéshez használt biteket nem a nyilvános kulcs mezőjében, hanem egy nsComment (Netscape Comment) kiterjesztésben helyeztem el, így a (nyilvános-titkos) kulcspár mindkét fele a birtokomban maradt.

Miképp lehet házilag gyártani ilyen ütköző tanúsítványokat 20 perc alatt? Először is létre kell hozni pl. OpenSSL segítségével egy tanúsítványt kiindulási alapnak. Figyeljünk rá, hogy az MD5 algoritmust külön meg kell adni, mert nem ez az alapértelmezett érték!
  • openssl req -config openssl.conf -new -out test-root.csr -md5 -newkey rsa:4096
  • openssl rsa -in privkey.pem -out test-root.key
  • openssl x509 -in test-root.csr -out test-root.crt -req -signkey test-root.key -extfile test-root.ext -md5
  • openssl pkcs12 -export -in test-root.crt -inkey test-root.key -certfile test-root.crt -out test-root.p12
A tanúsítvány belsejét (TBSCertificate) pl. "ASN.1 Editor" segítségével ki kell hámozni. Ha ez megvan, akkor Marc Stevens "fastcoll_v1.0.0.5.exe" alkalmazása segítségével létre tudjuk hozni azokat a biteket, amelyeket a TBSCertificate adathalmazhoz (itt: "bin.txt") illesztve már azonos lenyomatokat kapunk. Látszik is a képen, hogy az "md5sum.exe" a két különböző adathalmazra ("bin_msg1.txt" és "bin_msg2.txt") ugyanazt az eredményt adta!



Ha jobban megnézzük a két adathalmazt, akkor lehet látni, hogy az nsComment kiterjesztésbe kerültek a speciális bitek.



A különbözőséget elárulja az is, hogy noha az MD5 lenyomatok egyeznek, a Windows által számolt SHA-1 lenyomatok különböznek!



A módosított adathalmazokhoz létre kell hozni a digitális aláírásokat, azaz az RSA titkos kulccsal kódolt MD5 lenyomatokat!
  • openssl dgst -md5 -out test-signature-bin_msg1.txt -sign test-root.key bin_msg1.txt
Elég az egyik adathalmazhoz (itt: "bin_msg1.txt") legyártani az aláírást, hiszen - jelen esetben - pontosan ez a lényege az ütközésnek: ha az MD5 lenyomatok azonosak, akkor az azonos RSA titkos kulccsal kódolt MD5 lenyomatok is azonosak! A végén a TBSCertificate keretét - az elején egy SEQUENCE, a végén pedig maga a most kiszámolt aláírás egy signatureAlgorithm és egy signatureValue elemben - vissza kell illeszteni, hogy a tanúsítvány aláírás rétege is rendben legyen.



A végeredményt - azonos MD5 lenyomatú, de különöző tartalmú tanúsítványokat és kulcsokat - akár telepíteni is lehet a Windows tanúsítványtárába.

Kapcsolódó anyagok:
 vissza 
   
  info@kormanyablak.org
info@ugyfelkapu.info