Coluna do Alexandre Borges
COLUNA
Ataque de fixação
de sessão
Como a captura e uso de identificadores de sessão podem ser
utilizados por crackers para tomar a identidade de um usuário.
H
á duas colunas atrás, expliquei o ataque de sequestro de sessão e expus o porquê de ele ser tão
perigoso. Na ocasião, ficou claro que o session
ID (identificador de sessão) do usuário é uma informação valiosa e, sem dúvidas, seria o alvo da busca de um
cracker. O sequestro de sessão tem por característica ser
um ataque realizado após o usuário (através do navegador) realizar um login (autenticação) em um serviço web
(uma loja virtual, por exemplo), onde o cracker sequestra
aquela sessão específica (se, em um momento posterior,
ele realizar o sequestro de uma nova sessão, necessitará
executar um novo ataque), muito fácil de manter (uma
vez que a sessão foi conquistada, não é preciso realizar
qualquer procedimento adicional) e onde é possível utilizar diversas técnicas para realizá-lo, tais como obter o
session ID do cabeçalho Referer do protocolo HTTP,
capturar o session ID através do uso de um sniffer (como
o Wireshark) ou ainda através do uso de um ataque de
cross-site scripting (XSS), para citar apenas alguns.
Dado o exposto acima, é curioso perguntar: e se o
ataque, ao contrário do sequestro de sessão, ocorresse
antes de o usuário autenticar-se em um site? De fato,
como muitos analistas de segurança estão preocupados em não deixar que um cracker intercepte o session
ID (que muitas vezes está embutido no cookie), nem
o adivinhe (eventualmente aproveitando a formação
de um session ID curto ou previsível) ou ainda lance
um ataque de força bruta, ocasionalmente os crackers
escolhem um caminho mais interessante, que é impor
para a vítima o session ID que será utilizado e, com
isto, não ter o trabalho de capturá-lo novamente depois
que a sessão já estiver estabelecida. Mais fácil? Não necessariamente. Talvez apenas uma outra maneira de
conseguir acesso sem autenticação, usando as mesmas
credenciais da vítima e estando livre para fazer o que
bem entender. Este ataque é chamado de Fixação de
Sessão (session fixation attack).
14
Uma das vulnerabilidades que possibilitam este ataque
de fixação de sessão é o fato de que muitos servidores
(ou aplicativos) web atribuem um session ID (através
da URL, formulários ocultos ou cookies) para o usuário
no início da sessão e, após este usuário autenticar-se,
manterem este session ID (que acaba servindo como
credencial de login) inalterado, ao invés de criar um
novo que represente a sessão do usuário após o login.
Pior ainda: muitos profissionais acreditam que a criptografia é uma saída para deter um ataque de fixação
de sessão. Não é, pois o cracker não está interessado
em roubar ou ver (através de um sniffer) o session ID e
sim impor um session ID de sua conveniência, e para
fazer isso, tanto faz se a sessão está criptografada ou não.
O cracker executa um ataque de fixação de sessão
impondo um session ID ao usuário antes que ele realize
a autenticação em um site. Basicamente, o cracker pode
se autenticar no site-alvo com seu próprio login e senha,
e com isso, obter um session ID. Depois disso, a tarefa
do cracker é impor este session ID (que é válido) para o
navegador da vítima. Assim, quando a vítima se conectar
ao site, abrirá uma sessão usando o session ID que foi imposto pelo cracker, faz a autenticação (usuário e senha),
o que fatalmente irá vincular o status “autenticado” ao
session ID fornecido pelo cracker (possivelmente através
de um cookie) e pronto, o ataque já foi feito! Lembre-se
de que o cracker impôs o session ID à vítima antes de ela
estabelecer a sessão e, por isso, basta que o cracker use o
mesmo session ID e se conecte ao site-alvo. Como este
session ID já representa alguém (a vítima) autenticado,
o cracker poderá fazer qualquer coisa como se fosse a
vítima, sem a necessidade de autenticar-se.
Este ataque é muito interessante e vistoso, entretanto
preciso fazer algumas obervações úteis. O cracker não
necessita ter um login e senha válidos no site-alvo. Ele
poderia tentar inferir como o session ID é criado e moldar uma credencial de autenticação apropriada para a
www.linuxmagazine.com.br
situação, contudo isso dá muito trabalho e nem sempre
é possível (imagine um session ID de formato muito
longo). Outro problema desta abordagem é que muitos
servidores web não aceitam um session ID imposto, e
sim apenas um que anteriormente já tenha sido criado
pelo próprio servidor. Depois que este obstáculo foi superado, o cracker deve lembrar que muitos session ID
estão sujeitos a timeout (expiração) por inatividade, o que
forçará o cracker a ter que utilizar algum método para
“quebrar” esta ociosidade e manter o session ID válido.
Outro ponto que surge como dúvida é: como o cracker pode impôr o session ID para a vítima? Por diversos
meios: enviando um e-mail para a vítima com um link
(http://www.exemplo.com.br/auth.asp?session=8549) e
enganando-a para que que ela clique no link e autentique-se por ele (tome como exemplo os spams que você
recebe diariamente usando a mesma técnica). Outro
modo de se atingir o mesmo objetivo é enviando um
link modificado, porém realizando um ataque de XSS
e, com isso, executando no ambiente do usuário um
script que apresenta para o usuário um formulário com
campos de usuário e senha para o site-alvo (obviamente,
com o session ID associado a um campo oculto). Aliás,
mais fácil ainda é, através do mesmo ataque de XSS,
Linux Magazine #90 | Maio de 2012
executar um ataque que cria um cookie persistente na
máquina do usuário (por quanto tempo for necessário),
contendo o session ID desejado e ainda válido para todo
o domínio-alvo, e não apenas para aquela página em
específico). Definitivamente, existem outras formas de
realizar o mesmo ataque, todavia acredito que o leitor
já tenha compreendido a ideia.
Existem maneiras de impedir este ataque? Claro!
Como já mencionei, uma delas é trocar o session ID
após o usuário autenticar-se. Outra excelente opção é
estabelecer um timeout para cookies. Uma outra medida de proteção é forçar que os servidores web somente
aceitem cookies gerados anteriormente por eles mesmos, sem permitir que sejam impostos pelo navegador
e ainda dentro de uma faixa de tempo. E, por fim, certamente o método mais importante é educar os usuários com medidas básicas de segurança para evitar que
qualquer ataque tenha sucesso ou chance de evoluir.
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.
15
Download

Ataque de fixação de sessão