Archiv für die '3-err 'Kategorie

Sind virtualisierte Systeme mehr oder weniger sicher?

18. Mai 2010

Ich habe die oben genannte Frage gestellt oft genug, dass ich es verdient einen Blog-Post zu spüren. Während vor ein paar Jahren die Antwort mag "weniger sicher", haben heute die Antwort "beides". Ich weiß, klingt wie Chris als unverbindlichen, aber diese Antwort wirklich am genauesten beschreibt den aktuellen Stand der Technik.

Virtualisierung Changes Everything

Ich habe ein paar Leute Bemerkung gehört, dass die Virtualisierung im Begriff, Auswirkungen der Industrie auf dieselbe Weise, dass das Internet in den 90er Jahren haben wird. Um ehrlich zu sein, ich glaube, es ist Verdienst in dieser Meinung. In den frühen 90er Jahren die meisten Leute liefen IPX, AppleTalk, NetBUI und eine Vielzahl anderer Protokolle über geschlossene Netze. Bis Ende der 90er Jahre waren die meisten Leute mit IP ausschließlich mit Anbindung an die ganze Welt. Die Art und Weise haben wir Unternehmen, sowie die Art, wie wir Applied Security, vollständig über die 10 Jahre verändert. Beide Netzwerk-Administration und Sicherheit Fähigkeiten, die Schneide im Jahr 1990 waren alle, aber nutzlos bis 1999.

Virtualisierung beginnt, Rampe bis zu den gleichen Auswirkungen auf die Branche haben. Virtualization Deployment erfordert eine komplette Umdenken, wie die Sicherheit gelten. Zurück in den 1990er Jahren bekam Admins, die einfach in das Internet angeschlossen, ohne Rücksicht darauf, wie dies ihre Auswirkungen auf das Netzwerk, große Zeit verbrannt. Wir stehen Schlange, um ein ähnliches Ergebnis zu sehen, wie Leute treffen Virtualisierung.

What Makes Virtualization Weniger sichere

Die Achillesferse der Virtualisierung ist in der Software selbst ist. Wir hoffen, wir können die Software Gastsysteme voneinander entfernt zu halten, sowie die Host-und / oder Hypervisor vertrauen. Es gibt zwei große Probleme mit dieser Erwartung:

  1. Keine Software ist fehlerfrei
  2. Software kann falsch

Ein paar Jahre zurück Core Research ergab, konnten sie brechen aus einem Gast und volle Kontrolle über den Host-OS . Während ein Hypervisor soll diese Art der Exposition zu begrenzen, haben wir sicherlich Fälle, in denen sogar gesehen den Hypervisor umgangen hat . Wir haben sogar Fälle gesehen, waren Software wird ausgenutzt nur dann, wenn in einer virtualisierten Umgebung laufen . Diese Links zeigen einen kleinen Querschnitt der Virtualisierung Probleme, die in den letzten Jahren entdeckt wurden. Google kann Ihnen eine komplette Liste, wenn Sie interessiert sind.

So eine vorsichtige Security Professional wird, vorsichtig zu sein blind vertrauen Software sicher zu sein. Das Problem ist Anbieter nicht immer die gleiche Vorgehensweise. Nehmen Sie VMware mit ihren ESX (bald ESXi werden) Produkt als ein Beispiel. Viele von uns waren verblüfft, wenn ein VMware Vertreter kündigte an CanSecWest dass es theoretisch unmöglich, die ESX Hypervisor Angriff . Wenn wir einfach davon ausgehen, etwas ist unzerbrechlich, ist jemand kreativer werde einen Weg finden, um durch Punsch .

Einer meiner größten Sorgen mit ESX / ESXi ist, dass VMware hat es modular aufgebaut (über VMsafe ). Auf der positiven Seite bedeutet dies, dass externe Anbieter können Produkte zu schaffen zur Verbesserung der Hypervisor die Funktionalität und Sicherheit. Auf der Sollseite steht das dramatisch erhöht die Chancen schlechter Code wird eingeführt, die die Sicherheit gefährden.

Wir haben ein sehr gutes Beispiel dafür in der Vergangenheit gesehen. Marcus Ranum schuf die Gauntlet Firewall, die zu jener Zeit war eine der sichersten und kick butt Sicherheitseinrichtungen zur Verfügung. Wenn drei Buchstaben Agenturen die beste Sicherheit wollten, wandten sie sich an Gauntlet. Marcus verkauft Gauntlet zu Network Associates (später McAfee), die sofort gestartet Zugabe in Funktionen. Es dauerte nicht lange, bevor eine stetige Reihe von Sicherheitslücken entdeckt wurden, die jeweils durch diese neuen "Features" eingeführt. Von dort verlor das Produkt die Sicherheit cred und rutschte von dem Radar.

Nun ist es sicherlich möglich, neue Features hinzuzufügen und die Dinge zu sichern. Die FreeBSD Leute sind ein hervorragendes Beispiel dafür, wie dies richtig zu tun. Zur Gewährleistung der Sicherheit sie erhalten eine sehr strenge Auditierung . Ist es perfekt? Absolut nicht, aber ihre Audit-Prozess hat die Messlatte für sichere Software-Implementation. Mit etwas Glück VMware tun ähnlich, aber ich habe keine Summen über dies der Fall gehört.

Getting Your Head Gerade

OK, so können wir nicht blind vertrauen Virtualisierungs-Software, um die Angreifer in Schach zu halten. Wir können aber noch treffen Vorkehrungen zur Minimierung der Auswirkungen, wenn das Schlimmste nicht eintreten. Einer der größten Schritte, die Sie machen können, ist sorgfältig zu prüfen, auf welchen Servern gehostet zu bekommen, und was andere Gastsysteme dürfen auf der gleichen Box laufen. Die Sicherheitszone Konzept von Netzwerk-Architekten verwendet wird wie hier anwendbar.

Eine Sicherheitszone ist einfach eine Sammlung von Systemen, die die gleiche relative Risiko zu teilen. Zum Beispiel Web, Name und SMTP-Server sind in der Regel alle auf einer DMZ befinden, weil sie alle haben ähnliche Risiko aus dem direkten Angriff. Auf dem internen Teil des Netzwerks sind Desktops in der Regel in einer anderen Sicherheitszone als die Server gelegt. Dies liegt daran, Server wenig bis gar keine Zugang zum Internet haben, während Desktops sind in der Regel gestattet, direkt zu kommunizieren. Dies stellt den Desktops ein höheres Risiko eines Angriffs über die Server.

Wir können dieses gleiche Logik bei der Umsetzung Virtualisierung. Ein DMZ-Server und einen internen Server sollten nicht die Gäste auf der gleichen Hardware (CPU und Disk-Array) werden. Dies könnte einem Angreifer ermöglichen, eine alternative Route in unser Netzwerk zu schaffen. Anstatt durch eine Firewall passieren, NIDS, NIPS, etc. Geräte, die auf dem Draht bereitgestellt wurde, kann ein Angreifer in der Lage sein, den Zugang zu internen Ressourcen über die Virtualisierungs-Software zu gewinnen. Ist es eine einfache angreifen? Nicht von dem, was wir bisher gesehen haben. Functional Exploits wurden jedoch entdeckt, warum also vorstellen unnötiges Risiko, wenn wir nicht tun müssen.

By the way, sollten diese gleichen Sicherheitszone Regeln, um Ihre virtualisierte Netzwerk Getriebe angewendet werden. Zum Beispiel ist es eine schlechte Idee, die gleichen physischen Switch zu VLAN der DMZ und dem internen Netzwerk verwenden. Ich habe ein paar Kunden zu sehen bekommen whacked so.

What Makes Virtualization Mehr Sicherheit

