Evitando ataques de plantação binária no Linux

6

Se uma conta de usuário em uma máquina Linux for comprometida, claramente, todos os arquivos pertencentes a esse usuário serão comprometidos.

Infelizmente, se o usuário comprometido também tiver privilégios de sudo, parece que o plantio binário pode ser usado para ganhar trivialmente a senha do sudo e, portanto, escalar o ataque para privilégios de root (ruim).

Existem boas defesas contra este ataque, ou é geralmente aceito que root será comprometido se o sudo estiver em uso?

Pergunta anterior em uma nota relacionada: zsh - expande totalmente o caminho binário em < tab >

Isso não resolve o problema, porque mesmo que seu arquivo .rc do shell seja de propriedade root, ele pode ser removido pelo usuário local e substituído por um contendo uma variável maliciosa $ PATH ou o atalho de teclado para abrir um terminal poderia ser substituído por um malicioso.

    
por Ali 28.01.2012 / 23:23

3 respostas

9

É impossível impedir completamente esses ataques, pelo menos sem uma grande reengenharia do sistema e um pesado fardo para o usuário.

Se um invasor tiver acesso de gravação à sua conta, o usuário poderá criar um ambiente simulado que ocultará todos os rastros do comprometimento aos seus olhos. A maneira mais óbvia é usar LD_PRELOAD para carregar uma biblioteca que se esconda e qualquer outra coisa o invasor plantou (isso não funcionaria em binário vinculado estaticamente, um wrapper mais sofisticado é necessário).

O ataque permanecerá visível para outros usuários até que o invasor tenha escalado para outras contas. Assim, você poderia fazer um processo em execução como root verificar os arquivos em sua conta e relatar qualquer alteração. O problema com isto é que você estará fazendo muitas mudanças legítimas; É improvável que você consiga perceber uma mudança ilegítima entre o ruído.

Existe uma maneira de conter os danos à sua conta, que exige o escalonamento de privilégios para passar por uma interface de usuário totalmente confiável. Isso significaria que:

  • A autenticação como raiz deve passar apenas por processos que não pertencem ao usuário e não podem ser controlados pelo usuário. Em particular, nenhuma interface X11.
  • Você deve ter uma maneira de identificar o prompt de login como original: caso contrário, o invasor pode escarnecer da interface do usuário confiável. Existem duas abordagens para isso.

    • Tenha uma chave de atenção segura , que não pode ser recuperada para outra função pelo usuário. Pressione o SAK para exibir um prompt de login em um terminal que não esteja sob o controle do usuário. Isso pode ser configurado em alguns unices, mas não tenho conhecimento de uma solução completa que passou por uma séria revisão de segurança.
    • O sistema deve autenticar-se para o usuário, novamente por meio de uma interface do usuário sobre a qual o usuário não tem controle. A autenticação pode ser estática, por ex. mostrando uma foto de seus filhos; isso é fácil para você verificar, mas também é fácil falsificar um ataque direcionado. A autenticação pode ser dinâmica, com o sistema mostrando uma senha única que você verifica em um sistema confiável separado; isso requer que você tenha esse sistema (normalmente um token OTP).

Ambas as abordagens funcionam apenas para logins locais. Você não pode ter certeza do caminho entre você e o sistema quando estiver trabalhando remotamente. E você não pode usar nada conveniente como sudo , copiando e colando o comando e assim por diante; você fundamentalmente precisa fazer algo disruptivo do ponto de vista da interface do usuário, como alternar para um terminal diferente.

Ah, e uma vez que o atacante é o root, ele pode facilmente instalar um rootkit que impossibilite a detecção. Ataques locais são comuns de qualquer maneira; Se o invasor tiver comprometido sua conta e este for um ataque avançado (não necessariamente o caso se você simplesmente deixou seu terminal desacompanhado), presuma que a conta root também está comprometida.

    
por 29.01.2012 / 00:20
3

Os comandos que um usuário pode sudo podem ser limitados na configuração sudo . O Sudo não precisa ser equivalente ao root.

Caso contrário, acho que você respondeu sua própria pergunta - se eu tiver as chaves do galinheiro e o Sr. Fox pegar minhas chaves, então poderei comer todas as galinhas. Não há solução para isso.

No entanto, existem pelo menos ferramentas como tripwire ou ossec para alertá-lo quando um rootkit foi instalado. Veja isto para alguns detalhes .

    
por 29.01.2012 / 00:06
1

Tripwire / AIDE / Samhain estão trabalhando em abordagens para HIDS (sistemas de detecção de invasão baseados em host). Alguns deles podem ser combinados com partes do servidor central, portanto as assinaturas não estão no computador local (por exemplo, Beltane for Samhain).

Outra abordagem - que eu uso na minha estação de trabalho - onde eu mudo arquivos com bastante frequência é verificar se os arquivos do sistema operacional ainda estão consistentes.

Eu faço isso fazendo um rpm -Va completo - coloque a saída em um arquivo e compare essa saída com a próxima execução. Dessa forma, capturarei as alterações binárias que não fazem parte das mudanças nos patches do SO (eu ligo a verificação gpg também).

Para ambos os métodos, há maneiras de contorná-los ...

    
por 29.01.2012 / 22:35