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
Download

Cookies by João Batista and Tiago Marques