Escalar Privilégios Parte 1 – Permissões

Linux: Escalar Privilégios Parte 1 – Permissões

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.

image 2
Linux: Escalar Privilégios Parte 1 - Permissões 8

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.

image 3
Linux: Escalar Privilégios Parte 1 - Permissões 9

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.

image 4
Linux: Escalar Privilégios Parte 1 - Permissões 10

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.

[[email protected] 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.

image 5
Linux: Escalar Privilégios Parte 1 - Permissões 11
/usr/bin/less less_suid.txt
!/bin/sh
image 6
Linux: Escalar Privilégios Parte 1 - Permissões 12

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

ATT&CK – Privilege Escalation (TA0004)

Como funciona o Netcat?