| | | | Mottó: ... az indián olyan, mint a vad, amely megőrizte éles érzékeit. /Karl May: Winnetou/ | 2014. január 21. | | | | Harci díszben az Apache | | | | | Az elmúlt néhány évben több támadás is bemutatásra került különböző cikkekben, konferenciákon, amelyek az SSL/TLS protokollt érintették. A jelen bejegyzés ezen hibák kezelését, javítását foglalja össze. A témának aktualitást ad, hogy az SSL/TLS teszteléseket is végrehajtó Qualys SSL Labs most tette közzé a legfrissebb követelménylistáját a beállításokról.
- 2009-11-04: SSL/TLS renegotiation
SSLv3.0 - TLSv1.2 verziók érintettek ClientHello esetén végződtetni kell a korábbi session-t IETF RFC 5746 javítja
- 2011-09-23: BEAST
SSLv3.0 - TLSv1.0 verzió érintett CBC sérülékenység TLSv1.1 verzió javítja
- 2012-09-13: CRIME
SSLv3.0 - TLSv1.2 verziók érintettek SSL/TLS session adat felfedése TLS-szintű tömörítés esetén TLS-szintű tömörítés kikapcsolása javítja
- 2013-08-01: BREACH
SSLv3.0 - TLSv1.2 verziók érintettek SSL/TLS session adat felfedése HTTP-szintű tömörítés esetén HTTP-szintű tömörítés kikapcsolása javítja
- 2013-02-04: Lucky 13
SSLv3.0 - TLSv1.2 verziók érintettek időalapú padding oracle alapján üzenetek megfejtése
- 2013-03-12: RC4
SSLv3.0 - TLSv1.2 verziók érintettek kulcsfolyam részleges felfedése sok, azonos üzenet esetén AES használata javítja A TLS v1.2 verziójú protokoll beállításával, az AES-alapú algoritmusok alkalmazásával és a tömörítések kikapcsolásával a felsorolt sérülékenységek javíthatók. A jelen bejegyzésben ezeken felül a Man-in-the-Middle támadások kiküszöbölését segítő kétoldali hitelesítés, az SSL/TLS client authentication, illetve a HTTP Strict Transport Security (HSTS) beállítása is bemutatásra kerül.
A jelen bejegyzés az alábbi környezet beállítását írja le:
- operációs rendszer:
Microsoft Windows Server 2008 R2 Standard x64 - web szerver:
Apache 2.4.7 (Apache 2.4.7 win64 VC11 update 4, 2013-11-04) SSL/TLS renegotiation
Az SSL/TLS renegotiation támadás ellen az Apache HTTP Server (httpd) termék - a ChangeLog lista alapján a - v2.3.6 változattal módosított mod_ssl modulja nyújt védelmet.
httpd-ssl.conf SSLInsecureRenegotiation off
Changes with Apache 2.3.6
SECURITY: CVE-2009-3555 (cve.mitre.org) mod_ssl: Comprehensive fix of the TLS renegotiation prefix injection attack when compiled against OpenSSL version 0.9.8m or later. Introduces the 'SSLInsecureRenegotiation' directive to reopen this vulnerability and offer unsafe legacy renegotiation with clients which do not yet support the new secure renegotiation protocol, RFC 5746.
HTTP compression, SSL/TLS compression
A BREACH és CRIME támadás ellen megoldást jelent a tömörítés tiltása mind a HTTP, mind az SSL/TLS szintjén. A BREACH támadás ellen a mod_deflate modul kikapcsolása nyújt védelmet. A CRIME támadás ellen az Apache HTTP Server (httpd) termék - a ChangeLog lista alapján a - v2.4.4 változattal módosított mod_ssl modulja nyújt védelmet.
httpd.conf #LoadModule deflate_module modules/mod_deflate.so
httpd-ssl.conf SSLCompression off
Changes with Apache 2.4.4
mod_ssl: Change default for SSLCompression to off, as compression causes security issues in most setups. (The so called "CRIME" attack).
TLS v1.2
A BEAST támadás ellen megoldást jelent a protokoll TLS v1.1 vagy TLS v1.2 verziójára való átállás. A jelen bejegyzés írásakor a böngészők mindegyike támogatja már a TLS v1.2 verzióját, ezért a továbbiakban ennek beállítása kerül ismertetésre.
A BEAST támadás ellen az Apache HTTP Server (httpd) termék - a ChangeLog lista alapján a - v2.4.0 változattal módosított mod_ssl modulja nyújt védelmet.
httpd-ssl.conf SSLProtocol +TLSv1.2
Changes with Apache 2.4.0
mod_ssl: when compiled against OpenSSL 1.0.1 or later, allow explicit control of TLSv1.1 and TLSv1.2 through the SSLProtocol directive.
AES vs. RC4
Az RC4 kriptográfiai algoritmust érintő támadás ellen be kell állítani az AES kizárólagos használatát a SSLCipherSuite változóban.
httpd-ssl.conf SSLCipherSuite !NULL:!DH:!ADH:!ECDSA:RSA:!RC4:!AES128: AES256:AESGCM:!MD5:!SHA:SHA256:SHA384
A jelen bejegyzés írásakor a böngészők mindegyike támogatja a AES256-SHA256 algoritmust, amely TLS v1.2 protokoll esetén biztonságosnak számít. Az RSA helyett lehet - érdemesebb - alkalmazni Diffie-Hellman alapon működő algoritmust, mint pl. ECDHE-RSA-AES256-SHA384, amely révén még akkor sem fejthetők meg az esetlegesen letárolt SSL/TLS adatfolyamok, ha utólag a web szerver RSA kulcsa kitudódik (Perfect Forward Secrecy). A Galois/Counter Mode (GCM) alapján működő, a bizalmasság mellett sértetlenséget (Galois MAC) is biztosító algoritmusok, mint pl. ECDHE-RSA-AES256-GCM-SHA384 támogatottsága még alacsony a különböző böngészőknél, ezért egyelőre nem javasolt a kizárólagos beállításuk.
Man-in-the-Middle
A közbeékelődéses támadások (Man-in-the-Middle) ellen a kétoldali hitelesítést, azaz az SSL/TLS client authentication funkciót be kell állítani, vagy - ha erre nincsen mód, akkor - a HTTP Strict Transport Security (HSTS) szabványban (IETF RFC 6797) leírtak alkalmazásával is nehezebbé lehet tenni, hogy a felhasználó nem megbízható felek számára adjon hozzáférést a kommunikációs csatornához.
Az SSL/TLS client authentication esetében a web szerver, illetve a kliens felhasználó számára létre kell hozni a szükséges tanúsítványokat. Az SSL/TLS client authentication bekapcsolása az SSLVerifyClient és a SSLCACertificateFile értékek beállításával történik meg.
httpd-ssl.conf SSLCACertificateFile "C:/Apache24/pki/test-root.crt" SSLVerifyClient require A HTTP Strict Transport Security (HSTS) esetében a web szerveren be kell állítani a Strict-Transport-Security HTTP Header elemet és annak max-age, illetve includeSubDomains paramétereit, továbbá engedélyezni kell a mod_headers modult.
httpd.conf LoadModule headers_module modules/mod_headers.so
httpd-ssl.conf Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains"
The REQUIRED "max-age" directive specifies the number of seconds, after the reception of the STS header field, during which the UA regards the host (from whom the message was received) as a Known HSTS Host.
[...]
The OPTIONAL "includeSubDomains" directive is a valueless directive which, if present (i.e., it is "asserted"), signals the UA that the HSTS Policy applies to this HSTS Host as well as any subdomains of the host's domain name.
[...]
If a UA receives HTTP responses from a Known HSTS Host over a secure channel but the responses are missing the STS header field, the UA MUST continue to treat the host as a Known HSTS Host until the max-age value for the knowledge of that Known HSTS Host is reached.
Mellékletek
Apache httpd 2.4.7: httpd.conf
#LoadModule deflate_module modules/mod_deflate.so LoadModule headers_module modules/mod_headers.so LoadModule ssl_module modules/mod_ssl.so
Include conf/extra/httpd-ssl.conf Apache httpd 2.4.7: httpd-ssl.conf
<VirtualHost _default_:443>
...
Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains"
Listen 443
SSLEngine on SSLCipherSuite !NULL:!DH:!ADH:!ECDSA:RSA:!RC4:!AES128: AES256:AESGCM:!MD5:!SHA:SHA256:SHA384 SSLProtocol +TLSv1.2 SSLCompression off SSLInsecureRenegotiation off SSLOptions +StdEnvVars +ExportCertData SSLCertificateFile "C:/Apache24/pki/test-web.crt" SSLCertificateKeyFile "C:/Apache24/pki/test-web.key" SSLCACertificateFile "C:/Apache24/pki/test-root.crt" SSLVerifyClient require SSLVerifyDepth 10
</VirtualHost> root CA kulcsa és tanúsítványa
openssl req -config ./TLSv12_test/openssl.conf -new -out ./TLSv12_test/test-root.csr -newkey rsa:4096
openssl rsa -in privkey.pem -out ./TLSv12_test/test-root.key
openssl x509 -in ./TLSv12_test/test-root.csr -out ./TLSv12_test/test-root.crt –req -signkey ./TLSv12_test/test-root.key -days 3652 -extfile ./TLSv12_test/test-root.ext -sha256
openssl pkcs12 -export -in ./TLSv12_test/test-root.crt -inkey ./TLSv12_test/test-root.key -CSP "Microsoft Enhanced RSA and AES Cryptographic Provider" -certfile ./TLSv12_test/test-root.crt -out ./TLSv12_test/test-root.p12 root CA tanúsítvány visszavonási listája (CRL)
openssl ca -gencrl -out ./TLSv12_test/test-root.crl -cert ./TLSv12_test/test-root.crt -keyfile ./TLSv12_test/test-root.key -crldays 1826 -md sha256 root CA tanúsítvány kiterjesztései
basicConstraints=critical,CA:TRUE keyUsage=critical, cRLSign, keyCertSign
subjectKeyIdentifier=hash authorityKeyIdentifier=keyid,issuer:always
crlDistributionPoints=URI:http://10.200.131.10/tls/test-root.crl authorityInfoAccess=OCSP;URI:http://10.200.131.10/tls/ web szerver kulcsa és tanúsítványa
openssl req -config ./TLSv12_test/openssl.conf -new -out ./TLSv12_test/test-web.csr -newkey rsa:4096
openssl rsa -in privkey.pem -out ./TLSv12_test/test-web.key
openssl x509 -in ./TLSv12_test/test-web.csr -out ./TLSv12_test/test-web.crt -req -days 1826 -CA ./TLSv12_test/test-root.crt -CAkey ./TLSv12_test/test-root.key -CAcreateserial -CAserial ./TLSv12_test/test-web.seq -extfile ./TLSv12_test/test-web.ext -sha256
openssl pkcs12 -export -in ./TLSv12_test/test-web.crt -inkey ./TLSv12_test/test-web.key -CSP "Microsoft Enhanced RSA and AES Cryptographic Provider" -certfile ./TLSv12_test/test-root.crt -out ./TLSv12_test/test-web.p12 web szerver tanúsítvány kiterjesztései
basicConstraints=critical,CA:FALSE keyUsage=critical, nonRepudiation, digitalSignature, keyEncipherment, keyAgreement, dataEncipherment extendedKeyUsage=serverAuth
subjectKeyIdentifier=hash authorityKeyIdentifier=keyid,issuer:always
crlDistributionPoints=URI:http://10.200.131.10/tls/test-root.crl authorityInfoAccess=OCSP;URI:http://10.200.131.10/tls/ kliens felhasználó kulcsa és tanúsítványa
openssl req -config ./TLSv12_test/openssl.conf -new -out ./TLSv12_test/test-user.csr -newkey rsa:4096
openssl rsa -in privkey.pem -out ./TLSv12_test/test-user.key
openssl x509 -in ./TLSv12_test/test-user.csr -out ./TLSv12_test/test-user.crt -req -days 1826 -CA ./TLSv12_test/test-root.crt -CAkey ./TLSv12_test/test-root.key -CAcreateserial -CAserial ./TLSv12_test/test-user.seq -extfile ./TLSv12_test/test-user.ext -sha256
openssl pkcs12 -export -in ./TLSv12_test/test-user.crt -inkey ./TLSv12_test/test-user.key -CSP "Microsoft Enhanced RSA and AES Cryptographic Provider" -certfile ./TLSv12_test/test-root.crt -out ./TLSv12_test/test-user.p12 kliens felhasználó tanúsítvány kiterjesztései
basicConstraints=critical,CA:FALSE keyUsage=critical, nonRepudiation, digitalSignature, keyEncipherment, keyAgreement, dataEncipherment extendedKeyUsage=clientAuth
subjectKeyIdentifier=hash authorityKeyIdentifier=keyid,issuer:always
crlDistributionPoints=URI:http://10.200.131.10/tls/test-root.crl authorityInfoAccess=OCSP;URI:http://10.200.131.10/tls/ tanúsítványok, visszavonási adatok vizsgálat: OpenSSL s_client, Wireshark
openssl s_client -connect 10.200.131.10:443 -CAfile test -root.crt -cert test-user.crt -key test-user.key -tls1_2 Kapcsolódó anyagok:
| | vissza | | | | |
|