Linux Basics, Security & Hacking
willi moser (2005-12-12)


 

Linux Security Auditing - Logfiles analysieren

Die eigene Lösung

Je einfacher, desto besser
Warum viele viele Utilities lernen müssen? Es gibt einen einfachen Befehl um die notwendigen Informationen aus den Logfiles zu extrahieren:

grep Suchbegriff Datei

Beispiel 1:

grep http messages > messages_search_http.log

Schreibt nur die Logzeilen in messages_search_http.log die einen Eintrag http haben

 

Beispiel 2:

Das Firewall log hat mittlerweile eine Dateigröße von 2GB. Welcher Texteditor würde das öffnen? Vermutlich keiner.
gut suchen wir die ersten Einträge:

[root@blue log]# tail -n10 kernel > kernel_last_10.log
Dec 11 10:31:31 blue kernel: fp=UDP:2 a=DROP IN=eth1 OUT= MAC=ff:ff:ff:ff:ff:ff:00:01:5c:22:37:8e:08:00 SRC=10.34.214.17 DST=255.255.255.255 LEN=328 TOS=0x00 PREC=0x00 TTL=64 ID=29525 PROTO=UDP SPT=67 DPT=68 LEN=308
Dec 11 10:31:35 blue kernel: fp=UDP:2 a=DROP IN=eth1 OUT= MAC=ff:ff:ff:ff:ff:ff:00:01:5c:22:37:8e:08:00 SRC=10.34.214.17 DST=255.255.255.255 LEN=338 TOS=0x00 PREC=0x00 TTL=64 ID=29857 PROTO=UDP SPT=67 DPT=68 LEN=318
Dec 11 10:31:35 blue kernel: fp=UDP:2 a=DROP IN=eth1 OUT= MAC=ff:ff:ff:ff:ff:ff:00:01:5c:22:37:8e:08:00 SRC=10.34.214.17 DST=255.255.255.255 LEN=338 TOS=0x00 PREC=0x00 TTL=64 ID=29860 PROTO=UDP SPT=67 DPT=68 LEN=318
Dec 11 10:31:35 blue kernel: fp=UDP:2 a=DROP IN=eth1 OUT= MAC=ff:ff:ff:ff:ff:ff:00:01:5c:22:37:8e:08:00 SRC=10.34.214.17 DST=255.255.255.255 LEN=338 TOS=0x00 PREC=0x00 TTL=64 ID=29873 PROTO=UDP SPT=67 DPT=68 LEN=318
Dec 11 10:31:36 blue kernel: fp=UDP:2 a=DROP IN=eth1 OUT= MAC=ff:ff:ff:ff:ff:ff:00:01:5c:22:37:8e:08:00 SRC=10.34.214.17 DST=255.255.255.255 LEN=328 TOS=0x00 PREC=0x00 TTL=64 ID=29964 PROTO=UDP SPT=67 DPT=68 LEN=308
Dec 11 10:31:36 blue kernel: fp=UDP:2 a=DROP IN=eth1 OUT= MAC=ff:ff:ff:ff:ff:ff:00:01:5c:22:37:8e:08:00 SRC=10.34.214.17 DST=255.255.255.255 LEN=328 TOS=0x00 PREC=0x00 TTL=64 ID=29978 PROTO=UDP SPT=67 DPT=68 LEN=308
Dec 11 10:31:40 blue kernel: fp=UDP:2 a=DROP IN=eth1 OUT= MAC=ff:ff:ff:ff:ff:ff:00:01:5c:22:37:8e:08:00 SRC=10.34.214.17 DST=255.255.255.255 LEN=328 TOS=0x00 PREC=0x00 TTL=64 ID=30406 PROTO=UDP SPT=67 DPT=68 LEN=308
Dec 11 10:31:40 blue kernel: fp=UDP:2 a=DROP IN=eth1 OUT= MAC=ff:ff:ff:ff:ff:ff:00:01:5c:22:37:8e:08:00 SRC=10.34.214.17 DST=255.255.255.255 LEN=328 TOS=0x00 PREC=0x00 TTL=64 ID=30417 PROTO=UDP SPT=67 DPT=68 LEN=308
Dec 11 10:31:44 blue kernel: fp=UDP:2 a=DROP IN=eth1 OUT= MAC=ff:ff:ff:ff:ff:ff:00:01:5c:22:37:8e:08:00 SRC=10.34.214.17 DST=255.255.255.255 LEN=328 TOS=0x00 PREC=0x00 TTL=64 ID=30819 PROTO=UDP SPT=67 DPT=68 LEN=308
Dec 11 10:31:44 blue kernel: fp=UDP:2 a=DROP IN=eth1 OUT= MAC=ff:ff:ff:ff:ff:ff:00:01:5c:22:37:8e:08:00 SRC=10.34.214.17 DST=255.255.255.255 LEN=328 TOS=0x00 PREC=0x00 TTL=64 ID=30829 PROTO=UDP SPT=67 DPT=68 LEN=308
 

 

