251 Views
Em ataques do tipo RFI (Remote File Inclusion), atores (hackers) incluem arquivos nos servidores Linux em busca de encriptar dados, escalar privilégios ou realizar ataques horizontais contra a infraestrutura da empresa.
A porta de entrada quase sempre é vulnerabilidade no código e/ou ausência de barreiras como WAF (Web Application Firewall).
Independente da situação, existe um ponto em comum na maioria dos ataques à servidores Linux: o diretório /tmp. Por ele ser uma “área de troca de arquivos” dentro do sistema Linux, possui permissão de leitura e escrita para todos usuários com shell configurado.
Veremos a seguir como configurar noexec, nosuid e nodev para proteger o sistema contra a maioria das tentativas execução de malwares a partir do /tmp.
Como funciona o noexec
O noexec é um parâmetro de montagem de partições do Linux. Ao utilizarmos no /etc/fstab, determinamos que o ponto de montagem não possuirá permissão de execução, mantendo permissão de leitura e de escrita.
A configuração é bem simples. basta incluir as propriedades no mountpoint logo após o “defaults” conforme exemplo abaixo:
tmpfs /tmp tmpfs defaults,noexec,nosuid,nodev 0 0
Toda alteração no /etc/fstab demanda execução do comando
systemctl deamon-reload.
Para verificar se o noexec foi aplicado ao mount point, basta rodar o comando mount | grep tmp
Testando o ajuste:
# verificando o usuário que estou utilizando: user@ubuntu-arm-01:~$ whoami user # criando o arquivo executavel: user@ubuntu-arm-01:~$ echo 'echo "Ok, eu tenho permissao"' > /tmp/exploit # aplicando permissao de execucao: user@ubuntu-arm-01:~$ chmod +x /tmp/exploit # conferindo permissoes: user@ubuntu-arm-01:~$ ls -l /tmp/meu_codigo.sh -rwxrwxr-x 1 kafka kafka 30 Oct 2 14:11 /tmp/exploit # executando o arquivo executavel: user@ubuntu-arm-01:~$ /tmp/exploit -bash: /tmp/exploit: Permission denied
O
noexecé uma camada de proteção parcial que bloqueia a maioria dos ataques automatizados, mas não é 100% à prova de falhas.
Observe que o noexec não impede a gravação do malware no /tmp. Ele apenas impede a execução de malwares binários, mas não impede a disseminação do malware para outros endpoints e não é 100% funcional contra scripts em Shell, Python, Perl e outros.
Ele funciona como uma proteção extra e faz parte das boas práticas de hardening de segurança.
Como funciona o nosuid
O SUID (Set User ID) é bit adicional de permissão que pode ser utilizado em ataques de escalonamento de privilégios. Arquivos com esse bit configurado (rws) são executados com a permissão do owner do arquivo independente do usuário que está executando ele.
Por exemplo:
-rwsr-x--- 1 root root 30 Oct 2 14:11 exploit
Neste exemplo, arquivo tem permissão total para o owner, que neste caso é o usuário root. Com o SUID configurado, qualquer usuário com permissão de execução executará o arquivo com os privilégios do owner (root).
Por isso é muito importante utilizar nosuid no /etc/fstab.
Como funciona o nodev
O nodev determina que o /tmp não poderá conter arquivos de dispositivos. Tudo no Linux é arquivo, e os dispositivos são tratados como Device Node (arquivos de hardware) no diretório /dev do FHS (Filesystem Hierarchy Standard). A presença de arquivos de dispositivo no /tmp significa tentativa de manipular configurações de hardwares, e muito provavelmente será de discos para elevar privilégios.
Podemos criar Device Nodes no /tmp com o comando mknod, e ao fazê-lo podemos usar propriedades de discos existentes, herdando as configurações do disco utilizado como alvo. Toda operação realizada nesse novo “disco” serão persistidas no disco real.
Por isso incluímos nodev no /tmp para que o ponto de montagem considere device nodes como arquivos simples que não conseguem manipular os discos existentes.
Resumo
Esses são só 3 recursos de segurança para prevenir execuções arbitrárias de malwares em mount points. A segurança começa em evitar que o ator tenha acesso ao sistema.

