Como registrar a execução de um binário / script específico usando o auditd ou outro

2

Eu tenho a seguinte situação em mãos. Eu tenho um ou mais arquivos executáveis específicos em / usr / bin, eu chamarei um / usr / bin / execute, e eles podem ser um binário compilado ou um arquivo de script, como um script perl ou python.

Eu gostaria de log quando qualquer usuário lança esses binários específicos. A informação que eu gostaria disto é basicamente:

  • o nome / caminho do executável
  • os argumentos dados ao executável
  • o usuário que executou a ação
  • a data / hora

Além disso, gostaria que essas informações estivessem em um formato que é lógico analisar se necessário.

Auditoria parecia uma boa escolha no início, mas tem uma maneira estranha de dividir as informações acima em duas entradas por algum motivo. Por exemplo, no exemplo acima, quero rastrear a execução do programa / usr / bin / execute. Eu adicionarei essas instruções ao auditctl:

-a exit,always -F arch=b32 -S execve
-a exit,always -F arch=b64 -S execve

(Ainda não consegui descobrir como especificar "/ usr / bin / execute" como a única coisa registrada, gostaria de receber ajuda de alguém que saiba como fazer isso)

No log depois de executar / usr / bin / execute com um argumento, recebo as duas entradas relevantes a seguir:

type=SYSCALL msg=audit(1447688181.106:819746): arch=c000003e syscall=59 success=yes exit=0 a0=2898528 a1=26e3308 a2=2720008 a3=7fff176c1840 items=3 ppid=10697 pid=10715 auid=1000 uid=1000 gid=1000 euid=1000 suid=1000 fsuid=1000 egid=1000 sgid=1000 fsgid=1000 tty=pts4 ses=8 comm="execute" exe="/usr/bin/perl" key=(null)
type=EXECVE msg=audit(1447688181.106:819746): argc=3 a0="/usr/bin/perl" a1="/usr/bin/execute" a2="some_arg.txt"

A informação é, por algum motivo, dividida entre duas entradas. Na primeira mensagem SYSCALL, recebo o uid do usuário e, na segunda mensagem EXECVE, recebo o caminho (em 'a1', que não tenho certeza se é consistant) e os argumentos. Além do fato de que isso é mais difícil de analisar, não tenho um vínculo definido entre essas declarações para conciliar que elas são parte do mesmo evento. Todo esse resultado parece estar incorreto para o que estou tentando realizar, então estou procurando uma maneira melhor.

Tl; Dr: Posso obter uma auditoria para registrar essas informações em um arquivo de maneira geralmente analisável, para scripts ou binários? Posso limitar o registro somente neste arquivo executável? Caso contrário, outro daemon de auditoria seria uma escolha melhor?

Obrigado.

    
por Rboreal_Frippery 16.11.2015 / 17:31

1 resposta

0

Não importa como você faz isso em auditd, você terá que usar algum analisador para obter as informações desejadas (a menos que uma das opções do ausearch ajude).

Para começar, para monitorar apenas comandos específicos, e vamos dizer que os comandos são / usr / bin / who (um binário) e / usr / bin / whatis (um script shell), então use as regras

-w /usr/bin/who -p x -k my_execs
-w /usr/bin/whatis -p x -k my_execs

Após definir essas regras, reinicie o serviço auditd e execute

who -a
whatis who

depois como root

ausearch -i -k my_execs

para obter

