Identificação passiva (server side) de cifras suportadas pelo "client-side browser"
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