OpenCanary-Protokolle erfassen
Übersicht
Dieser Parser extrahiert Felder aus OpenCanary-SYSLOG- und JSON-Logs, normalisiert sie in das UDM-Format und ergänzt die Daten um abgeleitete Felder wie metadata.event_type
und security_result.severity
. Es unterstützt verschiedene Protokollformate, führt eine IP-Adressüberprüfung durch und ordnet Felder den entsprechenden UDM-Objekten wie principal
, target
und network
zu.
Hinweise
- Sie benötigen eine Google SecOps-Instanz.
- Sie benötigen erhöhte Zugriffsrechte für OpenCanary.
Feed in Google SecOps für die Aufnahme der OpenCanary-Protokolle konfigurieren
- 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. OpenCanary-Protokolle.
- Wählen Sie als Quelltyp Webhook aus.
- Wählen Sie OpenCanary als Logtyp 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, mit dem Sie sich bei Google Security Operations authentifizieren.SECRET
: der geheime Schlüssel, den Sie zur Authentifizierung des Feeds generiert haben.
OpenCanary-Webhook für Google SecOps einrichten
Suchen Sie die OpenCanary-Konfigurationsdatei
config.json
.Öffnen Sie die Datei
config.json
in einem Texteditor.Suchen Sie in der Konfigurationsdatei den Abschnitt Benachrichtigungsdienste.
Wenn bereits ein
webhook
-Benachrichtigungsmechanismus vorhanden ist, ändern Sie ihn. Andernfalls fügen Sie einen neuen Eintrag für denwebhook
-Benachrichtigungsempfänger hinzu.Verwenden Sie die folgende Konfiguration und ersetzen Sie dabei ENDPOINT_URL, SECRET und API_KEY durch Ihre Werte:
"handlers": {
"Webhook": {
"class": "opencanary.logger.WebhookHandler",
"url": "<ENDPOINT_URL>",
"method": "POST",
"data": {"message": "%(message)s"},
"status_code": 200,
"headers": {
"X-Webhook-Access-Key": "<SECRET>",
"X-goog-api-key": "<API_KEY>"
}
}
}
- Speichern Sie die Datei
config.json
. - Starten Sie den OpenCanary-Dienst neu, damit die Änderungen übernommen werden. (z. B.
sudo systemctl restart opencanary
).
UDM-Zuordnungstabelle
Logfeld | UDM-Zuordnung | Logik |
---|---|---|
dst_host |
target.asset.ip |
Das Feld dst_host des Rohlogs wird dem UDM zugeordnet. Auch target.ip zugeordnet. |
dst_host |
target.ip |
Das Feld dst_host des Rohlogs wird dem UDM zugeordnet. Auch target.asset.ip zugeordnet. |
dst_port |
target.port |
Das Feld dst_port des Rohlogs wird in einen String und dann in eine Ganzzahl umgewandelt und dem UDM zugeordnet. |
local_time |
metadata.event_timestamp |
Das Feld local_time des Rohlogs wird verwendet, um das Feld metadata.event_timestamp in der UDM zu füllen. Der Parser verwendet create_time aus dem Batch-Objekt, wenn das Feld local_time nicht vorhanden ist. |
local_time_adjusted |
security_result.detection_fields |
Das Feld local_time_adjusted des Rohlogs wird dem Array security_result.detection_fields im UDM als Schlüssel/Wert-Paar hinzugefügt. |
logdata.COMMUNITY_STRING |
security_result.detection_fields |
Das Feld logdata.COMMUNITY_STRING des Rohlogs wird dem Array security_result.detection_fields im UDM als Schlüssel/Wert-Paar hinzugefügt. |
logdata.DOMAIN |
principal.administrative_domain |
Das Feld logdata.DOMAIN des Rohlogs wird dem UDM zugeordnet. |
logdata.FILENAME |
target.file.full_path |
Das Feld logdata.FILENAME des Rohlogs wird dem UDM zugeordnet. |
logdata.HOSTNAME |
principal.asset.hostname |
Wenn das Feld logdata.HOSTNAME keine IP-Adresse ist, wird es dem UDM zugeordnet. Auch principal.hostname zugeordnet. |
logdata.HOSTNAME |
principal.asset.ip |
Wenn das Feld logdata.HOSTNAME eine IP-Adresse ist, wird es dem UDM zugeordnet. Auch principal.ip zugeordnet. |
logdata.HOSTNAME |
principal.hostname |
Wenn das Feld logdata.HOSTNAME keine IP-Adresse ist, wird es dem UDM zugeordnet. Auch principal.asset.hostname zugeordnet. |
logdata.HOSTNAME |
principal.ip |
Wenn das Feld logdata.HOSTNAME eine IP-Adresse ist, wird es dem UDM zugeordnet. Auch principal.asset.ip zugeordnet. |
logdata.LOCALNAME |
principal.asset.hostname |
Das Feld logdata.LOCALNAME des Rohlogs wird dem UDM zugeordnet. Auch principal.hostname zugeordnet. |
logdata.LOCALNAME |
principal.hostname |
Das Feld logdata.LOCALNAME des Rohlogs wird dem UDM zugeordnet. Auch principal.asset.hostname zugeordnet. |
logdata.LOCALVERSION |
principal.platform_version |
Das Feld logdata.LOCALVERSION des Rohlogs wird dem UDM zugeordnet. |
logdata.PASSWORD |
extensions.auth.mechanism |
Wenn das Feld logdata.PASSWORD vorhanden ist, setzt der Parser extensions.auth.mechanism in der UDM auf USERNAME_PASSWORD . |
logdata.PATH |
network.http.referral_url |
Das Feld logdata.PATH des Rohlogs wird dem UDM zugeordnet. |
logdata.REMOTENAME |
target.asset.hostname |
Das Feld logdata.REMOTENAME des Rohlogs wird dem UDM zugeordnet. Auch target.hostname zugeordnet. |
logdata.REMOTENAME |
target.hostname |
Das Feld logdata.REMOTENAME des Rohlogs wird dem UDM zugeordnet. Auch target.asset.hostname zugeordnet. |
logdata.REMOTEVERSION |
target.platform_version |
Das Feld logdata.REMOTEVERSION des Rohlogs wird dem UDM zugeordnet. |
logdata.SMBVER |
network.application_protocol |
Wenn das Feld logdata.SMBVER vorhanden ist, setzt der Parser network.application_protocol in der UDM auf SMB . |
logdata.USERAGENT |
network.http.parsed_user_agent |
Das Feld logdata.USERAGENT des Rohlogs wird in einen geparsten User-Agent umgewandelt und dem UDM zugeordnet. |
logdata.USERAGENT |
network.http.user_agent |
Das Feld logdata.USERAGENT des Rohlogs wird dem UDM zugeordnet. |
logdata.USERNAME |
target.user.userid |
Das Feld logdata.USERNAME des Rohlogs wird dem UDM zugeordnet. |
loglevel |
security_result.severity |
Das Feld loglevel des Rohlogs bestimmt die security_result.severity im UDM. WARNING wird HIGH zugeordnet, INFO /INFORMATION wird LOW zugeordnet. |
logtype |
security_result.detection_fields |
Das Feld logtype des Rohlogs wird dem Array security_result.detection_fields im UDM als Schlüssel/Wert-Paar hinzugefügt. |
node_id |
principal.asset.asset_id |
Dem Feld node_id des Rohlogs wird „id:“ vorangestellt und es wird dem UDM zugeordnet. |
src_host |
principal.asset.ip |
Das Feld src_host des Rohlogs wird dem UDM zugeordnet. Auch principal.ip zugeordnet. |
src_host |
principal.ip |
Das Feld src_host des Rohlogs wird dem UDM zugeordnet. Auch principal.asset.ip zugeordnet. |
src_port |
principal.port |
Das Feld src_port des Rohlogs wird in eine Ganzzahl konvertiert und dem UDM zugeordnet. |
utc_time |
security_result.detection_fields |
Das Feld utc_time des Rohlogs wird dem Array security_result.detection_fields im UDM als Schlüssel/Wert-Paar hinzugefügt. |
Änderungen
2024-03-11
- Ungültiges Zeichen am Ende von JSON-Protokollen entfernt, um nicht geparste Protokolle zu parsen.
- Die Zuordnungen „principal.ip“ und „principal.asset.ip“ wurden angeglichen.
- Die Zuordnungen „target.ip“ und „target.asset.ip“ wurden angeglichen.
2024-02-08
- Neu erstellter Parser.