Specyfikacja i szkielet wymiany Cyber Threat Intelligence dla ipIII: import wskaźników (IoC) i feedów oraz eksport incydentu jako STIX bundle. Docelowe standardy: MISP, OpenCTI, STIX 2.1, TAXII 2.1. To dokument projektowy — konektory są na etapie ROADMAP, a warstwa mapowania jako MVP/PoC. Nic tu nie jest oznaczone jako LIVE, dopóki nie ma dowodu (kod + test + endpoint).
Cel: aby ipIII przyjmował wskaźniki kompromitacji z zewnętrznych źródeł CTI (feed/kolekcja TAXII, eksport MISP), znormalizował je do wewnętrznego modelu i — po zamknięciu analizy — potrafił wyeksportować incydent z powrotem jako STIX 2.1 bundle do współdzielenia z partnerami. Wszystko wyłącznie defensywnie: to wymiana wiedzy o zagrożeniach dla obrony (blue/GRC), bez elementów ataku.
Malware Information Sharing Platform. Import atrybutów/eventów (IoC) oraz publikacja obserwacji. Wymiana przez PyMISP / REST API lub feed w formacie MISP JSON. Docelowo mapowanie MISP event → incydent ipIII.
Platforma korelacji CTI oparta o model STIX. Wymiana przez GraphQL API / konektory STIX. Docelowo: pobranie obiektów (indicator, malware, threat-actor) i wzbogacenie kontekstu incydentu.
Structured Threat Information Expression. Format serializacji obiektów CTI (indicator, observed-data, relationship). Warstwa mapowania incydent ↔ STIX jako PoC — patrz przykład bundle poniżej.
Trusted Automated eXchange of Intelligence Information. Protokół transportu STIX (API Root, Collections, poll/push). Docelowo klient TAXII do subskrypcji kolekcji i publikacji własnych obserwacji.
| Kierunek | Co | Standard / kanał | Zastosowanie | Status |
|---|---|---|---|---|
| Import (in) | IoC: adresy IP, domeny, hashe plików, URL; feed / kolekcja | MISP JSON / TAXII 2.1 poll / STIX 2.1 bundle | Wzbogacenie incydentu o kontekst zagrożenia, korelacja findingów z wskaźnikami | ROADMAP |
| Export (out) | Incydent ipIII jako STIX bundle (indicator + observed-data + relationship) | STIX 2.1 bundle / TAXII 2.1 push | Współdzielenie obserwacji z partnerami / sektorowym CSIRT (po RoE) | MVP mapping / PoC |
| Normalizacja | Mapowanie pól źródłowych → wewnętrzny model IoC ipIII | schemat wewnętrzny + walidacja | Jednolity model niezależnie od źródła (MISP vs OpenCTI vs surowy STIX) | ROADMAP |
Legenda: ROADMAP = zaplanowane, brak działającego konektora · MVP mapping / PoC = szkielet mapowania na danych syntetycznych, bez integracji produkcyjnej.
Poniżej syntetyczny przykład tego, jak incydent ipIII mógłby zostać wyeksportowany jako STIX 2.1 bundle. Wartości (IP, hash, id) są zmyślone i służą wyłącznie ilustracji struktury. To nie są realne wskaźniki i nie opisują żadnego rzeczywistego zdarzenia.
{
"type": "bundle",
"id": "bundle--00000000-0000-4000-8000-000000000001",
"objects": [
{
"type": "identity",
"spec_version": "2.1",
"id": "identity--00000000-0000-4000-8000-0000000000a1",
"created": "2026-07-05T00:00:00.000Z",
"modified": "2026-07-05T00:00:00.000Z",
"name": "K0NSULT ipIII (syntetyczny nadawca)",
"identity_class": "organization"
},
{
"type": "indicator",
"spec_version": "2.1",
"id": "indicator--00000000-0000-4000-8000-0000000000b2",
"created": "2026-07-05T00:00:00.000Z",
"modified": "2026-07-05T00:00:00.000Z",
"name": "Syntetyczny IoC: adres C2 (przyklad)",
"description": "Dane syntetyczne — wylacznie ilustracja struktury STIX.",
"indicator_types": ["malicious-activity"],
"pattern": "[ipv4-addr:value = '203.0.113.10']",
"pattern_type": "stix",
"valid_from": "2026-07-05T00:00:00.000Z"
},
{
"type": "observed-data",
"spec_version": "2.1",
"id": "observed-data--00000000-0000-4000-8000-0000000000c3",
"created": "2026-07-05T00:00:00.000Z",
"modified": "2026-07-05T00:00:00.000Z",
"first_observed": "2026-07-05T00:00:00.000Z",
"last_observed": "2026-07-05T00:00:00.000Z",
"number_observed": 1,
"object_refs": ["file--00000000-0000-4000-8000-0000000000d4"]
},
{
"type": "file",
"spec_version": "2.1",
"id": "file--00000000-0000-4000-8000-0000000000d4",
"hashes": {
"SHA-256": "0000000000000000000000000000000000000000000000000000000000000000"
},
"name": "sample-artifact.bin (syntetyczny)"
},
{
"type": "relationship",
"spec_version": "2.1",
"id": "relationship--00000000-0000-4000-8000-0000000000e5",
"created": "2026-07-05T00:00:00.000Z",
"modified": "2026-07-05T00:00:00.000Z",
"relationship_type": "based-on",
"source_ref": "indicator--00000000-0000-4000-8000-0000000000b2",
"target_ref": "observed-data--00000000-0000-4000-8000-0000000000c3"
}
]
}
Wszystkie kroki na etapie ROADMAP; dziś istnieje jedynie szkielet mapowania (przykład powyżej) jako PoC.
Poniżej architektura referencyjna zaprojektowana dla federacyjnego węzła CTI ipIII — dokument projektowy z fali IP3-W6-R5-T04, nieuruchomiony. Pokazuje docelowy przepływ i minimalny stos technologiczny, nie działający system.
[MISP] | REST / PyMISP v [CTI Normalizer] | STIX 2.1 bundles v [TAXII Server] <----> [Federacja / partnerzy] | v [OpenCTI Connector] | v [OpenCTI Platform]
Źródło zdarzeń, atrybutów i korelacji operacyjnej.
Kanon danych — format wymiany między wszystkimi elementami stosu.
Interfejs federacyjny — transport kolekcji STIX między partnerami.
Graf wiedzy i analityka — model grafowy relacji CTI.
Elementy pomocnicze w projekcie: PostgreSQL (storage OpenCTI), Elastic (indeksacja), Redis/RabbitMQ (kolejka importu, etap 2). Żaden z elementów tego stosu nie jest dziś uruchomiony w ipIII — to specyfikacja docelowa, nie inwentarz działającej infrastruktury.
Tabela mapowania pól źródłowych MISP na obiekty STIX 2.1 jako podstawa przyszłego normalizera. Status ROADMAP — mapowanie opisane w dokumencie projektowym, konektor niewdrożony.
| MISP | STIX 2.1 |
|---|---|
| Event | Report / Grouping |
Attribute ip-src | IPv4Address / IPv6Address |
Attribute domain | DomainName |
Attribute url | URL observable |
Attribute md5/sha256 | File observable + hashes |
| Galaxy Threat Actor | Intrusion Set / Threat Actor |
| Galaxy Malware | Malware |
| Tag TLP | MarkingDefinition |
| Object relationship | Relationship |
Poniższy fragment Pythona to przykład projektowy z dokumentu specyfikacji — ilustruje zamierzony kształt normalizera MISP→STIX. Kod nie jest uruchomiony w ipIII, nie ma testu integracyjnego ani endpointu; status ROADMAP.
from pymisp import PyMISP
from stix2 import Indicator, Bundle
from datetime import datetime, timezone
misp = PyMISP(url="https://misp.local", key="MISP_API_KEY", ssl=True)
events = misp.search(controller="events", timestamp="24h", pythonify=True)
objects = []
for event in events:
for attr in event.attributes:
if attr.type == "domain":
indicator = Indicator(
name=f"MISP domain {attr.value}",
pattern=f"[domain-name:value = '{attr.value}']",
pattern_type="stix",
valid_from=datetime.now(timezone.utc)
)
objects.append(indicator)
bundle = Bundle(objects)
print(bundle.serialize(pretty=True))
Rekomendacja projektowa: osobne kolekcje per TLP lub domena operacyjna, token per partner, immutable append
dla bundle, deduplikacja po id i modified. Status ROADMAP
— brak wdrożonego serwera TAXII w ipIII.
/api/taxii2/
discovery
collections/
tlp-clear/
tlp-amber/
malware/
phishing/
| Rola | Dostęp |
|---|---|
| federation-reader | GET collections, GET objects |
| federation-publisher | POST objects |
| federation-admin | manage collections |
Federacja publiczna — eksport dozwolony wg projektu.
Społeczność zaufana — eksport dozwolony w obrębie grupy.
Konkretni odbiorcy — eksport ograniczony do wskazanych partnerów.
Nie eksportować automatycznie — wymaga ręcznej decyzji analityka.
Filtr eksportu (przykład projektowy, nieuruchomiony):
def export_allowed(tags):
if "tlp:red" in [t.lower() for t in tags]:
return False
return True
Deduplikacja: klucz stix_id + modified; dla IoC bez stabilnego STIX ID —
sha256(type + value + source + first_seen). Oba warianty to specyfikacja, nie działający kod.
Warunki akceptacji zaprojektowane dla przyszłego pipeline'u — dziś bez działającego harnessu w ipIII. Status ROADMAP.
stix2_validator bundle.json). Sukces: walidator OK, bundle zawiera obiekty indicator/domain/file.Bez eksportu (zasada projektowa): danych osobowych, wewnętrznych komentarzy analityków, źródeł HUMINT, tagów operacyjnych, atrybutów o ograniczonej dystrybucji wg polityki źródła.
| Etap | Zakres | Status |
|---|---|---|
| Etap 1 | MISP REST export, normalizer Python, walidator STIX 2.1, serwer TAXII 2.1, konektor importu OpenCTI | ROADMAP |
| Etap 2 | kolejka Redis/RabbitMQ, retry nieudanych importów, metryki Prometheus, audit log, deduplikacja globalna | ROADMAP |
| Etap 3 | dwukierunkowa federacja, confidence scoring, source reliability, automatyczne wygaszanie IoC, konektory wzbogacania | ROADMAP |
Powiązane: rejestr konektorów → /connectors · warstwa threat intel → /threat-intel · znane ograniczenia (uczciwie) → /known-limitations.