Zum Glück aus Sicht der Sicherheit ist die Virtualisierung nicht nur schlechte Nachrichten. In der Tat gibt es einige sehr coole Sicherheit Praktiken, die Sie in einer virtualisierten Umgebung anwenden können, dass man einfach nicht ohne sie auskommen. Dies war einer der Gründe, begannen wir mit Virtualisierung innerhalb des Honeynet so früh wie 2000.

Eines der größten Sicherheitsprobleme wir heute gegenüberstehen, ist der Kernel-Ebene Rootkits . Was macht diese Sorte von Malware so heimtückisch ist es effektiv wird das Betriebssystem selbst in Malware. Dies macht Erkennung äußerst schwierig, da alle Sicherheits-Checks durch den Kernel übergeben müssen. Wenn der Kernel selbst gefährdet ist, können wir nicht auf der Kernel angewiesen, um genau zu berichten Sicherheitsinformationen. Wir haben schließlich zum Herunterfahren des Systems, das Laufwerk mounten auf einem bekannten zu reinigen OS sein, und der Erfüllung unserer forensischen Prüfungen von dort aus. Oh natürlich das Problem bei diesem Verfahren ist, dass es nicht gut skalieren. Wenn wir Dutzende oder Hunderte von Servern haben, es gibt einfach nicht genug Zeit, an einem Tag, um sie alle richtig zu überprüfen.

Wie bereits erwähnt, ist VMware nun erlauben Drittanbietern den Zugriff auf den Hypervisor API via VMsafe. Dies ermöglicht den Zugang zu privilegierten Status-Informationen, wie zB Speicher-und Netzwerk-Traffic, auf jedem der Gastbetriebssysteme. Durch Einstecken in den Hypervisor, werden einige extrem cool Sicherheitsoptionen möglich.

Zum Beispiel sagen wir, ein Gast-Betriebssystem von einem Kernel-Ebene Rootkit angegriffen wird. Durch die Analyse von Gast-Speicher, kann das Rootkit von außerhalb der virtuellen Betriebssystem erkannt werden. Bei der Durchführung der Kontrollen über den Hypervisor, es ist weit weniger eine Chance, dass ein Rootkit kann Stealth-Aktivitäten und unentdeckt bleiben. Wie bereits erwähnt, gibt es keine vergleichbare Möglichkeit, mit einem nicht-virtualisierten System.

Die API-Plug schafft auch neue Möglichkeiten für den Umgang mit verschlüsselten Datenverkehr. Wenn Ende zu Ende-Verschlüsselung eingesetzt wird (wie ein VPN), Netzwerk basierte Kontrolle der Application Layer einfach umgangen werden. Ihre einzige wirkliche Möglichkeit war, Agent-Software auf dem Endpunkt ausgeführt wird, könnte so die Sicherheit nach der Entschlüsselung realisiert werden. Natürlich ist das Problem hier ist, dass, wenn der Agent angegriffen wird, werden alle Wetten ausgeschaltet sind. Auch durch Einstecken in den Hypervisor sind wir in einer besseren Position, um sicherer prüfen diese Daten.

Wir fangen gerade erst an Neues zu sehen Produkte, die das VMsafe API-Plug nutzen . Da alle Produkte relativ neu sind, ist noch nicht entschieden, wie effektiv sie sein können. Angebote laufen Schachzug von Ersatz Host-basierte Firewall-und IDS-Schutz in voller Durchsetzung von Richtlinien. Es wird interessant sein zu sehen, wie dieses Produkt Nische heraus schüttelt Laufe des nächsten Jahres.

Zusammenfassung

So wie ich am Anfang dieses Beitrags erwähnt, hat die Virtualisierung die Möglichkeit, Ihre Umgebung mehr oder weniger sicher, je nachdem wie Sie bereitstellen. Wenn Sie starten einfach läuft alles auf einem einzigen Feld, sind Sie wahrscheinlich zu whacked bekommen. Wenn Ihnen die besten Praktiken, die im Laufe der Jahre wurden in die Virtualisierung Reich, sowie Hebel einige der neuen Sicherheits-Features, die freigesetzt werden entwickelt verlängern, können Sie tatsächlich eine bessere allgemeine Sicherheitslage.

Die Kombination Logwatch und OSSEC - Teil 4

18. Februar 2010

In meinem letzten Beitrag haben wir installiert Logwatch sowie OSSEC. Es ist nun Zeit, sich Logwatch und OSSEC spielen zusammen in der gleichen Sandbox. In diesem Beitrag werde ich erörtern, wie Logwatch bekommen, um die Informationen, die von OSSEC generiert zusammenzufassen.

Deployment-Optionen

Wir haben zwei Wege, die wir verfolgen, um dies einzurichten kann:

  1. Haben Logwatch analysieren die OSSEC Logs direkt.
  2. Haben OSSEC senden ihre Ausschreibungen an einen Syslog-Typ-Server laufen dann Logwatch auf dem Syslog-Server.

Der Nutzen für die Option Nr. 1 ist, dass wir nur noch ein System. Logwatch wird auf dem System Hosting der OSSEC Server ausgeführt werden. Das Problem wir in jedoch ausgeführt werden, beinhaltet die OSSEC Alert-Datei. Log-Einträge nicht normalisiert bekommen. Dies bedeutet, das Format kann vom Eintritt bis zum Eintrag zu ändern, und kann sogar über mehrere Zeilen verteilt. Es wird ein wahrer Albtraum zu einem Logwatch Skript, Filter und wird einen Überblick über die Alert-Informationen zu erstellen.

Wenn wir mit der Option # 2 go, benötigen wir ein anderes Feld als unsere zentrale Logging-Server fungieren. Um die OSSEC Server akzeptieren Log-Einträge aus Nicht-Agenten-Systeme, hat es auf UDP/514 hören. Dieser Port wird auch von einem zentralen Logging-Server verwendet, und Sie können nicht zwei Anwendungen den gleichen Port (außer bei Windows, aber Socket ist extrem chaotisch). Auf der positiven Seite, wird der Alarm Einträge normalisiert, wenn sie an den Syslog-Server übertragen werden, so die Schaffung eines Logwatch Zusammenfassung Skript wird viel leichter. Darüber hinaus Logwatch weiß schon über die Standard-Syslog-Dateien, so dass wir weniger Anpassungen zu tun haben.

Schließlich erwähnte ich in einem früheren Beitrag, dass OSSEC nicht entworfen, um eine SIM werden. Das ist, weil es nicht alles aufnehmen, nur die Ereignisse, die einen Alarm generieren. So sind wir wahrscheinlich zu einem zentralen Server sowieso wollen, und es macht Sinn, um es zu speichern die Informationen, die von OSSEC generiert.

Also, wenn es, wie ich Lenkung euch bin auf Option Nr. 2 klingt, bist du absolut richtig. Mit dieser sagte, ich bin eigentlich vor sich geht, um die Option # 1 Deckel, da sie eine weitaus komplexer Setup.

Der Umgang mit Datum / Zeit Stempel

Werfen Sie einen Blick auf die wichtigsten OSSEC logfile und Sie sollten sehen, wie die folgende:

[Root @ fubar logs] # tail -3 / var / ossec / logs / ossec.log

2010.02.18 12.32.05 ossec-rootcheck: INFO: Ending rootcheck scannen.

2010.02.18 14.27.06 ossec-syscheckd: INFO: Starting syscheck scannen.

2010.02.18 14.39.21 ossec-syscheckd: INFO: Ending syscheck scannen.

Beachten Sie die Darstellung des Datums / Uhrzeit-Stempel formatiert ist. Dies ist anders als die meisten Anwendungen, so das erste, was wir tun müssen, ist zu sagen Logwatch, wie man mit diesem Format umgehen. Wir müssen ein Skript, das nennen wir, wenn nötig, die versteht das Format oben gezeigt können.

