Cookies João Batista, Tiago Marques Segurança em Sistemas Informáticos - FEUP 1 Introdução Sendo que cada vez mais a computação está a focar-se nos serviços e aplicações web, que são disponibilizados na nuvem, torna-se mais premente um estudo aprofundado às cookies que, como uma componente do processo de autenticação de uma entidade, são um mecanismo bastante simples que permite às aplicações web manterem um estado entre pedidos diferentes ao servidor, sendo portanto um assunto de interesse bastante elevado no que diz respeito à sua segurança. Inicialmente, o objectivo deste trabalho seria desenvolver um sistema que tornasse obsoleto o roubo de cookies, no entanto, após um estudo mais aprofundado da arquitectura dos sistemas de rede e do seu modo de funcionamento na Internet e após ouvir as sugestões dadas pelos alunos e pelo próprio professor regente da unidade curricular sobre a exequibilidade do trabalho, decidimos que seria mais proveitoso focarmos-nos num estudo em profundidade do sistema de cookies implementado no SIFEUP, estudando-se a forma como o mecanismo é utilizado no mesmo, tentando encontrar vulnerabilidades na sua implementação e consequentemente uma forma de as explorar, bem como uma maneira de as inviabilizar. Serve o presente para tornar transparente o trabalho realizado para estudo das cookies no SIFEUP, as vulnerabilidades encontradas e o modo de funcionamento das aplicações feitas para explorar o mesmo. 2 Cookies As cookies são um conjunto de informações simples enviadas no header de um pedido HTTP, que permitem a aplicações web mantenham um estado entre pedidos sucessivos ao servidor. Este mecanismo é utilizado para várias finalidades, desde carrinhos de compras em lojas online à sua funcionalidade mais usual que é manter activa uma sessão de utilizador. 3 SIFEUP No caso especı́fico do SIFEUP, são criadas três cookies: – FEUPHTTP SESSION ; – FEUPSI SESSION ; – FEUPSI SECURITY. 4 Estrutura das cookies No que diz respeito à FEUPHTTP SESSION o seu valor é um número com 9 dı́gitos aparentemente aleatórios, e não é apagada quando se termina a sessão, contudo é apagada quando se fecha o browser e não tem influência alguma sobre o processo de login. A FEUPSI SESSION também tem como valor um algarismo com 9 dı́gitos, e que após uma análise mais cuidada se concluiu que se ia incrementando sucessivamente e que muda a cada login feito. A FEUPSI SECURITY é um valor alfanumérico com 15 caractéres aparentemente aleatório. 5 Análise De modo a fazer uma análise aprofundada às cookies começamos por sistematicamente fazer login e logoff do sifeup e registamos o que acontecia aos valores das cookies. De seguida experimentamos fazer alterações aos valores das cookies a ver que resultados obtinhamos. Adicionalmente também apagamos algumas cookies a ver a forma como influenciava a sessão presentemente activa. Estes procedimentos forma efectuados de forma a tentar encontrar padrões no comportamento das cookies, decifrar o modo de funcionamento e encontrar falhas no sistema de login. 6 Conclusões Na primeira abordagem referida concluiu-se rápidamente que utilizadores diferentes obtêm valores no FEUPSI SECURITY frequentemente iguais, adicionalmente concluiu-se que o valor do FEUPSI SESSION é, na generalidade dos casos, crescente e incremental. Na segunda abordagem descobriu-se que os valores de FEUPSI SESSION e FEUPSI SECURITY são os que têm influência em manter a sessão autenticada, e qualquer alteração a estes valores inviabiliza a sessão que estiver a decorrer, sendo que se se apagar o FEUPHTTP SESSION não tem nenhum tipo de efeito sobre a sessão. Descobriu-se também que, copiando as cookies das quais a sessão depende, para uma máquina com um ip diferente não replica a sessão a que pertencem, contudo se o browser for fechado (em oposição a fazer o logoff e seguidamente fechar-se o browser) e se se injectar os valores numa cookie forjada na ligação ao sifeup na mesma máquina, o login é efectuado com sucesso. Conlui-se desta forma que o registo da sessão por parte do servidor está intrı́nssecamente ligado aos valores das cookies FEUPSI SESSION e FEUPSI SECURITY e ao ip da máquina onde foram criados. 7 Aplicações De modo a aprofundar os conhecimentos da análise que fizémos decidimos fazer duas aplicações, uma é um script escrito em perl e outra é uma aplicação java. 2 8 PERL O script em perl faz login no sifeup (e logout pois não guarda a cookie entre pedidos) um determinado número de vezes e regista os dados que o servidor envia para fazer a criação da cookie. Este script, após se identificar que o universo dos valores de FEUPSI SECURITY era bastante restrito, foi modificado para guardar esses valores numa hash (portanto ignorando os valores repetidos), para tentar catalogar todos esses valores existentes. 9 Java O programa em java tem a função de procurar combinações chave de sessão com ID de sessão, baseado num ficheiro com chaves geradas pelo script perl acima descrito, sendo que esse ficheiro tem de estar com o nome keys.txt e na pasta onde a aplicação será executada. O programa tenta aceder a uma página dada, configurável pela linha de comandos, injectando um cookie com os elementos falsos e procura na página um elemento que lhe indique que a autenticação foi feita com sucesso. Este elemento também é configurável. O programa está preparado para receber páginas HTTP/HTTPS e detecta e interpreta erros 403 (Access Forbidden). Quando encontra uma combinação dos cookies FEUPSI SESSION e FEUPSI SECURITY que retorne uma sessão válida, extrai a página HTML e grava-a num ficheiro no disco como prova da sessão iniciada. A aplicação em java leva como parâmetros (opcionais): – número de sessão (FEUPSI SESSION ) para procurar (procura decremental a partir do número) – página para testar validação – número de sessão HTTP (FEUPHTTP SESSION ) - irrelevante para a autenticação – quantidade de números a pesquisar a partir do dado no 1o argumento – expressão na página que identifica sucesso na autenticação – versão do SIGARRA (FEUP, FMUP, FCUP, . . . ) Se a expressão “default” for passada como parâmetro, esse valor será o predefinido no código fonte da aplicação. Para utilizar esta aplicação em ambiente unix é necessário ter a biblioteca javax.comm no classpath. 10 Vulnerabilidades Usando os programas desenvolvidos e as conclusões tiradas conseguimos confirmar que é possı́vel, através de brute-force replicar o login de um utilizador que tenha utilizado recentemente uma certa máquina e não tenha feito o fim de sessão (antes de fechar o browser), quer tenha ou não iniciado a sua sessão noutra máquina. Isto pode ser explorado mesmo não existindo vestı́gios da sessão desse mesmo utilizador na máquina, podendo estar outro utilizador com a sessão iniciada no computador e mesmo no caso do computador ter sido reiniciado. 3 11 Escalabilidade Sendo o sistema de informação da FEUP o SIGARRA, e sendo ele usado em diversas faculdades da Universidade do Porto, decidimos explorar a mesma vulnerabilidade dentro de outras faculdades. Nomeadamente, a falha também foi encontrada na Faculdade de Ciências e na Faculdade de Medicina. Por falta de tempo e falta de recursos, acabámos por testar apenas a falha nestas três faculdades, mas podemos com algum grau de certeza extrapolar que todos as faculdades da Universidade do Porto que usem o SIGARRA têm a mesma falha, já que duas destas são capazes de compreender e alterar o sistema: a FEUP por ter feito o sistema e a FCUP por também ter um curso de programação muito bem conceituado. 12 Sugestões de Melhorias O que nos permitiu explorar esta falha é também aquilo que nós propomos para melhorá-la. O número de chaves existentes para a cookie FEUPSI SECURITY é de aproximadamente 40 (obtidas através do programa em perl), o que pode ser considerado um número insignificante dado que o número de chaves possı́veis, com a configuração actual da cookie, poderia passar de 768 mil quatriliões ((n + A + a)15 = (10 + 26 + 26)15 ) . Com esta abordagem, um ataque como o demonstrado por nós seria inviabilizado dado o número surreal de combinações existentes. 4