Identificação passiva (server side) de cifras suportadas pelo "client-side browser"

By Rodrigo Montoro on July 5, 2009

Introdução do projeto

O Projeto SSL Labs (http://www.ssllabs.com) foi criado por Ivan Ristic, criador do mod_security (http://www.modsecurity.org) (Open Source Web Application Firewall), que se interessou mais sobre a tecnologia quando escreveu um capítulo sobre SSL no livro Apache Security (http://www.apachesecurity.net/) em 2004 .

Atualmente a  idéia dele com esse novo projeto é realizar pesquisas e projetos que ajudem a entender melhor a tecnologia SSL e o uso dela para o dia a dia de profissionais, especialmente nos dias atuais com uso intenso de aplicações web e a necessidade do uso de SSL/TLS. O grande intuito final do projeto é criar uma base de dados de cifras suportadas pelos mais diferentes clientes existentes bem como fazer a escolha de cifra em tempo real baseado no tipo de cliente e dados sendo acessado no servidor, bem como utilizar cifras menores que consumam menor recurso no caso do servidor estiver com alto tráfego.

Utilizando o mod_hafssl para client-side fingerprint

O modhafssl é um módulo do apache que tem a meta de retirar os chipers suportados pela negociação cliente / servidor. A idéia por trás disso é entender melhor o funcionamento das requisições bem como mensurar melhores utilizações (alto consumo de cpu, performance) e maior segurança (chipers com problemas de segurança) .

Utilizamos o mod_hafssl em nosso laboratório e em paralelo também acompanhamos alguns comentários sobre a dificuldade de interpretar  os logs visto que o projeto loga em um modo não muito “human-readable” (existem aproximadamente 271 códigos de chipers diferentes) , então criamos um parser simples para converter o log.

Exemplos de saída de log padrão do sslhaf :

"h3,03.01,88,87,39,38,84,35,45,44,66,33,32,41,04,05,2f,16,13,feff,0a" "Mozilla/5.0 (X11; U; Linux i686 (x86_64); en-US) AppleWebKit/531.0 (KHTML, like Gecko) Chrome/3.0.187.0 Safari/531.0"

"h3,03.01,c00a,c014,88,87,39,38,c00f,c005,84,35,c007,c009,c011,c013,45,44,33,32,c00c,c00e,c002,c004,
41,04,05,2f,c008,c012,16,13,c00d,c003,feff,0a" "Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.0.11) Gecko/2009060309 Ubuntu/9.04 (jaunty) Firefox/3.0.11"

"h2,03.01,39,38,35,16,13,0a,0700c0,33,32,2f,030080,05,04,010080,15,12,09,060040,14,11,08,06,040080,
03,020080" "Links (2.2; Linux 2.6.28-11-generic x86_64; 80x24)"

N-Stalker mod_ssl haf log parser

O simples parser criado pela N-Stalker Team substitui os códigos das cifras pelo nome da mesma, facilitando assim o entendimento dos logs gerados.

