Costumo ouvir pessoas citando sudo
como uma das principais barreiras ao malware que infectam um computador Linux.
O argumento mais comum parece seguir as seguintes linhas: Privilégios de root são necessários para modificar a configuração do sistema e uma senha é necessária para obter privilégios de root; portanto, o malware não pode modificar a configuração do sistema sem solicitar uma senha.
Mas parece-me que, por padrão, na maioria dos sistemas, uma vez que o malware infectou uma conta de administrador, a escalação de privilégios é trivial - o malware precisa apenas aguardar a execução do usuário sudo
.
Quais métodos existem para que os malwares obtenham privilégios de root quando o usuário executa sudo
e como podemos proteger contra eles?
Editar: estou especificamente interessado em proteger contra uma conta de administrador comprometida; isto é, uma conta com privilégios de root completos sudo
(por exemplo, a conta do usuário em um sistema de desktop típico).
startx
funciona perfeitamente como um usuário normal. Na verdade, estou executando o X como um usuário normal agora.Respostas:
Depois que um malware obtém acesso à conta de um usuário, ele pode:
1. Crie um alias do bash (no shell atual e no
~/.bashrc
) para um comando que falsifica o[sudo] password for $USER:
prompt e rouba a senha do usuário.2. Da mesma forma, ele pode colocar um executável nomeado
sudo
em~/.bin
e modificar aPATH
variável para obter o mesmo efeito:PATH="$HOME/.bin:$PATH"
3. Pressione as teclas pressionadas no servidor X, preste atenção na palavra
sudo
e tente o texto entre as próximas duas Enterteclas pressionadas como senha.4. Uma coisa semelhante pode ser feita em qualquer ambiente (o console, Wayland , X) usando, por exemplo
$LD_PRELOAD
.5. Se o malware infecta um shell que usa
sudo
esudo
armazena em cache credenciais, o malware pode verificar continuamente se é possívelsudo
sem uma senha:Prevenção:
1 e 2. Use
\/bin/sudo
. O\
ignora aliases e/bin/…
ignora$PATH
. Como alternativa, adicione um alias como:ssudo="\/bin/sudo"
e sempre use emssudo
vez desudo
. Parece improvável que um vírus seja inteligente o suficiente para remapear esse apelido.3. Evite digitar sua senha ao usar o X11. Em vez disso, use um console virtual ou Weston .
5. Coloque
timestamp_timeout=0
dentro/etc/sudoers
.A única maneira de eliminar completamente a chance de a
sudo
senha ser detectada parece ser evitá-la completamente. Em vez disso, efetue login como root em um console virtual.De acordo com Alexander Peslyak : "o único uso seguro para su [e sudo] é mudar de uma conta mais privilegiada para uma conta menos privilegiada ..."
Em uma nota lateral, o sudo tem algumas contramedidas:
sudo
lê de emtty
vez destdin
, entãoalias sudo='tee -a /tmp/sudo-password | sudo'
quebrasudo
(mas captura a senha).fonte
sudo
configurou, mas, de qualquer forma, o malware agora tem a senha necessáriasudo
; portanto, se o usuário tiver acesso root, o mesmo ocorre com o malware.Não há proteção real.
O acesso protegido por senha ao sudo remonta a uma era anterior a ambientes complexos de shell com comandos executados por shims. Depois que a senha é enviada, há uma janela de oportunidade na qual um shim pode executar comandos via sudo, sem qualquer notificação e com controle total do sistema.
Se eu tivesse a intenção de acessar, criaria um calço útil para o bash, zsh e fish, etc. Monitoraria os comandos executados. Logo após um sudo retornar com um status zero, eu começaria a emitir "sudo chmod + s / bin / sh" ou outras maldades.
No momento em que o sudo recebeu uma senha satisfatória e você possui shells que executam comandos para obter um prompt, você está com problemas. Não há proteção, além de otimismo.
Outras respostas se concentraram em proteger a senha. Como agressor, eu não me preocuparia com isso. Eu focaria na duração após a senha ter sido fornecida, quando uma senha não for necessária. Esse é o momento mais arriscado, quando o invasor precisa fazer menos para comprometer completamente o sistema.
Protegendo disso? Você teria que proteger seus arquivos RC. Inspecione quaisquer calços ou outros comandos usados nos prompts da linha de comandos. Procure co-processos conectados ao shell e ferramentas usadas para manter o ambiente do shell. As principais defesas seriam ferramentas de intrusão de host, mas isso é posterior ao fato. Prevenção de ataques? Somente usando shells simples sem configuração automatizada complexa e prompts ativos - esse é o ambiente para o qual o sudo foi desenvolvido.
Eu costumava jogar com outros desenvolvedores (década de 1980), onde tentávamos escrever coisas que obtivessem o terminal que o outro desenvolvedor estava usando, para inserir comandos - este é essencialmente o mesmo problema. E facilitamos muito a incorporação de ferramentas que executariam a inserção de comandos sem rastreamento visível. :)
fonte
Não tenho certeza sobre nenhum método para usuários não autorizados obterem privilégios de root, mas sei algo que você pode fazer para tornar
sudo
um pouco menos perigoso , se quiser dizer isso.sudo
permite configurar permissões granulares para definir grupos de usuários com privilégios específicos e comandos específicos que determinados usuários podem executar.SUDO - CONTROLE GRANULAR
Apenas reforce suas
sudo
políticas tanto quanto você não confia em seus usuários :)fonte
sudo
. Especificamente, estou pensando em sistemas de desktop normais.Se você estiver interessado em um sistema que acredita estar comprometido, execute "Rootkit" e use "Tripwire" para verificar a integridade do sistema de arquivos.
Também o aconselharia a reforçar os privilégios do sudo, como se você não precisasse que todos os usuários tivessem acesso a todos os comandos raiz, em vez de acessar comandos específicos através do SUDO.
fonte
Primeiro de tudo, dê uma olhada no
/etc/sudoers
arquivo.A sintaxe será o
user MACHINE=COMMANDS
formato.Por exemplo, o usuário root terá
root ALL=(ALL) ALL
Isso significa que o usuário root pode executar qualquer (todos) comandos em qualquer lugar.Se a sua entrada também tiver
ALL=(ALL)
, você é quase igual a um usuário root. Se esse não for o caso e você tiver apenas alguns privilégios limitados, o invasor / malware poderá fazer apenas o mesmo que seu privilégio sudo.Dicas que podem ajudá-lo:
/etc/sudoers
arquivo.visudo
comando para editar e modificar os privilégios do seu arquivo sudoers.Referência: página de manual do Linux de sudoers e sudo man sudoers
fonte