Metade dos caminhos de escalação de privilégio em Linux — o ato de virar root a partir de um usuário comum, um dos momentos mais cobiçados de um pentest — nasce de uma única coisa mal compreendida: permissões. Se você entende o modelo de permissões do Linux profundamente, você enxerga oportunidades onde outros veem só letras e traços. Esta aula disseca esse modelo com o olhar do atacante, mas ensinando, como sempre, também a defesa. É provavelmente a aula mais importante do Bloco III.
Dez caracteres e três classes
Olhe a primeira coluna de uma linha típica do ls -la:
-rwxr-xr-- 1 joao devs 4096 jan 10 12:00 script.sh
Aquele bloco -rwxr-xr-- é o coração da história. São dez caracteres. O primeiro indica o tipo: - para arquivo comum, d para diretório, l para link. Os nove restantes dividem-se em três grupos de três, e cada grupo responde por uma classe de usuário: os primeiros três são as permissões do dono (joao), os três do meio são as do grupo (devs), e os últimos três são as de todos os outros (o "mundo"). Dentro de cada trio, as letras significam sempre a mesma coisa na mesma ordem: r (read, ler), w (write, escrever), x (execute, executar). Um traço no lugar da letra significa ausência daquela permissão.
Então, lendo -rwxr-xr-- da esquerda para a direita: é um arquivo comum; o dono joao pode ler, escrever e executar (rwx); o grupo devs pode ler e executar, mas não escrever (r-x); e todos os outros podem apenas ler (r--). Essa leitura precisa ser instantânea para você. Treine até bater o olho e traduzir sem pensar — é uma habilidade que você usará em cada máquina.
A representação octal e o chmod
As permissões também têm uma representação numérica (octal) que você vai encontrar o tempo todo, sobretudo com o comando chmod que as altera. Cada permissão vale um número: r=4, w=2, x=1. Some-os por trio: rwx = 4+2+1 = 7; r-x = 4+0+1 = 5; r-- = 4+0+0 = 4. Assim, -rwxr-xr-- vira 754. Os comandos de manipulação:
chmod 755 script.sh # dono: rwx, grupo: r-x, outros: r-x
chmod +x script.sh # adiciona permissão de execução (para o dono)
chmod 600 chave_privada # só o dono lê e escreve — típico de chaves SSH
chown joao:devs arquivo # muda dono para joao e grupo para devs
O chmod 600 naquele exemplo não é aleatório: chaves privadas SSH precisam dessa permissão restrita, ou o SSH se recusa a usá-las — um detalhe de segurança que vira pegadinha frequente.
O bit que faz o programa rodar como o dono
Agora entramos no território ofensivo, e no conceito que faz esta aula valer: o SUID. Normalmente, quando você executa um programa, ele roda com as suas permissões. Mas existe um bit especial, o SUID (Set User ID), que, quando ativado num executável, faz o programa rodar com as permissões do dono do arquivo, e não de quem o executou. Isso existe por razões legítimas — o comando passwd, que troca sua senha, precisa modificar um arquivo do sistema que só o root pode tocar, então ele roda como root mesmo quando você o executa. O SUID aparece no ls -la como um s no lugar do x das permissões do dono:
-rwsr-xr-x 1 root root ... /usr/bin/passwd
↑ esse 's' é o SUID: roda como root
O caminho aberto por um SUID descuidado
Aqui está o ouro para o atacante: se um binário SUID pertence ao root e pode ser abusado para executar comandos arbitrários, você acabou de achar um caminho para virar root. Imagine um administrador descuidado que deu SUID a um programa que não deveria — digamos, um editor, ou um interpretador, ou uma ferramenta que permite escapar para um shell. Você o executa, ele roda como root, você abusa dele para abrir um shell, e esse shell é um shell de root. Um dos primeiros comandos que um pentester roda numa máquina Linux comprometida é justamente caçar binários SUID:
find / -perm -4000 -type f 2>/dev/null
# ↑ -4000 é o bit SUID; lista todo binário SUID do sistema
Você compara a lista com binários sabidamente exploráveis — há um projeto famoso, o GTFOBins, que cataloga exatamente quais binários comuns podem ser abusados e como. Se um deles aparece com SUID de root na sua lista, o caminho de escalação está aberto. Guarde esse find / -perm -4000 — ele é reflexo de escalação em Linux, e voltaremos a ele com profundidade na aula Escalação de privilégios em Linux: de usuário comum a root.
Sudo mal configurado e cron como root
Não é só o SUID. Outros vetores de escalação que nascem de permissões e configuração incluem: o sudo mal configurado (sudo -l mostra o que você pode rodar como root sem senha — às vezes coisas abusáveis), arquivos graváveis por todos que são executados por processos privilegiados, cron jobs (tarefas agendadas) que rodam como root sobre scripts que você pode editar, e permissões frouxas em arquivos sensíveis. O comando sudo -l é irmão do find -perm -4000 na sua rotina inicial de reconhecimento local:
sudo -l # o que posso executar via sudo? (às vezes revela caminhos diretos para root)
Menor privilégio e a auditoria do mesmo find
Do lado defensivo — paridade, sempre —, a lição para quem administra é dolorosamente clara: aplique o princípio do menor privilégio. Cada arquivo, cada usuário, cada serviço deve ter exatamente as permissões necessárias e nenhuma a mais. Audite periodicamente os binários SUID do sistema (o mesmo find -perm -4000 que o atacante usa, você usa para encontrar e remover o que não deveria estar lá), revise as regras de sudo, garanta que cron jobs privilegiados não executem scripts editáveis por usuários comuns, e trave as permissões de arquivos sensíveis. A ferramenta de ataque e a de defesa são literalmente a mesma; muda a intenção.
Fontes e leituras recomendadas
- GTFOBins (gtfobins.github.io) — catálogo essencial de binários abusáveis para escalação
- Linux Privilege Escalation — guias da TryHackMe e do HackTricks (hacktricks.boitatech)
man chmod,man chown,man sudoers— a documentação canônica- LinPEAS — script que automatiza a busca por vetores de escalação (para estudo em laboratório)
Exercícios
-
Decomponha a permissão
-rwxr-xr--: que tipo de item é, e o que dono, grupo e outros podem fazer?✓ Resposta:É um arquivo comum (
-). O dono pode ler, escrever e executar (rwx); o grupo pode ler e executar (r-x); os outros podem apenas ler (r--). -
Converta
rwxr-x---para notação octal, mostrando a soma de cada trio.✓ Resposta:rwx= 7 (4+2+1),r-x= 5 (4+0+1),---= 0. Resultado: 750. -
O que o bit SUID faz com um executável, e como ele aparece visualmente num
ls -la?✓ Resposta:O SUID faz o executável rodar com as permissões do dono do arquivo, não de quem o executa; se o dono é root, o programa roda como root. Aparece como um
sno lugar doxnas permissões do dono (ex.:-rwsr-xr-x). -
Escreva o comando que lista todos os binários SUID do sistema, e explique por que ele é um dos primeiros que um pentester roda numa máquina Linux.
✓ Resposta:find / -perm -4000 -type f 2>/dev/null. É dos primeiros porque um binário SUID de root que possa ser abusado oferece um caminho direto para escalar de usuário comum a root. -
Cite dois vetores de escalação de privilégio, além do SUID, que nascem de permissões ou configuração, e diga qual comando revela um deles.
✓ Resposta:Exemplos: sudo mal configurado (revelado por
sudo -l), cron jobs privilegiados executando scripts editáveis por usuários comuns, e arquivos sensíveis com permissões frouxas. Osudo -lrevela o primeiro.