Aruba Instant bietet mit seinem eingebauten Intrusion Detection System (IDS) detaillierte Einblicke in das WLAN-Umfeld der eigenen Access Points. Wie man aus dem Aruba Instant IDS, Syslog sowie Graylog ein einfaches IDS-Dashboard baut, welches erfolgreiche und fehlerhafte Login-Versuche in das eigene WLAN anzeigt, habe ich bereits erklärt. Sogar E-Mail-Benachrichtigungen in Echtzeit sind möglich.
Heute möchte ich mein einfaches IDS-Dashboard ausbauen. Neben den Login-Versuchen soll es verbreitete WLAN-Angriffe übersichtlich darstellen. Zudem sollen besondere Ereignisse in der WLAN-Nachbarschaft auf einen Blick sichtbar werden.
Aruba Instant liefert mir sämtliche Informationen, welche ich für mein Wireless Security Dashboard benötige, bequem per Syslog. Glücklicherweise habe ich bereits früher alle Vorbereitungen (Installation von Graylog bzw. Einrichten als Syslog-Server) bereits abgeschlossen. So muss ich nur die relevanten Nachrichten aus der Syslog-Datenflut herausfiltern.
Erkennbare Vektoren des Aruba Instant IDS und Syslog-ID
HPE Aruba hat sein IDS ist sehr genau dokumentiert und erklärt übersichtlich alle auswertbaren Vektoren. Dabei werden für jeden Angriff, den das IDS erkennen kann, Syslog-IDs angegeben. Mit diesen IDs können dann die Angriffe eindeutig identifiziert werden. Das erspart mir die Suche im Freitext. Pro Angriffsvektor gibt es eindeutige Kennungen, die ich zur Anzeige in meinem Wireless Security Dashboard nutzen kann.
Sicherheitsvektor | Bewertung | Syslog-ID |
---|---|---|
40 MHz Intolerance | Hinweis | 126052, 126053, 127052, 127053 |
802.11n Greenfield Mode | Hinweis | 126054, 127054 |
Ad hoc Network | Hinweis | 126033, 127033 |
Ad hoc Network (own SSID) | Warnung | 126068, 127068 |
AP Flooding | Warnung | 126034, 127034 |
Cloned AP | Alarm | 126006, 127006 |
AP Spoofing | Alarm | 126069, 126070, 127069, 127070 |
Beacon Frame Spoofing | Alarm | 126086, 127086 |
Client Flooding | Alarm | 126064, 127064 |
CTS Rate Anomaly | Alarm | 126073, 127073 |
RTS Rate Anomaly | Alarm | 126074, 127074 |
Invalid OUI | Hinweis | 126029, 126030, 127029, 127030 |
Unexpected MAC | Alarm | 126079, 127079 |
EAPOL Key Overflow | Hinweis | 126082, 127082 |
IE Tag Overflow | Hinweis | 126084, 127084 |
Assoc Request Malformed | Hinweis | 126080, 127080 |
Authentication Malformed | Hinweis | 126083, 127083 |
HT IE Malformed | Hinweis | 126081, 127081 |
Large Frame Duration | Warnung | 126085, 127085 |
Windows Bridge | Hinweis | 126039, 126040, 126041, 126042, 127039, 127040, 127041, 127042 |
Deauthentication Broadcast | Alarm | 126047, 127047 |
Disassociation Broadcast | Alarm | 126066, 127066 |
Cloned SSID | Alarm | 126007, 127007 |
Block-ACK DoS | Alarm | 126087, 127087 |
Disconnect Station Attack | Alarm | 126035, 127035 |
FATA-Jack | Alarm | 126072, 127072 |
Evil Twin Hotspot | Alarm | 126088, 127088 |
Meiners Power Save DoS | Warnung | 126109, 127109 |
Omerta | Warnung | 126071, 127071 |
Rate Anomaly | Alarm | 126061, 126062, 126063, 127061, 127062, 127063 |
Own Client Transmitting Unencrypted | Hinweis | 126065, 127065 |
Own Client Misassociation | Warnung | 126075, 127075 |
Null Probe Response | Warnung | 126045, 127045 |
Die IDS-Ereignisse möchte ich im Dashboard verschiedenartig aufbereiten. Einerseits möchte ich eine Gruppierung der Angriffe nach Schweregrad, andererseits interessiert mich ihr historischer Verlauf sowie die Herkunft der Angriffe, d.h. welcher AP die Signatur aufgezeichnet hat.
HINWEIS: AUF UNÜBLICHE SYSTEMEINSTELLUNG IM WLAN-UMFELD ZURÜCKZUFÜHREN ODER NICHT BEST-PRACTICE ENTSPRECHEND.
WARNUNG: ANGREIFER AKTIV FÜR URSACHE VERANTWORTLICH ODER ERNSTHAFTE AUSWIRKUNGEN AUF ENDBENUTZER ODER PERFORMANCE.
ALARM: ANGREIFER FÜHRT UNMITTELBAR ANGRIFF AUF DAS WLAN AUS, UM DEN BETRIEB DES WLANS DAUERHAFT ZU STÖREN, USERDATEN ZU ERHALTEN BZW. INS NETZWERK EINZUDRINGEN.
Anschalten vom IDS in Aruba Instant
Im Artikel über ein einfaches IDS habe ich bereits die Integration von Aruba Instant und Graylog per Syslog beschrieben. Folgt dem Artikel, wenn ihr Syslog in Aruba Instant noch nicht konfiguriert habt.
Um Daten vom Aruba Instant IDS zu erhalten, muss das System zunächst aktiviert werden. Dies geschieht in Aruba Instant unter „Konfiguration -> IDS“. Stellt unter „Erkennung“ die Einstellung für Infrastruktur und Clients auf „hoch“. Im Bereich „Schutz“ müsst ihr keine Einstellungen aktivieren bzw. verändern.
Nachdem die Einstellungen bestätigt wurden, überträgt Aruba Instant die erkannten IDS-Ereignisse per Syslog direkt an Graylog.
Input Extractor in Graylog anlegen
Bereits jetzt lassen sich über die Suche alle IDS-Ereignisse anzeigen. Nutzt dazu in der Suche folgenden String:
"|ids-"
Zum Bauen eines vollwertigen Wireless Security Dashboards reicht das leider jedoch noch nicht. Schließlich sollen alle Ereignisse gruppiert nach Schweregrad ausgewertet werden.
Mit Hilfe eines Input Extractors in Graylog kann der eingehende Datenstrom aus Syslog untersucht werden und dessen Inhalte können in einzelne Datenfelder aufgeteilt werden. Extraktoren werden dabei auf jede Syslog-Nachricht angewendet, die empfangen wird. So können Textdaten aus dem Datenstrom extrahiert werden und in eigenständige Datenfelder kopiert werden. Dies erleichtert später eine einfache Filterung und Analyse.
Ich möchte später im Dashboard die IDS-Ereignisse anhand der Syslog-ID darstellen. Zudem möchte ich einen sprechenden Namen mit mehr Aussagekraft einsetzen. Damit dies möglich ist, benötige ich die Syslog-ID in einem eigenen Datenfeld.
Der Input Extractor wird im Hauptmenü unter „System -> Inputs -> Manage Extractors“ eingefügt, und zwar für den Input, den ihr für Aruba Instant bzw. dem Syslog UDP Input erstellt habt. Im Bereich „Add extractor“ solltet ihr dann auf den Knopf „Get Started“ klicken, um zur folgenden Eingabemaske zu gelangen.
Wählt eine beliebige Message aus und nutzt den Knopf „Load Message“. Im Anschluss drückt ihr am rechten Rand neben dem Feld „message“ auf das Dropdown „Select extractor type“ und wählt dort „Substring“ aus. Befüllt dann die Eingabemaske exakt so, wie auf folgendem Screenshot, insbesondere den „Begin index“, End index“ sowie die „Condition“.
Anmerkung: Wenn ihr meiner Anleitung folgt, könnt ihr die passenden Werte direkt verwenden und braucht die Parameter nicht mühsam selbst herausfinden. Daher ist die Nachricht, die ihr zum Bauen der Abfrage auswählt, völlig egal. Wollt ihr selbst Abfragen bauen, solltet ihr die korrekte Nachricht selbstverständlich auswählen.
Begin index | 52 |
End index | 58 |
Condition | Only attempt extraction if field contains string |
Field contains string | |ids- |
Store as field | aruba_ids_attack_id_lookup |
Extraction strategy | Copy |
Extractor Title | Aruba IDS Attack ID |
Am Ende der Eingabemaske erstellt ihr den Extractor mit dem passenden Button. Ab jetzt könnt ihr das Datenfeld „aruba_ids_attack_id_lookup“ in allen Suchen explizit durchsuchen (nach Syslog-IDs) oder in Diagrammen / Spalten einzeln darstellen.
In einem nächsten Schritt werde ich noch einen Konverter hinzufügen, dieser muss jedoch erst noch angelegt werden. Der Konverter wird dann später anstelle der extrahierten Syslog-ID einen Klarnahmen in das Datenfeld einsetzen. Schließlich soll das Dashboard nicht nur IDs anzeigen, sondern alle Ereignisse mit Klarnamen benennen. Zudem gibt es einige Syslog-IDs, die den gleichen IDS-Angriff beschreiben. Und Namen sagen mehr als tausend IDs.
Syslog-ID mit Hilfe eines Lookup-Table in Klartext umwandeln
Während der Extractor die Syslog-IDs aus der Message parst, soll diese direkt in Klartext umgewandelt werden. Schließlich kann ich mir nicht alle Syslog-IDs von Aruba Instant merken. Daher möchte ich die Syslog-ID mit einem sogenannten Lookup-Table in Graylog konvertieren.
Der passende Menüpunkt verbirgt sich unter „System -> Lookup-Table“. Im Bereich „Data Adapter“ muss zunächst eine passende Mechanik ausgewählt werden. Nutzt den Button „Create Data Adapter“ und wählt als Adapter-Typ „CSV-File“ aus.
Der CSV-Adapter vergleicht die geparsten Syslog-IDs aus dem Extraktor mit Datenfeldern. Gegenstand des Vergleichs ist eine CSV-Datei. Diese CSV-Datei muss manuell vorbereitet und im Anschluss in das Dateisystem des Graylog-Servers übertragen werden.
Zunächst müsst ihr also eine CSV-Datei erstellen (UTF-8), welche zwei Spalten beinhaltet: Key und Value. Ihr braucht nicht herumprobieren, folgt einfach meiner Anleitung. Führt zunächst die Eingaben wie folgt aus, um den Adapter zu erstellen. Im nächsten Schritt könnt ihr dann entweder meine Vorlage nutzen, um die CSV-Datei zu erstellen oder ihr ladet euch meine bereits erstellte CSV-Datei einfach herunter.
Title | Aruba IDS ID Matcher |
Description | Matches Syslog ID from Aruba IDS to Attack Name |
Name | aruba-ids-id-matcher |
Custom Error TTL | – |
File path | /home/empy/graylog_lookup_arubaids.csv |
Check interval | 60 |
Separator | ; |
Quote character | “ |
Key column | ids_key |
Value column | ids_attack_name |
Erstellt dann folgende CSV-Datei im UTF-8-Format oder ladet euch die fertige Datei hier herunter.
"ids_key";"ids_attack_name"
"126052";"40 MHz Intolerance"
"126053";"40 MHz Intolerance"
"127052";"40 MHz Intolerance"
"127053";"40 MHz Intolerance"
"126054";"802.11n Greenfield Mode"
"127054";"802.11n Greenfield Mode"
"126033";"Ad hoc Network"
"127033";"Ad hoc Network"
"126068";"Ad hoc Network (own SSID)"
"127068";"Ad hoc Network (own SSID)"
"126034";"AP Flooding"
"127034";"AP Flooding"
"126006";"Cloned AP"
"127006";"Cloned AP"
"126069";"AP Spoofing"
"126070";"AP Spoofing"
"127069";"AP Spoofing"
"127070";"AP Spoofing"
"126086";"Beacon Frame Spoofing"
"127086";"Beacon Frame Spoofing"
"126064";"Client Flooding"
"127064";"Client Flooding"
"126073";"CTS Rate Anomaly"
"127073";"CTS Rate Anomaly"
"126074";"RTS Rate Anomaly"
"127074";"RTS Rate Anomaly"
"126029";"Invalid OUI"
"126030";"Invalid OUI"
"127029";"Invalid OUI"
"127030";"Invalid OUI"
"126079";"Unexpected MAC"
"127079";"Unexpected MAC"
"126082";"EAPOL Key Overflow"
"127082";"EAPOL Key Overflow"
"126084";"IE Tag Overflow"
"127084";"IE Tag Overflow"
"126080";"Assoc Request Malformed"
"127080";"Assoc Request Malformed"
"126083";"Authentication Malformed"
"127083";"Authentication Malformed"
"126081";"HT IE Malformed"
"127081";"HT IE Malformed"
"126085";"Large Frame Duration"
"127085";"Large Frame Duration"
"126039";"Windows Bridge"
"126040";"Windows Bridge"
"126041";"Windows Bridge"
"126042";"Windows Bridge"
"127039";"Windows Bridge"
"127040";"Windows Bridge"
"127041";"Windows Bridge"
"127042";"Windows Bridge"
"126047";"Deauthentication Broadcast"
"127047";"Deauthentication Broadcast"
"126066";"Disassociation Broadcast"
"127066";"Disassociation Broadcast"
"126007";"Cloned SSID"
"127007";"Cloned SSID"
"126087";"Block-ACK DoS"
"127087";"Block-ACK DoS"
"126035";"Disconnect Station Attack"
"127035";"Disconnect Station Attack"
"126072";"FATA-Jack"
"127072";"FATA-Jack"
"126088";"Evil Twin Hotspot"
"127088";"Evil Twin Hotspot"
"126109";"Meiners Power Save DoS"
"127109";"Meiners Power Save DoS"
"126071";"Omerta"
"127071";"Omerta"
"126061";"Rate Anomaly"
"126062";"Rate Anomaly"
"126063";"Rate Anomaly"
"127061";"Rate Anomaly"
"127062";"Rate Anomaly"
"127063";"Rate Anomaly"
"126065";"Own Client Transmitting Unencrypted"
"127065";"Own Client Transmitting Unencrypted"
"126075";"Own Client Misassociation"
"127075";"Own Client Misassociation"
"126045";"Null Probe Response"
"127045";"Null Probe Response"
Nun müsst ihr die Datei auf den Debian-Server kopieren, auf dem Graylog läuft. Ich empfehle WinSCP, das ist am einfachsten: Verbindet euch mit WinSCP. Loggt euch dann mit den Benutzerdaten ein, die ihr beim Aufsetzen des Servers verwendet habt. Kopiert nun die CSV-Datei in das Verzeichnis, dass ihr beim Erstellen des „Data Adapters“ angegeben habt. (Im Beispiel: /home/empy/graylog_lookup_arubaids.csv)
Zurück in Graylog könnt ihr dann den Data-Adapter testen, indem ihr in der Übersicht den Data Adapter auswählt und im Bereich Test-Lookup eine Syslog-ID im Feld „Key“ händisch eintragt. Drückt dann auf „Look up“. Wenn alles funktioniert, könnt ihr weitermachen.
Damit der Lookup-Table insgesamt funktioniert, muss noch ein Caching-Verhalten konfiguriert werden. Dieses legt fest, ob die CSV-Datei gecached werden soll oder nicht.
Geht in den Bereich „Caches“, legt einen Data Cache wie folgt an und bestätigt dann mit dem Button am Ende der Eingabemaske.
Title | No cache |
Description | No cache |
Name | no-cache |
Erst jetzt könnt ihr den eigentlichen Lookup-Table zur finalen Verwendung anlegen. Achtet darauf, dass ihr den „Default single value“ aktiviert und einen Wert hinterlegt. So habt ihr ein Fallback, wenn eine Syslog-ID nicht in der CSV-Datei vorhanden ist. Wählt zudem auch den zuvor angelegten Data Adapter sowie das erstelle Cache-Verhalten aus. Bestätigt am Ende der Seite Maske mit dem entsprechenden Button.
Title | Aruba IDS ID Matcher |
Description | Matches Syslog ID from Aruba IDS to Attack Name |
Name | aruba_ids_matcher |
Enable single default value | Yes |
Default single value | Unbekannter IDS Angriff |
Enable multi default value | No |
Data Adapter | Aruba IDS ID Matcher (aruba-ids-id-matcher) |
Cache | No Cache (no-cache) |
Wechselt nun zurück zum Input Extractor („System -> Inputs -> Manage Extractors“) und fügt dort einen Konverter vom Typ Lookup-Table hinzu. Wählt dann den eben erstellten Lookup-Table aus und bestätigt am Ende der Seite.
Hinweis: Das Datenfeld „aruba_ids_attack_id_lookup“ kann ab jetzt nur noch über die per CSV definierten Begriffe durchsucht werden, da der Lookup-Table alle neuen Werte ab Zuweisung zum Extraktor überschreibt.
Das Dashboard ergänzen
Die Erstellung eines Dashboards in Graylog habe ich bereits dargestellt. Im Folgenden muss dieses Dashboard um die weiteren Widgets erweitert werden. Vergesst nicht, das Dashboard zu speichern, wenn ihr mit der Erstellung aller Widgets fertig seid.
WLAN-Anmeldungen und Fehlerhafte Anmeldeversuche
Seid ihr meiner Anleitung gefolgt, habt ihr den folgenden Schritt bereits erledigt: Legt zwei Widgets vom Typ „Aggregation“ an und achtet auf die folgenden Details:
WLAN-Anmeldungen (last 60 minutes) | Fehlerhafte Anmeldeversuche WLAN (last 30 days) | |
Zeitraum | an hour ago | a month ago |
Suchstring | „/wpa2_key4 success“ | „MIC failed“ |
Group By | – | Rollout Columns: aktivieren Field: timestamp Interval: „Auto“ deaktivieren, 1 Days einstellen. |
Metrics | Function: Count Field: – Name: Message Count | Function: Count Field: Select Name: Message Count |
Sort | – | – |
Visualization | Type: Single Number Trend: aktivieren Trend Preference: Neutral | Type: Area Chart Show Event annotations: deaktivieren Interpolation: step-after |
IDS-Ereignisse
Legt ein Widget vom Typ „Message Table“ mit folgenden Details an:
IDS Ereignisse | |
Zeitraum | a day ago |
Suchstring | |ids- |
Fields | timestamp, source, aruba_ids_attack_id_lookup |
Message Preview | Yes |
Sorting | timestamp |
Direction | Descending |
Decorators | – |
Hinweis, Warnung und Alarm
Legt drei Widgets vom Typ „Aggregation“ an und nutzt folgende Parameter, um die Widgets für die Anzeige nach Schweregrad zu erzeugen:
Hinweis | Warnung | Alarm | |
Zeitraum | a day ago | a day ago | a day ago |
Suchstring | aruba_ids_attack_id_lookup:“40 MHz Intolerance“ OR aruba_ids_attack_id_lookup:“802.11n Greenfield Mode“ OR aruba_ids_attack_id_lookup:“Ad hoc Network“ OR aruba_ids_attack_id_lookup:“Invalid OUI“ OR aruba_ids_attack_id_lookup:“EAPOL Key Overflow“ OR aruba_ids_attack_id_lookup:“IE Tag Overflow“ OR aruba_ids_attack_id_lookup:“Assoc Request Malformed“ OR aruba_ids_attack_id_lookup:“Authentication Malformed“ OR aruba_ids_attack_id_lookup:“HT IE Malformed“ OR aruba_ids_attack_id_lookup:“Windows Bridge“ OR aruba_ids_attack_id_lookup:“Own Client Transmitting Unencrypted“ | aruba_ids_attack_id_lookup:“Ad hoc Network (own SSID)“ OR aruba_ids_attack_id_lookup:“AP Flooding“ OR aruba_ids_attack_id_lookup:“Large Frame Duration“ OR aruba_ids_attack_id_lookup:“Meiners Power Save DoS“ OR aruba_ids_attack_id_lookup:“Omerta“ OR aruba_ids_attack_id_lookup:“Own Client Misassociation“ OR aruba_ids_attack_id_lookup:“Null Probe Response“ | aruba_ids_attack_id_lookup:“Cloned AP“ OR aruba_ids_attack_id_lookup:“AP Spoofing“ OR aruba_ids_attack_id_lookup:“Beacon Frame Spoofing“ OR aruba_ids_attack_id_lookup:“Client Flooding“ OR aruba_ids_attack_id_lookup:“CTS Rate Anomaly“ OR aruba_ids_attack_id_lookup:“RTS Rate Anomaly“ OR aruba_ids_attack_id_lookup:“Unexpected MAC“ OR aruba_ids_attack_id_lookup:“Deauthentication Broadcast“ OR aruba_ids_attack_id_lookup:“Disassociation Broadcast“ OR aruba_ids_attack_id_lookup:“Cloned SSID“ OR aruba_ids_attack_id_lookup:“Block-ACK DoS“ OR aruba_ids_attack_id_lookup:“Disconnect Station Attack“ OR aruba_ids_attack_id_lookup:“FATA-Jack“ OR aruba_ids_attack_id_lookup:“Evil Twin Hotspot“ OR aruba_ids_attack_id_lookup:“Rate Anomaly“ |
Group By | Rollout Columns: aktivieren Direction: Row Field: aruba_ids_attack_id_lookup Limit: 15 | Rollout Columns: aktivieren Direction: Row Field: aruba_ids_attack_id_lookup Limit: 15 | Rollout Columns: aktivieren Direction: Row Field: aruba_ids_attack_id_lookup Limit: 15 |
Metrics | Function: Count Field: source | Function: Count Field: source | Function: Count Field: source |
Visualization | Pie Chart | Pie Chart | Pie Chart |
IDS History
Legt ein Widget vom Typ „Aggregation“ mit den folgenden Parametern:
IDS History | |
Zeitraum | a day ago |
Suchstring | |ids- |
Group By | Rollout Columns: aktivieren Direction: Row Field: timestamp Interval: „Auto“ deaktivieren, 1 Hours einstellen. |
Metrics | Function: Count Name: Message Count |
Visualization | Type: Bar Chart Mode: Group |
IDS Anzahl und IDS Quelle
Erstellt zwei Widgets vom Typ „Aggregation“ mit folgenden Einstellungen:
IDS Anzahl | IDS Quelle | |
Zeitraum | a day ago | a day ago |
Suchstring | |ids- | |ids- |
Group By | Rollout Columns: aktivieren Direction: Column Field: aruba_ids_attack_id_lookup Limit: 15 | Rollout Columns: aktivieren Direction: Row Field: source Limit: 15 |
Metrics | Function: Count Field: aruba_ids_attack_id_lookup Name: Gesamt | Function: Count Field: source Name: Detections nach Herkunft |
Visualization | Type: Bar Chart Mode: Group | Type: Pie Chart |