Übrigens sollte das gar nicht passieren. Das Log könnte folgendermassen gesplittet werden.

im Verzeichnis /etc/cron.daily könnte ein kleines Shell Script abgelegt werden, dass die Logeinträge "Dec 11" auf kernel_dec11 umkopiert und die Einträge "Dec 11" aus kernel log löscht.

Damit ist aber prinzipiell die Auditing Idee über Shell Scripts schon geboren. Denn irregulative lassen sich damit auch relativ leicht durch Shell Scripts erkennen und melden

zum Beispiel:

  [root@blue log]# mail -h
mail: invalid option -- h
Usage: mail [-iInv] [-s subject] [-c cc-addr] [-b bcc-addr] to-addr ...
[- sendmail-options ...]
mail [-iInNv] -f [name]
mail [-iInNv] [-u user]
[root@blue log]#
 
 

Aber ich möchte das lieber wie in Windows mit einem hübschen Dialog und der Maus haben. Hmm - ja ich auch.
Aber BITTE überlegen Sie:

Kennen Sie ein Programm dass nicht weiss welche Parameter es bekommt und was es dann damit anfangen soll?
Das kann es nicht geben!

Die Folge:
Sie haben sehr oft mehr Arbeit damit zu begreifen was der Hersteller des Programmes Ihnen eigentlich sagen wollte als jene Parameter zu implementieren die dann Ihre Lösung liefern soll.

Die Lösung: selber schreiben!
und das, wenn man ein wenig programmieren kann, mit Shell Scripts - davon lebt Linux - darum ist Linux ein System für Programmierer und Freaks!

 

Das ECLF Format

Bei Webserver-Logs (und nicht nur da - z.B. auch messages)  ist zunächst das Format zu beachten: hier sind v.a. das CFL (Common Logfile Format) und das ECLF (Extended Common Logfile Format) anzutreffen. Untenstehendes Beispiel zeigt das ECLF:

host3111.igd.fhg.de - - [01/Jul/2002:01:47:20 -0600] "GET /cp_rollen.htm HTTP/1.0" 200 29642 "http://www.google.de/search?q=werkzeuge+wissensmanagement&hl=de &lr=&ie=UTF-8&start=10&sa=N" "Mozilla/4.78 [en] (Windows NT 5.0; U)"

Vorab interessant: alle nicht zusammengehörenden Angaben sind durch Leerzeichen getrennt, ein Umstand, den man sich beim Preprocessing der Rohdaten zu Nutze machen wird. Hier nun eine genaue Aufschlüsselung der einzelnen Einträge:

Feldname

Bedeutung

Host

IP-Adresse des zugreifenden Servers, i.e. des Client-Providers

Ident

Identifikation (selten vorhanden)

Authuser

Apache Modul für passwortgeschützte Seiten

Date

Datum und Uhrzeit des Zugriffs

Timezone

Abweichung von der Greenwich Mean Time (GMT) in Stunden

Request

Methode (i.d.R. Get und Post), Dokument, Protokoll (im WWW natürlich http und Versionsnr.)

Statuscode

200 = erfolgreich; 404 = Seite nicht gefunden

bytes

