OpenCTI 是一個開源平台,允許組織管理其網路威脅情報[1],
我在 SecTools.tw 曾發了一篇用 docker 來搭建 OpenCTI,
並抓取 AlienVault 的資料,
詳細可參考 https://sectools.tw/opencti-docker-alienvault/
所以這篇比較著重在平台的介紹,
大部分的資料來源都是官方文件[2]
我們大概分成幾個層面:
目前可能不會提到共同參與開源專案開發的部分
OpenCTI 的資料儲存採用的是 Graph Model,
圖模型有兩個實體類型:
儲存時為了更容易敘述不同情資之間的關係,採用的是 STIX 格式儲存,
又可以分成:
其餘資料可參考 https://luatix.notion.site/Data-model-4427344d93a74fe194d5a52ce4a41a8d
OpenCTI 其實算是多個服務的集合,前幾篇我有說我的配置給 8核心 16G 記憶體還是會當機,今天仔細看了他們官方的最低要求。
其他依賴服務
Elastic Search
MinIO
Redis
RabbitMQ
Workers and connectors (主要取得情資的來源,這非常重要,雖然他有給很多寫好的docker,供我們直接串接,但是不熟 docker-compose,可能會出事,例如 connectors 所在的 docker network 跟 OpenCTI 不同,結果根本連不上...)
所以知道我為什麼會當機了吧...配太少拉
雖然其他情資平台可能會寫 API 讓其他人好方便處理 CTI,
但要能無痛匯入 OpenCTI 就使用 OpenCTI 準備好的 Connector 吧!
內部設定可參考 https://www.notion.so/Connectors-4586c588462d4a1fb5e661f2d9837db8
另外他們在 github 上放了很多寫好的 connector
https://github.com/OpenCTI-Platform/connectors/tree/master/external-import
(我寫的那篇就是用 alienValut)
其實我們追一下 code
# -*- coding: utf-8 -*-
"""OpenCTI AlienVault connector main module."""
from alienvault import AlienVault
if __name__ == "__main__":
connector = AlienVault()
connector.run()
可以看到他們也是用 STIX
from stix2 import ObjectPath # type: ignore
從 Dockerfile 發現呼叫了 entrypoint.sh
#!/bin/sh
# Correct working directory
cd /opt/opencti-connector-alienvault
# Start the connector
python main.py
回到上面那段 AlienVault()
然後發現 AlienVault 的格式
隨便找一篇對應一下欄位,大部分都會對到
不過不知道發生什麼事,寫這篇文時跑去抓, Pulses 都空的...
之後有空再回頭看看
其實這部分單純是喜歡追一下 code,說不定哪天就要自己寫一個,回饋一下開源社群。
我發現其他人寫的文章第一天都會是前言然後整個三十天的規劃..,我比較像是想到什麼寫什麼,缺少一些邏輯,
我可能在最後一天再寫一個統整部分,明天我們針對一兩個抓到的情資,在 OpenCTI 做一些人工的分析。