STIX

Otwarty standard OASIS do opisu cyberzagrożeń w formacie JSON: typowane obiekty (SDO/SCO/SRO) i relacje między nimi, służące do wymiany informacji o zagrożeniach.

STIX (Structured Threat Information eXpression, czyli „ustrukturyzowany zapis informacji o zagrożeniach”) to otwarty standard opisu i wymiany informacji o cyberzagrożeniach (CTI, cyber threat intelligence — wywiad o zagrożeniach). Mówiąc prościej: to wspólny język i format, w którym różne systemy bezpieczeństwa mogą zapisać i przekazać sobie wiedzę o atakujących, kampaniach, złośliwym oprogramowaniu, podatnościach i wskaźnikach ataku. Dzięki temu te same dane rozumie zarówno człowiek, jak i maszyna. W aktualnej wersji STIX 2.1 dane zapisuje się w formacie JSON.

STIX zaczął się od inicjatywy zespołu US-CERT i był rozwijany przez organizację MITRE. Od wersji 2.0 standard utrzymuje komitet techniczny OASIS Cyber Threat Intelligence (CTI TC). STIX 2.1 oraz powiązany z nim protokół przesyłania TAXII 2.1 zatwierdzono jako standardy OASIS 10 czerwca 2021 r.

Czym jest STIX?

STIX nie jest produktem ani usługą. To specyfikacja, która opisuje, jak przedstawiać dane o zagrożeniach. Chodzi o to, by usunąć niejednoznaczność. Zamiast luźnych raportów PDF i przypadkowych list adresów, STIX narzuca wspólne słownictwo i strukturę. Pojedynczy wskaźnik (na przykład adres IP serwera sterującego atakiem), kampania, w której się pojawił, i grupa atakująca za nim stojąca — wszystko to można połączyć w jeden, jednoznaczny graf.

Starsza generacja, STIX 1.x, używała formatu XML i osobnej specyfikacji obserwabli o nazwie CybOX. Wersja 2.x porzuciła XML na rzecz JSON, wchłonęła CybOX jako obiekty obserwowalne (SCO) i mocno uprościła model. Obie wersje nie są ze sobą zgodne.

Z jakich obiektów składa się STIX 2.1?

Model STIX 2.1 opiera się na typowanych obiektach, z których każdy ma globalnie unikalny identyfikator (format typ--UUID). Wyróżnia się cztery główne kategorie:

  • SDO — STIX Domain Objects (18 typów): obiekty domenowe, czyli pojęcia wywiadu o zagrożeniach. Należą do nich m.in. attack-pattern, campaign, course-of-action, grouping, identity, indicator, infrastructure, intrusion-set, location, malware, malware-analysis, note, observed-data, opinion, report, threat-actor, tool oraz vulnerability.
  • SCO — STIX Cyber-observable Objects: obiekty opisujące fakty zaobserwowane w sieci lub na komputerze, np. ipv4-addr, domain-name, file (z haszami), url, network-traffic, email-message czy process. To dawne CybOX-y.
  • SRO — STIX Relationship Objects: obiekty, które wiążą pozostałe elementy. relationship łączy dwa obiekty, opisując rodzaj powiązania (np. indicator → indicates → malware), a sighting zapisuje, że dany element został gdzieś zaobserwowany.
  • SMO — STIX Meta Objects: obiekty metadanych, m.in. oznaczenia uprawnień i sposobu udostępniania danych (marking-definition, np. reguły TLP), rozszerzenia oraz dane języka.

Obiekty pakuje się w bundle — pojemnik, który grupuje zestaw obiektów do przesłania. Sam bundle nie nadaje żadnego znaczenia. Powiązania między obiektami wyrażają obiekty relacji (SRO) albo osadzone właściwości referencyjne (np. created_by_ref, object_refs).

Jak działa wzorzec wskaźnika (indicator pattern)?

Najważniejszym obiektem w praktyce jest indicator. Zawiera on wzorzec wykrywania zapisany w języku STIX Patterning. Wzorzec opisuje, jakie obserwable świadczą o zagrożeniu, na przykład:

  • [ipv4-addr:value = '198.51.100.7'] — ruch do konkretnego adresu IP,
  • [file:hashes.'SHA-256' = '…'] — plik o danym haszu,
  • [domain-name:value = 'evil.example'] AND [url:value = 'http://evil.example/payload'] — kombinacja obserwabli.

Takie wzorce można tłumaczyć na reguły konkretnych narzędzi wykrywających (SIEM, EDR, IDS — np. Sigma, Suricata, zapytania KQL/SPL). To właśnie sprawia, że STIX nie jest tylko formatem dokumentacji, ale realnie zasila wykrywanie.

Czym różni się STIX od TAXII?

STIX i TAXII to dwa osobne standardy OASIS, które się uzupełniają, i trzeba je wyraźnie rozdzielać:

  • STIX = format (co): język opisujący treść wywiadu o zagrożeniach, czyli strukturę i znaczenie danych.
  • TAXII = przesyłanie (jak): protokół (oparty na HTTPS/REST), który definiuje sposób wymiany dokumentów STIX między systemami.

TAXII porządkuje wymianę wokół takich pojęć jak API Root, Collection (zbiór, z którego można pobierać obiekty i do którego można je wysyłać) oraz Channel. Obsługuje różne modele dystrybucji: hub-and-spoke (centralne repozytorium), źródło/subskrybent oraz peer-to-peer. Co ważne: STIX można przesyłać także bez TAXII (np. zwykłym plikiem albo innym API), a TAXII teoretycznie mógłby przenosić inne treści — choć w praktyce oba standardy projektowano do współpracy.

Dlaczego STIX ma znaczenie dla bezpieczeństwa i SOC?

Dla zespołu SOC (centrum operacji bezpieczeństwa), platformy threat intelligence (TIP) i monitoringu sieci (NDR/NSM) STIX rozwiązuje problem skali i zgodności między systemami:

  • Automatyczne zasilanie wykrywania: wskaźniki w formacie STIX można automatycznie pobierać z feedów (ISAC, CERT, dostawcy komercyjni) przez TAXII i wstrzykiwać do SIEM/EDR/IDS bez ręcznego przepisywania.
  • Kontekst, nie gołe wskaźniki: zamiast samej listy adresów IP czy haszy STIX przenosi powiązania — który wskaźnik należy do której kampanii, grupy i rodziny malware’u. To ogranicza fałszywe alarmy i przyspiesza wstępną ocenę zdarzeń.
  • Wzbogacanie i korelacja: obiekty sighting pozwalają zgłosić, że dany wskaźnik faktycznie zaobserwowano u siebie. Powstaje pętla zwrotna między tym, co widzi sieć, a wywiadem.
  • Mapowanie na techniki ataku: obiekty attack-pattern mogą wskazywać techniki z MITRE ATT&CK, łącząc obserwacje z taktykami i technikami przeciwnika.
  • Higiena udostępniania: oznaczenia marking-definition (np. TLP) i dane o pochodzeniu pozwalają kontrolować, komu wolno przekazać dany fragment wywiadu.

Trzeba też znać ograniczenia. Model STIX bywa nadmiarowo bogaty, jakość danych zależy od źródła (śmieciowe wskaźniki generują szum), a pełne wykorzystanie wymaga platformy, która potrafi parsować, usuwać duplikaty i wygaszać obiekty po czasie (data marking, valid_until).

Dowiedz się więcej