|
1.
Introducere
Jurnalizarea suplimentară ar trebui să fie adăugată pentru a cuprinde
avertismentele sau erorile ce pot să indice un atac în desfăşurare sau o
compromitere reuşită. Deseori, atacatorii scanează sau probează înainte de a
ataca.
Este, de asemenea, vital ca fişierele dvs. de jurnalizare să fie uşor citibile
şi manipulabile. Gentoo Linux vă permite să alegeţi între 3 nivele de
jurnalizare diferite în momentul instalării.
1.
Jurnalizarea: Syslogd
Syslogd este cel mai utilizat sistem de jurnalizare pentru Linux şi, în
general, pentru Unix. Acesta deţine unele facilităţi pentru rotirea fişierelor
jurnal, dar utilizarea /usr/sbin/logrotate prin intermediul cron
(logrotate este configurat din /etc/logrotate.conf) se dovedeşte
mai utilă, deoarece logrotate are multe caracteristici. Cât de des se
poate efectua rotirea fişierelor de jurnal depinde de încărcarea sistemului.
Mai jos, aveţi un fişier syslog.conf standard, cu unele opţiuni
adăugate. Am decomentat liniile cron şi tty şi am adăugat un
server de jurnalizare la distanţă. Pentru îmbunătăţirea securităţii puteţi
adăuga jurnalizarea în două locuri.
Cod 1.1: /etc/syslog.conf |
# /etc/syslog.conf Fişier de configurare pentru syslogd.
#
# Pentru mai multe informaţii consultaţi pagina
# de manual syslog.conf(5).
# Acest fişier este din Debian, îl vom utiliza şi noi de acum încolo
# Daniel Robbins, 5/15/99
#
# Mai întâi câteva fişiere de jurnal standard. Jurnalizăm după funcţie.
#
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
#
# Jurnalizarea pentru sistemul de poştă electronică. Împărţiţi-l pentru a scrie
# mai uşor script-uri de analizare a acestor fişiere.
#
mail.info -/var/log/mail.info
mail.warn -/var/log/mail.warn
mail.err /var/log/mail.err
# Jurnalizarea pentru sistemul de ştiri INN
#
news.crit /var/log/news/news.crit
news.err /var/log/news/news.err
news.notice -/var/log/news/news.notice
#
# Unele fişiere jurnal pentru cuprinderea tuturor informaţiilor.
#
*.=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
#
# Situaţiile critice şi alertele sunt trimise tuturor utilizatorilor autentificaţi.
#
*.emerg *
*.=alert *
#
# Îmi place să mi se afişeze mesaje în consolă, dar doar într-o consolă
# virtuală pe care, de obicei, o las nefolosită.
#
daemon,mail.*;\
news.=crit;news.=err;news.=notice;\
*.=debug;*.=info;\
*.=notice;*.=warn /dev/tty8
# Setarea unui server de jurnalizare la distanţă
*.* @logserver
# Pipa denumită /dev/xconsole este utilizată pentru utilitarul `xconsole'. Pentru a
# o folosi, trebuie să invocaţi `xconsole' cu opţiunea `-file' option:
#
# $ xconsole -file /dev/xconsole [...]
#
# NOTĂ: ajustaţi lista următoare, sau veţi avea probleme în cazul în care aveţi
# un site destul de încărcat..
#
#daemon.*,mail.*;\
# news.crit;news.err;news.notice;\
# *.=debug;*.=info;\
# *.=notice;*.=warn |/dev/xconsole
local2.* --/var/log/ppp.log
|
Cel mai probabil, atacatorii vor încerca să îşi şteargă urmele prin editarea
sau ştergerea fişierelor de jurnalizare. Le puteţi îngreuna acţiunile prin
jurnalizarea într-unul sau mai multe server-e de jurnalizare pe alte maşini.
Pentru a afla mai multe informaţii despre syslogd, puteţi rula man
syslog.
1.
Metalog
Metalog de Frank Dennis nu
poate jurnaliza pe un server la distanţă, dar este avantajos în momentul în
care sunt luate în calcul performanţa şi flexibilitatea jurnalizării. Poate
jurnaliza după numele aplicaţiei, urgenţă, funcţie (ca syslogd), şi deţine un
modul de căutare cu expresii regulate cu care puteţi lansa aplicaţii externe
când anumite combinaţii potrivite. Este foarte bun la acţionare în momentul în
care este necesar.
Configurarea standard este, de obicei, de ajuns. Dacă doriţi să fiţi notificat
printr-un mesaj de câte ori cineva greşeşte parola, utilizaţi unul din
următoarele script-uri.
Pentru postfix:
Cod 1.1: /usr/local/sbin/mail_pwd_failures.sh pentru postfix |
#! /bin/sh
echo "$3" | mail -s "Warning (program : $2)" root
|
Pentru netqmail:
Cod 1.1: /usr/local/sbin/mail_pwd_failures.sh pentru netqmail |
#!/bin/sh
echo "To: root
Subject:Failure (Warning: $2)
$3
" | /var/qmail/bin/qmail-inject -f root
|
Amintiţi-vă să faceţi script-ul executabil prin executarea /bin/chmod +x
/usr/local/sbin/mail_pwd_failures.sh
Apoi, decomentaţi linia de sub "Password failures" din
/etc/metalog/metalog.conf ca:
Cod 1.1: /etc/metalog/metalog.conf |
command = "/usr/local/sbin/mail_pwd_failures.sh"
|
1.
Syslog-ng
Syslog-ng are aproape aceleaşi caracteristici ca syslog şi metalog cu o mică
diferenţă. Poate filtra mesajele pe baza nivelului şi conţinutului (ca
metalog), oferă jurnalizare la distanţă, ca syslog, poate manipula jurnale din
syslogd (chiar şi fluxurile de caractere - eng. streams - din Solaris), să
scrie în terminal, să execute programe, şi să se comporte ca un server de
jurnalizare. În fapt, este cel mai bun dintre cele două sisteme de jurnalizare
combinat cu o configuraţie avansată.
Aveţi mai jos un fişier de configurare clasic, puţin modificat.
Cod 1.1: /etc/syslog-ng/syslog-ng.conf |
options { chain_hostnames(off); sync(0); };
#sursa de unde să citească jurnalele
source src { unix-stream("/dev/log"); internal(); };
source kernsrc { file("/proc/kmsg"); };
#definirea destinaţiilor
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"); };
#crearea filtrelor
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"); };
#conectarea filtrelor şi destinaţiilor
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); };
#jurnalul implicit
log { source(src); destination(console_all); };
|
Syslog-ng este foarte uşor de configurat, dar şi foarte uşor de omis ceva în
fişierul de configurare, deoarece este mare. Autorul încă promite unele
caracteristici în plus, cum ar fi encripţia, autentificarea, compresia şi
controlul MAC (Mandatory Access Control - Controlul Accesului Obligatoriu). Cu
aceste opţiuni, va fi un sistem de jurnalizare în reţea perfect, deoarece un
atacator nu poate spiona jurnalul.
Şi syslog-ng mai are un alt avantaj: nu trebuie rulat ca root!
1.
Analiza jurnalelor cu Logcheck
Bineînţeles, păstrarea tuturor jurnalelor separat este doar jumătate din toată
munca. O aplicaţie precum Logcheck, poate efectua analize de jurnal regulate
mult mai uşor. Logcheck este un script însoţit de un binar denumit
logtail, ce rulează prin intermediul aplicaţiei dvs. cron şi verifică
jurnalele după unele reguli ce definesc activitatea suspectă. Apoi, acesta
trimite ceea ce afişează prin poştă electronică utilizatorului root.
Logcheck şi logtail fac parte din pachetul app-admin/logsentry.
Logcheck utilizează patru fişiere pentru a filtra intrările importante din
fişiere de cele neimportante. Aceste fişiere sunt
logcheck.hacking, ce conţine mesaje legate de mesaje de atac
cunoscute, logcheck.violations, ce conţine combinaţii indicând
violări ale securităţii, logcheck.violations.ignore, ce conţine
cuvinte cheie ce pot fi găsite prin intermediul fişierului de violări,
permiţând intrărilor normale să fie ignorate şi logcheck.ignore,
care conţine modele ale acelor intrări care trebuie ignorate.
Atenţie:
Nu lăsaţi fişierul logcheck.violations.ignore gol. Logcheck
utilizează grep pentru a analiza jurnalele, unele versiuni ale acestuia
considerând un fişier gol ca fiind orice. Astfel, toate violările vor fi
ignorate.
|
|