security

Hashadatbázis teszt

A múltkori hacktivitys bejegyzésben előkerült a National Software Reference Library (NSRL) Project. Most megnéztem kicsit közelebbről a letölthető hashadatbázist.

Az összesen négy, egyenként 360 megabájtos CD képfájl egy-két txt mellett tartalmaz egy-egy, majdnem ugyanekkora zipet. A zipekben vannak az ellenőrzőösszegek, amelyek egyenként 1,7 gigabájtos fájlmérettel büszkélkedhetnek. Így összesen 7 gigabájtnyi hasht kapunk.

Pontos adatmennyiség (idézet a read_me.txt-ből):

CD "A"    14,526,967 files,  4,373,310  unique SHA-1 values
CD "B"    14,577,858 files,  4,371,962  unique SHA-1 values
CD "C"    14,511,572 files,  4,375,127  unique SHA-1 values
CD "D"    14,656,439 files,  4,369,231  unique SHA-1 values
          -------------------------------------------------
  TOTAL   58,272,836 files, 17,489,630  unique SHA-1 values

A hashfájlok tartalma valami ilyesmi:

"SHA-1","MD5","CRC32","FileName","FileSize","ProductCode","OpSystemCode","SpecialCode"
"000000206738748EDD92C4E3D2E823896700F849","392126E756571EBF112CB1C1CDEDF926","EBD105A0","I05002T2.PFB",98865,3095,"WIN",""
"0000004DA6391F7F5D2F7FCCF36CEBDA60C6EA02","0E53C14A3E48D94FF596A2824307B492","AA6A7B16","00br2026.gif",2226,228,"WIN",""
"000000A9E47BD385A0A3685AA12C2DB6FD727A20","176308F27DD52890F013A3FD80F92E51","D749B562","femvo523.wav",42748,4887,"MacOSX",""
"00000142988AFA836117B1B572FAE4713F200567","9B3702B0E788C6D62996392FE3C9786A","05E566DF","J0180794.JPG",32768,16848,"358",""
"00000142988AFA836117B1B572FAE4713F200567","9B3702B0E788C6D62996392FE3C9786A","05E566DF","J0180794.JPG",32768,18266,"358",""
"00000142988AFA836117B1B572FAE4713F200567","9B3702B0E788C6D62996392FE3C9786A","05E566DF","J0180794.JPG",32768,2322,"WIN",""
"00000142988AFA836117B1B572FAE4713F200567","9B3702B0E788C6D62996392FE3C9786A","05E566DF","J0180794.JPG",32768,2575,"WIN",""

A fenti mintánál is látszik, hogy egy hash többször is szerepel különböző OpSystemCode, ProductCode vagy SpecialCode mezővel. Ezek feloldását a cédén mellékelt NSLROS.txt és NSLRProd.txt fájlok tartalmazzák. A 358-as azonosítójú operációs rendszer például a rejtélyes TBD névre hallgat.

Az utolsó négy sor ProductCode értékei (16848, 18266, 2322, 2575) a következőket fedik:

"ProductCode","ProductName","ProductVersion","OpSystemCode","MfgCode","Language","ApplicationType"
...
16848,"Microsoft Office XP Small Business","Version 2002","189","609","English","Operating System"
18266,"Microsoft Office XP","2002","190","609","Dutch","Office Suite"
18266,"Microsoft Office XP","2002","204","609","Dutch","Office Suite"
18266,"Microsoft Office XP","2002","224","609","Dutch","Office Suite"
18266,"Microsoft Office XP","2002","264","609","Dutch","Office Suite"
2322,"Office XP","Standard2002 NL","WIN","Microsoft","Dutch","Suite"
2575,"Publisher Deluxe with Photo Editing","2002","WIN","Microsoft","English","Publishing"
2575,"Publisher Deluxe with Photo Editing","2002","WIN2000","Microsoft","English","Publishing"
2575,"Publisher Deluxe with Photo Editing","2002","WIN98","Microsoft","English","Publishing"
2575,"Publisher Deluxe with Photo Editing","2002","WINME","Microsoft","English","Publishing"
2575,"Publisher Deluxe with Photo Editing","2002","WINNT","Microsoft","English","Publishing"
2575,"Publisher Deluxe with Photo Editing","2002","WINXP","Microsoft","English","Publishing"

