Introdução
Em sistemas Linux e baseados em Unix, as permissões de arquivo são um aspecto fundamental da segurança. Um tipo especial de permissão é o bit SUID (Set Owner User ID). Quando um arquivo binário possui o bit SUID definido, ele é executado com os privilégios do proprietário do arquivo, em vez dos privilégios do usuário que o iniciou.
Embora isso seja necessário para certas funções legítimas do sistema (como o comando passwd, que precisa de acesso root para atualizar sua senha), torna-se um risco de segurança grave se configurado incorretamente. Se um administrador de sistema definir acidentalmente o bit SUID em um utilitário padrão como find, vim ou bash, um atacante pode aproveitar essas ferramentas para executar comandos como usuário root, levando a um comprometimento total do sistema, conhecido como Escalonamento de Privilégios.
O que torna o SUID perigoso é que ele altera o contexto de privilégio da própria execução do programa. Se o programa puder iniciar outros comandos ou shells, esse privilégio pode vazar para fora.
Neste laboratório, você assumirá o papel de um pesquisador de segurança. Você escaneará um sistema de arquivos Linux para localizar binários com o bit SUID definido, identificará uma configuração incorreta vulnerável e usará técnicas do famoso projeto GTFOBins para elevar seus privilégios para root.
Procurar por Binários SUID (find)
Nesta etapa, você aprenderá como pesquisar no sistema de arquivos Linux por binários que possuem o bit de permissão SUID definido.
Para encontrar esses arquivos, usamos o comando nativo find. O comando find é extremamente poderoso e nos permite pesquisar arquivos com base em suas permissões específicas. Procuraremos arquivos a partir do diretório raiz / que tenham o bit SUID (representado pelo valor octal 4000) ativado.
A enumeração de arquivos SUID é um hábito padrão de escalonamento de privilégios, pois revela rapidamente programas que são executados com privilégios elevados em nome de usuários comuns.
Execute o seguinte comando em seu terminal para pesquisar binários SUID e salvar os resultados em um arquivo de texto chamado suid_results.txt no diretório do seu projeto:
find / -perm -4000 -type f 2> /dev/null > ~/project/suid_results.txt
Vamos analisar este comando para que você entenda exatamente o que ele faz. O / diz ao comando para começar a pesquisar desde o topo do sistema de arquivos. A flag -perm -4000 procura especificamente por arquivos com o bit SUID definido. A flag -type f garante que estamos procurando apenas arquivos regulares, não diretórios. Finalmente, 2>/dev/null é um truque útil que pega quaisquer mensagens de erro de "Permissão negada" e as descarta em um buraco negro (/dev/null), mantendo nossa saída limpa. O símbolo > redireciona a saída limpa para nosso arquivo de texto.
Agora, vamos visualizar o conteúdo do arquivo que você acabou de criar para ver quais binários possuem o bit SUID definido:
cat ~/project/suid_results.txt
Você verá uma saída semelhante a esta:
/usr/lib/dbus-1.0/dbus-daemon-launch-helper
/usr/lib/openssh/ssh-keysign
/usr/bin/chfn
/usr/bin/find
/usr/bin/chsh
/usr/bin/passwd
/usr/bin/newgrp
/usr/bin/gpasswd
/usr/bin/su
/usr/bin/mount
/usr/bin/umount
Observe a lista com atenção. Muitos desses, como passwd e su, devem ter o bit SUID definido. No entanto, um desses binários se destaca como altamente incomum e potencialmente perigoso.
Identificar Binários Exploráveis (GTFOBins)
Nesta etapa, você analisará os resultados da sua pesquisa e identificará qual binário pode ser explorado.
Ao observar a saída da etapa anterior, você pode notar /usr/bin/find na lista. O comando find é um utilitário padrão usado para pesquisar arquivos e, definitivamente, não precisa de privilégios de root para funcionar normalmente. O fato de ter o bit SUID definido é uma grande falha de configuração de segurança.
Esse julgamento é importante. Nem todo binário SUID é explorável, mas os incomuns merecem um escrutínio especial, pois podem fornecer capacidades que seus criadores nunca pretenderam expor com direitos elevados.
Para entender como podemos explorar isso, profissionais de segurança usam um recurso chamado GTFOBins. O GTFOBins é uma lista curada de binários Unix que podem ser usados para contornar restrições de segurança locais em sistemas configurados incorretamente. Se você visitasse o site do GTFOBins e pesquisasse por "find", descobriria que o find possui um recurso que permite executar outros comandos.
Como nosso binário find tem o bit SUID definido, qualquer comando que ele execute será executado com os privilégios do proprietário do binário (que é o root).
Para confirmar sua descoberta, crie um arquivo chamado vulnerable_binary.txt e escreva o nome do binário explorável nele. Execute o seguinte comando:
echo "find" > ~/project/vulnerable_binary.txt
Você pode verificar o conteúdo do arquivo imprimindo-o no terminal:
cat ~/project/vulnerable_binary.txt
A saída deve ser simplesmente:
find
Ao identificar essa configuração incorreta, você encontrou o ponto de entrada para seu ataque de escalonamento de privilégios.
Criar o Comando de Exploração
Nesta etapa, você preparará o payload de comando específico necessário para explorar a configuração incorreta do SUID no binário find.
De acordo com o GTFOBins, o comando find possui um parâmetro -exec. Este parâmetro é normalmente usado para executar uma ação específica em cada arquivo que o find localiza. No entanto, atacantes podem abusar desse parâmetro para executar um shell do sistema (/bin/sh).
O payload de exploração padrão é assim: find . -exec /bin/sh -p \; -quit.
Vamos analisar por que esse payload funciona. O . diz ao find para começar a procurar no diretório atual. A flag -exec diz para executar o comando a seguir. Fornecemos /bin/sh para iniciar um shell. A flag -p é crucial; ela diz ao shell para preservar os privilégios com os quais foi iniciado (neste caso, os privilégios de root concedidos pelo bit SUID). O \; significa o fim do comando que queremos executar. Finalmente, -quit diz ao find para parar de pesquisar imediatamente após executar o comando uma vez, em vez de repeti-lo para cada arquivo no diretório.
Para se preparar para a execução final, vamos salvar este payload de exploração em um arquivo de script shell chamado exploit.sh. Execute o seguinte comando:
echo 'find . -exec /bin/sh -p \; -quit' > ~/project/exploit.sh
Você pode visualizar o script que acabou de criar para garantir que o payload esteja correto:
cat ~/project/exploit.sh
A saída exibirá seu payload criado:
find . -exec /bin/sh -p \; -quit
Agora você tem o comando exato necessário para enganar o binário find e obter um shell root.
Executar o Escalonamento de Privilégios
Nesta etapa final, você executará o exploit e provará que escalou com sucesso seus privilégios para o usuário root.
Em vez de entrar diretamente em um shell interativo (o que pode ser difícil de verificar em um ambiente de laboratório automatizado), modificaremos ligeiramente nosso payload para executar um único comando como root e salvar a saída. Usaremos o comando whoami, que imprime o nome de usuário do usuário efetivo atual.
Execute o seguinte comando para executar whoami através do binário vulnerável find e redirecionar a saída para um arquivo chamado root_proof.txt:
/usr/bin/find . -exec whoami \; -quit > ~/project/root_proof.txt
Observe que usamos o caminho absoluto /usr/bin/find para garantir que estamos executando o binário específico que identificamos anteriormente. O comando find é executado, aciona a flag -exec, executa whoami com privilégios de root (graças ao bit SUID) e salva o resultado.
Agora, vamos verificar o conteúdo do seu arquivo de prova para ver se o exploit foi bem-sucedido:
cat ~/project/root_proof.txt
Se o exploit funcionou corretamente, a saída será:
root
Parabéns! Você explorou com sucesso um binário SUID configurado incorretamente para executar comandos como usuário root.
Se você quiser experimentar obter um shell root interativo real, pode executar o payload que criou na etapa anterior diretamente no seu terminal:
/usr/bin/find . -exec /bin/sh -p \; -quit
Seu prompt de comando mudará para um símbolo #, indicando que agora você está operando como usuário root. Você pode digitar exit para sair do shell root e retornar ao seu prompt de usuário normal.
Resumo
Neste laboratório, você aprendeu com sucesso como identificar e explorar configurações incorretas de SUID em um sistema Linux. Você começou usando o comando find para procurar binários com o bit de permissão SUID definido. Após identificar /usr/bin/find como uma anomalia, você aprendeu como recursos como o GTFOBins podem ser usados para descobrir payloads de exploração. Finalmente, você criou e executou um comando que abusou do parâmetro -exec do binário find, permitindo que você executasse comandos com privilégios de root.
Este exercício destaca a importância crítica do gerenciamento adequado de permissões no Linux. Os administradores de sistema devem auditar regularmente os binários SUID para garantir que os utilitários padrão não estejam concedendo inadvertidamente um caminho para o escalonamento de privilégios.



