|
1.
Johdanto
Lokien käyttöä pitäisi lisätä sellaisten varoitusten ja virheiden osalta,
mitkä paljastaisivat hyökkäyksiä tai onnistuneita tietoturvamurtoja. Hyökkääjät
usein skannaavat kohteen ennen hyökkäystä.
Lokien pitää tätä varten olla myös helposti luettavissa ja hallittavissa.
Gentoon Linuxissa on saatavilla kolme eri lokijärjestelmää.
1.
Syslogd
Syslogd on yleisin Linuxissa ja Unixeissa käytetty loki. Se osaa joitain
lokien kierrätystoimintoja, mutta /usr/sbin/logrotaten käyttö
cronin kanssa (logrotaten asetukset tiedostossa
/etc/logrotate.conf) voivat monine ominaisuuksineen olla
järkevämpi vaihtoehto. Lokien kierrätyksen tiheys kannattaa päättää
järjestelmän taakan mukaan.
Alla on esitetty oletusarvoinen syslog.conf muutamin lisäsäädöin.
Cronin ja tty:n rivit on otettu käyttöön ja lisätty etäloki.
Lisäturvallisuutta saisi lisäämällä lokin kahteen paikkaan.
Koodilistaus 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
|
Hyökkääjät yrittävät yleensä poistaa jälkensä muokkaamalla tai poistamalla
lokeja. Jos lokeja lähetetään yhteen tai useampaan etäpalvelimeen, niiden
sotkeminen on hankalampaa. Lisätietoja syslogd:stä on on ohjesivulla
man syslog.
1.
Metalog
Frank Dennisin Metalog ei
pysty kirjaamaan etäpalvelimelle, mutta sisältää joitain suorituskyky- ja
kirjausominaisuuksia. Se voi kirjata ohjelman nimen, tärkeyden tai lokitavan
(kuten syslogd) mukaan, ja voi käyttää säännöllisiä ilmauksia täsmäämiseen.
Täsmäysten perusteella voi valita käytettäviä skriptejä silloin kun tarvitaan.
Oletusasetukset ovat enimmäkseen riittävät. Jos lokit haluaa sähköpostitse
virheen sattuessa, voi käyttää seuraavanlaisia skriptejä.
Postfix:
Koodilistaus 1.1: /usr/local/sbin/mail_pwd_failures.sh for postfix |
#! /bin/sh
echo "$3" | mail -s "Warning (program : $2)" root
|
Netqmail:
Koodilistaus 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
|
Skripti pitää asettaa suoritettavaksi komennolla /bin/chmod +x
/usr/local/sbin/mail_pwd_failures.sh
Asetustiedostossa /etc/metalog/metalog.conf pitää myös ottaa
käyttöön Password failures -kohdan asetus:
Koodilistaus 1.1: /etc/metalog/metalog.conf |
command = "/usr/local/sbin/mail_pwd_failures.sh"
|
1.
Syslog-ng
Syslog-ng:ssä on samat ominaisuudet kuin syslogissa ja metalogissa hyvin pienin
eroavaisuuksin. Se osaa metalogin tavoin suodattaa viestejä ja sisältää
etälokikirjoitusmahdollisuuden kuten syslog. Se osaa käsitellä lokeja
syslogd:ltä (myös Solarikselta tulevia virtoja), kirjoittaa terminaalille,
suorittaa ohjelmia ja toimia lokipalvelimena. Periaatteessa siinä on siis
molempien toisten lokien paremmat puolet ja monipuoliset asetukset.
Alla on hieman muunneltuna perusasetusto.
Koodilistaus 1.1: /etc/syslog-ng/syslog-ng.conf |
options {
chain_hostnames(no);
stats_freq(43200);
};
source src {
unix-stream("/dev/log" max-connections(256));
internal();
};
source kernsrc { file("/proc/kmsg"); };
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 console_all { file("/dev/console"); };
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 { message("failed"); };
filter f_denied { message("denied"); };
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); };
log { source(src); destination(console_all); };
|
Koodilistaus 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); };
|
Syslog-ng on helppo asettaa, mutta asetustiedostosta voi myös helposti unohtaa
tärkeitä osia, koska se on valtava. Syslog-ng:n tekijä on luvannut myös
lisää ominaisuuksia, kuten salausta, todennusta, pakkausta ja MAC-asetuksia.
Näillä mahdollisuuksilla se sopii täydellisesti etälokiksi, koska hyökkääjä
ei voi vakoilla lokeja silloin.
Syslog-ng:llä on myös se etu, ettei sitä välttämättä suoriteta rootina.
1.
Lokien tarkastus Logcheckillä
Lokien säilyttäminen sinänsä ei välttämättä riitä paljoon. Logcheckin kaltaiset
sovellukset auttavat lokien selvittelyssä. Logcheck koostuu skriptistä ja
logtail-sovelluksesta, jotka suoritetaan cronin avulla ja jotka
etsivät lokeista epäillyttäviä kohtia annettujen sääntöjen mukaisesti. Tulokset
postitetaan tarkastuksen loputtua rootille.
Logcheck ja logtail kuuluvat pakettiin app-admin/logsentry.
Logcheck käyttää neljää asetustiedostoa suodattamaan lokeista sisältöä.
Logcheck.hacking sisältää tunnettuja tietomurtoyritysviestejä,
logcheck.violations sisältää tietoturvaongelmia sisältäviä
viestejä, logcheck.violations.ignore sisältää tietoturvaviestejä
violations-tiedostosta, jotka on sallittua ohittaa, ja
logcheck.ignore sisältää viestejä jotka voi yleensäkin ohittaa.
Varoitus:
Tiedostoa logcheck.violations.ignore ei saa jättää tyhjäksi.
Logcheck käyttää grepiä lokien tutkimiseen, ja jotkin versiot hyväksyvät
tyhjän merkkijonon jokerimerkiksi, joka ohittaa kaikki
tietoturvaongelmaviestit.
|
|