Beginnen Sie mit dem Umzug in das gemeinsame Verzeichnis scripts:

cd / usr / share / logwatch / scripts / shared

Benutzen Sie Ihre Lieblings-Editor eine Datei namens "applylongdate":

vi applylongdate

Hier ist was Sie in dieser Datei benötigen. Fühlen Sie sich frei zu copy / paste von dieser Seite:

Verwendung Logwatch ': Termine ";

my $ Debug = $ ENV {'LOGWATCH_DEBUG'} | | 0;

$ SearchDate = TimeFilter ('% Y /% m /% d% H:% M:% S');

if ($ Debug> 5) {

print STDERR "DEBUG: Inside ApplyLongDate ... \ n";

print STDERR "DEBUG: Looking For". $ SearchDate. "\ N";

}

while (defined ($ ThisLine = <STDIN>)) {

if ($ ThisLine = ~ m / ^ $ SearchDate / o) {

print $ ThisLine = ~ s / ^ .... \ / .. \ / .. ..:..:.. / /;

print $ ThisLine;

}

}

# Vi: shiftwidth = 3 syntax = perl tabstop = 3 et

Nachdem Sie die Datei speichern, müssen wir jetzt die richtigen Berechtigungen gesetzt:

chmod 755 applylongdate

Konfigurieren Sie die Log-Dateien

Als nächstes müssen wir Logwatch sagen, wo die OSSEC Log-Dateien befinden müssen. Immer, wenn Sie neue Protokolldateien hinzu oder erstellen Sie neue Dienste in Logwatch überwachen, sollten Sie Ihre Änderungen unter der / etc / logwatch Verzeichnis ablegen. Wir werden zwei Konfigurationsdateien erstellen. Der erste übernimmt OSSEC Nachrichten, und die zweite wird OSSEC Warnungen und aktive Reaktion Veränderungen umgehen.

Lassen Sie uns, indem Sie die Konfigurationsdatei für die wichtigsten OSSEC Protokolldatei zu starten:

cd / etc / logwatch / conf / logfiles

vi ossec.conf

Der Inhalt der Datei sollte wie folgt:

LogFile = / var / ossec / logs / ossec.log

* ApplyLongDate =

Sie können nun speichern und die Datei. Als nächstes erstellen wir die Konfigurationsdatei für die restlichen Log-Dateien:

vi ossec-alert.conf

Der Inhalt dieser Datei sollte wie folgt:

LogFile = / var / ossec / logs / active-responses.log

LogFile = / var / ossec / logs / alerts / alerts.log

LogFile = / var / ossec / logs / Firewall / firewall.log

Wenn Sie fertig sind, speichern und schließen. Die Standard-Berechtigungen sollte akzeptabel sein, für unsere Einrichtung.

Konfigurieren OSSEC Dienstleistungen

Als nächstes müssen wir die OSSEC Dienstleistungen zu definieren und zu identifizieren, was wir als einen Titel, wenn die Berichte erzeugt werden nutzen wollen. Hier ist, wie die erste Datei zu erstellen:

cd / etc / logwatch / conf / services

vi ossec.conf

Der Inhalt dieser Datei ist recht einfach:

Title = "OSSEC Messages"

LogFile = ossec

Nach der Fertigstellung können Sie speichern und schließen. Wir müssen noch eine Datei in diesem Verzeichnis zu erstellen:

vi ossec-alert.conf

Der Inhalt dieser Datei sollte:

Title = "OSSEC Alerts"

LogFile = ossec-Alarm

Wenn Sie fertig sind, speichern und schließen wie gewohnt.

Parsen der Einträge

Als nächstes müssen wir Logwatch sagen, wie man die Log-Einträge innerhalb des Berichts-Format. Wir müssen eine Anpassung Skript für jeden Satz von Dienstleistungen zu schaffen. Wir werden mit einem Logwatch mitgelieferten Test-Skript zu starten, nur um sicher alles funktioniert.

Starten Sie, indem Sie in das entsprechende Verzeichnis:

cd / etc / logwatch / scripts / services

Benutzen Sie Ihre Lieblings-Editor, um Ihre erste Skript zu erstellen:

vi ossec

Der Inhalt des Skripts sollte wie folgt:

#! / Bin / bash

# Das ist so schön Skript, das Ihnen den Zeilen wird

# Werden die Verarbeitung und die Berichterstattung über. Es wird zuerst die

# Standard Umgebungsvariablen und dann dauert es STDIN und

# Dump sie gleich wieder heraus zu STDOUT.

# Dies sind die Standard-Umgebungsvariablen. Sie können festlegen,

# Mehr in Ihrem Service-Konfigurationsdatei (siehe oben).

echo "Date Range: $ LOGWATCH_DATE_RANGE"

echo "Detail Level: $ LOGWATCH_DETAIL_LEVEL"

echo "Temp Dir: $ LOGWATCH_TEMP_DIR"

echo "Debug Level: $ LOGWATCH_DEBUG"

# Nun nehmen STDIN und dump es STDOUT

Katze

Erstellen Sie jetzt Ihre zweite Skript:

vi ossec-Alarm

und beinhalten die exakt gleichen Inhalt:

#! / Bin / bash

# Das ist so schön Skript, das Ihnen den Zeilen wird

# Werden die Verarbeitung und die Berichterstattung über. Es wird zuerst die

# Standard Umgebungsvariablen und dann dauert es STDIN und

# Dump sie gleich wieder heraus zu STDOUT.

# Dies sind die Standard-Umgebungsvariablen. Sie können festlegen,

# Mehr in Ihrem Service-Konfigurationsdatei (siehe oben).

echo "Date Range: $ LOGWATCH_DATE_RANGE"

echo "Detail Level: $ LOGWATCH_DETAIL_LEVEL"

echo "Temp Dir: $ LOGWATCH_TEMP_DIR"

echo "Debug Level: $ LOGWATCH_DEBUG"

# Nun nehmen STDIN und dump es STDOUT

Katze

Schließlich müssen wir die entsprechenden Berechtigungen festgelegt:

chmod 755 ossec *

Prüfen des Aufbaus

Der einfachste Weg, um unsere neue Setup-Tests ist es, den Befehl auszuführen:

logwatch | less

Wenn Sie nur um Ihre Änderungen zu sehen, können Sie einen Bericht über jeden Dienst einzeln:

logwatch-Service ossec | less

logwatch-Service ossec-alert | less

Weitere Anpassungen

Wenn Sie alle oben genannten Arbeiten zu erhalten, können Sie sich ganz auf Logwatch zu filtern und zusammenfassen der Log-Einträge zu konzentrieren. Logwatch ist sehr flexibel, und Sie können die Ausgabe, wie Sie wollen. Eines der schönen Dinge über die oben genannten Test-Skript oben ist, dass es zeigt Ihnen genau, was Sie mit der Arbeit haben. So mit ein wenig regulären Ausdruck Magie kann man zusammenfassen, die Einträge, wie Sie für angemessen halten. Für einige Ideen, sehen Sie sich die Dateien befinden sich unter:

/ Usr / share / logwatch / scripts / services

Dies sind die Standardeinstellungen Zusammenfassung Skripte mit Logwatch enthalten. Insbesondere haben Sie einen Blick auf die Dateien "pam" und "sshd". Sie sind gute Beispiele für eine einfache und eine komplexe Reihe von zusammenfassenden Filter.

