Logujemy logowania i nie tylko cz.II – biblioteka snoopy
Napisał: Patryk Krawaczyński
10/04/2016 w Bezpieczeństwo Brak komentarzy. (artykuł nr 517, ilość słów: 375)
W
poprzedniej części zaprezentowałem, jak prosto za pomocą PAM możemy przesyłać informację o logowaniu się na uprzywilejowane konto root. W tej części zajmiemy się prawie permanentną inwigilacją poleceń wydawanych przez administratora i zwykłych użytkowników systemu. Wykorzystamy do tego bibliotekę snoopy.
Zacznijmy od instalacji i konfiguracji biblioteki snoopy. Poniższe przykłady będą wykonywane na serwerze opartym na systemie Ubuntu 14.04 LTS:
apt-get install -y build-essential socat wget -O snoopy-install.sh https://github.com/a2o/snoopy/raw/install/doc/install/bin/snoopy-install.sh chmod 755 snoopy-install.sh ./snoopy-install.sh stable
Po instalacji musimy zmienić parę standardowych ustawień w pliku /etc/snoopy.ini:
message_format = '{"datetime": "%{datetime}", "hostname": "%{hostname}", \
"user": { "login": "%{login}", "username": "%{username}", "uid": "%{uid}", \
"tty": "%{tty}" }, "command": { "cwd": "%{cwd}", "filename": "%{filename}", \
"cmdline": "%{cmdline}", "pid": "%{pid}", "ppid": "%{ppid}", "rootproc": "%{rpname}", \
"executedAS": "username: %{eusername} - uid: %{euid}" } }'
syslog_facility = LOCAL7
syslog_ident = "snoopy"
W ten sposób zadbamy o to, że będziemy w stanie przefiltrować wiadomości przesyłane przez bibliotekę snoopy w rsyslog’u i zapisywać je w wybranym pliku w formacie json:
{
"datetime":"2016-04-10T22:49:23+0200",
"hostname":"darkstar",
"user":{
"login":"agresor",
"username":"agresor",
"uid":"1000",
"tty":"/dev/pts/2"
},
"command":{
"cwd":"/home/agresor",
"filename":"/usr/bin/uptime",
"cmdline":"uptime",
"pid":"2209",
"ppid":"2173",
"rootproc":"sshd",
"executedAS":"username: agresor - uid: 1000"
}
}
Filtrowanie wiadomości wymaga dodania do konfiguracji rsyslogd dodatkowego pliku konfiguracji – /etc/rsyslog.d/10-snoopy.conf:
$template Snoopy,"%msg:2:$%\n" $ActionFileDefaultTemplate Snoopy if $syslogfacility-text == 'local7' and $programname == 'snoopy' then /var/log/commands.log & ~
oraz stworzenia i zabezpieczenia pliku /var/log/commands.log:
touch /var/log/commands.log chmod 640 /var/log/commands.log chown syslog:adm /var/log/commands.log service rsyslog restart
Od tego momentu wszystkie polecenia wydawane przez użytkowników systemu będą logowane do w/w pliku. Możemy zastosować również filtrowanie (filter_chain = "only_uid:0"), jeśli chcemy śledzić poczynania wybranych użytkowników. Ponownie wybrany format json umożliwia nam bardzo proste przesyłanie wiadomości do wybranego systemu agregującego tego typu wiadomości np. ElasticSearch.
Więcej informacji: Snoopy Logger

