Cyril FrançoisAndrew Pease

STIXy-Situationen: ECSaping Ihrer Bedrohungsdaten

Strukturierte Bedrohungsdaten werden in der Regel mit STIX formatiert. Um Ihnen dabei zu helfen, diese Daten in Elasticsearch zu übertragen, veröffentlichen wir ein Python-Skript, das STIX in ein ECS-Format konvertiert, das Sie in Ihren Stack einfügen können.

11 Minuten LesezeitTools
STIXy Situationen: Entkommen Sie Ihren Bedrohungsdaten

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.

OptionBeschreibung
-hZeigt das Hilfemenü an
-igibt das eingegebene STIX-Dokument an (obligatorisch)
-oGibt das ECS-Ausgabedokument an (optional)
-pdefiniert das ECS-Anbieterfeld (optional)
-rrekursiver Modus zum Konvertieren mehrerer STIX-Dokumente (optional)
-egibt den Elasticsearch-Ausgabemodus an (optional)
--indexdefiniert den Elasticsearch Index, erfordert -e (optional)
--urldefiniert die Elasticsearch-URL, erfordert -e (optional)
--Benutzerdefiniert 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.