Anzahl der übertragenen bytes

Referrer

URL der Seite, von der zugegriffen wurde (oben:Google)

Useragent

verwendeter Browsertyp des Clients; Betriebssystem

Das heißt für unseren Eintrag:

 

Hilfsprogramme zur Linux Logfile Analyse

Tripwire

Host-basiertes IDS (Intrusion Detection System)

Tripwire ist ein Sicherheits-Tools, das eine Datenbank des Filesystems anlegt, um Veränderungen und Manipulationen an Verzeichnissen und Dateien feststellen zu können. Es ist auf Linux-Basis als Open-Source verfügbar, aber auch zusätzlich noch kommerziell unter anderem auch für HP-UX, Solaris und Windows (NT/2000).

Ein host-basiertes IDS analysiert verschiedene Gebiete um Missbrauch (Aktivitäten mit böswilliger oder missbräuchlicher Absicht innerhalb des Netzwerks) oder Einbruch (von außen) festzustellen. Host-basierte IDS konsultieren verschiedene Arten von Log-Dateien (Kernel, System, Server, Netzwerk, Firewall und viele mehr) und vergleichen diese Logs mit einer internen Datenbank, die häufige Signaturen bekannter Attacken enthält. Host-basierte IDS für UNIX und Linux machen starken Gebrauch von syslog und dessen Fähigkeit, geloggte Vorkommnisse je nach Gewichtigkeit einzuteilen (z.B. geringfügige Drucker-Nachrichten im Vergleich zu wichtigen Kernelwarnungen). Der Befehl syslog kann durch die Installation des sysklogd-Pakets angewandt werden, welches in Red Hat Enterprise Linux inkludiert ist. Dieses Paket bietet System-Logging und Kernel-Message-Trapping. Die host-basierten IDS filtern Logs (die im Falle einiger Netzwerk- und Kernel-Event-Logs ziemlich detailliert sein können), analysieren diese, versehen die abweichenden Nachrichten mit einem eigenen Kennzeichen je nach Gewichtigkeit des Vorfalles und sammeln diese in einem bestimmten Log für die Analyse durch den Administrator.

Host-basierte IDS können auch die Datenintegrität wichtiger Dateien und die von ausführbaren Programmen prüfen. Eine Datenbank mit wichtigen Dateien (und allen anderen Dateien, die Sie hinzufügen möchten) wird geprüft, und eine Prüfsumme jeder Datei über ein Programm wie md5sum (128-bit Algorithmus) oder sha1sum (160-bit Algorithmus) erstellt. Das host-basierte IDS speichert diese Summen in einer Nur-Textdatei und vergleicht in periodischen Abständen die Prüfsummen mit den Werten in der Textdatei. Stimmen die Prüfsummen der Datei nicht überein, warnt das IDS den Administrator per E-Mail oder Mobiltelefon-Pager. Dieser Vorgang wird von Tripwire verwendet, der in Abschnitt 9.2.1 näher beschrieben wird.

Tripwire ist das beliebteste host-basierte IDS für Linux. Tripwire, Inc., die Entwickler von Tripwire, haben vor Kurzem den Software-Quellcode für die Linux-Version geöffnet und unter der GNU General Public License lizenziert. Tripwire ist unter http://www.tripwire.org/ erhältlich.

 

Was macht Tripwire?

Also in erster Linie nachschauen ob irgendwelche Dateien verändert wurden und dann bei einem mittleren System ein tägliches Report Mail von rund 13000 Zeilen an den Administrator schicken ;-( 

Volles Log zur Ansicht

 

LogWatch

Sicherheitshinweis: Schwachstelle in logwatch - RHSA-2005:364-01

Volles Log zur Ansicht

 

Netfilter

Das Netfilter Logformat: http://logi.cc/linux/netfilter-log-format.php3
Online Analyser für 10 Zeilen: http://logi.cc/linux/NetfilterLogAnalyzer.php3 (Nett aber nur als Demo)

 

 

Webserver Logfile-Analyzer

 


Linux Basics, Security & Hacking
willi moser (2005-12-12)