Pular para o conteúdo

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.
Anderson L Tamborim y2h4ck
Hits: 26.948 Categoria: Linux Subcategoria: Segurança
  • Indicar
  • Impressora
  • Denunciar
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

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 Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

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.

O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.
   1. O que são os race conditions
   2. Como proteger seu sistema

Libsafe: Protegendo Linux contra Smashing Overflow

Jails em SSH: Montando sistema de Shell Seguro

SECtool - Análise Local para Linux

Carnivore e Altivore: Os predadores do FBI

Snort avançado: Projetando um perímetro seguro

Ferramentas de administração remota

Autenticação via hardware: o módulo pam_usb

Descobrindo chave WPA2 com Aircrack-ng

ACCT - O contabilizador de processos do Linux

Implementação de OpenVAS-5 em Ubuntu 10.04.4 LTS

#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

Entre na sua conta para comentar.