Roubo de sessão com XSS
Author: Ricardo Soares - Postado em: 14/08/2008
Relacionado as categorias: Diversos, Segurança, Tecnologia, WB4B | 3 Comments
XSS é uma falha de segurança e um método de ataque que seria classificado como baixo, porem ele pode possibilitar um estrago no sistema se o atacante souber explorar a falha. Minhas três “funcionalidades” preferidas do XSS é o roubo de sessão, o ataque de DDoS no servidor e o ataque de DoS no cliente.
O roubo da sessão
A funcionalidade do Roubo de sessão é feito injetando um script que encaminha uma informação extra para outro servidor contendo o código da sessão. Este tipo de ataque é 90% funcional com a linguagem PHP, ouvi dizer que também é possível com outras linguagens, entretanto não posso confirmar esta questão, quem tiver experiências com .net, Java e scripts CGIs em geral posta uma observação para complementar o assunto. Sei que, como tudo nesta área, se não for planejado e testado não será seguro.
Para dificultar a exploração desta brecha você como programador deve utilizar a função “session_regenerate_id”, ela cria um novo código de sessão toda vez que o usuário se comunica com o servidor, e evitar passar o ID da sessão pela URL do domínio deixando que ela seja repassado por Cookie, que é o padrão do sistema. Desta forma se o cliente2 ao tentar roubar a sessão do cliente1, e tentar usar-la após o cliente1 ter refeito uma nova comunicação com o servidor o sistema irá ignorar o cliente2 pois aquele código de sessão não mais será válido, o sistema então criará uma sessão vazia para o cliente2 que deverá fazer o login novamente. Se o cliente2 conseguir efetuar a comunicação com o servidor antes do cliente1 ele irá roubar a sessão do cliente1 e na próxima vez que o cliente2 tentar se comunicar com o servidor ele irá ver que foi deslogado e deverá efetuar um novo login. Se você mantiver um controle de usuário único por sessão, ou seja, eu não posso ter o cliente1 e o cliente2 identificados com o mesmo cliente operando o sistema ao mesmo tempo, após o cliente1 refazer o login ele será re-identificado e a sessão do cliente2 deve ser identificada como antiga pelo sistema levando o mesmo a requisitar o login novamente ao cliente2, o cliente2 pode vir a tentar roubar a sessão do cliente1 novamente, e o cliente1 se identificar novamente. Água mole em pedra dura tanto bate até que o cliente1 desiste de operar o sistema e deixa o cliente2 sossegado para fazer o que bem entender. Outra questão importante para evitar o roubo de sessão é guardar algumas informações do seu cliente na sessão, configurações como brawser utilizado, linguagem do browser, sistema operacional e outras que não sejam alteradas no decorrer da sessão. Uma informação que é tida pela maioria como imutável é o IP do usuário, porem cuidado, se você tiver construindo um sistema que irá ficar aberto ao publico lembre-se que seu usuário pode estar atrás de um proxy que tenha uma política de alterar o IP de seus clientes periodicamente, ele pode ainda estar em uma rede Wireless e trocar de rede resultando em trocar o IP do cliente. Desta forma se um prospecto de intruso tentar roubar a sessão do cliente para assim se disfarçar e explorar o sistema ele não terá sucesso se não possuir o mesmo ambiente do verdadeiro usuário.
ATENÇÃO: Não estou falando que sistemas desenvolvidos com a tecnologia PHP são falíveis, estou afirmando que se você não planejar e testar não será seguro. Existem diversas configurações possíveis para um sistema que fazem com que o mesmo seja seguro. Uma delas e evitar a falha que causa o roubo de sessão que seria o XSS.
Comments
3 Responses to “Roubo de sessão com XSS”
Leave a Reply
alert(“hehehe”);
Em .net o rolbo de sessão tambem ocorre facilmente.
Ótimo blog