A teljes hashadatbázis 58 millió sorából 1,4 millióban szerepel a Linux szó, szóval nem csak windowsos fájlokról van szó. Ezen kívül van még itt Solaris, MacOS, mindenféle DOS-ok, OpenVMS, Palm OS stb. Az NSRLProd.txt majdnem 26 ezer sora 8500 különböző nevű terméket tartalmaz.

A teszteléshez első körben egy pár hónapos (XpHun#1) és egy valamivel régebben frissített magyar Windows XP mentést használtam (XpHun#2). Aztán szereztem egy md5 fájlt egy magyar Vista, valamint egy SP3-as angol XP (XpEng) C:\Windows könyvtárának tartalmáról is. Végül egy Debian Lenny-t is megnéztem (/bin, /sbin, /usr, /var).

Eredmények a következő táblázatban:

Néhány elterjedtebb operációs rendszer rendszerfájljainak megtalálhatósági statisztikája az NSRL hashadatbázisában
XpHun#1 XpHun#2 Vista XpEng Debian Lenny
Összes különböző fájl darabszáma a rendszeren 16268 10149 53274 7323 204290
Hashadatbázisban megtalált fájlok száma 5069 4669 20363 3915 21205
Találatok aránya 31% 46% 38% 53% 10%

Az ugyanolyan hash értékkel rendelkező fájlok csak egyszer szerepelnek az összegekben.

A legjobb eredmények is éppen csak 50 százalék felettiek. Az angol XP magas találati arányának oka lehet, hogy régen volt frissítve (csak a két és fél éve kiadott SP3-at tartalmazta), másrészt talán az angol Windows fájljai nagyobb eséllyel kerülhetnek be a NSRL adatbázisába, mint a magyarok.

Látszik az eredményekből, hogy nem mindenható eszközről van szó (legalábbis jelenlegi állapotában semmiképp sem), a felismert fájlok eltávolítása után még bőven marad átnéznivaló, ha alaposak akarunk lenni. Ettől függetlenül mindenképp segítséget jelent, az a néhány ezer-tízezer megtalált fájl sem elhanyagolható könnyebbség egy ilyen feladatnál.

(Technikai részletek: 2010/06/01 - RDS Version 2.29)

Wipe

Érdemes a wipe kézikönyvét átfutni. Pár érdekesebb gondolat az elejéről:

Be aware that harddisks are quite intelligent beasts those days. They transparently remap defective blocks. This means that the disk can keep an albeit corrupted (maybe slightly) but inaccessible and unerasable copy of some of your data. Modern disks are said to have about 100% transparent remapping capacity. You can have a look at recent discussions on Slashdot.

I hereby speculate that harddisks can use the spare remapping area to secretly make copies of your data. Rising totalitarianism makes this almost a certitude. It is quite straightforward to implement some simple filtering schemes that would copy potentially interesting data. Better, a harddisk can probably detect that a given file is being wiped, and silently make a copy of it, while wiping the original as instructed.

Recovering such data is probably easily done with secret IDE/SCSI commands. My guess is that there are agreements between harddisk manufacturers and government agencies. Well-funded mafia hackers should then be able to find those secret commands too.

Don't trust your harddisk. Encrypt all your data.

Ha a wipe futtatásakor nem a gyors módot választjuk, akkor 35-ször írja felül a fájlok tartalmát. Az első és utolsó négy kör véletlen adatokkal történik, a közbenső 27 pedig fix értékekkel. A módszer pontos leírását Peter Gutmann Secure Deletion of Data from Magnetic and Solid-State Memory című cikke tartalmazza.

Ez a 35 felülírás általában eltart egy ideig. Mondjuk 100 megabájt / szekundumos írási sebességgel és 100 gigabájtos lemezzel számolva egy kör 1000 másodperc. 35 kör 35 ezer másodperc. Ami úgy tíz óra. Ha egy terabájtos lemezről van szó, akkor már 100 óra. Egyszerűbb titkosítani az egészet, úgy csak a kulcsot kell biztonságosan törölni.

Ha megelégszünk kevesebb körrel is, akkor a -Q paraméter mellé ne felejtsük el megadni a -q kapcsolót, mert nélküle a -Q semmit sem ér.

Csak óvatosan az új CA-kkal

Firefox alatt három kattintással importálható egy CA a többi gyári tanúsítvány mellé. Ez azonban elég kockázatos lehet.

Először is, ez közel sem ugyanaz, mint amikor egy saját maga (vagy akárki) által aláírt tanúsítvánnyal rendelkező https linket látogatunk meg, majd adjuk hozzá ezt a tanúsítványt kivételként a böngészőnk megfelelő listájához. A „kivétel hozzáadása” funkció használatakor az oldal által küldött tanúsítvány csak az adott oldalhoz lesz érvényes. Ha CA-t importálunk, akkor a CA bármilyen weblaphoz tartozó tanúsítványt aláírhat és azt a böngésző el is fogja fogadni.

Ezzel önmagában még nincs is probléma, egy teljes támadáshoz egy man-in-the-middle támadásra is szükség van. Ha importáltuk a támadó CA-ját, ő ezután készít egy új tanúsítványt a tamadottnetbank oldalhoz, aláírja a CA privát kulcsával, beállít egy SSL-es webszervert, majd MITM támadás segítségével átirányítja a böngészőnket az ő szerveréhez.

A támadó webszervere által adott tanúsítványt olyan CA által van aláírva, amit a böngészőnk ismer és megbízik benne. Ott lesz a lakat az alsó sorban, és vígan használhatjuk az oldalt.

További adalék, hogy nem is feltétlenül kell, hogy a támadó CA-ját importáljuk, elég ha csak egy gyengén védett CA privát kulcsát megszerzi a támadó. Érdemes ránézni mondjuk a NetLock vagy a Microsec weblapján lévő doksikra, hogy egy rendes, például Mozilla Firefox által is elfogadott CA-nak milyen folyamatokra és szabályzatokra van szüksége.

Tehát, ha CA-t importálunk, érdemes feltenni a kérdést: Az importált CA tulajdonosa vajon mennyire vigyáz a privát kulcsára? Aztán mindenki döntsön saját belátása szerint.

Kis demó frissen installált GNU/Linux 5.0 (lenny) esetén:

Készítsünk egy CA-t:

lenny:~/cert# openssl req -new -x509 -days 3650 -keyout private-cakey.pem -out cacert.pem
Generating a 1024 bit RSA private key
....++++++
......................................................++++++
writing new private key to 'private-cakey.pem'
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:HU
State or Province Name (full name) [Some-State]:Budapest
Locality Name (eg, city) []:Budapest
Organization Name (eg, company) [Internet Widgits Pty Ltd]:AAA Tamado CA
Organizational Unit Name (eg, section) []:
Common Name (eg, YOUR name) []:
Email Address []:

Exportáljuk ki Firefox által is értelmezhető formátumban:

lenny:~/cert# openssl x509 -inform PEM -outform DER -in cacert.pem -out cacert.cer

Kirakjuk webre, ami jelen esetben csak a saját gép:

lenny:~/cert# cp cacert.cer /var/www

A /etc/apache2/mods-available/mime.conf megfelelő részéhez írjuk be a következőt:

AddType application/x-x509-ca-cert .cer

Majd Apache újraindítás:

lenny:~/cert# /etc/init.d/apache2 restart
Restarting web server: apache2 ... waiting .

A mime típus beállítás nélkül nálam chemical/x-cerius típusúnak mondta a fájlt az Apache, így a Firefox nem ajánlotta fel a tanúsítvány telepítését, csak letölteni akarta azt. (Egyébként akár kézzel is importálhatjuk a CA-t: Szerkesztés / Beállítások / Haladó / Titkosítás / Tanúsítványkezelő / Hitelesítésszolgáltatók / Importálás, majd keressük ki a cacert.cer fájlt.)

Ezután ha Firefoxban beírjuk a http://localhost/cacert.cer címet, feljön a következő ablak:

Firefox böngészővel egy CA publikus kulcsát tartalmazó cer fájlra kattintás után megjelenő ablak, amelyben a böngésző megkérdezi, hogy akarjuk-e importálni a tanúsítványt, illetve megbízni abban.

Pipa az első checkboxba és OK. Ezzel be is került a hitelesítésszolgáltatók listájába a CA-nk (Szerkesztés / Beállítások / Haladó / Titkosítás / Tanúsítványkezelő / Hitelesítésszolgáltatók vagy Edit / Preferences / Advances / Encryption / View certificated / Authorities angol Firefox esetén).

Ha ezt megcsinálta a kliens, akkor készítsünk egy tanúsítványt a tamadottnetbank hoszthoz.

Először egy privát kulcsra lesz szükségünk:

lenny:~/cert# openssl genrsa -des3 -out tamadottnetbank.key 1024
Generating RSA private key, 1024 bit long modulus
.++++++
..................................++++++
e is 65537 (0x10001)
Enter pass phrase for tamadottnetbank.key:
Verifying - Enter pass phrase for tamadottnetbank.key:

Szedjük le a jelszót a privát kulcsról, az Apache-hoz úgysem kell:

lenny:~/cert# cp tamadottnetbank.key tamadottnetbank.key.org
lenny:~/cert# openssl rsa -in tamadottnetbank.key.org -out tamadottnetbank.key
Enter pass phrase for tamadottnetbank.key.org:
writing RSA key

Ezután készítsünk egy CSR-t (Certificate Signing Request), amit a CA alá tud írni:

lenny:~/cert# openssl req -new -key tamadottnetbank.key -out tamadottnetbank.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:HU
State or Province Name (full name) [Some-State]:Budapest
Locality Name (eg, city) []:Budapest
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Tamado    
Organizational Unit Name (eg, section) []:
Common Name (eg, YOUR name) []:tamadottnetbank
Email Address []:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

Írjuk alá a CA-val a CSR-t:

lenny:~/cert# openssl x509 -req -in tamadottnetbank.csr -CA cacert.pem -CAkey \ 
private-cakey.pem -CAcreateserial -out tamadottnetbank.crt
Signature ok
subject=/C=HU/ST=Budapest/L=Budapest/O=Tamado/CN=tamadottnetbank
Getting CA Private Key
Enter pass phrase for private-cakey.pem:

Majd másoljuk be az Apache által várt helyre:

lenny:~/cert# cp tamadottnetbank.key /etc/ssl/private/ssl-cert-snakeoil.key
lenny:~/cert# cp tamadottnetbank.crt /etc/ssl/certs/ssl-cert-snakeoil.pem

(A SSLCertificateFile és SSLCertificateKeyFile Apache beállítások mondják meg a fájlok pontos helyét, amik Lenny alatt a fentiek.) Egy biztonsági mentés nem árthat, én most kihagytam.

Apache SSL engedélyezés és újraindítás:

lenny:~# a2ensite default-ssl
Enabling site default-ssl.
Run '/etc/init.d/apache2 reload' to activate new configuration!
lenny:~# a2enmod ssl
Enabling module ssl.
See /usr/share/doc/apache2.2-common/README.Debian.gz on how to configure SSL and create self-signed certificates.
Run '/etc/init.d/apache2 restart' to activate new configuration!
lenny:~# /etc/init.d/apache2 restart
Restarting web server: apache2 ... waiting .

A /etc/hosts fájl végére a következő kell még:

127.0.0.1 tamadottnetbank

Végül az eredmény, ha a https://tamadottnetbank/ oldalra navigálunk:

Firefox böngésző képernyőképe a tamadottnetbank oldalra navigáláskor. A képen látszik, hogy https kapcsolatról van szó, és érvényes a weboldal tanúsítványa.

A turpisság persze hamar kideríthető, ha a címsoron rákattintunk a tamadottnetbank feliratra:

Firefox böngésző képernyőképe az tamadottnetbank oldalra navigáláskor. A képen látszanak a tanúsítvány részletei is, köztük az, hogy az oldal tanúsítványát a korábban létrehozott Tamado CA írta alá.

Ugyanez működik bármelyik létező weboldallal, a MITM miatt nincs különösebb jelentősége, hogy létezik-e a támadott oldal, vagy sem.

Egyébként hasonló elven működik a Microsoft Forefront Threat Management Gateway is. A TMG is egy CA, aminek a tanúsítványát telepíteni kell a kliensekre. A TMG hivatalosan is MITM-et művel, mivel rajta keresztül érik el az internetet a felhasználók. Az SSL kapcsolatokat saját maga végződteti, megvizsgálja a tartalmukat, majd ismét SSL-be csomagolva, immár saját maga által létrehozott és aláírt tanúsítvánnyal továbbítja a kliensnek.

Egy apróság: Jelenleg (3.6.10) CA törlése után újra felvenni a CA-t nem engedi a Firefox („Ez a tanúsítvány már telepítve van hitelesítésszolgáltatóként.” hibaüzenet), csak ha leokézzuk a tanúsítványkezelő ablakát, majd újra megnyitjuk.

Olvasnivaló:

Tartalom átvétel