MISP-IOC-Logs erfassen
Übersicht
Dieser Parser extrahiert IOCs aus MISP-Daten, die im JSON- oder CSV-Format vorliegen. Er analysiert die Eingabe, ordnet Felder dem UDM zu, verarbeitet verschiedene IOC-Typen (IP, Domain, Datei-Hashes usw.) und ergänzt die Daten um Kontextinformationen zur Bedrohungsinformationen wie Wahrscheinlichkeit und Schwere. Der Parser führt außerdem eine spezifische Logik für verschiedene Datenformate aus und verarbeitet Fälle mit fehlenden oder nicht unterstützten Feldern.
Hinweise
- Sie benötigen eine Google SecOps-Instanz.
- Sie benötigen erhöhte Zugriffsrechte für MISP.
Feed in Google SecOps konfigurieren, um MISP-Bedrohungsinformationen-Logs aufzunehmen
- Gehen Sie zu SIEM-Einstellungen > Feeds.
- Klicken Sie auf Neu hinzufügen.
- Geben Sie im Feld Feedname einen Namen für den Feed ein, z. B. MISP-Logs.
- Wählen Sie als Quelltyp Webhook aus.
- Wählen Sie MISP Threat Intelligence als Protokolltyp aus.
- Klicken Sie auf Weiter.
- Optional: Geben Sie Werte für die folgenden Eingabeparameter an:
- Trennzeichen für die Aufteilung: Das Trennzeichen, mit dem Logzeilen getrennt werden, z. B.
\n
. - Asset-Namespace: der Asset-Namespace.
- Aufnahmelabels: Das Label, das auf die Ereignisse aus diesem Feed angewendet wird.
- Trennzeichen für die Aufteilung: Das Trennzeichen, mit dem Logzeilen getrennt werden, z. B.
- Klicken Sie auf Weiter.
- Überprüfen Sie die Feedkonfiguration auf dem Bildschirm Abschließen und klicken Sie dann auf Senden.
- Klicken Sie auf Secret-Schlüssel generieren, um einen Secret-Schlüssel zur Authentifizierung dieses Feeds zu generieren.
- Kopieren und speichern Sie den geheimen Schlüssel. Sie können diesen geheimen Schlüssel nicht noch einmal aufrufen. Bei Bedarf können Sie einen neuen Secret-Schlüssel generieren. Dadurch wird der vorherige Secret-Schlüssel jedoch ungültig.
- Kopieren Sie auf dem Tab Details die Feedendpunkt-URL aus dem Feld Endpunktinformationen. Sie müssen diese Endpunkt-URL in Ihrer Clientanwendung angeben.
- Klicken Sie auf Fertig.
API-Schlüssel für den Webhook-Feed erstellen
Rufen Sie die Google Cloud Console > Anmeldedaten auf.
Klicken Sie auf Anmeldedaten erstellen und wählen Sie anschließend API-Schlüssel aus.
Beschränken Sie den API-Schlüsselzugriff auf die Google Security Operations API.
Endpunkt-URL angeben
- Geben Sie in Ihrer Clientanwendung die HTTPS-Endpunkt-URL an, die im Webhook-Feed angegeben ist.
Aktiviere die Authentifizierung, indem du den API-Schlüssel und den geheimen Schlüssel als Teil der benutzerdefinierten Kopfzeile im folgenden Format angibst:
X-goog-api-key = API_KEY X-Webhook-Access-Key = SECRET
Empfehlung: Geben Sie den API-Schlüssel als Header an, anstatt ihn in der URL anzugeben.
Wenn Ihr Webhook-Client keine benutzerdefinierten Header unterstützt, können Sie den API-Schlüssel und den geheimen Schlüssel mithilfe von Suchparametern im folgenden Format angeben:
ENDPOINT_URL?key=API_KEY&secret=SECRET
Ersetzen Sie Folgendes:
ENDPOINT_URL
: die URL des Feedendpunkts.API_KEY
: Der API-Schlüssel für die Authentifizierung bei Google Security Operations.SECRET
: der geheime Schlüssel, den Sie zur Authentifizierung des Feeds generiert haben.
Senden von HTTP-Anfragen an externe URL in MISP aktivieren
- Rufen Sie den Computer auf, auf dem MISP bereitgestellt ist.
- Bearbeiten Sie die Datei config.php unter
app/Config/
. - Suchen Sie die
rest_client_enable_arbitrary_urls
-Konfiguration und legen Sie sie auf True fest.none 'rest_client_enable_arbitrary_urls' => true
- Speichern Sie die Datei.
Webhook in MISP für Google SecOps konfigurieren
- Melden Sie sich in MISP Threat Intelligence an.
- Gehen Sie zu Verwaltung > Workflows > Module auflisten.
- Wählen Sie Webhook aus.
- Klicken Sie in der Spalte Aktion auf Aktivieren.
- Gehen Sie zu Workflows > Trigger auflisten.
- Wählen Sie den gewünschten Webhook-Trigger aus.
- Wählen Sie in der Liste der Module Webhook aus.
- Ziehen Sie sie per Drag-and-drop in den Arbeitsbereich.
- Verbinden Sie die Eingabe mit der Ausgabe des Trigger.
- Füllen Sie im Webhook-Modul die folgenden Felder aus:
- URL: Geben Sie die ENDPOINT_URL gefolgt von API_KEY und SECRET ein.
- HTTP-Anfragemethode: Wählen Sie POST aus.
- Klicken Sie auf Speichern.
UDM-Zuordnungstabelle
Logfeld | UDM-Zuordnung | Logik |
---|---|---|
Attribute.category |
event.idm.entity.metadata.threat.category_details |
Wird direkt aus Attribute.category im verschachtelten JSON-Objekt im Feld „data“ zugeordnet. Wird im JSON-Parsepfad verwendet. |
Attribute.comment |
event.idm.entity.metadata.threat.summary |
Wird direkt aus Attribute.comment im verschachtelten JSON-Objekt im Feld „data“ zugeordnet. Wird im JSON-Parsepfad verwendet. |
Attribute.deleted |
event.idm.entity.metadata.threat.detection_fields.value |
Wird direkt von Attribute.deleted zugeordnet und als Erkennungsfeld mit dem Schlüssel „Attribut gelöscht“ hinzugefügt. Wird im JSON-Parsepfad verwendet. |
Attribute.event_id |
event.idm.entity.metadata.threat.detection_fields.value |
Wird direkt aus Attribute.event_id zugeordnet und als Erkennungsfeld mit dem Schlüssel „Attribut event_id“ hinzugefügt. Wird im JSON-Parsepfad verwendet. |
Attribute.first_seen |
event.idm.entity.metadata.threat.detection_fields.value |
Wird direkt aus Attribute.first_seen zugeordnet und als Erkennungsfeld mit dem Schlüssel „Attribut first_seen“ hinzugefügt. Wird im JSON-Parsepfad verwendet. |
Attribute.id |
event.idm.entity.metadata.threat.detection_fields.value |
Wird direkt aus Attribute.id zugeordnet und je nach Parsepfad als Erkennungsfeld mit dem Schlüssel „Attribut-ID“ oder „Attribut-ID $$“ hinzugefügt. Wird sowohl in CSV- als auch in JSON-Parsing-Pfaden verwendet. |
Attribute.timestamp |
event.idm.entity.metadata.threat.detection_fields.value |
Wird direkt von Attribute.timestamp zugeordnet und als Erkennungsfeld mit dem Schlüssel „Attribut-Zeitstempel“ hinzugefügt. Wird im JSON-Parsepfad verwendet. |
Attribute.to_ids |
event.idm.entity.metadata.threat.detection_fields.value |
Wird direkt aus Attribute.to_ids zugeordnet und als Erkennungsfeld mit dem Schlüssel „Attribut to_ids“ hinzugefügt. Wird im JSON-Parsepfad verwendet. |
Attribute.type |
log_type |
Wird direkt aus Attribute.type im verschachtelten JSON-Objekt im Feld „data“ zugeordnet. Wird als Zwischenfeld verwendet und später zum Ausfüllen anderer UDM-Felder verwendet. Wird im JSON-Parsepfad verwendet. |
Attribute.uuid |
event.idm.entity.metadata.product_entity_id |
Wird direkt aus Attribute.uuid im verschachtelten JSON-Objekt im Feld „data“ zugeordnet. Wird im JSON-Parsepfad verwendet. |
Attribute.value |
Mehrere | Der Wert dieses Felds wird verwendet, um je nach Attribute.type (oder log_type , wenn aus Attribute.type abgeleitet) mehrere UDM-Felder auszufüllen:– event.idm.entity.entity.hostname , wenn type „domain“ ist.– event.idm.entity.entity.file.md5 , wenn type „md5“ ist.– event.idm.entity.entity.file.sha1 , wenn type „sha1“ ist.– event.idm.entity.entity.file.sha256 , wenn type „sha256“ ist.– event.idm.entity.entity.resource.name , wenn type „mutex“ ist.– event.idm.entity.entity.registry.registry_key , wenn type „regkey“ ist.– event.idm.entity.entity.user.email_addresses , wenn type „Angriffsziel“ ist.– event.idm.entity.entity.url , wenn type „uri“ oder „url“ ist.– event.idm.entity.entity.file.full_path , wenn type „filename“ ist.: Wird nach IP-Adresse und Port geparst, wenn type „ip-dst|port“, „ip-dst“ oder „ip-src“ ist. Wird im JSON-Parsepfad verwendet. |
column1 |
event.idm.entity.metadata.product_entity_id |
Wird direkt von column1 im CSV-Parsepfad zugeordnet. |
column14 |
Teil von event.idm.entity.metadata.threat.description |
Wird mit description zusammengeführt, um die endgültige Beschreibung in den Metadaten der Bedrohung zu bilden. Wird im CSV-Parsepfad verwendet. |
column16 |
event.idm.entity.metadata.threat.threat_feed_name , event.ioc.feed_name |
Direkt von column16 zugeordnet. Wird im CSV-Parsepfad verwendet. |
column18 |
event.idm.entity.metadata.threat.severity_details , event.ioc.raw_severity |
Direkt von column18 zugeordnet. Wird im CSV-Parsepfad verwendet. |
column21 |
Teil von event.idm.entity.metadata.threat.description , event.ioc.description |
Wird als Grundlage für die Beschreibung verwendet und später mit event_info zusammengefügt. Wird im CSV-Parsepfad verwendet. |
column3 |
Teil von event.ioc.categorization |
Werden direkt aus column3 zugeordnet und mit „IOCs“ zusammengeführt, um die endgültige Kategorisierung zu bilden. Wird im CSV-Parsepfad verwendet. |
column4 |
event.idm.entity.metadata.description |
Direkt von column4 zugeordnet. Wird im CSV-Parsepfad verwendet. |
column5 |
Mehrere | Der Wert dieses Felds wird verwendet, um je nach Feld column4 (das type zugeordnet ist) mehrere UDM-Felder auszufüllen:– event.idm.entity.entity.hostname , wenn type „domain“ ist.: Wird nach IP-Adresse und Port geparst, wenn type „ip-dst|port“, „ip-dst“ oder „ip-src“ ist.– event.idm.entity.entity.file.md5 , wenn type „md5“ ist.– event.idm.entity.entity.file.sha1 , wenn type „sha1“ ist.– event.idm.entity.entity.file.sha256 , wenn type „sha256“ ist.– event.idm.entity.entity.resource.name , wenn type „mutex“ ist.– event.idm.entity.entity.registry.registry_key , wenn type „regkey“ ist.– event.idm.entity.entity.user.email_addresses , wenn type „Angriffsziel“ ist.– event.idm.entity.entity.url , wenn type „uri“ oder „url“ ist.– event.idm.entity.entity.file.full_path , wenn type „filename“ ist. Wird im CSV-Parsepfad verwendet. |
column6 |
event.idm.entity.metadata.threat.summary |
Direkt von column6 zugeordnet. Wird im CSV-Parsepfad verwendet. |
column8 |
event.ioc.active_timerange.start , event.idm.entity.metadata.interval.start_time |
Wird als UNIX-Zeitstempel geparst. Wird im CSV-Parsepfad verwendet. |
date description |
event.idm.entity.metadata.threat.description |
Wird direkt aus description im verschachtelten JSON-Objekt im Feld „data“ zugeordnet. Wird im JSON-Parsepfad verwendet. |
event_creator_email |
event.idm.entity.entity.labels.value |
Direkt aus event_creator_email zugeordnet und als Label mit dem Schlüssel „event_creator_email“ hinzugefügt. Wird im JSON-Parsepfad verwendet. |
event_id Feed.publish |
event.idm.entity.metadata.threat.detection_fields.value |
Wird direkt aus Feed.publish zugeordnet und als Erkennungsfeld mit dem Schlüssel „Feed publish“ hinzugefügt. Wird im JSON-Parsepfad verwendet. |
first_seen |
event.ioc.active_timerange.start , event.idm.entity.metadata.interval.start_time |
Wird als Zeitstempel im Format „JJJJ-MM-TTThh:mm:ssZZ“ geparst. Wird im JSON-Parsepfad verwendet. |
id info |
event.idm.entity.metadata.description |
Wird direkt aus info im verschachtelten JSON-Objekt im Feld „data“ zugeordnet. Wird im JSON-Parsepfad verwendet. |
last_seen |
event.ioc.active_timerange.end |
Wird als Zeitstempel im Format „JJJJ-MM-TTThh:mm:ssZZ“ geparst. Wird im JSON-Parsepfad verwendet. |
Org.name |
event.idm.entity.metadata.threat.detection_fields.value |
Wird direkt aus Org.name zugeordnet und als Erkennungsfeld mit dem Schlüssel „Name der Organisation“ hinzugefügt. Wird im JSON-Parsepfad verwendet. |
published |
event.idm.entity.metadata.threat.detection_fields.value |
Wird direkt aus published zugeordnet und als Erkennungsfeld mit dem Schlüssel „published“ hinzugefügt. Wird im JSON-Parsepfad verwendet. |
Tag.colour |
event.idm.entity.metadata.threat.detection_fields.value |
Wird direkt aus Tag.colour zugeordnet und als Erkennungsfeld mit dem Schlüssel „Tag-Farbe“ hinzugefügt. Wird im JSON-Parsepfad verwendet. |
Tag.exportable |
event.idm.entity.metadata.threat.detection_fields.value |
Wird direkt aus Tag.exportable zugeordnet und als Erkennungsfeld mit dem Schlüssel „tag exportable“ hinzugefügt. Wird im JSON-Parsepfad verwendet. |
Tag.hide_tag |
event.idm.entity.metadata.threat.detection_fields.value |
Wird direkt von Tag.hide_tag zugeordnet und als Erkennungsfeld mit dem Schlüssel „tag hide_tag“ hinzugefügt. Wird im JSON-Parsepfad verwendet. |
Tag.id |
event.idm.entity.metadata.threat.detection_fields.value |
Wird direkt aus Tag.id zugeordnet und als Erkennungsfeld mit dem Schlüssel „Tag-ID“ hinzugefügt. Wird im JSON-Parsepfad verwendet. |
Tag.is_custom_galaxy |
event.idm.entity.metadata.threat.detection_fields.value |
Wird direkt von Tag.is_custom_galaxy zugeordnet und als Erkennungsfeld mit dem Schlüssel „tag is_custom_galaxy“ hinzugefügt. Wird im JSON-Parsepfad verwendet. |
Tag.is_galaxy |
event.idm.entity.metadata.threat.detection_fields.value |
Wird direkt aus Tag.is_galaxy zugeordnet und als Erkennungsfeld mit dem Schlüssel „tag is_galaxy“ hinzugefügt. Wird im JSON-Parsepfad verwendet. |
Tag.isinherited |
event.idm.entity.metadata.threat.detection_fields.value |
Wird direkt von Tag.isinherited zugeordnet und als Erkennungsfeld mit dem Schlüssel „tag isinherited“ hinzugefügt. Wird im JSON-Parsepfad verwendet. |
Tag.name |
event.idm.entity.metadata.threat.detection_fields.value |
Wird direkt aus Tag.name zugeordnet und als Erkennungsfeld mit dem Schlüssel „Tag-Name“ hinzugefügt. Wird im JSON-Parsepfad verwendet. |
Tag.numerical_value |
event.idm.entity.metadata.threat.detection_fields.value |
Wird direkt aus Tag.numerical_value zugeordnet und als Erkennungsfeld mit dem Schlüssel „tag numerical_value“ hinzugefügt. Wird im JSON-Parsepfad verwendet. |
Tag.user_id |
event.idm.entity.metadata.threat.detection_fields.value |
Wird direkt aus Tag.user_id zugeordnet und als Erkennungsfeld mit dem Schlüssel „tag user_id“ hinzugefügt. Wird im JSON-Parsepfad verwendet. |
threat_level_id |
event.idm.entity.entity.labels.value |
Direkt aus threat_level_id zugeordnet und als Label mit dem Schlüssel „threat_level_id“ hinzugefügt. Wird im JSON-Parsepfad verwendet. |
timestamp |
event.idm.entity.metadata.collected_timestamp , event.idm.entity.metadata.interval.start_time |
Wird als UNIX-Zeitstempel geparst. Wird im CSV-Parsepfad verwendet. |
uuid |
event.idm.entity.metadata.vendor_name |
Wird vom Parser auf „MISP“ festgelegt. Wird vom Parser auf „MISP“ festgelegt. Legen Sie einen Standardwert fest, der weit in der Zukunft liegt (253402300799 Sekunden seit der Epoche). Wird vom Parser anhand des Felds type oder log_type ermittelt. Kann „FILE“, „DOMAIN_NAME“, „IP_ADDRESS“, „MUTEX“, „RESOURCE“ oder „USER“ sein. Kann je nach Attribute.type von Attribute.comment oder Attribute.value abgeleitet werden. Wird aus Attribute.value oder column5 geparst, wenn der Typ IP-bezogen ist. Wird aus Attribute.value oder column5 geparst, wenn der Typ „ip-dst|port“ ist. Abgeleitet von column3 beim CSV-Parsing oder Attribute.category beim JSON-Parsing. Wird beim CSV-Parsing aus column21 und column14 abgeleitet. Abgeleitet von column8 oder first_seen . Abgeleitet von last_seen . Aus description mithilfe eines Grok-Musters abgeleitet. Wird von column16 abgeleitet oder auf „MISP“ festgelegt. Abgeleitet von column18 . Wird aus Attribute.value oder column5 geparst, wenn der Typ IP-bezogen ist. Wird aus Attribute.value oder column5 geparst, wenn der Typ „ip-dst|port“ ist. Wird von Attribute.value oder column5 abgeleitet, wenn der Typ „domain“ ist. Abgeleitet aus dem Feld confidence , das aus dem Feld description extrahiert wird. Mögliche Werte sind „HIGH_CONFIDENCE“, „MEDIUM_CONFIDENCE“, „LOW_CONFIDENCE“ oder „UNKNOWN_CONFIDENCE“. Wird direkt aus dem Feld confidence zugeordnet, das aus dem Feld description extrahiert wird. Wird direkt aus dem Feld threat_level zugeordnet, das aus column18 im CSV-Parsepfad abgeleitet wird. Wird direkt aus dem Feld feed_name zugeordnet, das aus column16 im CSV-Parsepfad abgeleitet wird. Wird beim CSV-Parsing aus column21 und column14 abgeleitet. Abgeleitet von column6 beim CSV-Parsing oder Attribute.comment beim JSON-Parsing. Mehrere Felder werden als Erkennungsfelder mit den entsprechenden Schlüsseln hinzugefügt. Mehrere Felder werden als Labels mit den entsprechenden Schlüsseln hinzugefügt. Aus dem Feld timestamp der obersten Ebene im Rohprotokoll kopiert. |
Änderungen
2023-09-26
- Die folgenden Attribute wurden zugeordnet: „published“, „Feed.publish“, „Org.name“, „Attribute.id“, „Attribute.event_id“, „Attribute.to_ids“, „Attribute.timestamp“, „Attribute.comment“, „Attribute.deleted“, „Attribute.first_seen“ und alle „tag.names“ zu „threat.detection_fields“.
2023-08-17
- Fehlerkorrektur :
- Es wurde eine Bedingung hinzugefügt, um einen „gsub“-Vorgang auszuführen, der nur dann zusätzliche Backslashes entfernt, wenn das Protokoll kein JSON-Format hat.
2023-07-20
- Fehlerkorrektur :
- „metadata.entity_type“ in „MUTEX“ geändert, wenn das Protokoll vom Typ „mutex“ ist.
2023-07-04
- Neu erstellter Parser.