Le violazioni negli accessi di sistema

Posted On 07 Apr 2010
Comment: Off

linuxtutorialTutorial Linux – Uno dei modi per verificare, ed eventualmente scoprire, se un computer sia stato oggetto di tentativi indesiderati d’accesso, è quello di ricercare le informazioni nei file di log, accertandosi che nessuno si sia intromesso nel nostro sistema, nell’assenza di manomissioni agli stessi file.
Cercare eventi di questo tipo nei vari file è un operazione laboriosa, che può richiedere ore, se non qualche giorno, a seconda delle dimensioni dei log e della tipologia di eventi che ricerchiamo.
Per tale scopo sarebbe utile poter disporre di un programma che, eseguito ciclicamente, estragga dalle informazioni contenute nei vari file di log del sistema solo quelle relative ad eventi anomali o collegati a tentativi d’accesso non autorizzati e li invii ad un indirizzo di posta (generalmente all’amministratore del sistema), dopo averli ordinati e organizzati per tipologia.

Logcheck: lo scova intrusi
Per le finalità appena descritte utilizzeremo uno script di shell che si chiama logcheck, sviluppato da Craig Rowland. Le moderne distribuzioni contengono questo strumento, ma per l’ultima versione si consiglia di visitare siti come RPM Find – http://rpmfind.net.
Oltre alle distribuzioni Gnu/Linux, è possibile installare ed utilizzare questo software per altri sistemi operativi del ceppo Unix (FreeBSD, BSDI, Sun, HPUX, Digital-OSF/1, Irix) scaricando quanto serve da:

 

http://logcheck.org/

 

Per l’installazione è necessario essere utente root e digitare:

 

$ rpm -ivh logcheck-1.3.13-4.i386.rpm

 

Se vogliamo visualizzare la lista dei file che sono stati installati sulla nostra macchina, occorre eseguire il comando “rpm -qil logcheck”. I principali file che saranno listati devono essere i seguenti:

 

/usr/share/doc/logcheck-1.3.13
/var/logcheck
/usr/bin/logtail
/etc/logcheck/hacking
/etc/logcheck/violations
/etc/logcheck/violations.ignore
/etc/logcheck/ignore
/usr/bin/logcheck.sh
/etc/cron.hourly/logcheck

 

Esaminiamo quelli più importanti.

 

/usr/share/doc/logcheck-1.3.13

 

contiene i file di documentazione relativi al pacchetto (README, INSTALL, CHANGES, ecc.);

 

/var/logcheck

 

è utilizzata come directory d’appoggio del file di log temporaneo, creato durante l’esecuzione di logcheck; questo file è costituito dall’accodamento di tutti i log di sistema che vogliamo controllare ed è cancellato al termine dell’esecuzione dello script;

 

/usr/bin/logtail

 

logtail è un programma, eseguito all’interno della script logcheck.sh, in grado di memorizzare il puntatore relativo all’ultima riga del file di log esaminato, ed è possibile utilizzarlo anche per altri file di tipo testuale, nel caso vi serva una funzione di questo tipo. Durante le successive esecuzioni dello script, le righe dei file di log che sono già state lette in precedenza, saranno scartate. Per ogni file di log sarà creato, nella stessa directory, un corrispondente file “########.offset”, dove ####### è lo stesso nome del file di log esaminato; questo file conterrà un valore numerico riferito all’ultima riga letta;

 

/etc/logcheck/hacking

 

contiene stringhe di caratteri che, se trovate nei file di log, sono riportate nel messaggio di posta elettronica inviato e sono presentate alla fine in una sezione con il titolo “Active System Attack Alerts”;

 

/etc/logcheck/violations

 

in questo file troviamo parole e stringhe che in genere sono contenute in eventi considerati “negativi”; record di log contenenti parole come “denied” e “refused” attivano durante l’esecuzione di logcheck righe di report nella sezione “Security Violations”. E’ possibile in ogni caso che tali eventi, anche se segnalati, possano essere accettati (ad esempio un utente che ha sbagliato la propria password durante la procedura d’accesso al sistema);

/etc/logcheck/violations.ignore

 

supponiamo che una stessa stringa di caratteri sia contenuta in due diversi record di log, ma che solo uno di questi debba essere riportato come violazione al sistema. Possiamo utilizzare il file violations.ignore allo scopo, chiarendo questo concetto l’esempio riportato di seguito.

 

Violations.ignore in pratica

 

Poniamo di avere due record di log:

