Sequestro de sessão

Transcrição

Sequestro de sessão
Coluna do Alexandre Borges
COLUNA
Sequestro
de sessão
Alexandre Borges comemora em grande estilo seu aniversário
de 3 anos como colunista da Linux Magazine e presenteia o
leitor com o funcionamento do sequestro de sessões web.
N
as minhas últimas colunas, andei escrevendo sobre criptografia, que é, essencialmente, um assunto ligado à segurança. Então
vou continuar nesta linha e falar sobre algo muito
interessante: session hijacking (sequestro de sessão).
O que é o sequestro de uma sessão? De maneira
resumida, é a possibilidade de um cracker “sequestrar
a sessão” entre dois computadores através do roubo
do identificador de sessão (session ID) usado entre
estas duas máquinas. O início é muito similar ao TCP
hijacking, quando o cracker toma (ou sequestra) a
sessão TCP entre duas máquinas o que, infelizmente, é possível por causa de uma falha do protocolo
TCP e, pelo fato preponderante de que, na maior
parte das vezes, a autenticação somente ocorre no
início de cada sessão.
Espere aí: isto é spoofing? Não. Spoofing é iniciar
uma sessão com uma máquina ou site, se passando por
outro usuário. Hijacking é tomar uma sessão já ativa
onde, provavelmente, o usuário já efetuou autenticação.
Embora este ataque de sequestro de sessão seja
sofisticado, ele é muito simples de se implementar
por diversas razões: pela falha inerente do próprio
protocolo TCP, porque grande parte da comunicação
entre duas máquinas não é criptografada; pelo fato
de a maioria dos sites usarem sessions IDs muito pequenos e previsíveis; pelo frequente uso de sessions
IDs (ou cookies que os contêm) sem período de expiração; ou pela ausência de qualquer outro controle
de invalidação destes sessions IDs.
Por que o session ID é tão valioso em uma comunicação pela web? Simples: porque uma vez que o
cracker esteja com a posse deste, poderá fazer o que
desejar no site que o usuário está visitando, como
se fosse o próprio usuário. Isto é possível posto que
a interceptação ocorreu antes do login e o website
14
não gerou um novo session ID após a autenticação. Então, qual é o cenário geral no qual ocorre
este ataque? Novamente, de forma simplificada, o
cracker precisa, de alguma maneira, estar no meio
da comunicação entre a vítima e o site e depois
monitorar os pacotes enviados de um lado para o
outro a fim de conseguir o session ID, desconectar
o usuário do site e, por fim, assumir a sessão que
ele possuía (como se fosse o próprio usuário) e, daí
para frente, não há mais limitações quanto ao que
pode ser feito.
O leitor irá perguntar: é difícil, então, obter estes sessions IDs resultantes da comunicação com
um site? O que eu digo é que fácil não é, todavia
o cracker tem algumas alternativas para contornar
estes obstáculos.
Uma das opções é roubar o session ID da comunicação da sua máquina com o site. Para realizar esta
ação existem diversas técnicas, como:
a) o uso de trojans (onde o uso de um antivírus,
antispy ou mesmo um treinamento pode bloquear
este mecanismo);
b) através de um ataque por Cross Site Scripting
(XSS) onde, para lembrar o leitor, é possível executar
um código malicioso no cliente (neste caso, roubando o session ID e enviando para o cracker), mas que
foi injetado em um site qualquer;
c) através da interceptação dos dados usando algum tipo de sniffer (como o Wireshark);
d) tentando usar o cabeçalho de referência (http
refereer) do protocolo HTTP onde o cracker pode
tentar enganar o usuário para que ele clique em algum link que leve a vítima para um site sob o domínio do cracker;
e) lançando mão de um ataque Man-in-the-Middle,
onde o cracker se interpõe entre a vítima e o site fa-
www.linuxmagazine.com.br
zendo com que toda a comunicação passe por sua
máquina para depois ser direcionada ao site de destino.
Se a opção de roubar o session ID falhar, o cracker
pode tentar inferir o session ID tentando advinhar
seu mecanismo de geração (principalmente quando este session ID é pequeno). Isto é relativamente
fácil de ser feito capturando diversos sessions IDs e
fazendo uma análise para verificar se existe algum
padrão de criação destes.
Se não for possível fazer bom uso dos recursos
anteriores (roubo ou inferência do session ID),
o cracker pode dispor de métodos de força bruta
para consegui-lo.
Falhou? Outro ataque que permite transpor esta
dificuldade é o Session Fixation Attack que, ao invés
de roubar o session ID, define qual será utilizado
pelo usuário e, uma vez a autenticação tendo sido
feita no website, o cracker usa este mesmo session
ID para fazer o que desejar como se fosse o usuário
real. É simples executar este procedimento? Não,
pois o site precisa ser vulnerável a este tipo de exploração e, o cracker necessita ainda entender qual
é o padrão de geração destes sessions IDs.
Quais são as possíveis medidas preventivas contra este tipo de ataque? Cito algumas: transferir os
cookies (que incluem o session ID) de maneira
segura (usando o protocolo HTTPS) para evitar a
interceptação dos dados; gerar um novo session ID
após a autenticação do usuário; gerar sessions IDs
de maneira aleatória e com bom comprimento; reduzir a vida útil de um session ID (ou cookie) ou
mesmo invalidá-lo após o usuário realizar o logout;
fazer uso de um método de autenticação mais forte
como Kerberos ou, no caso de uma comunicação
empresarial, fazer uso de VPNs.
Como o leitor pôde perceber, estes conceitos de
segurança são fascinantes e eu pretendo explorá-los
melhor nas próximas colunas. Aliás, estou completando três anos nesta coluna e espero que neste período você tenha aproveitado alguma coisa dos meus
artigos. Até o mês que vem!. ■
Alexandre Borges ([email protected]) é instrutor independente e ministra
regularmente treinamentos de tecnologia Oracle (áreas de Solaris, LDAP, Cluster, Containers/OracleVM, MySQL, e Hardware), Symantec (Netbackup, Veritas
Cluster,Backup Exec, Storage Foundation e SEP) e EC-Council (CEH e CHFI), além
de estar sempre envolvido com assuntos relacionados ao kernel Linux.
Já chegou ao Brasil
a maior revista alemã
de informática e tecnologia
ogia
computação
e tecnologia
Adquira o seu exemplar
nas melhores bancas
ou pelo site
www.lnm.com.br/shopping
Linux Magazine #90 | Maio de 2012
15