----
node=mynode.mydomain type=CONFIG_CHANGE msg=audit(11/18/2015 08:38:22.724:847290) : auid=burn ses=145 subj=unconfined_u:system_r:auditctl_t:s0 op="add rule" key=my_execs list=exit res=yes
----
node=mynode.mydomain type=CONFIG_CHANGE msg=audit(11/18/2015 08:38:22.724:847291) : auid=burn ses=145 subj=unconfined_u:system_r:auditctl_t:s0 op="add rule" key=my_execs list=exit res=yes
----
node=mynode.mydomain type=PATH msg=audit(11/18/2015 08:38:25.381:847344) : item=1 name=(null) inode=524297 dev=fd:00 mode=file,755 ouid=root ogid=root rdev=00:00 obj=system_u:object_r:ld_so_t:s0 nametype=NORMAL
node=mynode.mydomain type=PATH msg=audit(11/18/2015 08:38:25.381:847344) : item=0 name=/usr/bin/who inode=2102799 dev=fd:00 mode=file,755 ouid=root ogid=root rdev=00:00 obj=system_u:object_r:bin_t:s0 nametype=NORMAL
node=mynode.mydomain type=CWD msg=audit(11/18/2015 08:38:25.381:847344) :  cwd=/tmp
node=mynode.mydomain type=EXECVE msg=audit(11/18/2015 08:38:25.381:847344) : argc=2 a0=who a1=-a
node=mynode.mydomain type=SYSCALL msg=audit(11/18/2015 08:38:25.381:847344) : arch=x86_64 syscall=execve success=yes exit=0 a0=0x11728e0 a1=0x1172d90 a2=0x10e8020 a3=0x18 items=2 ppid=1810 pid=22443 auid=burn uid=burn gid=burn euid=burn suid=burn fsuid=burn egid=burn sgid=burn fsgid=burn tty=pts0 ses=145 comm=who exe=/usr/bin/who subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key=my_execs
----
node=mynode.mydomain type=PATH msg=audit(11/18/2015 08:38:31.052:847381) : item=2 name=(null) inode=524297 dev=fd:00 mode=file,755 ouid=root ogid=root rdev=00:00 obj=system_u:object_r:ld_so_t:s0 nametype=NORMAL
node=mynode.mydomain type=PATH msg=audit(11/18/2015 08:38:31.052:847381) : item=1 name=(null) inode=786482 dev=fd:00 mode=file,755 ouid=root ogid=root rdev=00:00 obj=system_u:object_r:shell_exec_t:s0 nametype=NORMAL
node=mynode.mydomain type=PATH msg=audit(11/18/2015 08:38:31.052:847381) : item=0 name=/usr/bin/whatis inode=2112811 dev=fd:00 mode=file,755 ouid=root ogid=root rdev=00:00 obj=system_u:object_r:bin_t:s0 nametype=NORMAL
node=mynode.mydomain type=CWD msg=audit(11/18/2015 08:38:31.052:847381) :  cwd=/tmp
node=mynode.mydomain type=EXECVE msg=audit(11/18/2015 08:38:31.052:847381) : argc=2 a0=/bin/sh a1=/usr/bin/whatis
node=mynode.mydomain type=EXECVE msg=audit(11/18/2015 08:38:31.052:847381) : argc=3 a0=/bin/sh a1=/usr/bin/whatis a2=who
node=mynode.mydomain type=SYSCALL msg=audit(11/18/2015 08:38:31.052:847381) : arch=x86_64 syscall=execve success=yes exit=0 a0=0x1172d90 a1=0x1172500 a2=0x10e8020 a3=0x18 items=3 ppid=1810 pid=22504 auid=burn uid=burn gid=burn euid=burn suid=burn fsuid=burn egid=burn sgid=burn fsgid=burn tty=pts0 ses=145 comm=whatis exe=/bin/bash subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key=my_execs

Você pode ver que ausearch extraiu os eventos desejados (usando sua chave). Os elementos SYSCALL fornecem a você quem, onde e outros elementos, os elementos EXECVE fornecem os argumentos, o CWD a localização e os detalhes do PATH sobre os arquivos envolvidos. Para referência neste sistema, os inodes acima mapeiam para

524297  /lib64/ld-2.12.so
2102799 /usr/bin/who
786482  /bin/bash
2112811 /usr/bin/whatis

Você pode conferir o link para obter mais informações

    
por 17.11.2015 / 22:49