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ó:
... 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 
   
  info@kormanyablak.org
info@ugyfelkapu.info