NFsec Logo

Logujemy logowania i nie tylko cz.II – biblioteka snoopy

10/04/2016 w Bezpieczeństwo Brak komentarzy.  (artykuł nr 515, 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

Kategorie K a t e g o r i e : Bezpieczeństwo

Tagi T a g i : , , ,

Zostaw odpowiedź.

Musisz być zalogowany by móc komentować.