N-Stalker Research Team (http://www.nstalker.com)
mod_sslhaf cipher converter
Usage: ./sslhaf-log.pl /path/log/sslhaf.log

"SSLv3+,TLS v1.0,TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA,TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA,
TLS_DHE_RSA_WITH_AES_256_CBC_SHA,TLS_DHE_DSS_WITH_AES_256_CBC_SHA,TLS_RSA_WITH_CAMELLIA_256_CBC_SHA,
TLS_RSA_WITH_AES_256_CBC_SHA,TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA,TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA,
66,TLS_DHE_RSA_WITH_AES_128_CBC_SHA,TLS_DHE_DSS_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_CAMELLIA_128_CBC_SHA,
SSL_RSA_WITH_RC4_128_MD5,SSL_RSA_WITH_RC4_128_SHA,TLS_RSA_WITH_AES_128_CBC_SHA,SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA,
SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA,SSL_RSA_FIPS_WITH_3DES_EDE_CBC_SHA,SSL_RSA_WITH_3DES_EDE_CBC_SHA" "Mozilla/5.0 (X11; U; Linux i686 (x86_64); en-US) AppleWebKit/531.0 (KHTML, like Gecko) Chrome/3.0.187.0 Safari/531.0"

"SSLv3+,TLS v1.0,TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA,
TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA,TLS_DHE_RSA_WITH_AES_256_CBC_SHA,TLS_DHE_DSS_WITH_AES_256_CBC_SHA,TLS_ECDH_RSA_WITH_AES_256_CBC_SHA,
TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA,TLS_RSA_WITH_CAMELLIA_256_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_ECDSA_WITH_RC4_128_SHA,
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_RC4_128_SHA,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,
TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA,TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA,TLS_DHE_RSA_WITH_AES_128_CBC_SHA,TLS_DHE_DSS_WITH_AES_128_CBC_SHA,
TLS_ECDH_RSA_WITH_RC4_128_SHA,TLS_ECDH_RSA_WITH_AES_128_CBC_SHA,TLS_ECDH_ECDSA_WITH_RC4_128_SHA,TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA,
TLS_RSA_WITH_CAMELLIA_128_CBC_SHA,SSL_RSA_WITH_RC4_128_MD5,SSL_RSA_WITH_RC4_128_SHA,TLS_RSA_WITH_AES_128_CBC_SHA,
TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA,TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA,SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA,SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA,
TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA,TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA,SSL_RSA_FIPS_WITH_3DES_EDE_CBC_SHA,SSL_RSA_WITH_3DES_EDE_CBC_SHA" "Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.0.11) Gecko/2009060309 Ubuntu/9.04 (jaunty) Firefox/3.0.11"

"SSLv2,TLS v1.0,TLS_DHE_RSA_WITH_AES_256_CBC_SHA,TLS_DHE_DSS_WITH_AES_256_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA,SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA,
SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA,SSL_RSA_WITH_3DES_EDE_CBC_SHA,SSL_CK_DES_192_EDE3_CBC_WITH_MD5,TLS_DHE_RSA_WITH_AES_128_CBC_SHA,
TLS_DHE_DSS_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_128_CBC_SHA,SSL_CK_RC2_128_CBC_WITH_MD5,SSL_RSA_WITH_RC4_128_SHA,SSL_RSA_WITH_RC4_128_MD5,
SSL_CK_RC4_128_WITH_MD5,SSL_DHE_RSA_WITH_DES_CBC_SHA,SSL_DHE_DSS_WITH_DES_CBC_SHA,SSL_RSA_WITH_DES_CBC_SHA,SSL_CK_DES_64_CBC_WITH_MD5,
SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA,SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA,SSL_RSA_EXPORT_WITH_DES40_CBC_SHA,SSL_RSA_EXPORT_WITH_RC2_CBC_40_MD5,
SSL_CK_RC2_128_CBC_EXPORT40_WITH_MD5,SSL_RSA_EXPORT_WITH_RC4_40_MD5,SSL_CK_RC4_128_EXPORT40_WITH_MD5" "Links (2.2; Linux 2.6.28-11-generic x86_64; 80x24)"

Basicamente o log se divide em:
OS 2 primeiros campos são na sequência o protocolo utilizado bem como até qual ele suporta. O restante são os ciphers suportados pelo cliente em questão. Por final o User-Agent .

O projeto sslabs bem como o mod_sslhaf ainda estão em fase inicial, o Ivan Ristic tem feitos alguns posts e analises e realmente é recomendado acompanhar o projeto visto o maior entendendimento e beneficios que eles poderão trazer para o dia a dia de administradores de servidores web bem como desenvolvedores .

Quanto ao parser estamos fazendo os últimos ajustes e provavelemente publicaremos ele junto com o projeto.

Sites:

http://www.ssllabs.com
http://blog.ivanristic.com
https://www.ssllabs.com/projects/client-fingerprinting/index.html

N-Stalker Research Team

This entry was posted in Community Blog. Bookmark the permalink.