|
1.
Wprowadzenie
Aby wychwycić wszystkie ostrzeżenia i błędy wskazujące na próby ataku należy
włączyć dodatkowe usługi logowania. Włamywacze zwykle skanują i wypróbowują
system przed atakiem.
Ważną rzeczą jest również to, by logi były łatwe w zarządzaniu i
przeglądaniu. Gentoo podczas instalacji umożliwia wybranie jednego z trzech
programów logujących.
1.
Logowanie za pomocą syslogd
Syslogd jest najpopularniejszym programem logującym dla systemów Linux i Unix.
Nie daje możliwości rotowania logów. Można to sobie jednak zrekompensować
używając programu /usr/sbin/logrotate, warto dopisać go np. w
demonie cron (plik konfiguracyjny logrotate to
/etc/logrotate.conf). Częstotliwość rotacji logów będzie
uzależniona od obciążenia systemu.
Poniżej znajduje się standardowy plik syslog.conf do którego
wprowadzono kilka pożytecznych zmian. Odkomentowano linie dotyczące
crona i tty oraz dodano opcję wysyłania logów na zdalny serwer.
Żeby jeszcze bardziej zwiększyć bezpieczeństwo, można skonfigurować program
tak, aby zapisywał logi w dwóch różnych miejscach.
Listing 1.1: /etc/syslog.conf |
# /etc/syslog.conf Configuration file for syslogd.
#
# For more information see syslog.conf(5)
# manpage.
# This is from Debian, we are using it for now
# Daniel Robbins, 5/15/99
#
# First some standard logfiles. Log by facility.
#
auth,authpriv.* /var/log/auth.log
*.*;auth,authpriv.none -/var/log/syslog
cron.* /var/log/cron.log
daemon.* -/var/log/daemon.log
kern.* -/var/log/kern.log
lpr.* -/var/log/lpr.log
mail.* /var/log/mail.log
user.* -/var/log/user.log
uucp.* -/var/log/uucp.log
local6.debug /var/log/imapd.log
#
# Logging for the mail system. Split it up so that
# it is easy to write scripts to parse these files.
#
mail.info -/var/log/mail.info
mail.warn -/var/log/mail.warn
mail.err /var/log/mail.err
# Logging for INN news system
#
news.crit /var/log/news/news.crit
news.err /var/log/news/news.err
news.notice -/var/log/news/news.notice
#
# Some `catch-all' logfiles.
#
*.=debug;\
auth,authpriv.none;\
news.none;mail.none -/var/log/debug
*.=info;*.=notice;*.=warn;\
auth,authpriv.none;\
cron,daemon.none;\
mail,news.none -/var/log/messages
#
# Emergencies and alerts are sent to everybody logged in.
#
*.emerg *
*.=alert *
#
# I like to have messages displayed on the console, but only on a virtual
# console I usually leave idle.
#
daemon,mail.*;\
news.=crit;news.=err;news.=notice;\
*.=debug;*.=info;\
*.=notice;*.=warn /dev/tty8
#Setup a remote logging server
*.* @logserver
# The named pipe /dev/xconsole is for the `xconsole' utility. To use it,
# you must invoke `xconsole' with the `-file' option:
#
# $ xconsole -file /dev/xconsole [...]
#
# NOTE: adjust the list below, or you'll go crazy if you have a reasonably
# busy site..
#
#daemon.*,mail.*;\
# news.crit;news.err;news.notice;\
# *.=debug;*.=info;\
# *.=notice;*.=warn |/dev/xconsole
local2.* --/var/log/ppp.log
|
Włamywacze zwykle próbują zatrzeć po sobie ślady poprzez wyedytowanie lub
skasowanie logów. Można im to utrudnić ustawiając zdalne logowanie na innych
komputerach. Więcej informacji o syslogd znajduje się w man syslog.
1.
Metalog
Metalog Franka Dennisa nie ma
możliwości logowania na zdalnym serwerze. Ma za to sporą przewagę jeśli chodzi o
elastyczność i wydajność logowania. Może logować nazwę programu, priorytet i
wiele innych informacji. Daje możliwość korzystania z wyrażeń regularnych oraz
uruchamiania skryptów w przypadku wystąpienia w logu określonego ciągu znaków.
Bardzo przydaje się to do błyskawicznego wykonywania niezbędnych działań w
przypadku gdy dzieje się coś złego.
Zwykle wystarcza domyślna konfiguracja. Aby być powiadamianym e-mailem
za każdym razem gdy wystąpi błąd przy wpisywaniu hasła można użyć jednego z
następujących skryptów:
Dla postfix:
Listing 1.1: /usr/local/sbin/mail_pwd_failures.sh for postfix |
#! /bin/sh
echo "$3" | mail -s "Warning (program : $2)" root
|
Dla netqmail:
Listing 1.1: /usr/local/sbin/mail_pwd_failures.sh for netqmail |
#!/bin/sh
echo "To: root
Subject:Failure (Warning: $2)
$3
" | /var/qmail/bin/qmail-inject -f root
|
Aby skrypt zadziałał należy mu nadać prawa wykonywalności poprzez wpisanie
/bin/chmod +x /usr/local/sbin/mail_pwd_failures.sh.
Następnie należy odkomentować linię "Password failures" w pliku
/etc/metalog/metalog.conf:
Listing 1.1: /etc/metalog/metalog.conf |
command = "/usr/local/sbin/mail_pwd_failures.sh"
|
1.
Syslog-ng
Syslog-ng posiada te same funkcje co syslog i metalog, jednak z małymi
różnicami. Może filtrować wiadomości zależnie od poziomu i zawartości (jak
metalog), umożliwia zdalne logowanie (jak syslog), dobrze współpracuje z
rozmaitymi plikami, tak jak syslogd (nawet ze strumieniami z Solarisa) potrafi
wyświetlać logi na tty, wykonywać programy i może pełnić funkcję serwera
logów. Jest najlepszym dostępnym programem tego typu i jakby tego było mało
posiada jeszcze najszersze możliwości konfiguracyjne.
Poniżej znajduje się standardowy plik konfiguracyjny na który naniesiono kilka
drobnych poprawek.
Listing 1.1: /etc/syslog-ng/syslog-ng.conf |
options { chain_hostnames(off); sync(0); };
#source where to read log
source src { unix-stream("/dev/log"); internal(); };
source kernsrc { file("/proc/kmsg"); };
#define destinations
destination authlog { file("/var/log/auth.log"); };
destination syslog { file("/var/log/syslog"); };
destination cron { file("/var/log/cron.log"); };
destination daemon { file("/var/log/daemon.log"); };
destination kern { file("/var/log/kern.log"); };
destination lpr { file("/var/log/lpr.log"); };
destination user { file("/var/log/user.log"); };
destination mail { file("/var/log/mail.log"); };
destination mailinfo { file("/var/log/mail.info"); };
destination mailwarn { file("/var/log/mail.warn"); };
destination mailerr { file("/var/log/mail.err"); };
destination newscrit { file("/var/log/news/news.crit"); };
destination newserr { file("/var/log/news/news.err"); };
destination newsnotice { file("/var/log/news/news.notice"); };
destination debug { file("/var/log/debug"); };
destination messages { file("/var/log/messages"); };
destination console { usertty("root"); };
destination console_all { file("/dev/tty12"); };
destination xconsole { pipe("/dev/xconsole"); };
#create filters
filter f_authpriv { facility(auth, authpriv); };
filter f_syslog { not facility(authpriv, mail); };
filter f_cron { facility(cron); };
filter f_daemon { facility(daemon); };
filter f_kern { facility(kern); };
filter f_lpr { facility(lpr); };
filter f_mail { facility(mail); };
filter f_user { facility(user); };
filter f_debug { not facility(auth, authpriv, news, mail); };
filter f_messages { level(info..warn)
and not facility(auth, authpriv, mail, news); };
filter f_emergency { level(emerg); };
filter f_info { level(info); };
filter f_notice { level(notice); };
filter f_warn { level(warn); };
filter f_crit { level(crit); };
filter f_err { level(err); };
filter f_failed { match("failed"); };
filter f_denied { match("denied"); };
#connect filter and destination
log { source(src); filter(f_authpriv); destination(authlog); };
log { source(src); filter(f_syslog); destination(syslog); };
log { source(src); filter(f_cron); destination(cron); };
log { source(src); filter(f_daemon); destination(daemon); };
log { source(kernsrc); filter(f_kern); destination(kern); };
log { source(src); filter(f_lpr); destination(lpr); };
log { source(src); filter(f_mail); destination(mail); };
log { source(src); filter(f_user); destination(user); };
log { source(src); filter(f_mail); filter(f_info); destination(mailinfo); };
log { source(src); filter(f_mail); filter(f_warn); destination(mailwarn); };
log { source(src); filter(f_mail); filter(f_err); destination(mailerr); };
log { source(src); filter(f_debug); destination(debug); };
log { source(src); filter(f_messages); destination(messages); };
log { source(src); filter(f_emergency); destination(console); };
#default log
log { source(src); destination(console_all); };
|
Konfiguracja syslog-ng jest dość łatwa, ale z powodu ogromnych rozmiarów całego
pliku łatwo przegapić coś ważnego. Autor wciąż obiecuje dodatkowe opcje, jak na
przykład szyfrowanie, uwierzytelnianie, kompresja czy kontrola MAC (Mandatory
Access Control). Z tymi opcjami program będzie idealnym narzędziem do logowania
ruchu sieciowego, bo uniemożliwi włamywaczom szpiegowanie logów.
Ogromną zaletą syslog-ng jest również to, że nie musi być uruchamiany z prawami
roota.
1.
Analiza logów przy pomocy logcheck.
Oczywiście uniemożliwienie dostępu do logów to tylko połowiczne zwycięstwo.
Aplikacje takie jak logcheck znacznie ułatwiają ich codzienną analizę. Logcheck
to skrypt powiązany z plikiem binarnym o nazwie logtail, który jest
zwykle uruchamiany z demona cron i dzięki zestawowi prostych reguł sprawdza logi
pod kątem występowania podejrzanych wyrażeń. Jeśli coś takiego wystąpi wysyła
e-mail na skrzynkę roota.
Logchek i logtail są częścią pakietu app-admin/logsentry.
Do filtrowania ważnych wpisów w logach logcheck używa informacji z czterech
plików. Te pliki to logcheck.hacking, który zawiera znane
wiadomości opisujące atak, logcheck.violations, który zawiera
wzory naruszeń bezpieczeństwa, logcheck.violations.ignore z
informacjami pozwalającymi na zdefiniowanie często występujących, omyłkowo
branych za ataki wpisów w logach oraz logcheck.ignore, który
pozwala na ich zignorowanie.
Ostrzeżenie:
Nigdy nie należy zostawiać pliku logcheck.violations.ignore
pustego. Logcheck używa programu grep do analizy logów, a niektóre jego
wersje mogą nie zadziałać poprawnie w takim wypadku i wszystkie naruszenia
ochrony zostaną zignorowane.
|
|