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