有兩個名詞我卡了很久。
一題在問,STIX 這種東西為什麼人看得懂、機器也讀得動,我答了 TAXII。
另一題問 TAXII 的重要性是什麼,我答了成本效益好、維護負擔低。
以上兩點,我都答錯。
後來想想,我當時根本沒把「情資」當成一個有形狀的東西在看。在我腦袋裡那就是一團從外面餵進來的資料,STIX 跟 TAXII 是掛在它旁邊的兩個英文縮寫,長得都很像,誰是誰、誰在幹嘛我不知道。
那就先從裡面是什麼開始。
大致上有兩種東西。
一種是 IoC,Indicator of Compromise,中文常翻成入侵指標。它很具體,一條就是一個東西:某個檔案的 hash、某個 IP、某個網域、某個 URL。意思是「在你的環境裡看到這個,這台機器可能已經中獎了」。
Day08 我拿檔案的 hash 丟 VirusTotal 去查,查到的那個結果,本質上就是別人整理好的 IoC。
另一種是 TTP,Tactics, Techniques and Procedures,戰術、技術與程序。它描述的不是某個具體的檔案,是攻擊者做事的方式:用什麼手法進來、進來之後怎麼把權限拉高、資料怎麼帶出去。
這兩種東西的壽命差很多。
有一個叫 Pyramid of Pain 的模型在講這件事,直譯是痛苦金字塔,講的是你抓到哪一種指標,會讓攻擊者比較痛。
由下往上是 hash、IP、網域、主機與網路上留下的痕跡、工具,最上面是 TTP。
越靠下面的,攻擊者換掉越不痛。程式碼改一個字重新編譯,hash 就完全不一樣了,原本那條靠hash的指標當場失效。IP 換一台雲端主機就有,網域再買一個也不貴。
越往上越難換。他慣用的手法、習慣的動作順序,那是整套工作方式,也就是TTPs,抓到TTPs就是抓到這個攻擊者他的特徵。所以想做撐得久一點的偵測,通常會往行為模式那一側靠。
順帶一提,IoC 拿到手加進去之前,要先看清楚那一條指的是誰。
不是情資給甚麼hash 就直接加進偵測規則。那條如果指的是微軟自己簽章的正版系統檔案,加下去的結果是全公司每一台 Windows 同時命中,警報噴滿。而冒牌的那支程式 hash 本來就跟正版不一樣,想抓冒牌貨也抓不到。
一條 hash 只認得那一個檔案。這句話在太多地方都適用了
情資要在不同組織之間傳來傳去,就得先講好它長什麼樣。
STIX 是 Structured Threat Information Expression,結構化威脅資訊表達式,由 OASIS 這個標準組織維護。它規定的是這份情資怎麼寫:一個 indicator(指標)有哪些欄位、一個 malware(惡意程式)有哪些欄位、兩個東西之間的關係要怎麼表示。
現在的版本是 2.1,寫成 JSON。長得大概像這樣:
{
"type": "indicator",
"spec_version": "2.1",
"id": "indicator--8e2e2d2b-17d4-4cbf-938f-98ee46b3cd3f",
"name": "可疑執行檔",
"pattern": "[file:hashes.'SHA-256' = 'aec07064...']",
"pattern_type": "stix",
"valid_from": "2026-01-01T00:00:00Z"
}
type 說這是哪一種物件、id 是它的身分、pattern 寫要比對的是什麼。
另外有一種物件叫 relationship,專門用來寫「這個 indicator 指向的是那隻惡意程式」,一份一份的情資就這樣被串成一張網,而不是一堆各自獨立的清單。
這裡有一個地方我要先講清楚。
我筆記裡記的是「STIX 底層是 XML,所以人跟機器都讀得懂」。那句話對應的是 STIX 1.x,早年確實是 XML。2.x 之後換成 JSON 了,OASIS 的官方說明寫的是 STIX 2 objects are represented in JSON。
:::warning
所以讀到的資料如果寫 XML,先看一下它在講哪一版。這兩版差得不只是外皮,物件的定義也重寫過。
:::
TAXII 是 Trusted Automated Exchange of Intelligence Information。OASIS 的文件把它==定義成一個透過 HTTPS 交換網路威脅情資的應用層協定==,目前也是 2.1 版。
所以它跟 STIX 根本不在同一層。STIX 是那份檔案該長甚麼樣子,TAXII 是把檔案從你家搬到我家的那條路。
TAXII 這一側有兩種取得法。一種叫 Collection,你去跟伺服器要,它回給你,就是一般的請求跟回應。另一種叫 Channel,訂閱制,有新的就推給你。
TAXII 是為了送 STIX 設計的,但它送的也不一定要是 STIX。
回到我錯的那兩題。
第一題問可讀性。可讀性是內容那一層的事,跟用什麼方式送它沒有關係,我卻拿運送方式去回答內容的問題。
第二題問重要性。我選的省成本、好維護,這種話套在哪個工具上都成立,所以它不太可能是答案。TAXII 只有它自己做得到的事,是讓不同組織之間,包含公部門跟私部門,可以即時把情資丟給對方,而不是各自寄 Excel 檔。
| 名詞 | 它是什麼 | 我的理解 |
|---|---|---|
| IoC | hash、IP、網域這類具體指標 | 看到這個東西,可能中獎了 |
| TTP | 攻擊者的手法與做事順序 | 比較難換掉,所以撐得比較久 |
| STIX | 描述情資的格式,2.1 是 JSON | 這份情資要怎麼寫 |
| TAXII | 交換情資的協定,跑在 HTTPS 上 | 這份情資怎麼送到對方手上 |
知道格式跟管道之後,另一個問題是東西打哪來。
OSINT(Open Source Intelligence,開源情資)是公開就拿得到的,資安廠商的部落格、研究報告、社群上流傳的分析。量大、免費,但品質落差也大。
ISAC(Information Sharing and Analysis Center,資訊分享與分析中心)是同一個產業的人組起來互通有無的組織,金融、醫療、能源各自有自己的。同業會碰到的攻擊常常是同一批,所以這種情資的關聯性特別高。
商業情資是付費訂閱的,通常會附上比較完整的背景與可信度評分。
政府與官方通報免費、可信度高,而且多半是機器可讀的格式,像台灣的 TWCERT/CC 就會發資安訊息與相關指標。
拿到一份情資,我後來會先看三件事:誰發的、什麼時候發的、跟我這個環境有沒有關係。一條半年前針對某個產業的 IP 清單,跟我手上這台機器可能完全搭不上,那它的價值就有限。
還有一件跟考試沒什麼關係但我覺得很有趣的事。各家廠商給攻擊團體取的代號其實是有規則的,CrowdStrike 用動物,Bear 是俄羅斯、Panda 是中國、Kitten 是伊朗、Chollima(千里馬)是北韓。不是國家級的就換一套,Spider 是為了錢的網路犯罪、Jackal 是搞行動主義的那種。微軟則是改用天氣,Blizzard、Typhoon、Sandstorm 各自對應不同來源。
所以看到報告裡冒出一個沒聽過的動物名字,大致上可以先猜到它在講哪一國。
STIX 檔案不用自己生,公開的就有。
MITRE 把整包 ATT&CK 用 STIX 2.1 格式放在 GitHub 上,attack-stix-data 這個 repo 裡面是一包一包的 JSON。現在就可以點進去挑一個檔案打開來看,裡面全是 type 為各種值的物件,一路往下捲會看到 relationship 把它們接起來。檔案很大,瀏覽器直接開可能會卡,抓下來用編輯器開比較順。
OASIS 自己也有一頁範例集,每一個情境配一段完整的 JSON,比規格書好讀很多。想知道一份情資實際上怎麼寫,從這裡進去比從規格書進去快。
最後一件現在就可以做的事,是去翻一下自己公司或手上設備的威脅情資來源,看它餵進來的是哪一種東西、多久更新一次。如果是一份躺在那裡兩年沒換過的 IP 黑名單,那它擋到的東西大概也有限。