Como registrar todas as chamadas do sistema feitas por um processo e todos os seus descendentes com o comando auditd


13

eu posso fazer

auditctl -a always,exit -S all -F pid=1234

Para registrar todas as chamadas do sistema feitas pelo pid 1234 e:

auditctl -a always,exit -S all -F ppid=1234

Para seus filhos, mas como faço para cobrir também os netos e seus filhos (atuais e futuros)?

Não posso confiar em (e) uid / (e) gid que mudam.

(observe que o uso stracetambém não é uma opção)


4
omg, omg, omg, Stephane fazendo uma pergunta ... (eu vim aqui apenas pelo título, pensando strace -s^^ mas depois vi quem estava perguntando e soube imediatamente "ele já sabia disso!") ... Stephane, você pode talvez: 1) crie a lista de pids usando a opção "tree" do ps, 2) execute auditctl (s) em todos os pids listados na árvore? (ou seja, você pode ter vários "pid = ...."? ou múltiplos auditctl, cada um em um?) ou a maneira "burra": auditctl tudo, e algum tipo de egrep no "pid | pid | pid" se eles aparecem em cada linha) (ressalva: eu não tenho acesso a linux atm, então eu não tenho idéia de como informações sobre aparecer)?
Olivier Dulac

um truque que você poderia usar (mais uma vez, não conheço detalhes específicos do auditd, nem posso tentar no momento): especificar uma variável de ambiente específica ao iniciar o pai superior e auditar todos os processos com essa variável definida?
Olivier Dulac

@OlivierDulac, marcar o processo de alguma forma (herdada por crianças) é uma coisa que tenho em mente. Mas a lista de coisas com as quais as regras de auditoria podem corresponder é bastante fina (nem mesmo sid, pgid ...). Talvez os do SELinux, mas não sei a primeira coisa sobre o SELinux. Talvez processar espaços de nome?
Stéphane Chazelas

talvez o pai mais alto possa estar em seu próprio grupo de processos? ( pt.wikipedia.org/wiki/Process_group )
Olivier Dulac 30/10

2
Eu pensei que talvez execute seu programa em um contêiner específico, se essa for uma opção para você. Se eu entendi corretamente esse tópico , isso deve funcionar com um kernel ≥3.13. Fora isso, não vejo outro método além do SELinux e do UID de auditoria . O AUID seria aplicável ao seu caso de uso?
Gilles 'SO- stop be evil'

Respostas:


1

Apenas propondo algo sem ter como experimentá-lo agora ... mas apenas adivinhando a partir do próprio post

Aqui está uma proposta de solução:

Supondo que o ID do processo mais alto esteja em $ pid, e que no linux também ps -Tforneça a árvore de processos (não posso ter acesso ao linux no momento)

for eachpid in $(ps -T "$pid" | awk '{print $1}' | grep -v 'PID')
do
   auditctl -a always,exit -S all -F pid=$eachpid  >somelog_${eachpid}.log 2>&1
done

Obviamente, substitua ps -T "$pid"pelo equivalente ao Linux, se ele não funcionar no Linux (ou encontre-o ativando a saída "pstree -p", o pid estará entre parênteses)


2
Obrigado, mas isso não cobre filhos "futuros", e executar isso em um loop frequentemente não cobre processos de vida curta. E a reutilização do pid também causaria um problema.
Stéphane Chazelas

todos os pontos válidos ... Então acredito que o que você deseja é provavelmente um recurso "mais procurado" e, portanto, já pode estar presente no nível auditctl (mas certamente não aparece agora na página de manual): pode ter a ser proposto (ou ... escrito) para uma versão futura. Não me lembro de uma maneira de "seguir uma árvore" de processos ... mas você pode implementar um por 1) fazendo com que algum script faça equivalentes "ps -T" regulares, 2) outro script mata o primeiro assim que o pid morre 3) sempre que a lista de pid de 1) mudar, adicione / remova o auditctl desses pids? (não é muito difícil de fazer) #
1111 Olivier Dulac

1
(meu último comentário não resolve o problema de processos de vida muito curta ... isso pode precisar de algo no nível do kernel em si, e eu não sei o suficiente para dizer se existe algo para isso. Pode valer uma pergunta sobre as listas de discussão do kernel)
Olivier Dulac 30/10
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.