jackapple
Goto Top

Script bzw. Tool zum Echtzeitmonitoring von Logfiles

Ich suche nun seit knapp einer Woche wie ein Irrer durchs Netz und verzweifel so langsam. Ich brauche ein Script oder Tool womit ich die Logs von Snort in Echtzeit nach Alarmen durchsuchen kann. Wenn ein Alarm im Log auftritt soll über die IP via Policy Based Routing der Traffic des vermeintlichen Angreifers anschließend in ein bestehendes Honeynet umgeleitet werden.

Basis des Systems ist Ubuntu Server 14.04 LTS. Wenn jemand ne Antwort oder auch nur einen Tipp hat wäre ich schon dankbar.

Content-Key: 294995

Url: https://administrator.de/contentid/294995

Ausgedruckt am: 28.03.2024 um 16:03 Uhr

Mitglied: Snowman25
Snowman25 03.02.2016 um 11:56:51 Uhr
Goto Top
Hallo @JackApple,

Idee: Log via tail -fn0 (zeigt kontinuierlich nur neue Zeilen an) nach dem entsprechenden Alarm suchen, via grep -q (-q beendet den grep nach dem ersten Fund) durchsuchen, dann die Aktionen durchführen und das Skript neu starten.

ungetestet:
#!/bin/bash
tail -fn0 /var/log/snort/alert | grep -q '\[\*\*\]'  
if [ $? -eq 0]
	\\ Connection auf Honeypot umleiten
	\\ danach starten wir neu
	exec $0
else
	\\ Irgendetwas ist mit der Datei, dem Grep o.ä. passiert, was nicht hätte passieren dürfen, also starten wir neu:
	Echo Return code was $?. restarting
	exec $0
fi

Gruß,
@Snowman25
Mitglied: JackApple
JackApple 03.02.2016 um 12:04:27 Uhr
Goto Top
So ne ähnliche Lösung habe ich schonmal im Netz gefunden aber bei der Umsetzung hat er sich dann bei mehreren Alerts entweder überschlagen oder nur einen berücksichtigt. Beides ist ja nicht Sinn und Zweck der Sache. Zudem muss es zwingend in Echtzeit laufen, da der Log sich minütlich leert und für Snorby in MySQL umgesetzt wird.
Mitglied: Snowman25
Snowman25 03.02.2016 um 12:24:55 Uhr
Goto Top
Hallo,

In dem Fall brauchst du einen Listener, der ständig das log liest und auch keine Unterbrechungen im Millisekunden-Bereich macht (wie mein Beispiel).
Möchtest du bei der Skript-Form bleiben, musst du die Honeynet-Umleitung in einem anderen Prozess machen. Das geht einfach, indem du die Umleitung in ein anderes Skript auslagerst und dann mit /path/to/script argument & aufrufst. Wichtig ist dabei das & am Ende des Aufrufs.

Ich muss jetzt trotzdem noch kurz anmerken: Der ELSE-Block in meinem Beispiel wird wohl nie ausgeführt. TAIL -F stört sich nicht daran, wenn das File gelöscht wird oder sonst etwas damit passiert. Beim Löschen geht der Deskriptor in einem Zombie-Modus über, in dem er garnichts mehr einliest. Auch nicht bei neu-erstellung der Datei.
Ausserdem: Das TAIL-F | GREP -Konstrukt beendet sich erst nach der nächsten eingelesenen Zeile von tail.
Ich weiß nicht, wieviele Zeilen im Alert-Skript generell so auftauchen und ob nach jeder Zeile mit [**] auch immer noch eine weitere Zeile kommt. Hier KÖNNEN also Verzögerungen auftauchen, muss aber nicht.
Abgesehen davon sollte die Erkennung aber sehr zügig sein.

Gruß,
@Snowman25
Mitglied: JackApple
JackApple 03.02.2016 um 12:33:57 Uhr
Goto Top
Die Umleitung wird relativ simpel realisiert. Einfach via Script eine SSH-Verbindung zum Router aufbauen und einen Befehl für Shorewall absetzen. Das könnte ich problemlos auch in ein anderes Script auslagern, auf das ich dann einfach zugreife.

Die ganze Sache ist mein Abschlussprojekt für den FiSi.
Mitglied: Snowman25
Snowman25 03.02.2016 um 13:36:18 Uhr
Goto Top
Wenn du nicht über das Skript gehen möchtest ist eine andere Lösung, die ich jetzt schon öfters gelesen habe, dass du SNORT so konfigurierst, dass es nach syslog schreibt und einen syslog-ng Filter einsetzt, welcher dann deine gewünschte Routine ausführt, sobald der Filter zutrifft.
Damit übersiehst du auf jeden Fall keine Pakete, könnte sich aber als wesentlich komplexer erweisen.
Mitglied: JackApple
JackApple 03.02.2016 um 15:52:14 Uhr
Goto Top
werde ich die Tage mal probieren. Danke dir =)