Escalar privilégios – Linux é considerado por muitos o sistema operativo mais seguro mas é essa segurança só possível se houver conhecimento interno do sistema e uso de boas práticas nas suas configurações diárias.
Por omissão um sistema Linux totalmente atualizado é seguro mas basta uma simples má prática nas configurações para comprometer todo o sistema.
Existem varias tácticas, técnicas e procedimentos definidos (TTPs) no Enterprise Framework ATT&CK podem ser consultadas no website.
Neste artigo vou tentar descrever como as permissões em Linux funcionam e aplicar algumas das técnicas usadas pelos profissionais de segurança demonstrando exemplos de cada técnica aplicada.
Escalar Privilégios – Teoria sobre Linux
Como sabemos em Linux tudo é um ficheiro, existem vários tipos de ficheiros cada ficheiro tem as suas permissões especificas e pertence a um utilizador e a um grupo.
Para escalar privilégios em Linux tudo depende das permissões e capacidades de execução que cada utilizador têm no sistema.
Um utilizador associado a um serviço (www-data) não pode ter permissão para executar ou manipular nada no sistema operativo aparte dos ficheiros associados ao serviço em si.
Tipos de Ficheiros em Linux
- Regular Files
- Directory Files (d)
- Block (b)
- Character (c)
- Named Pipe (p)
- SymLinkss (l)
- Sockets (s)
Permissões em Linux
As permissões de ficheiros podem ser atribuídas ao utilizador ou a um grupo de utilizadores, cada permissão atribuída a novos ficheiros no sistema deve ser planeada de forma a evitar manipulações ou execuções de ficheiros por utilizadores não autorizados.
Entender como funcionam as permissões em Linux é fulcral para manter um sistema seguro, neste artigo só irei salientar os pontos mais relevantes para escalar privilégios no sistema devido a más práticas ao implementar permissões.
Como sabemos por base existe 3 categorias para tipos de acesso a ficheiros (Owner, Group, Others), atribuir permissões á categoria Other deve sempre ser evitada a não ser que seja estritamente necessário.
Sendo necessário atribuir permissões para a categoria Other use um SE conteiner para o ficheiro em questão.
Cada categoria de permissões pode Ler, Escrever e Executar em ficheiros, estas permissões podem ser manipuladas com o comando chmod.
Certamente todos nós vi alguém a executar o famoso comando:
chmod 777 ficheiro.txt
Este comando nunca deveria ser usado, é possível que tenha sido aberto um buraco de segurança o sistema. Tudo depende onde esta localizado o ficheiro e qual é o nível de permissões do utilizador que criou o ficheiro.
Imagine que alguém com permissões root executa o mesmo comando para o ficheiro /etc/shadow
chmod 777 /etc/shadow
Qualquer utilizador do sistema poderia Ler, Escrever ou executar este ficheiro. O ficheiro shadow contém os hashs de cada password dos utilizadores do sistema, imagine um utilizador convidado com permissão para editar a password root do sistema ou de qualquer outro utilizador.
Eu sei que este exemplo parece demasiado absurdo mas já encontrei várias maquinas ao longo dos anos neste estado.
SUID
chmod u+s ficheiro.txxt
GUID
chmod g+s ficheiro.txt
Sticky Bit
chmod +t ficheiro.txt
Formas de representar Permissões
Numérico e Octal
OK Let’s Hack
Agora que já temos uma noção geral das permissões em Linux vamos ver como tirar proveito de um sistema com permissões atribuídas erradamente a binários usados no nosso dia a dia.
Enumerar o sistema
find / -user root -perm -4000 -print 2>/dev/null
find / -perm -u=s -type f 2>/dev/null
find / -user root -perm -4000 -exec ls -ldb {} \;
Exemplo 1 – Comando Less
Neste exemplo vou usar o comando less, usado pela maioria de administradores de sistemas linux para ler um ficheiro sem o intuito de o editar.
consultar as permissões do executável less, pertence ao utilizador root e ao grupo root. Outros utilizadores que possam pertencer ao grupo root só podem ler e executar o binário assim como qualquer outro utilizador.
[synman@server PrivEsc_parte1]$ ls -la /usr/bin/less
-rwxr-xr-x. 1 root root 183296 Jul 28 2020 /usr/bin/less
Neste caso o binário less não tem o SUID bit atribuído, ao tentar usar o binário para invocar um terminal iremos ter o mesmo nível de permissão.
/usr/bin/less less_suid.txt
!/bin/sh
Agora vamos atruibir o bit maravilha ao binario less e voltar a testar o procedimento.
sudo chmod u+s /usr/bin/less
ls -la /usr/bin/less
-rwsr-xr-x. 1 root root 183296 Jul 28 2020 /usr/bin/less
Exemplo 2 – Comando Vi
Exemplo 3 – Comando Nice
Exemplo 4 – Comando Python
Exemplo 5 – Comando Docker
Usar Sudo para Elevar Privilégios
Capabilities
Crontabs mal Configurados
Abusar de binários com capabilities em demasia
Abusar dos links simbólicos
O perigo das bibliotecas Partilhadas
NFS Root Squashing
Kernel Exploits