Race condition - vulnerabilidades em suids

Neste simples artigo vou tentar passar o conceito básico de race condition, a condição de corrida com arquivos temporários e "leaks" da memória de SUIDs. Vamos ver como obter privilégios explorando estes suids e como se proteger deles.

[ Hits: 23.721 ]

Por: Anderson L Tamborim em 15/04/2004 | Blog: http://y2h4ck.wordpress.com


O que são os race conditions



O race condition acontece quando temos vários processos do sistema acessando e manipulando ao mesmo tempo a mesma informação de maneira concorrente e o resultado da execução depende da ordem particular em que o acesso ocorre.

O race condition é muito interessante para invasores que querem elevar seu nível dentro de um sistema comprometido (obter uid=0(root)).

Vamos ver um pequeno pedaço de código em C que ilustra um race condition:

if(access("/tmp/arquivo-info",R_OK)==0) {
   fd=open("/tmp/arquivo-info");
   process(fd);
   close(fd);
}

O código acima cria o arquivo temporário "arquivo-info" e depois abre ele. A vulnerabilidade em potencial ocorre entre as chamadas das funções access() e a chamada open().

Se um atacante consegue manipular o conteúdo do "arquivo.info" entre as funções access() e open(), ele pode muito bem manipular qual vai ser a ação que o programa que utiliza esse arquivo vai realizar, isso e o que chamamos de "Race".

O race condition não é um ataque trivial de ser realizado porque necessita de muitas tentativas até que o atacante consiga algum retorno efetivamente útil. Porém, se conseguir que o programa suid que utiliza esse arquivo no /tmp execute (access()) em sua instrução, sua chance de obter uid=0 será grande.

O uso inapropriado de funções como access(), chown(), chgrp(), chmod(), mktemp(), tempnam(), tmpfile(), e tmpnam() são as principais causas de races conditions.

    Próxima página

Páginas do artigo
   1. O que são os race conditions
   2. Como proteger seu sistema
Outros artigos deste autor

SECtool - Análise Local para Linux

Análise Passiva: Analisando seu tráfego de maneira segura

PaX: Solução eficiente para segurança em Linux

Jails em SSH: Montando sistema de Shell Seguro

Carnivore e Altivore: Os predadores do FBI

Leitura recomendada

Servidor para centralização de logs - Fedora 7

Entrevista com um hacker, via Internet

Hardening em sistemas operacionais Linux (Completo)

Gerenciando certificados A1 fornecidos pelo ICB-Brasil no navegador Chrome sobre Linux

Usando e instalando o Nessus no Linux

  
Comentários
[1] Comentário enviado por fcc em 15/04/2004 - 17:21h

Muito bom artigo....acho q o pessoal tem q saber um pouco mais sobre a seguranca q o LInux nos oferece...

Valeu!!!

[2] Comentário enviado por jllucca em 15/04/2004 - 23:43h

Excelente artigo!

Não conhecia a função access(), sempre testava se o arquivo existe com duas linhas(fopen e fclose) e sobre trecho ali, open precisa de no minimo dois parametros pra ser compilado. Fora o que já esta la(o PATH) precisa ainda de uma flag que indica o que estamos fazendo(Lendo, gravando...).

[]'s :)

[3] Comentário enviado por cvs em 17/04/2004 - 09:57h

o negocio eh so nao deixar ninguem acessar seu pc... hehehe ou seja.. killall sshd
userdel -r (os outros usuarios que nao seja vc)

passwd root (mudar a senha de root de 3 em 3 dias)
passwd seu_user (mudar sua senha todo dia)

pronto... E agora? hahahahah :P

Meo, seguranca eh algo bem nervoso hein... hehehe

[4] Comentário enviado por y2h4ck em 17/04/2004 - 11:41h

cvs o problema e que um provedor nao pode fazer isso =] um provedor um servidor em producao roda muitos servidos com acesso remoto =]
um deles pode estar vulneravel e dar o acesso suficiente ao bash no sistema ehehe :)


[5] Comentário enviado por ph0enix em 04/12/2004 - 20:24h

cvs, você se considera seguro apenas removendo todos os usuários do sistema, alterando sua senha para algo absurdo, que mais parece um MD5/SHA ?
Abra o google, digite o nome do seu navegador, do seu programa de emails, do seu firewall, ou até mesmo do seu provedor de internet, e veja as vulnerabilidades que os mesmo apresentam.
Seu provedor de internet provavelmente já foi invadido, você utiliza criptografia em seus emails ? quando loga aqui no VOL, é com HTTPS ? você utiliza pops ?

Suas informações podem estar sendo capturadas (sniffing) por algum intruso no seu provedor neste exato momento.

Abraços.


Contribuir com comentário