Comandos perigosos como rm
, kill
e systemctl stop
podem ser ocultos fora das entradas do bash - ou seja - um usuário mal-intencionado pode facilmente ocultá-los dentro de um script python usando o os
módulo e apenas executar o script python como um proxy para ocultar o que eles realmente pretendiam prejudicar, e o histórico do bash ou qualquer coisa assim deixará apenas o registro que eles executam antes de excluir python3 [the malicious script].py
esse script para ocultar o que realmente fizeram.
O que eu quero fazer é registrar esses comandos críticos (todos os comandos além dos 3 são bem-vindos para apontar) toda vez que forem executados, não importa de onde vieram. E o log não deve ser descartado por nenhum usuário, exceto pelo root.
Você pode usar
auditd
e monitorar operações de arquivo/chamadas de sistema para remover arquivos/diretórios. As regras serão algo como:Claro que você pode adicionar outras chamadas de monitoramento de arquivos específicos em regras como para
kill
:Etapa 1: encontrar o local do comando
Etapa 2: obter acl por
getfacl <command path>
Passo 3: Use
setfacl
para definir acl para usuários permitidosEtapa 4: todos os logs de problemas de permissão estarão disponíveis nos logs de auditoria na pasta /var/log normalmente.
Espero que isso ajude.
Editar:
Fiquei com a impressão de que a questão é lidar com comandos via programa (não considerado código de baixo nível).
Podemos obter todas as chamadas abertas com falha com auditctl abaixo (se configurado para monitorar/registrar)
Portanto, a sequência será definida nas acls para arquivos/comandos e registrará as chamadas do sistema com falha
auditd
para que possamos verificar os logs. Desta forma, podemos obter quem tentou executar qual comando ou syscall.Observação: não estou considerando a condição se o programa for executado com root.