Wie Sie Ihre Skripte zu entwickeln, achten Sie genau auf die $ LOGWATCH_DETAIL_LEVEL "variable. Dies ermöglicht es Ihnen, den Pegel des Berichts abhängig, wie viel Ausführlichkeit der Nutzer sucht anpassen. Zum Beispiel, während Sie noch in der oben genannten Dienste-Verzeichnis, führen Sie den folgenden Befehl ein:

weniger sshd

Wenn die erste Seite der Inhalt der Datei angezeigt wird, in type:

/ Detail <Eingabe-Taste>

Der Backslash lässt uns suchen Sie die Datei für eine bestimmte Zeichenfolge. In diesem Fall sind wir für das Wort "Detail" suchen. Sobald Sie die Eingabetaste drücken, wird die Suche durch die Datei zu überspringen, bis es die erste Instanz die Zeichenfolge findet. Ein weiterer Höhepunkt ist der Such-String. Im ersten Spiel werden Sie feststellen, dass der Autor die Variable "$ Detail" zugeordnet, die gleiche wie die Variable $ LOGWATCH_DETAIL_LEVEL "werden. Dies ist um sie zu retten Tipparbeit.

Jetzt drücken Sie die Backslash-Taste wieder durch die Enter-Taste. Dies wird durch die Datei in der nächsten Instanz "Detail" zu springen. Sie sollten sehen:

