Artigo originalmente publicado por Alexos em iBliss Segurança e Inteligência
[Atualizado em 04-03-2015 – ‘FREAK’ Vulnerability CVE-2015-0204)]
Após a divulgação de diversas falhas em algoritmos e no protocolo SSL/TLS é necessário adequar o ambiente para atender requisitos mínimos de segurança. Este artigo apresentará como configurar o HTTPS nos servidores Apache e Nginx buscando prevenir contra ataques a esse protocolo.
Todas as configurações foram testadas no Debian Wheezy 7.0.3 com Apache 2.2.22-13 e Nginx 1.6.2 e usando os navegadores Chrome,Firefox e Internet Explorer.
Utilize o comando abaixo para gerar uma chave em compliance com o Certification Authority/Browser(CA/B) Forum, onde foi definido que a partir de 1º janeiro de 2014 alguns browsers podem rejeitar certificados com chave menor que 2048 bits.
openssl genrsa -out site.key 2048
A figura 1 mostra o teste realizado antes das configurações observe que por padrão o servidor já utiliza cifras fortes.
Figura 1 – Teste de SSL padrão
Hardening Apache SSL
Ative os módulos headers e rewrite
a2enmod headers && a2enmod rewrite
Configure o vhost de acesso HTTP forçando o redirecionamento para o HTTPS usando as seguintes linhas:
<VirtualHost *:80> ... #Habilite o redirect para sites no mesmo dominio ServerSignature On RewriteEngine On RewriteRule ^(.*)$ https://%{SERVER_NAME}$1 [L,R] RewriteLog "/var/log/apache2/rewrite.log" RewriteLogLevel 2 ... </VirtualHost>
Configure o vhost de acesso HTTPS adicionando as linhas referentes ao Apache SSL Hardening, todas elas estão comentadas.
## Hardening Apache SSL ## #Desabilita o SSLv2 usando somente o TLS 1.2 ( FIPS 140-2 standard compliance ) SSLProtocol ALL -SSLv2 -SSLv3 #As preferencias do servidor irao prevalecer na escolha da cifra durante o SSLv3 ou TLSv1 handshake SSLHonorCipherOrder On #Desabilita a compressao de requisicoes SPDY e TLS (CVE-2012-4929) SSLCompression off #Habilita o HSTS (HTTPS Strict Transport Security) header para forcar o uso do protocolo HTTPS, permitindo tambem que o navegador do cliente relembre essa requisicao em futuras conexoes durante 6 meses. Header add Strict-Transport-Security "max-age=15768000" #Caso queira habilitar o HSTS para todos os subdominios #Strict -Transport -Security: max-age=15768000 ; includeSubDomains #Define as cifras disponiveis durante o SSL handshake compatível com os principais navegadores SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA
SSLHonorCipherOrder on
Após a configurar o apache é necessário reiniciá-lo para aplicar todas as modificações
apache2ctl restart
Hardening Nginx SSL
Configure o vhost de acesso HTTP forçando o redirecionamento para o HTTPS usando o parâmetro return como no exemplo abaixo
server { ... listen 80; ## listen for ipv4; this line is default and implied return 301 https://$host$request_uri; … }
Configure o vhost de acesso HTTPS adicionando as linhas referentes ao NGIX SSL Hardening, todas estão comentadas.
#As preferencias do servidor irao prevalecer na escolha da cifra durante o SSLv3 ou TLSv1 handshake. ssl_prefer_server_ciphers on; ssl_session_timeout 5m; ssl_session_cache shared:SSL:50m; #Desabilita o SSLv2 e SSLv3 usando somente o TLS ( FIPS 140-2 standard compliance ) ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #Define as cifras disponiveis durante o SSL handshake compatível com os principais navegadores ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA'; #Habilita o HSTS (HTTPS Strict Transport Security) header para forcar o uso do protocolo HTTPS, permitindo tambem que o navegador do cliente relembre essa requisicao em futuras conexoes durante 6 meses. add_header Strict-Transport-Security "max-age=15768000";
Observação
O TLS compression vem desabilitado por padrão no Nginx
Validando
Observe os resultados obtidos após o hardening do protocolo HTTPS
Figura 2 – Teste do Apache após o hardening
Figura 3 – Teste do Nginx após o hardening
Figura 4 – Validando as configurações de SSL na Qualys SSL Server Test
Conclusão
As configurações apresentadas previnem contra algumas das vulnerabilidades publicadas criando uma camada de segurança durante conexões seguras usando o protocolo HTTPS estando em conformidade com diversos padrões de segurança do mercado.
Conheça os serviços de diagnósticos de segurança da iBliss Segurança e Inteligência
Conheça o serviços de configuração segura – Baseline da iBliss Segurança e Inteligência
Referências
CVE-2015-0204 – https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2015-0204
Tracking the FREAK Attack – https://freakattack.com/
‘FREAK’ — New SSL/TLS Vulnerability Explained – http://thehackernews.com/2015/03/freak-openssl-vulnerability.html
POODLE attacks on SSLv3 – https://www.imperialviolet.org/2014/10/14/poodle.html
This POOFLE Bites: Exploiting The SSL 3.0 Fallback[PAPER]– https://www.openssl.org/~bodo/ssl-poodle.pdf
O mito do cadeado de segurança – http://www.ibliss.com.br/blog/o-mito-do-cadeado-de-seguranca/
CAB Forum Baseline Requirementes – https://www.cabforum.org/Baseline_Requirements_V1.pdf
TLS Session Renegotiation Vulnerability – http://www.rapid7.com/db/vulnerabilities/tls-sess-renegotiation
RFC-6797 – HTTP Strict Transport Security (HSTS) – http://tools.ietf.org/html/rfc6797
Nginx HTTPSSLModule – http://wiki.nginx.org/HttpSslModule
Apache Module mod_ssl – http://httpd.apache.org/docs/2.2/mod/mod_ssl.html
Configuring Apache, Nginx, and OpenSSL for Forward Secrecy – https://community.qualys.com/blogs/securitylabs/2013/08/05/configuring-apache-nginx-and-openssl-for-forward-secrecy
Qualys SSL Server Test – https://www.ssllabs.com/ssltest/
Comments are closed.