Präambel
Organisationen, die Bedrohungsindikatoren oder Observables verwenden, nutzen, erstellen und/oder veröffentlichen (idealerweise) Bedrohungsdaten. Diese Daten können intern oder extern als Informationen oder Informationen verwendet werden, um die Entscheidungsfindung und die Priorisierung von Ereignissen zu unterstützen.
Es gibt zwar mehrere Formate, in die diese Informationen strukturiert werden können, aber der De-facto-Industriestandard ist Structured Threat Information Expression (STIX). STIX wird vom OASIS Cyber Threat Intelligence Technical Committee verwaltet und ermöglicht es Unternehmen, Bedrohungsdaten in einem standardisierten und maschinenlesbaren Format auszutauschen.
Bei Elastic haben wir das Elastic Common Schema (ECS) als Datennormalisierungsfunktion entwickelt. "[ECS] ist eine Open-Source-Spezifikation, die mit Unterstützung der Elastic-Benutzergemeinschaft entwickelt wurde. ECS definiert einen gemeinsamen Satz von Feldern zum Speichern von Ereignisdaten in Elasticsearch, wie z. B. Protokolle und Metriken." Im April 2023 trug Elastic ECS zu den OpenTelemetry Semantic Conventions (OTel) bei, um sich für die gemeinsame Entwicklung eines offenen Schemas zu engagieren.
Die Sicherheits-Community teilt Bedrohungsdaten im STIX-Format. Um diese Daten in Elasticsearch für die Analyse und Bedrohungserkennung zu speichern [1] [2] [3] [4], haben wir ein Tool entwickelt, das STIX-Dokumente in ECS konvertiert und die Bedrohungsdaten entweder als Datei oder direkt in Elasticsearch-Indizes ausgibt. Wenn dies für uns eine Herausforderung war, war es eine Herausforderung für andere - daher haben wir uns entschieden, eine Version des Tools zu veröffentlichen.
Dieses Tool verwendet die Elastic License 2.0 und steht hier zum Download zur Verfügung.
Einrichten der DGA-Erkennung
Dieses Projekt verwendet ein JSON-Dokument im STIX 2.x-Format und erstellt eine ECS-Version. Es gibt drei Ausgabeoptionen: STDOUT als JSON, eine NDJSON-Datei und/oder direkt in einen Elasticsearch-Cluster.
Voraussetzungen
Das STIX 2 ECS-Projekt erfordert Python 3.10+ und die Module stix2, Elasticsearch und getpass .
Wenn Sie nach Elasticsearch exportieren, benötigen Sie die Hostinformationen und Authentifizierungsanmeldeinformationen. Die API-Authentifizierung ist noch nicht implementiert.
Einrichtung
Erstellen Sie eine virtuelle Umgebung, und installieren Sie die erforderlichen Voraussetzungen.
git clone https://github.com/elastic/labs-releases.git
cd tools/stix2ecs
python -m venv /path/to/virtual/environments/stix2ecs
source /path/to/virtual/environments/stix2ecs/bin/activate
python -m pip install -r requirements.txt
Operation
Die Eingabe ist ein STIX 2.x JSON-Dokument (oder ein Ordner mit JSON-Dokumenten); Die Ausgabe ist standardmäßig STDOUT mit der Option, eine NDJSON-Datei zu erstellen und/oder an einen Elasticsearch-Cluster zu senden.
stix_to_ecs.py [-h] -i INPUT [-o OUTPUT] [-e] [--index INDEX] [--url URL] \
[--user USER] [-p PROVIDER] [-r]
Standardmäßig hat die ECS-Datei den gleichen Namen wie die STIX-Dateieingabe, jedoch mit .ecs.ndjson
angehängt.
Arguments
Das Skript hat mehrere Argumente, das einzige Pflichtfeld ist -i
für die Eingabe. Standardmäßig gibt das Skript das NDJSON-Dokument an STDOUT aus.
Option | Beschreibung |
---|---|
-h | Zeigt das Hilfemenü an |
-i | gibt das eingegebene STIX-Dokument an (obligatorisch) |
-o | Gibt das ECS-Ausgabedokument an (optional) |
-p | definiert das ECS-Anbieterfeld (optional) |
-r | rekursiver Modus zum Konvertieren mehrerer STIX-Dokumente (optional) |
-e | gibt den Elasticsearch-Ausgabemodus an (optional) |
--index | definiert den Elasticsearch Index, erfordert -e (optional) |
--url | definiert die Elasticsearch-URL, erfordert -e (optional) |
--Benutzer | definiert den Elasticsearch-Benutzernamen, erfordert -e (optional) |
Beispiele
Es gibt zwei Beispieldateien, die sich im test-inputs/
Verzeichnis befinden. Einer stammt von CISA (Cybersecurity & Infrastructure Security Agency) und einer von OpenCTI (einer Open-Source-Plattform für Bedrohungsinformationen).
STIX-Dateieingabe in STDOUT
Dadurch wird das STIX-Dokument im ECS-Format in STDOUT ausgegeben.
python stix_to_ecs.py -i test-inputs/cisa_sample_stix.json | jq
[
{
"threat": {
"indicator": {
"file": {
"name": "123.ps1",
"hash": {
"sha256": "ED5D694D561C97B4D70EFE934936286FE562ADDF7D6836F795B336D9791A5C44"
}
},
"type": "file",
"description": "Simple indicator of observable {ED5D694D561C97B4D70EFE934936286FE562ADDF7D6836F795B336D9791A5C44}",
"first_seen": "2023-11-21T18:57:25.000Z",
"provider": "identity--b3bca3c2-1f3d-4b54-b44f-dac42c3a8f01",
"modified_at": "2023-11-21T18:57:25.000Z",
"marking": {
"tlp": "clear"
}
}
}
},
...
STIX-Dateieingabe in ECS-Dateiausgabe
Dadurch wird ein Ordner mit dem Namen ecs
im aktuellen Verzeichnis erstellt und die ECS-Datei dorthin geschrieben.
python python stix_to_ecs.py -i test-inputs/cisa_sample_stix.json -o ecs
cat ecs/cisa_sample_stix.ecs.ndjson | jq
{
"threat": {
"indicator": {
"file": {
"name": "123.ps1",
"hash": {
"sha256": "ED5D694D561C97B4D70EFE934936286FE562ADDF7D6836F795B336D9791A5C44"
}
},
"type": "file",
"description": "Simple indicator of observable {ED5D694D561C97B4D70EFE934936286FE562ADDF7D6836F795B336D9791A5C44}",
"first_seen": "2023-11-21T18:57:25.000Z",
"provider": "identity--b3bca3c2-1f3d-4b54-b44f-dac42c3a8f01",
"modified_at": "2023-11-21T18:57:25.000Z",
"marking": {
"tlp": "clear"
}
}
}
}
...
STIX-Dateieingabe in die ECS-Dateiausgabe, Definition des Anbieterfelds
Das Anbieterfeld ist in der Regel eine GUID im STIX-Dokument. Um es benutzerfreundlicher zu gestalten, können Sie das Argument -p
verwenden, um das Feld threat.indicator.provider
zu definieren.
python stix_to_ecs.py -i test-inputs/cisa_sample_stix.json -o ecs -p "Elastic Security Labs"
cat ecs/cisa_sample_stix.ecs.ndjson | jq
{
"threat": {
"indicator": {
"file": {
"name": "123.ps1",
"hash": {
"sha256": "ED5D694D561C97B4D70EFE934936286FE562ADDF7D6836F795B336D9791A5C44"
}
},
"type": "file",
"description": "Simple indicator of observable {ED5D694D561C97B4D70EFE934936286FE562ADDF7D6836F795B336D9791A5C44}",
"first_seen": "2023-11-21T18:57:25.000Z",
"provider": "Elastic Security Labs",
"modified_at": "2023-11-21T18:57:25.000Z",
"marking": {
"tlp": "clear"
}
}
}
}
...
STIX-Verzeichniseingabe in ECS-Dateiausgänge
Wenn Sie über ein Verzeichnis mit STIX-Dokumenten verfügen, können Sie das Argument -r
verwenden, um das Verzeichnis rekursiv zu durchsuchen und die ECS-Dokumente in das Ausgabeverzeichnis zu schreiben.
python stix_to_ecs.py -ri test-inputs -o ecs
STIX-Dateieingabe in die Elasticsearch-Ausgabe
Für die Ausgabe in Elasticsearch können Sie entweder Elastic Cloud oder eine lokale Instanz verwenden. Local Elasticsearch verwendet Port 9200
und Elastic Cloud Port 443
. Standardmäßig ist eine gültige TLS-Sitzung mit Elasticsearch erforderlich.
Erstellen Sie zunächst einen Index, falls Sie noch keinen haben. In diesem Beispiel erstellen wir einen Index mit dem Namen stix2ecs
, aber der Indexname ist nicht relevant.
curl -u {username} -X PUT "https://elasticsearch:port/stix2ecs?pretty"
{
"acknowledged" : true,
"shards_acknowledged" : true,
"index" : "stix2ecs"
}
Definieren Sie als Nächstes die Elasticsearch-Ausgabeoptionen.
python stix_to_ecs.py -i test-inputs/cisa_sample_stix.json -e --url https://elasticsearch:port --user username --index stix2ecs
Wenn Sie die Daten in Elasticsearch speichern, um sie auf einer anderen Plattform zu verwenden, können Sie die Indikatoren mit cURL anzeigen.
curl -u {username} https://elasticsearch:port/stix2ecs/_search?pretty
{
"took" : 2,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 3,
"relation" : "eq"
},
"max_score" : 1.0,
"hits" : [
{
"_index" : "stix2ecs",
"_id" : "n2lt8IwBahlUtp0hzm9i",
"_score" : 1.0,
"_source" : {
"threat" : {
"indicator" : {
"file" : {
"name" : "123.ps1",
"hash" : {
"sha256" : "ED5D694D561C97B4D70EFE934936286FE562ADDF7D6836F795B336D9791A5C44"
}
},
"type" : "file",
"description" : "Simple indicator of observable {ED5D694D561C97B4D70EFE934936286FE562ADDF7D6836F795B336D9791A5C44}",
"first_seen" : "2023-11-21T18:57:25.000Z",
"provider" : "identity--b3bca3c2-1f3d-4b54-b44f-dac42c3a8f01",
"modified_at" : "2023-11-21T18:57:25.000Z",
"marking" : {
"tlp" : "clear"
}
}
}
}
}
...
Wenn Sie Kibana verwenden, können Sie eine Datenansicht für Ihren stix2ecs
Index erstellen, um die aufgenommenen Indikatoren anzuzeigen.
Schließlich können Sie dies als Indikatorquelle für Indikatorabgleichsregeln verwenden.
Zusammenfassung
Wir hoffen, dass dieses Projekt Ihrem Unternehmen hilft, Ihre Bedrohungsdaten zu analysieren und zu operationalisieren. Wenn Sie mit dem Elastic Common Schema noch nicht vertraut sind, können Sie hier mehr darüber erfahren.
Wie immer können Sie gerne ein Problem mit Fragen, Kommentaren, Bedenken oder Beschwerden eröffnen.
Über Elastic Security Labs
Elastic Security Labs ist der Threat-Intelligence-Zweig von Elastic Security, der sich der Schaffung positiver Veränderungen in der Bedrohungslandschaft verschrieben hat. Elastic Security Labs bietet öffentlich zugängliche Forschungsergebnisse zu neuen Bedrohungen mit einer Analyse der strategischen, operativen und taktischen Ziele von Angreifern und integriert diese Forschung dann mit den integrierten Erkennungs- und Reaktionsfunktionen von Elastic Security.
Folgen Sie Elastic Security Labs auf Twitter @elasticseclabs und sehen Sie sich unsere Forschungsergebnisse unter www.elastic.co/security-labs/ an.