if ($ Detail> = 20) {

$ Users {$ user} {$ host} {$ method} + +;

} Else {

if ($ Host! ~ / $ IgnoreHost /) {

$ Users {$ user} {$ host} {"(alle )"}++;

Hinweis des Autors enthält weitere Informationen, wenn Sie die Details zu 20 (auf halbem Weg zwischen niedrigen und mittleren) oder höher festgelegt ist. Halten Sie springen durch die Datei, und Sie werden weitere Beispiele sehen, wo der Autor diese Technik genutzt.

Jetzt Seite bis zum Ende der Datei, und Sie sollten sehen, diese Aussage:

if (keys% OtherList) {

print "\ n ** Einzigartige Einträge ** \ n";

print "$ _: $ OtherList {$ _} Zeit (s) \ n" foreach keys% OtherList;

}

Dieser Abschnitt ist äußerst wichtig, da sie eine endgültige Catchall ist. Denken Sie an eine Firewall-Richtlinie für einen Moment. Die meisten von uns erstellen eine endgültige Regelung, die sagt: "Wenn ich nicht ausdrücklich erlauben eine Platzrunde durch, deny it". In anderen Worten, wenn etwas Unvorhergesehenes passiert, ist dies, wie ich Sie damit umgehen wollen.

Die obige Aussage dient dem gleichen Zweck beim Parsen der Logfiles. Alle bisherigen "if"-Anweisungen Versuch, eine bestimmte Zeichenfolge in der Log-Eintrag entsprechen, um es richtig zu formatieren. Dieser Eintrag sagt: "Wenn Sie nicht aufeinander abgestimmt sind und einen bestimmten Protokolleintrag gedruckt noch, drucken Sie es aus in einem Abschnitt mit dem Titel" ** Einzigartige Einträge ** ". Dieser Schritt ist sehr wichtig, denn ohne sie werden wir nie sehen unerwartete Einträge. Es ist die unerwartete Einträge, die wahrscheinlich sind die wichtigsten und interessantesten.

Exec Zusammenfassung

Beide OSSEC und Logwatch sind hervorragende kostenlose Tools. OSSEC zeichnet sich warne dich, wenn eine bekannte Angriffsmuster stattfindet. Logwatch ist eine tolle Tool für die Zusammenfassung einer Zeit Brocken meldet so den Menschen tatsächlich machen kann verstehen, was los ist. Durch die Kombination der beiden Tools können Sie eine weitaus robuster Verteidigung eingehende Haltung. Das Ganze wird größer als die Summe der Teile.

Die Kombination Logwatch und OSSEC - Teil 3

17. Februar 2010

In meinen letzten beiden Beiträge diskutierte ich Logwatch und OSSEC, und wie können sie nutzen, um die aktuelle Sicherheitslage zu ergänzen sein. In diesem Teil werde ich erörtern, wie diese beiden Tools zu installieren.

Installieren Logwatch

Logwatch ist recht einfach zu installieren. In der Tat ist es standardmäßig auf vielen Linux-Distributionen installiert, so dass Sie möglicherweise bereits eine Kopie auf Ihrem System. Um zu überprüfen, die Anmeldung als Root ein und versuchen Sie Logwatch mit dem "-v"-Schalter. Wenn Sie sehen:

[Root @ fubar logwatch] # logwatch-v

Logwatch 7.3.6 (released 05/19/07)

Logwatch installiert ist und Sie eine Kopie der neuesten Version. Wenn Sie nicht über die neueste Version, können Sie ihn aus dem Grab Logwatch Download-Seite .

Es gibt drei Varianten von Logwatch, die heruntergeladen werden können; Binaries im RPM-Format, Quelle im RPM-Format oder Quelle in einem Tar ball. Wenn Ihr System unterstützt RPM-Paket-Management, ist die binäre RPM Ihre beste Wahl. Es ist einfach zu installieren und RPM wird nun automatisch die Software aktualisieren, wenn neue Versionen verfügbar sind.

Installieren Logwatch Von RPM

So installieren Sie die binäre Version der RPM, einfach die Anmeldung als Root und navigieren Sie zum Verzeichnis, in dem Sie die RPM-Datei heruntergeladen. Nun führen Sie den Befehl:

rpm-U logwatch-7.3.6-1.noarch.rpm

Vergessen Sie nicht, können Sie die Tab-Taste für die automatische Vervollständigung des Dateinamens verwenden anstatt in die ganze Sache aus.

Installieren Logwatch From Source

Installation aus den Quelltexten ist ein bisschen mehr Zeit in Anspruch. Denken Sie daran, dass im Hinblick auf den Quellcode installieren, müssen Sie bereits über einen Compiler (wie gcc) auf Ihrem System installiert. Melden Sie sich als root und navigieren Sie zu dem Verzeichnis, die Sie heruntergeladen haben die Tar ball. Um das Archiv entpacken, den Befehl auszuführen:

tar xvzf logwatch-7.3.6.tar.gz

Sie werden sehen, eine Verzeichnis-Struktur unter Ihrem aktuellen Standort erstellt und bekomme viele Dateien kopiert in. Wir müssen nun in die oberste Verzeichnis, das erstellt wurde, zu verschieben:

cd logwatch-7.3.6

Damit Logwatch zu laufen, es gibt eine Reihe von Verzeichnissen, die auf Ihrem System erstellt werden müssen. Diese sind in der README in dem aktuellen Verzeichnis dokumentiert. Glücklicherweise enthält Logwatch Installationsskript die ganze Arbeit für Sie tun können. Leider hat das Skript den falschen Berechtigungen festlegen, damit es nicht standardmäßig ausgeführt wird. Das ist ziemlich einfach, aber fix mit dem Befehl chmod:

chmod 500 install_logwatch.sh

Jetzt können wir das Skript ausführen, um unsere System-Setup:

. / Install_logwatch.sh

Vergessen Sie nicht den Punkt am Anfang der Zeile.

Testing Logwatch

So testen Sie Ihre Logwatch Setup, den Befehl auszuführen:

logwatch | less

Sie werden sehen, Ihr Terminal ein leerer Bildschirm angezeigt, aber das ist normal. Sie werden schließlich sehen Logwatch Bericht auf dem Bildschirm, dass Sie durch den "Page Up" und "Page Down"-Tasten navigieren kann gedruckt werden. Wie log dauert es für den Bericht zu zeigen, bis auf dem Bildschirm wird davon abhängen, wie viel Log-Informationen muss analysiert zu bekommen. Es könnte ein paar Sekunden dauern oder ein paar Minuten. In jedem Fall wird es Ihnen eine Chance geben, sich mit dem Bericht-Format vertraut zu machen.

Installieren OSSEC

Wie ich in meinem letzten Beitrag erwähnt, haben Sie zwei Möglichkeiten der Installation mit OSSEC, lokalen oder Client / Server. In diesem Beitrag werde ich auf dem Client / Server-Setup zu konzentrieren, da es ein bisschen komplizierter ist. Wenn Sie eine lokale Installation sind, wählen Sie einfach die "local"-Option während der Installation und überspringen Sie den Abschnitt über das Einrichten eines sicheren Kanals zwischen dem Agenten und dem Server.

Beginnen Sie mit dem Server

OSSEC verwendet Blowfish-Verschlüsselung, um die Kommunikation zwischen dem Client und dem Server zu sichern. Blowfish ist symmetrischer Schlüssel basiert, so dass beide Seiten müssen wissen, was Schlüssel-Wert zu verwenden, um zu kommunizieren. Der Server ist verantwortlich für die Generierung der symmetrischen Schlüssel, so müssen wir die Server-Software zum ersten Mal installieren. Während der Client installieren wir für einen Schlüssel-Wert werden aufgefordert, so offensichtlich müssen wir, dass praktisch vor der Zeit haben werden.

Hier ist eine zeitsparende Spitze. Der Wert des Schlüssels ist lang und fast unmöglich zu erinnern. Der einfachste Weg, um den Wert des Schlüssels aus dem Server-System, um den Agenten-System zu bewegen ist die Verwendung von SSH. Erstellen Sie eine sichere Verbindung zum Server OSSEC, und extrahieren Sie die entsprechende Taste (Richtung siehe unten). In einem zweiten Terminal-Fenster, erstellen Sie eine SSH-Sitzung, um das System, wo Sie die Installation wird der Agent. Wenn der Client installieren Sie auffordert, den Wert des Schlüssels, können Sie einfach copy / paste zwischen den beiden Terminals.

Installation Die OSSEC Server

Die Server-Software ist als Tar Ball, so können Sie eine Kopie der neuesten Version aus dem Grab OSSEC Download-Seite . Sie müssen dann den Inhalt des Tar Ball zu extrahieren:

tar xvzf ossec-HIDS-2.3.tar.gz

Als nächstes in die Verzeichnisstruktur, die Sie gerade erstellt bewegen:

cd ossec-HIDS-2.3

OSSEC bietet eine Installations-Skript, um Sie durch den Prozess der Installation des Servers laufen. Um das Skript zu starten, geben:

. / Install.sh

Vergessen Sie nicht die Zeit zu Beginn des Befehls. Sie werden nun durch eine Reihe von Installationsoptionen aufgefordert werden:

  • Language - Die Standardeinstellung ist Englisch. Ändern Sie nach Bedarf.
  • Bestätigung der Installation - Drücken Sie die Eingabetaste, wenn Sie den Bildschirm gelesen haben.
  • Install-Typ - Geben Sie "Server" ohne die Anführungszeichen ein und drücken Sie Enter.
  • Install location - Übernehmen Sie die Standardeinstellung.
  • E-Mail-Benachrichtigung - Standard ist ja, wählen Sie, wenn Sie E-Mail-Benachrichtigungen wollen. Wenn Sie Ja wählen, werden Sie eine gültige E-Mail-Adresse und Mail-Server gefragt.
  • Überprüfung der Integrität - Standardwert ist yes. Wählen Sie, ob das lokale System in regelmäßigen Abständen für Eingriffe überprüft werden soll.
  • Rootkit-Erkennung - Die Standardeinstellung ist yes. Gute Wahl, da wir ein hohes Maß an Integrität auf diesem System verwalten müssen.
  • Active Response - Standardwert ist yes. Wählen Sie diese Option, wenn Sie in der Lage sein, auf Ereignisse zu reagieren wollen.
  • Firewall Drop - Ermöglicht die OSSEC Server zu verteidigen es sich von selbst, wenn ein direkter Angriff erkannt wird.
  • Weisse Liste - Dies ermöglicht Ihnen, IP-Adressen, von denen mögliche Angriffe ignoriert werden hinzuzufügen. Seien Sie vorsichtig mit dieser Option. Wenn Sie nicht haben Zugriff auf die Konsole, die OSSEC Server, könnte es klug sein, um eine IP-Adresse, die immer bekommen kann in. So sorgen die Quell-IP ist ein zuverlässiges System zu identifizieren.
  • Aktivieren Syslog - Standardwert ist yes. Wählen Sie diese Option, wenn Sie die Protokolle aus, das nicht mittels einer OSSEC Agenten (wie Firewalls, Switches, Router, Access Points, etc.) sammeln können wollen.
  • Log-Dateien zu überwachen - Dieser Bildschirm identifiziert alle lokalen Log-Dateien OSSEC überwacht. Es ist rein Informationen, so dass Sie tun können, ist drücken Sie die Eingabetaste, um daran vorbei zu bewegen. Wenn Sie eine oder mehrere Log-Dateien fehlt in der Liste feststellen, können Sie sie später hinzufügen, um die ossec.conf Datei.

An dieser Stelle OSSEC wird Zugriff auf das lokale Compiler und installieren Sie alle benötigten Dateien auf das System. Wenn Sie fertig sind, können Sie die OSSEC Server mit dem Befehl starten:

/ Var / ossec / bin / ossec-control starten

Definieren OSSEC Agents

Wir sind nicht mit dem OSSEC Server erfolgen nur noch. Als nächstes müssen wir vor, eine beliebige Systeme, die ausgeführt werden, wird die OSSEC Agent (Client-) Software. Dies erfolgt über die manage_agents Befehl. Zunächst aber müssen wir ein bisschen Hausaufgaben machen. Machen Sie eine Liste aller Systeme, die ausgeführt werden, wird die OSSEC Agent-Software. Für jedes System, benötigen Sie einen beschreibenden Namen sowie das System die IP-Adresse.

Nun führen Sie die folgenden von der Kommandozeile aus:

/var/ossec/bin/manage_agents

This will produce the Agent Manager main menu. Press “A” followed by the Enter key to define your first system. Enter a descriptive name for the first system, followed by the system's IP address. Don't worry about the agent ID number. Simply accept the default and OSSEC will auto-assign the next available ID number. Once you confirm the information you entered, you will be returned to the Agent Manager main menu. Repeat the above process for each system that will be running an OSSEC agent.

Generating Keys

Once you have added in all of your systems, it is time to generate encryption keys. This step is also performed with the manage_agents utility. If you closed the tool after the last step, relaunch it now.

Press the “E” key followed by Enter to select the “Extract key for an agent” menu option. You will then be prompted for the ID number of the key you wish to extract. The descriptive names and IP addresses are listed with each ID number, so it should be trivial to identify which one you want. Start with the system you plan to install the agent software onto first.

OSSEC Agent Install On Linux

When installing the agent software on a Linux or UNIX client, you use the exact same Tar ball we used to install the server software. Run the same install script, but this time when you are prompted for the type of install you wish to perform, type in “agent” followed by the Enter key.

The client install has many of the same prompts as the server install. Use the info above to guide you through the process. The prompt that will vary however is that you will be asked to provide the IP address of the OSSEC server. Once complete, OSSEC will access the local complier and install all required files onto the system.

Next we need to import the Blowfish key from the OSSEC server. While still on the agent system, run the command:

/var/ossec/bin/manage_agents

When the Agent Manager menu appears, select “I” to import the Blowfish key.

When the next prompt appears, you need to manually enter the appropriate Blowfish key. Again, if you are running SSH to both systems at the same time, you can simply copy/paste between the two terminals. Make sure the key looks correct, press the Enter key, and then select “y” to confirm that the key looks correct. You will be returned to the Agent Manager menu. Select “q” in order to return to the command line.

Now we simply need to start the OSSEC agent. You can do so by executing the following command:

/var/ossec/bin/ossec-control start

You should see all of the OSSEC agent components start up, followed by a “Completed” message.

OSSEC Agent Install On Windows

OSSEC has a self-extracting executable that will permit you to install the agent software on a Windows system. Simply double click the executable to start the install process. You will be prompted to agree to the license as well as which components you wish to install. Simply follow the prompts till the OSSEC Agent Manager window appears.

Die OSSEC Agent-Manager-Fenster werden Sie nach der IP-Adresse des OSSEC Server-Eingabeaufforderung. Es wird auch dazu aufgefordert, die Blowfish Schlüssel-Wert zu verwenden, so extrahieren Sie die entsprechende Taste auf dem Server und geben Sie den Wert in diesem Feld. Stellen Sie sicher, löschen Sie die Eingabeaufforderung in diesem Bereich vor dem Einfügen in die Blowfish-Taste. Ansonsten Kommunikation mit dem Server kann fehlschlagen.

Als nächstes wählen Sie "Verwalten" aus dem OSSEC Agent-Manager-Menü, indem Sie auf "Start OSSEC" gefolgt. Sie sollten nun den "Status:"-Anzeige zu ändern, um "Running ...".

Testing OSSEC

Sobald Sie den Server und Agent-Software installiert, gestartet und die entsprechenden Tasten konfiguriert, ist es jetzt Zeit, um unser Setup zu überprüfen. Führen Sie den folgenden Befehl auf dem OSSEC-Server:

cd / var / ossec / logs

Und überprüfen Sie die ossec.log Datei:

weniger ossec.log

Überprüfen Sie die Protokolldatei auf Fehler. Ein häufiger Fehler ist, dass OSSEC meldet es können keine E-Mail. Achten Sie darauf, den Mail-Server ausgeführt wird, und dass er die Verbindung akzeptiert. Sobald Sie zufrieden mit dem Server-Setup sind, ist es jetzt Zeit, um die Agenten. Nach unten, um die "Warnungen"-Verzeichnis:

cd-Benachrichtigungen

Und überprüfen Sie die alerts.log Datei:

weniger alerts.log

Genauer gesagt, sind Sie für die Einträge ähnlich den folgenden suchen:

2010 17. Februar 16.09.16 (desktop) 192.168.1.10-> ossec

Regel: 501 (Level 3) -> "New ossec Agenten verbunden."

Src IP: (none)

User: (none)

ossec: Agent gestartet: "test_system-> 192.168.1.10".

Sie sollten einen Eintrag für jedes System, auf dem Sie die Agent-Software.

Mehr To Come

Puh! Das ist mehr als genug für einen Beitrag! In meinem nächsten Beitrag werde ich in die Nutzung Logwatch um alle Alert-Informationen durch OSSEC generiert analysieren zu bekommen.

Die Kombination Logwatch und OSSEC - Teil 2

16. Februar 2010

In meinem letzten Beitrag beschrieb ich, wie Logwatch verwendet werden könnten, um das Protokoll-Review-Prozess zu vereinfachen. In diesem Beitrag werden wir uns OSSEC aussehen und was sie auf den Tisch bringt.

Was ist OSSEC?

OSSEC , die Abkürzung für "Open Source Security" ist ein Host-basiertes Intrusion Detection System (HIDS). In anderen Worten, es ist entworfen, um Attacken oder Verstößen gegen die Richtlinien, ob und wann sie auftreten zu erkennen. Obwohl es nicht die Möglichkeit haben, gegen unbekannte oder 0-Day-Attacken (das wäre Host-basierte Intrusion Prevention werden) zu schützen, enthält es eine Vielzahl von Tools, die Ihnen dabei helfen, einen Einbruch, wenn es auftritt, sowie das Ausmaß kann der Schäden, die verursacht worden ist.

Unterstützte Plattformen

Um die Vorteile der alle Funktionen OSSEC zu bieten hat, müssen Sie einen Agent auf dem zu schützenden System laufen. OSSEC Agenten können auf Windows, Mac OS X, Linux und eine Vielzahl von UNIX-Systemen laufen. Wenn Sie nur in der Log-Analyse Teil interessiert jedoch sind, kann eine noch breitere Palette von Systemen unterstützt werden. Dies schließt Hardware von Cisco und Juniper. Eine Reihe von speziellen Produkten auch wie Checkpoint Firewalls unterstützt, Symantec Anti-Virus, Snort, Squid, und Arpwatch, um nur einige zu nennen.

Wenn Sie OSSEC installieren, müssen Sie zwei Möglichkeiten der Konfiguration, lokale oder Client / Server. Eine lokale Installation wird verwendet, wenn man alles auf einem einzigen System ausgeführt werden müssen. Die Client / Server-Installation ermöglicht die Ausführung einer verteilten Umgebung zu schützen mehrere Systeme gleichzeitig. Während die meisten Einsätze sind Client / Server-Basis, wenn Sie zu geben OSSEC Spin Sie leicht ausgeführt werden kann alles auf einem einzigen Testsystem mit einem lokalen installieren möchten.

Log Analysis

OSSEC beinhaltet eine Log-basierten Intrusion Detection System (LIDS). Dies hat die Fähigkeit, Log-Dateien in Echtzeit überprüfen, während sie für Prüfung bekannte Angriffsmuster. Wenn eine Protokolldatei auf einem geschützten System erzeugt wird, nimmt der Agent Betreuung von sicheren Übertragung der Log (Blowfish-Verschlüsselung mit einem Pre-Shared Secret) an den Server zurück. Der Server kümmert sich dann um die Durchführung der Analyse.

Most log analysis tools process their rules in a linear format. By that I mean if we have 500 rules, rule one is checked, then rule two, then rule three and so on till a match is found or we reach the end of the rule set. OSSEC works a bit differently as it implements a hieratical structure to the rules. Log entries are first classified and then checked only against whichever rules are appropriate. The result is that rather than needing to process all 500 rules, most events will get checked against 10 rules or less. This dramatically reduces the amount of overhead required to process the rule set.

Integrity Checking

OSSEC includes a tool called Syscheck for performing file and directory integrity checking. If you are running a Windows agent, you can also include specific keys within the Windows registry to be monitored as well. File changes can be detected using both MD-5 and SHA-1 hash algorithms. The system is extremely customizable. You can include or exclude single files, or entire directory structures. You can even set a flag to detect new file creation.

The agent software is designed to use a minimal amount of CPU during the integrity check. While this means the check will take longer, it also helps to minimize the performance hit to the system. Hash information is transmitted back to the server. The server then takes care of performing the hash comparison to see if any of the system's critical files have been changed. The server also stores a copy of the integrity check policy, so that if policy changes are made on the agent, they can be detected and reported as well.

Anomaly detection

OSSEC goes far beyond log checking to verify system integrity. Usage policies can be centrally managed from the server, and then pushed out to the appropriate agents. For example you could define a policy regarding which Windows applications are acceptable (Office, Firefox, etc.) and which ones are not (IM client, Skype, etc.). You can even define acceptable configuration options like verifying that NT hashes are being used for password stored but not LanMan hashes.

OSSEC includes a number of other goodies in order to help verify a system's integrity. For example OSSEC has the ability to execute commands from the agent and monitor the output that gets generated. For example you could have the Linux agent execute the “df” command at regular intervals and generate an alert if disk usage exceeds 90%. A Windows example may be to have OSSEC generate an alert whenever file information is written to the alternate data streams area of NTFS.

Active Response

Finally, OSSEC includes the ability to respond when suspicious activity is detected. Responses can be generated from the server or the agent, which ever you specify. Responses can be as benign as generating an e-mail alert, to being as proactive as blocking a remote IP address for a limited amount of time. There are a number of included active response scripts you can draw on, or you can easily write your own.

Secure Architecture

The OSSEC authors have gone to great lengths to secure all of the components within the product. Tasks such as integrity checking are performed on the server, rather than the agent, so the trustworthiness of the hashes cannot be compromised during an attack. Processes are run with the lowest level of permissions possible, and different accounts are used to run each OSSEC component. This means that a compromise of a single application within OSSEC will not immediately lead to a compromise of the full package. Further, most components are run within a chrooted jail so their access to the system is even further restricted.

Final Words

While OSSEC is a powerful tool, it is important to remember that it is a HIDS and not a log management solution. OSSEC can review log entries looking for suspicious patterns, but it will only save alert information. So while OSSEC will not replace your Security Information Management (SIM) solution, it can most certainly augment it. You can easily setup OSSEC to forward all alerts it generates to a central logging server .

While OSSEC is open source software, Trend Micro is primarily developing it. If you need commercial support, you can purchase a support contract through them at a reasonable fee.

More To Come

In my next installment we'll look at installing OSSEC and Logwatch. After that, we'll move into integrating the two together.

Combining Logwatch and OSSEC

February 15th, 2010

I recently had a student ask me a question regarding the integration of Logwatch with OSSEC. I felt like this was a complex and yet cool enough idea that it warranted a series of posts to cover it in full. So over the next few days I'll talk about each of these tools, how to integrate them together, as well as what additional security visibility can be gained once the process is complete.

What Is Logwatch?

Logwatch is an excellent open source tool for generating daily human readable log reports. Log entries tend to fall into one of three categories:

  • Stuff you know is evil
  • Stuff you know is normal and can be safely ignored
  • Everything else

It is that “everything else” category where Logwatch really shines. For the stuff we know is evil, we will setup some form of alerting system. For example we may write an alert signature that warns the security analyst when an account is being brute forced. But what about the attacks we don't know about or are not sure what they look like? This would be a clear example of that “everything else” category. The traffic is not normal, but we have not seen it before to have a signature waiting to generate an alert. Since we will be unable to catch the attack in real time, we will need to catch it during a daily log review.

Of course the problem with doing daily log reviews is that it is tedious and time consuming. I mean let's be honest, who really wants to spend their day reviewing one million plus log entries? Even if you did, are you sure you would actually catch the out of the ordinary traffic?

Wie es funktioniert

What Logwatch does very well is permit you to reorganize your data into a format that is easier for humans to follow. Its real strength is that it permits you to move the stuff you understand out of the way (normal or evil), so that the unexpected log entries stand out like a sore thumb. In other words, Logwatch lets you summarize your log entries so the unusual stuff is easier to spot.

What I really love about Logwatch is that you don't lose anything. Many log review tools will only show you the stuff that has been pre-defined as being evil. The problem they all share is that when something evil but unexpected happens, it flies right under the wire. Because Logwatch lets you see everything, you no longer miss the unexpected.

Logwatch In Action

Lets discuss how Logwatch works using the SSH server service as an example. The scripts to deal with SSH have already been defined within Logwatch, so you do not need to do any tweaking to receive the features we are going to discuss.

When reviewing a log file, the first thing Logwatch does is reorganize log entries based on their message types. For example all Successful SSH logons are grouped together, as well as too many logon failures, refused connections, locked accounts, accounts without a proper shell, protocol mis-matches, etc. etc. etc. Once all the SSH messages are grouped by their type, the data is then summarized to reduce the amount of information being reported.

For example, the default is to summarize failed logon attempts by account and source IP. So a typical failed logon report section might look like this:

Failed logins from these:

bsmith/password from 1.2.3.4: 637 time(s)

jsmith/password from 1.2.3.5: 2 time(s)

So rather than having to review 639 log entries reporting a bad logon attempt, we have all the pertinent information summarized into three lines (if you include the title). Continue this process for all of the other SSH messages, and we have dramatically reduced the amount of time required to review our logs.

But what if something happens that Logwatch is not pre-programmed to recognize? When an unexpected log entry is found, Logwatch adds a section to the end of the service report called “Unmatched Entries”. So if we see this title in the SSH server section, we know some event has occurred that is either abnormal or unexpected for the SSH service. This could very well be some form of attack that we are not aware is making the rounds.

By focusing in on the unmatched entries section, we can quickly identify unexpected activity. As I stated earlier, this is really the main goal of doing daily log reviews. To find the stuff we don't expect which will sneak past our alerting system. Logwatch makes this process as quick and as painless as possible.

Feature Summary

In the above example I talked about doing daily log reviews, but to be honest Logwatch is highly customizable. You can specify any range you wish to use down to an interval of one second. For example let's say I'm investigating an intrusion rather than performing a daily log review. I could specify a range such as “2010/02/14 17:05:00 for that hour” to focus right in on the information that interest me. I can also focus in on one specific log file or service.

The detail level of the report is also customizable. Typically when you deal with security you get in the habit of always wanting the highest detail level of reporting. To be honest, with Logwatch a high level of detail is probably more than you will ever need. Personally I typically stick with “med” for medium and that works out nicely. You can also specify the reporting level as “low” or “high” or use a numeric range of 0-10 for a higher level of granularity (low =0, med=5, high=10).

Logwatch can be run automatically or as a manual process. Typically you will want to set it up to run automatically each day and summarize one day's worth of log entries. If you ever need to expand or focus the report, you can always run Logwatch from the command line while specifying exactly what you want to see. You can then use the “–save” option to specify a report name and directory location for storage.

More To Come

The above should give you a good idea as to the features Logwatch can bring to the table. In the next post I'll discuss OSSEC in the same level of detail. After that, I'll get into how to install each tool as well as how to integrate them together.

Tag 2 Keynote

12. Januar 2010

Thanks to all who came out to the Encryption/DLP summit. Here are the slides from my keynote on day 2.

encryption-dlp-keynote

ICMPv6 Challenge – Answers

13. Dezember 2009

The challenge was: “Write a tcpdump/windump filter that will capture ICMPv6 Multicast Listener packets.” I have an extensive write up on what makes the answer so complex. If you know IPv6 and just want the answer, skip to the end.

First, Some Background

Steinar made some comments to the previous posts and was 100% on track. If you read them and thought “Wow, that sounds really messy”, you understand the scope of the problem as well. :)

Protocol Vs. Next Header Field

With IPv4 we had the options field. This could cause the IP header to grow from 20 bytes to as large as 60 bytes in size. With IPv6, there is no longer an options field and the header is fixed at 40 bytes in size. When options are required, we use extension headers to identify them. This throws an interesting curve ball at us because with IPv4 the protocol field (byte 9) would (almost) always identify the upper level transport (TCP, UDP, etc.). With IPv6 the next header field (byte 6) might identify the upper layer transport, or it might identify an extension header which will include some number of options.

Here's a list of some IPv6 extension headers you might run into, as well as the RFCs that define them:

Option # Option Description RFC
0 Hop-by-Hop 2460
6 TCP 793
17 UDP 768
43 Routing 5095
44 Fragmentation 2460
50 ESP 4303
51 AH 4302
58 ICMPv6 4443
59 No next header 2460
60 Destination options 2460
135 Mobilität 3775

IPv6 does not limit the number of extension headers you can use in a single packet.There is however a published “recommended order” as to how the headers should be laid out. The order is:

  • IPv6 Header
  • Hop-by-Hop Options
  • Routing Header
  • Fragment Header
  • AH
  • ESP
  • Destination Options
  • Mobility Header
  • TCP/UDP/ICMPv6

Note this list is “recommended” but not mandatory. An IPv6 host must be able to process the headers in what ever order they were received. This means you will probably find vendors following this list but not attackers. I've personally seen devices start acting really odd when you mess with the header order. In fact I've run across quite a bit of “IPv6 compatible code” which can't deal if the preferred order is not used.

Chasing The Protocol Header

So with IPv6 we can have multiple headers behind the IPv6 header. If this sounds like a new concept, it is actually not. In fact you've probably worked with it already. When you deploy IPSec the two possible security protocols are ESP and AH. These were actually borrowed from IPv6 and massaged to work on IPv4. Both AH and ESP include a next header field to identify what type of packet they are protecting.This is referred to as protocol chaining , as you effectively have multiple headers sitting behind the layer 3 protocol header.

So to figure out what upper level transport (TCP, UDP, etc.) is being used, you may have to search through multiple headers before you find the answer. This is referred to as “ chasing the header “, and tcpdump/Windump give us a filter option to perform this task. You may be fimiliar with the proto filter. In the IPv4 world, if I say:

ip proto tcp

That filter reads “check byte 9 of the IPv4 header and if the value is equal to 6 (protocol value for TCP), match on the packet”. This filter is not as effective in the IPv6 world of course because byte 6 of the IPv6 header might identify the upper layer transport, or it might just identify an optional extension header that is being used. To solve this problem, the protochain filter was introduced. Writing:

ip6 protochain tcp

Reads as “Check byte 6 of the IPv6 header to see if the value is equal to 6. If instead you find a value which identifies an optional extension header, check the extension header's next header field for a value of 6. If you find more optional extension headers, keep repeating the last test till you find the last extension header”.

Pretty simple to write in English, but this is a nightmare to implement in code. Most optional extension headers are variable in length which just adds to the complexity. I've done some testing with Scapy and you can actually see the difference in performance when protochain gets invoked. In fact you could probably do a pretty good job of DoSing an IDS/IPS by forcing it to process a lot of useless extension headers.

Writing our filter

So our first problem in writing the challenge filter is that the ICMPv6 header may not appear right after the IPv6 header. We have to watch out for optional extension headers. In fact RFC 2710 states: “All MLD messages described in this document are sent with a link-local IPv6 Source Address, an IPv6 Hop Limit of 1, and an IPv6 Router Alert option [RTR-ALERT] in a Hop-by-Hop Options header.” This means our multicast listener packet is required to have a Hop-by-Hop extension header with the Router Alert option set. With this in mind, our first check should be:

ip6 protochain icmp6

To ensure we are only looking at ICMPv6 packets. Now it is just a matter of checking to see if the type field (byte 0) is set to 130 (Multicast Listener Query) or 131 (Multicast Listener Report).This brings us to our second problem however. In the IPv4 world I can do a:

icmp[0]= <type value of interest>

If I try this with icmp6 I get:

[root@fubar ~]# tcpdump -nn icmp6[0]=130
tcpdump: IPv6 upper-layer protocol is not supported by proto[x]

In other words, I can't use offsets with icmp6 to search for specific values. Windump and tcpdump are advertised as IPv6 compatible, but don't expect to get all the same functionality you have with IPv4. YUCK!

Also, was sollen wir tun? We'll have to fall back on referencing the value from an ip6 offset. In other words, we'll have to measure through the IPv6 header, through the required Hop-by-Hop header, and into the ICMPv6 header to see if the type field is set to 130 or 131. Some things to take into consideration:

  • IPv6 header is fixed at 40 bytes in size
  • Hop-by-Hop header is variable, but 4 bytes with Router Alert set
  • The type field is byte 0 within the ICMPv6 header

So here is what we end up with:

ip6 protochain icmp6 and (ip6[44]=130 or ip6[44]=131)

Puh! We finally got it! Oder haben wir?

Q: What happens if the packet has additional extension headers?

A: Our filter will not work.

Q: What if the Hop-by-Hop header has more options set than Router Alert?

A: Our filter will not work.

Q: Can we fix the above two problems?

A: Not till tcpdump/Windump filtering adds IF/THEN loop support.

So if we want to capture normal ML traffic, the above filter will work fine. If however we want to insure we catch attacker trickiness as well, the filter is not going to fly.

What if we try something like this:

tcpdump -nn -s 1500 -x ip6 protochain icmp6 | grep -i multicast > multicast.txt

and then just use Wireshark's text2cap tool to convert it to Libpcap format? The problem here is we will only get the header info. Grep will match the summary line which contains the word “Multicast” but then skip all the Hex below it which is the actual contents of the packet.

So the final answer is: “Can't get theya from haya” ;)

So what if you really need to be able to see this traffic? Until support for IPv6 matures, the only 100% method is to grab all ICMPv6 traffic and then manually sort through it.

At least that's my view on this. If anyone can actually come up with a 100% working solution, I would love to hear it.

ICMPv6 Challenge – Hints

December 9th, 2009

OK, here's a hint to point you in the right direction.

The challenge was: “Write a tcpdump/windump filter that will capture ICMPv6 Multicast Listener packets.”

Sounds easy, right?

With a little help from Google you'll find that the “type” for Multicast listener is 130, and the ICMPv6 type field is the first byte in the header. So this should be as easy as:

tcpdump -nn -p -v -s 0 icmp6[0]=130

however if you run the command you'll get back:

tcpdump: IPv6 upper-layer protocol is not supported by proto[x]

In other words, you can use “icmp6″ to see all ICMPv6 packets, but you can't use it to filter on any of the ICMPv6 header fields.

So we need a “Plan B”. Figure out plan B and you've solved the challenge. :)

ICMPv6 Challenge

December 4th, 2009

Building on the IPv6 challenge from last time, I have a new one for you: Write a tcpdump/windump filter which will capture ICMPv6 Multicast Listener packets.

Das ist es! Pretty easy, right? ;)

