Vou escrever uma resposta com o RHEL em mente, mas saiba que se você estiver em uma distribuição baseada no SuSE ou no Debian, haverá análogos para o que eu descrevo.
Primeiramente, se você quiser apenas verificar se era uma atualização do sistema e não alguém tentando rootkit da máquina, é possível "verificar" o pacote openssh-clients
assim:
[root@hypervisor scsd]# rpm -V openssh-clients
[root@hypervisor scsd]#
[root@hypervisor scsd]# rpm -V openssh-server
S.5....T. c /etc/pam.d/sshd
S.5....T. c /etc/ssh/sshd_config
[root@hypervisor scsd]#
Eu também fiz openssh-server
para que você possa ver o que parece quando algo mudou. A parte importante é o "5", que nos diz que o md5sum do arquivo é diferente do que existe no banco de dados RPM. Se esse check-out foi provavelmente devido a uma atualização do sistema.
Se eles usaram o yum (muito provável), haverá uma entrada /var/log/yum.log para esse RPM sendo atualizado. Isso é útil para obter o horário específico em que a atualização ocorreu para revisão posterior com yum history
.
Se eles usaram rpm
diretamente, você pode fazer alguns queryformat
magic ou rpm -q openssh-clients --last
para obter a data em que aconteceu (embora pareça que você já conhece essa informação)
Existe um subcomando yum
chamado history
que registra o auid / loginuid do usuário invocador:
[root@hypervisor scsd]# yum history
Loaded plugins: product-id, refresh-packagekit, rhnplugin, security, subscription-manager
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
This system is receiving updates from RHN Classic or RHN Satellite.
ID | Login user | Date and time | Action(s) | Altered
-------------------------------------------------------------------------------
54 | <jadavis6> | 2013-07-15 09:03 | Install | 2
53 | <jadavis6> | 2013-07-09 17:25 | Update | 23
52 | <jadavis6> | 2013-06-24 10:10 | Install | 3 <
51 | <jadavis6> | 2013-06-14 22:33 | Install | 1 >
50 | <jadavis6> | 2013-06-14 07:47 | E, I, U | 90
49 | root <root> | 2013-06-14 00:58 | Update | 1
48 | <jadavis6> | 2013-06-03 08:28 | Install | 3
47 | <jadavis6> | 2013-05-28 11:57 | Install | 3 <
46 | <jadavis6> | 2013-05-20 18:25 | Install | 1 >
45 | <jadavis6> | 2013-05-20 12:00 | Install | 1
44 | <jadavis6> | 2013-05-19 15:29 | Install | 6
43 | <jadavis6> | 2013-05-18 20:16 | Install | 3
42 | <jadavis6> | 2013-05-16 16:21 | Install | 2 <
41 | <jadavis6> | 2013-05-16 12:48 | Install | 1 >
40 | <jadavis6> | 2013-05-10 09:28 | Install | 1
39 | <jadavis6> | 2013-05-10 09:28 | Install | 1
38 | <jadavis6> | 2013-04-29 19:45 | Install | 2 <
37 | <jadavis6> | 2013-04-29 18:51 | Install | 8 >
36 | <jadavis6> | 2013-04-29 18:35 | Update | 11
35 | <jadavis6> | 2013-04-27 15:44 | E, I, O, U | 429 EE
history list
[root@hypervisor scsd]#
O login é inválido porque como os filhos do init são desmembrados eles começam com um loginuid de -1 (negativo). Quando você efetua login via tty ou sshd
pam_loginuid (há outros módulos que também fazem isso) o configura para o UID do usuário autenticado. Uma vez definido como algo diferente de -1
root mesmo não pode alterar este valor (somente nos kernels mais novos, no entanto), já que ele é não-funcional / apenas contábil e precisa levar em consideração que um invasor pode ter ganhado raiz. Todos os filhos herdam o loginuid do pai, assim, mesmo que sudo
crie um programa com o EUID igual a zero (ou qualquer usuário), você ainda terá o mesmo loginuid.
Você pode testar isso apenas fazendo sua parte do sudo e fazendo um cat /proc/self/loginuid
cada vez que o usuário com o qual você fez login inicialmente não importa quantas su
ou sudo
invocações feitas desde então. É assim que o yum history
lá em cima sabe que jadavis6
fez o yum update
, mesmo que eu tenha feito todos eles como o usuário root.
Se houver alguma ambiguidade entre duas transações do yum, você pode fazer um yum history info <transID>
, como se eu quisesse saber mais sobre a última transação:
[root@hypervisor scsd]# yum history info 35
Loaded plugins: product-id, refresh-packagekit, rhnplugin, security,
: subscription-manager
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
This system is receiving updates from RHN Classic or RHN Satellite.
Transaction ID : 35
Begin time : Sat Apr 27 15:44:57 2013
Begin rpmdb : 959:3d300ae2e8dc239f9f972306ba2406bd22ba29bc
End time : 15:50:39 2013 (5 minutes)
End rpmdb : 972:381cb76592ea2f779ee4521a4e7221196520486a
User : <jadavis6>
Return-Code : Success
Command Line : update -y
Transaction performed with:
Updated rpm-4.8.0-27.el6.x86_64 @anaconda-RedHatEnterpriseLinux-201206132210.x86_64/6.3
Updated subscription-manager-0.99.19.4-1.el6_3.x86_64 @rhel-x86_64-server-6
Updated yum-3.2.29-30.el6.noarch @anaconda-RedHatEnterpriseLinux-201206132210.x86_64/6.3
Installed yum-metadata-parser-1.1.2-16.el6.x86_64 @anaconda-RedHatEnterpriseLinux-201206132210.x86_64/6.3
Packages Altered:
Updated NetworkManager-glib-1:0.8.1-34.el6_3.x86_64 @rhel-x86_64-server-6
Update 1:0.8.1-43.el6.x86_64 @rhel-x86_64-server-6
Updated PackageKit-0.5.8-20.el6.x86_64 @rhel-x86_64-server-6
Update 0.5.8-21.el6.x86_64 @rhel-x86_64-server-6
Updated PackageKit-device-rebind-0.5.8-20.el6.x86_64 @rhel-x86_64-server-6
[...snip...]
Updated yum-3.2.29-30.el6.noarch @anaconda-RedHatEnterpriseLinux-201206132210.x86_64/6.3
Update 3.2.29-40.el6.noarch @rhel-x86_64-server-6
Updated yum-rhn-plugin-0.9.1-40.el6.noarch @anaconda-RedHatEnterpriseLinux-201206132210.x86_64/6.3
Update 0.9.1-43.el6.noarch @rhel-x86_64-server-6
Scriptlet output:
1 warning: /etc/shadow created as /etc/shadow.rpmnew
2 No input from event server.
3 warning: %postun(wdaemon-0.17-2.el6.x86_64) scriptlet failed, exit status 1
history info
Eu trunci-lo porque parece que esta foi uma atualização do sistema bastante longa.
AFAIK, não há como rastreá-lo se eles forem atualizados via rpm
diretamente da configuração de auditd
para monitorar as alterações nos arquivos de banco de dados do RPM. Fazer isso permitiria que você fizesse um ausearch
e permitiria ver uma lista de PIDs que fizeram alterações e o loginuid associado (que será exibido como auid
).
Se eles o alterassem diretamente fora do RPM, você teria que estar observando cada um dos arquivos que você queria monitorar para alterações antes da alteração ser feita. Após o fato, você não pode fazer muito, mas você pode considerar fazer algo com auditd
para monitorar os arquivos que considera alvos de rootkit. Fazer demais pode prejudicar o sistema. Também vale a pena mencionar que você deve enviar esses logs para fora do servidor em algum lugar para evitar adulterações maliciosas.
Espero que ajude.
EDITAR:
Uma coisa a notar, parece que o root pode alterar o loginuid se ele tiver CAP_SYS_AUDITCONTROL
(não necessário se o loginuid for atualmente -1
), mas você deve conseguir remover esse recurso do conjunto delimitador do sistema, o que exigiria que o atacante reinicializasse o sistema para obter essa capacidade, o que é uma operação barulhenta que deixa os eventos auditáveis em todo lugar, então é improvável que eles façam isso.