Sep 10 21:00:08 localhost sendmail[23123]: GAA03745: to=marvin, ctladdr=root
(0/0), delay=00:00:03, xdelay=00:00:02, mailer=local, stat=refused

Sep 17 17:17:17 localhost rshd: refused connect from [email protected]:1490

Poiché vogliamo che solo la seconda riga di log (quella delle ore 17:17:17) debba attivare un allarme, allora inseriremo la stringa “refused” nel file violations e “mailer=local, stat=refused” nel file violations.ignore

/etc/logcheck/ignore

contiene le stringhe da ignorare e da non indicare in nessuna sezione del report finale; tutte le righe di log contenenti parole che non saranno trovate in nessuno dei quattro file appena visti, utilizzati da logcheck per filtrare i log (hacking, violations, violations.ignore, ignore), saranno aggiunte al report finale all’interno della terza sezione identificata con “Unusual System Events”;

/usr/bin/logcheck.sh

questo script shell è il fulcro delle attività di controllo e contiene al suo interno varie sezioni contenenti le definizioni di variabili relative ai diversi sistemi operativi dove logcheck può essere eseguito. Se vogliamo quindi eseguire logcheck.sh su una macchina con un sistema operativo diverso da Linux, occorre rendere attive (non commentate) solo le righe relative a quel particolare sistema perché, rispetto a quest’ultimo, i comandi utilizzati all’interno dello script possono variare. Ad esempio, in logcheck.sh è definita la variabile MAIL, che può assumere i valori “mail”, “mailx”, “Mail”, rispettivamente per i sistemi operativi Linux, HPUX, Digital-OSF/1.

Script manuale o automatico
Lo script logcheck.sh può essere eseguito manualmente, oppure in modalità automatica, inserendo nella crontab (tabella dei comandi/programmi eseguiti a tempo dal programma cron) quanto segue:

10 07 * * * /usr/bin/logcheck.sh

(per una dettagliata spiegazione dei possibili valori che possono essere assegnati ai campi di crontab usate il comando “man 5 crontab”).
La sequenza logica delle operazioni effettuate dalla script logcheck.sh si può riassumere con seguenti punti:
• è eseguito il programma logtail che accoda i file di log in un unico file temporaneo, prelevando solo le informazioni non ancora trattate da precedenti esecuzioni di logcheck;
• per ogni riga del file di log temporaneo creato, è eseguita una scansione per la ricerca delle stringhe uguali a quelle contenute nel file “hacking”, generando, se trovate, la sezione di report intitolata “Active System Attack Alerts”;
• per ogni riga del file di log è eseguita una scansione per la ricerca delle stringhe uguali a quelle contenute nel file “violations”, scartando, per quelle con confronto positivo, le righe che contengono stringhe di caratteri uguali a quelle contenute in “violations.ignore” e generando la sezione di report intitolata “Security Violations”. Circa la relazione tra “violations” e “violations.ignore”, rivedete l”esempio fatto quando abbiamo parlato di questi due file.
La terza ed ultima sezione del report, “Unusual System Events”, contiene tutte le restanti informazioni di log che non hanno trovato corrispondenza di stringhe nel file ignore, precedentemente visto. Il report sarà spedito all’indirizzo di posta definito nella variabile SYSADMIN.

logcheck-figura-2

Osservando l’immagine precedente, nella sezione “Active System Attack Alerts”, osservando l’evento registrato nei file di log alle ore 20:43:47 è evidente come dall”indirizzo Ip 192.168.0.99 sia stato impartito un comando sendmail di “vrfy”; ciò potrebbe indicare l’attivazione di un processo telnet sulla porta 25 (smtp) per scopi illeciti.
L’evento delle ore 21:49:12, nella sezione “Security Violations”, denuncia il fallito tentativo da parte dell’utente marvin di impartire il comando su (superuser) per ottenere i privilegi dell’amministratore di sistema; in questo caso l’utente marvin aveva sbagliato la password di root.
Nella sezione “Unusual System Events”, infine, si rilevano tre record di log relativi ad operazioni d’autenticazione; sono eventi di normale routine durante l’attività quotidiana dell’utente, ma non essendo stati inseriti nel file “ignore” utilizzato dalla script logcheck, sono comunque inseriti nel report.
Concludendo, logcheck sicuramente può essere uno degli strumenti da utilizzare per implementare una politica di controllo relativa alla sicurezza di un sistema, ma i suoi report devono essere continuamente esaminati e se sospettiamo attività illecita, la frequenza d’esecuzione dello script deve essere aumentata.

About the Author

Related Posts