Weekend Challenge – Answers

December 3rd, 2009

Well its now Thursday so I figured its time to post the answers to last weekend's challenge. ;)

First, why should you even care about IPv6 if you have not started deploying it? I felt much the same way till I found IPv6 being used as a covert communication channel within a client's network. The data was then being pushed out to the Internet via Teredo. If you are not familiar with the technique, Scott Hogg has some excellent posts on the topic.

So even if you are not currently using IPv6, it pays to start cutting the cure on the technology as well as watching for it on your local network.

So to review, the challenge was:

Write a tcpdump or Windump filter that will capture all traffic with a source IPv6 address of 2001:db8::10 through 2001:db8::20.

There are a couple of caveats with writing this filter. The first few I covered in the last post. The final one, which I knew but never really thought was a problem till I started working with IPv6 pretty heavily, is that tcpdump/Windump will only let you use 1, 2 or 4 byte masks. So while we would love to solve this with an initial filter statement of “ip6[8:14]=”, we can't because we're limited to 4 bytes. There is in fact a way to get around this, but I'll come back to it.

So here's the filter I've been working with:

(ip6[8:4]=0x20010db8 and ip6[12:4]=0 and ip6[16:4]=0 and (ip6[20:4]>=0×0010 and ip6[20:4]<=0050))

Bit long, but it works. Elizabeth came up with a solution that is far more elegant than my own:

src net 2001:db8::/122 and ip6[23] >= 0×10 && ip6[23] <= 0×20

So by starting with the Libpcap format, she's able to combine my first three statements into one. Not to be a size queen, but that makes her solution is much shorter than mine. In this case that's a good thing. :)

Das ist alles. I'll post another IPv6 type challenge tomorrow.