quarta-feira, 6 de junho de 2018

Introdução ao monitoramento de endpoint Linux com o audit

Um dos pontos críticos que temos na área defensiva é justamente saber o que acontece na máquina, seja de forma regular ou maliciosa, mas alguma forma de fazer o tracking da origem conexão, usuário, ações executadas entre outros pontos. Existe em praticamente todo Sistema Operacional algum sistema de auditoria escutando por isso, muitas vezes apenas esperando ser habilitado ou configurado.

No caso do Linux temos o Audit, que por padrão no CentOS vem instalado e habilitado, porém sem regras. O Audit do linux podemos monitorar tudo que acontece no sistema baseado nas 330+ syscall existentes.

A arquitetura do audit basicamente é representada nessa imagem:



Você tem aplicações, processos, comandos sendo executados no userland e "comunicando com o kernel", sendo que o audit pega essas infos diretamente lá e joga de volta para o sistema no userland.

A estrutura do audit instalado no SO é a seguinte:

Configurações => /etc/audit/
Regras             => /etc/audit/rules.d/
Eventos           => /var/log/audit/

Existe alguns comandos para ver quais as configurações existente, pesquisar eventos gerados e relatórios

auditctl
ausearch
aureport

Para simularmos algo simples, criarei uma regra para monitorar arquivos binários que por simulação considero suspeito que seriam whoami e tcpdump

Inicialmente sem regras:

 [root@BlueOpsLabs rules.d]# ausearch -i -k blueopsdemo  
 <no matches>  
 [root@BlueOpsLabs rules.d]# tcpdump -c1   
 <REMOVED>  
 1 packet captured  
 7 packets received by filter  
 0 packets dropped by kernel  
 [root@BlueOpsLabs rules.d]# whoami  
 root  
 [root@BlueOpsLabs rules.d]# ausearch -i -k blueopsdemo  
 <no matches>  
 [root@BlueOpsLabs rules.d]#   


Após os testes, podemos ver que nada foi gerado. Para gerar, precisamos de regras e aqui criei 2regras básicas monitorando o caminho binário -w e quando a permissão execução entrar em ação -x p e salvando com a key blueopsdemo

 [root@BlueOpsLabs rules.d]# cat blueops.rules   
 -w /usr/sbin/tcpdump -p x -k blueopsdemo  
 -w /usr/bin/whoami -p x -k blueopsdemo  
 [root@BlueOpsLabs rules.d]#  

Restart e regras adicionadas

 [root@BlueOpsLabs rules.d]# service auditd restart  
 Stopping logging:                     [ OK ]  
 Redirecting start to /bin/systemctl start auditd.service  
 [root@BlueOpsLabs rules.d]# ausearch -i -k blueopsdemo  
 ----  
 type=CONFIG_CHANGE msg=audit(06-06-2018 15:12:41.294:55348) :  
 auid=unset ses=unset subj=system_u:system_r:unconfined_service_t:s0   
 op=add_rule key=blueopsdemo list=exit res=yes   
 ----  
 type=CONFIG_CHANGE msg=audit(06-06-2018 15:12:41.295:55350) :  
 auid=unset ses=unset subj=system_u:system_r:unconfined_service_t:s0   
 op=add_rule key=blueopsdemo list=exit res=yes   
 [root@BlueOpsLabs rules.d]#   

Repetindo os comandos acima (não colando novamente para não alongar o post)

 ----  
 type=PROCTITLE msg=audit(06-06-2018 15:14:22.393:55352) :  
 proctitle=tcpdump -c1   
   
 type=PATH msg=audit(06-06-2018 15:14:22.393:55352) :  
 item=1 name=/lib64/ld-linux-x86-64.so.2 inode=87703 dev=fd:01 mode=file,755   
 ouid=root ogid=root rdev=00:00 obj=system_u:object_r:ld_so_t:s0   
 objtype=NORMAL cap_fp=none cap_fi=none cap_fe=0 cap_fver=0   
   
 type=PATH msg=audit(06-06-2018 15:14:22.393:55352) :  
 item=0 name=/usr/sbin/tcpdump inode=543204 dev=fd:01 mode=file,755   
 ouid=root ogid=root rdev=00:00 obj=system_u:object_r:netutils_exec_t:s0   
 objtype=NORMAL cap_fp=none cap_fi=none cap_fe=0 cap_fver=0   
   
 type=CWD msg=audit(06-06-2018 15:14:22.393:55352) :   
 cwd=/etc/audit/rules.d   
   
 type=EXECVE msg=audit(06-06-2018 15:14:22.393:55352) :   
 argc=2 a0=tcpdump a1=-c1   
   
 type=SYSCALL msg=audit(06-06-2018 15:14:22.393:55352) :   
 arch=x86_64 syscall=execve success=yes exit=0 a0=0x19ea8e0   
 a1=0x19eae90 a2=0x19bde70 a3=0x7ffdd8102e60 items=2 ppid=887   
 pid=5481 auid=root uid=root gid=root euid=root suid=root  
 fsuid=root egid=root sgid=root fsgid=root  tty=pts1 ses=105   
 comm=tcpdump exe=/usr/sbin/tcpdump   
 subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key=blueopsdemo   
 ----  
   
 type=PROCTITLE msg=audit(06-06-2018 15:14:30.373:55355) :   
 proctitle=whoami   
   
 type=PATH msg=audit(06-06-2018 15:14:30.373:55355) :  
 item=1 name=/lib64/ld-linux-x86-64.so.2 inode=87703 dev=fd:01  
 mode=file,755 ouid=root ogid=root rdev=00:00   
 obj=system_u:object_r:ld_so_t:s0 objtype=NORMAL   
 cap_fp=none cap_fi=none cap_fe=0 cap_fver=0   
   
 type=PATH msg=audit(06-06-2018 15:14:30.373:55355) :   
 item=0 name=/usr/bin/whoami inode=12611372 dev=fd:01  
 mode=file,755 ouid=root ogid=root rdev=00:00   
 obj=system_u:object_r:bin_t:s0 objtype=NORMAL   
 cap_fp=none cap_fi=none cap_fe=0 cap_fver=0   
   
 type=CWD msg=audit(06-06-2018 15:14:30.373:55355) :   
 cwd=/etc/audit/rules.d   
   
 type=EXECVE msg=audit(06-06-2018 15:14:30.373:55355) :  
 argc=1 a0=whoami   
   
 type=SYSCALL msg=audit(06-06-2018 15:14:30.373:55355) :   
 arch=x86_64 syscall=execve success=yes exit=0   
 a0=0x19eaab0 a1=0x19e0540 a2=0x19bde70   
 a3=0x7ffdd8102e60 items=2 ppid=887 pid=5482  
 auid=root uid=root gid=root euid=root suid=root fsuid=root   
 egid=root sgid=root fsgid=root tty=pts1 ses=105   
 comm=whoami exe=/usr/bin/whoami   
 subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023   
 key=blueopsdemo   
 ----  

O audit é extremamente poderoso e possui uma granularidade muito interessante nas informações que geram. Em próximas postagens falaremos mais específico sobre regras e campos, integração com Stack Elastic, osquery e alguns casos de monitoramento.

Link excelente documentação da Redhat: https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html/security_guide/chap-system_auditing

Happy Hunting!

Equipe BlueOps

Nenhum comentário:

Postar um comentário