
1. 項目概述當大語言模型遇上威脅情報分析最近在做一個挺有意思的嘗試把SecGPT-14B這個大模型和我們日常做威脅分析時離不開的ATTCK框架給結合起來了。核心目標很簡單讓機器能看懂那些零散、非結構化的威脅報告自動把里面提到的攻擊者行為也就是TTPs映射到ATTCK這個標準化的知識庫里最后還能生成一張可視化的戰術圖譜。這活兒聽起來像是安全分析師的高級活兒對吧但說實話手動做這個映射費時費力還容易出錯一份幾十頁的報告光是把里面的攻擊手法一個個找出來、對上ATTCK的編號可能就得花上半天。所以這個項目的出發點就是想看看能不能用現在火熱的AI特別是專門為安全領域調優過的大模型來把這個過程自動化、智能化。SecGPT-14B顧名思義是一個擁有140億參數、專門針對網絡安全領域進行預訓練和指令微調的大語言模型。它和通用大模型最大的區別在于它的“知識庫”里塞滿了大量的漏洞描述、攻擊樣本、安全事件報告、惡意代碼分析甚至是ATTCK、CAPEC這些標準框架的條目。這就意味著你跟它聊“永恒之藍”或者“供應鏈攻擊”它比ChatGPT更能理解背后的技術細節和上下文。而ATTCK框架可以說是我們安全從業者的“共同語言”它把攻擊者的行為拆解成戰術Tactic、技術Technique和子技術Sub-Technique三個層級形成了一個龐大的、結構化的知識圖譜。TTPs自動映射就是要從文本中識別出“攻擊者使用了Mimikatz進行憑證轉儲”這樣的描述然后精準地關聯到ATTCK中的“T1003.001: OS Credential Dumping: LSASS Memory”這個技術節點上。這個項目適合誰呢首先肯定是安全運營中心SOC的分析師、威脅情報團隊的工程師每天要處理海量告警和報告這個工具能極大提升初篩和分類的效率。其次對于紅隊和藍隊演練的復盤自動化的TTPs提取能幫助快速梳理攻擊路徑和防御缺口。甚至對于安全產品研發比如EDR、SIEM的規則庫建設自動化的ATTCK標簽生成也能提供不小的助力。簡單說只要你需要和“攻擊行為描述”打交道這個思路就值得你花時間了解一下。2. 核心思路與方案選型背后的考量為什么選SecGPT-14B而不是直接用GPT-4或者開源的Llama 3這里面的門道得從任務的特性和模型的能力邊界說起。TTPs映射本質上是一個高度專業化、強領域知識依賴的命名實體識別NER和關系抽取RE任務。通用大模型雖然語言理解能力強但在面對“進程注入”、“憑證轉儲”、“橫向移動”這些安全黑話時容易產生幻覺或者給出一個看似合理但實際錯誤的ATTCK ID。比如它可能知道“dump credentials”是憑證轉儲但未必能精確區分是轉儲LSASS內存T1003.001還是轉儲安全賬戶管理器SAM文件T1003.002。SecGPT-14B的優勢就在于它的“安全基因”。它在訓練階段見過了足夠多的威脅報告、漏洞描述和ATTCK官方文檔對于這些專業術語和它們之間的細微差別有更強的“肌肉記憶”。這就好比讓一個醫學院的學生和一個文學系的學生同時去讀一篇復雜的病例報告前者顯然能更快、更準地抓住關鍵病理和診療方案。我們的方案就是利用SecGPT-14B的這種領域理解能力把它作為一個強大的“文本理解與信息提取引擎”。整個方案的架構可以拆解成三個核心環節我稱之為“理解-映射-構圖”流水線信息理解與抽取將非結構化的威脅報告文本可以是PDF、網頁、純文本輸入給SecGPT-14B通過精心設計的提示詞Prompt引導模型識別并抽取出其中描述的攻擊行為實體。這里的關鍵不是讓模型“創造”而是讓它“復述”和“結構化”。TTPs標準化映射將上一步抽取出的攻擊行為描述再次交給SecGPT-14B或一個專門的分類器與ATTCK知識庫進行匹配輸出最可能的戰術、技術和子技術ID及名稱。這一步是精度要求最高的需要模型在眾多相似技術中做出精準判斷。戰術圖譜可視化生成將映射成功的TTPs按照ATTCK的戰術階段如初始訪問、執行、持久化、權限提升、防御規避、憑證訪問、發現、橫向移動、收集、命令與控制、滲出、影響進行組織利用圖數據庫如Neo4j或繪圖庫如Graphviz, D3.js生成直觀的“攻擊鏈”或“戰術熱圖”。在方案選型上我們放棄了傳統的基于規則正則表達式或純統計機器學習如BERT微調的方法。規則方法維護成本高難以覆蓋攻擊手法的各種表述變體而從頭訓練一個專門的BERT模型需要大量高質量的標注數據成本也不低。SecGPT-14B提供了一種“少樣本”或“零樣本”的潛力通過巧妙的Prompt工程我們可以在沒有或僅有少量標注數據的情況下快速啟動并達到不錯的準確率。當然這并不意味著它是完美的后面我會詳細講我們遇到的挑戰和調優策略。3. 實操要點Prompt工程與數據預處理的門道直接丟給SecGPT-14B一段報告原文然后說“把里面的TTPs找出來”結果大概率是災難性的。大模型需要清晰、明確的指令。我們的核心工作很大一部分花在了設計“對的”Prompt上。這不是簡單的提問而是為模型構建一個清晰的“思維框架”。3.1 分階段Prompt設計我們采用了兩階段Prompt策略而不是試圖用一個復雜的Prompt解決所有問題。第一階段Prompt信息抽取你是一個專業的網絡安全威脅分析師。請仔細閱讀以下威脅事件描述文本并嚴格按照JSON格式輸出結果。 你的任務是 1. 識別并列出文本中描述的所有具體的攻擊行為或技術動作。 2. 對于每個識別出的攻擊行為用原文中的詞句或高度概括的短語進行描述。 3. 不要進行任何ATTCK框架的映射僅做識別和描述。 文本內容[此處粘貼需要分析的威脅報告段落] 請輸出如下格式的JSON { identified_actions: [ {id: 1, description: 攻擊行為1的原文描述或概括}, {id: 2, description: 攻擊行為2的原文描述或概括}, ... ] }這個Prompt的關鍵在于“僅做識別不做映射”。這強制模型專注于文本理解避免了它在不熟悉的領域進行過早且可能錯誤的關聯。我們實測發現這樣拆分后模型抽取動作描述的準確率召回率有明顯提升。第二階段PromptTTPs映射你是一個精通MITRE ATTCK框架的安全專家。下面是一些從威脅報告中提取的攻擊行為描述。你的任務是將每個描述映射到最合適的MITRE ATTCK技術或子技術上。 請遵循以下規則 1. 優先匹配子技術Sub-Technique如果不存在或不確定則匹配到父技術Technique。 2. 必須提供ATTCK ID如T1059.001和正式名稱。 3. 如果某個描述明顯對應多個技術列出所有可能性并標注主要匹配項。 4. 如果無法找到任何合理匹配則輸出Not Found。 攻擊行為描述列表 1. [行為描述1] 2. [行為描述2] ... 請輸出如下格式的JSON { mappings: [ { action_id: 1, action_description: [重復描述1], primary_ttp: { id: TXXXX.XXX, name: ATTCK技術名稱 }, alternative_ttps: [ {id: TYYYY.YYY, name: 備選技術名稱} ] }, ... ] }這個Prompt明確了輸出格式、匹配優先級和不確定性處理方式。我們還會在Prompt的上下文Context中附帶幾個高質量的例子Few-shot Learning比如給出“攻擊者使用PowerShell下載惡意載荷”映射到“T1059.001: Command and Scripting Interpreter: PowerShell”的例子讓模型更好地理解我們的意圖。注意Prompt不是一成不變的。針對不同的報告風格如技術深度報告vs.高管摘要可能需要微調Prompt的措辭。例如對于技術細節較少的摘要可以加入“請根據上下文和常見攻擊模式進行合理推斷”的指令。3.2 數據預處理與后處理模型不是神直接喂給它原始文本效果會打折扣。必要的預處理能提升效果文本清洗與分段去除無關的頁眉頁腳、圖表標題。將長報告按章節或自然段落分割每次輸入模型的文本控制在1000-1500個token以內以保證模型有足夠的上下文窗口處理核心內容。關鍵信息增強有時報告中會用“類似X工具的手法”來描述。我們會在預處理階段用一個簡單的安全知識圖譜比如關聯了常見黑客工具與其對應TTPs的數據庫進行淺層匹配并將匹配到的可能TTPs名稱作為“提示信息”附加到輸入文本中引導模型關注。例如在文本旁標注“注文中提到的Mimikatz通常用于憑證轉儲技術”。結果去重與沖突解決模型可能會對同一行為的稍不同表述輸出多個映射結果。后處理步驟需要根據ATTCK ID進行去重。對于沖突的映射比如一個行為被映射到兩個不同的技術我們會設計一個簡單的置信度評分機制例如基于模型輸出概率或描述匹配的精確度或保留所有結果供分析師最終審核。4. 核心環節實現從文本到圖譜的完整流程這里我以一個模擬的威脅報告片段為例走一遍完整的流程。假設我們有以下文本“攻擊者通過發送釣魚郵件誘導目標點擊鏈接下載并執行了一個偽裝成PDF的惡意可執行文件。該文件運行后創建了計劃任務以實現持久化并嘗試連接C2服務器evil.com的443端口。隨后它在內存中加載了Mimikatz模塊嘗試從lsass.exe進程轉儲憑證。”4.1 步驟一信息抽取我們將上述文本放入第一階段Prompt調用SecGPT-14B的API。一個理想的輸出可能如下{ identified_actions: [ {id: 1, description: 發送釣魚郵件誘導點擊惡意鏈接}, {id: 2, description: 下載并執行偽裝成PDF的惡意可執行文件}, {id: 3, description: 創建計劃任務以實現持久化}, {id: 4, description: 嘗試連接C2服務器evil.com的443端口}, {id: 5, description: 在內存中加載Mimikatz模塊}, {id: 6, description: 從lsass.exe進程轉儲憑證} ] }4.2 步驟二TTPs映射將抽取出的6個行為描述列表放入第二階段Prompt。同樣調用API得到映射結果{ mappings: [ { action_id: 1, action_description: 發送釣魚郵件誘導點擊惡意鏈接, primary_ttp: {id: T1566.001, name: Phishing: Spearphishing Attachment}, alternative_ttps: [{id: T1566.002, name: Phishing: Spearphishing Link}] }, { action_id: 2, action_description: 下載并執行偽裝成PDF的惡意可執行文件, primary_ttp: {id: T1204.002, name: User Execution: Malicious File}, alternative_ttps: [] }, { action_id: 3, action_description: 創建計劃任務以實現持久化, primary_ttp: {id: T1053.005, name: Scheduled Task/Job: Scheduled Task}, alternative_ttps: [] }, { action_id: 4, action_description: 嘗試連接C2服務器evil.com的443端口, primary_ttp: {id: T1071.001, name: Application Layer Protocol: Web Protocols}, alternative_ttps: [] }, { action_id: 5, action_description: 在內存中加載Mimikatz模塊, primary_ttp: {id: T1055, name: Process Injection}, alternative_ttps: [{id: T1027, name: Obfuscated Files or Information}] }, { action_id: 6, action_description: 從lsass.exe進程轉儲憑證, primary_ttp: {id: T1003.001, name: OS Credential Dumping: LSASS Memory}, alternative_ttps: [] } ] }可以看到模型成功地將行為映射到了具體的ATTCK子技術上并且對于行為1釣魚它給出了兩個可能的技術這是一個合理的輸出。4.3 步驟三圖譜生成與可視化拿到結構化的TTPs列表后我們就可以按戰術階段組織數據了。我們可以創建一個簡單的數據結構# 示例數據結構 attack_flow [ {tactic: Initial Access, technique: T1566.001, name: Spearphishing Attachment}, {tactic: Execution, technique: T1204.002, name: Malicious File}, {tactic: Persistence, technique: T1053.005, name: Scheduled Task}, {tactic: Command and Control, technique: T1071.001, name: Web Protocols}, {tactic: Privilege Escalation, technique: T1055, name: Process Injection}, # Mimikatz加載常伴隨提權 {tactic: Credential Access, technique: T1003.001, name: LSASS Memory} ]利用Python的graphviz或pyvis庫可以輕松生成一張攻擊鏈圖。更高級的做法是導入Neo4j圖數據庫建立“報告-攻擊行為-ATTCK技術-戰術”的關聯網絡便于進行復雜的關聯查詢和分析比如“哪些攻擊組織最常使用T1053.005和T1003.001的組合”生成的戰術圖譜可以是一個時間線式的攻擊鏈圖也可以是一個矩陣式的熱圖高亮顯示攻擊者涉及的戰術階段。這對于快速向管理層或非技術人員展示攻擊全貌價值巨大。5. 避坑指南精度提升與常見問題排查理想很豐滿但實操中SecGPT-14B并非總是一帆風順。下面是我在項目過程中踩過的一些坑和總結的調優經驗。5.1 映射精度不足的優化策略技術描述模糊報告里常說“使用了自定義后門”這種描述太泛。我們的優化方法是在第二階段Prompt里加入“如果描述模糊請結合常見攻擊模式和安全知識進行推斷并給出推斷依據”。同時在后處理中為這類模糊匹配的結果打上“低置信度”標簽需要人工復核。新舊版本ATTCK差異ATTCK矩陣會更新技術ID和名稱可能變化。必須確保SecGPT-14B訓練數據中的ATTCK知識是最新的或者在映射后增加一個“版本校正”步驟根據官方的映射表將舊ID更新到最新版本。復合型技術描述比如“通過釣魚郵件投遞惡意Excel文檔利用宏下載后續載荷”。這其實包含了初始訪問T1566.001和執行T1204.002等多個步驟。我們的策略是在第一階段Prompt中明確要求“如果一句話中描述了連續或并行的多個攻擊動作請將其拆分為多個獨立的行為描述項。” 引導模型進行分解。5.2 常見錯誤與排查表問題現象可能原因排查與解決思路模型輸出“未找到”或明顯錯誤的技術ID。1. Prompt指令不清晰。2. 輸入文本過于簡短或上下文不足。3. 該技術過于新穎或冷門不在模型知識庫內。1. 檢查并優化Prompt加入Few-shot示例。2. 嘗試提供更長的上下文如前一段落或人工補充一點背景說明。3. 記錄該case作為后續模型微調Fine-tuning的數據集。同一行為被重復映射多次。模型在生成列表時可能出現重復。在后處理階段根據行為描述的語義相似度可用句子向量模型計算和ATTCK ID進行去重合并。映射結果置信度普遍偏低。可能報告文風特殊如大量隱喻、非技術描述或領域極度偏門。考慮引入一個“過濾閾值”只輸出模型置信度高于閾值的結果。對于低置信度部分退回人工處理。或者嘗試使用更專業的領域模型如果存在。API調用速度慢影響整體流程。SecGPT-14B等大模型推理需要時間。對于批量處理采用異步調用隊列。對于實時性要求不高的場景可以夜間批量跑。考慮對報告進行更精細的分塊減少單次輸入的token數量。5.3 一個關鍵的實操心得建立“黃金標準”測試集不要盲目相信模型的輸出。在項目開始初期就手動精心標注50-100個高質量的威脅報告片段涵蓋不同來源、不同技術復雜度作為“黃金標準”測試集。每次調整Prompt、更新模型或修改預處理流程后都在這份測試集上跑一遍計算精確率Precision、召回率Recall和F1值。只有量化指標提升了你的優化才是有意義的。這個測試集是你項目質量的“壓艙石”。6. 效果評估與未來擴展方向經過一段時間的迭代我們的原型系統在內部測試集上對于技術細節清晰的報告TTPs映射的精確率能達到85%以上召回率在80%左右。這已經能夠幫助分析師節省超過60%的初步標注時間。分析師現在的工作變成了“審核和修正”模型的輸出而不是從零開始標注工作負荷和疲勞感大大降低。6.1 效果可視化帶來的價值自動生成的戰術圖譜除了直觀還能做很多事攻擊模式聚類將多份報告的圖譜進行對比可以快速發現不同攻擊活動之間是否使用了相似的TTPs組合輔助威脅歸因。防御差距分析將生成的攻擊鏈與我方現有的安全檢測能力SIEM規則、EDR策略進行覆蓋度比對一眼就能看出在哪個戰術階段我們的監控是薄弱的。演練劇本生成紅隊可以根據常見的TTPs組合圖譜設計出更貼近真實攻擊的演練劇本。6.2 可能的擴展與深化多模態輸入現在的輸入是文本。未來可以嘗試讓模型理解網絡流量包PCAP的元數據摘要、惡意代碼的靜態分析報告字符串甚至是沙箱運行的行為日志實現更廣譜的TTPs自動識別。實時流式分析將模型集成到SOC的告警流水線中對實時告警的描述信息進行快速的TTPs預標注幫助一級分析師快速判斷告警的嚴重性和關聯的戰術階段。結合知識圖譜進行推理不僅僅映射到ATTCK還可以進一步關聯CAPEC攻擊模式、CWE弱點甚至相關的漏洞CVE形成一個立體的威脅知識網絡實現“由點及面”的推理。比如識別出“T1190: Exploit Public-Facing Application”后自動關聯近期該類型應用的高危CVE。模型微調Fine-tuning當積累足夠多的高質量標注數據后可以對SecGPT-14B進行LoRA等參數高效微調讓它更適應我們特定場景的報告風格和關注重點從而進一步提升準確率。這個項目讓我深刻體會到大模型在垂直領域的落地關鍵不在于模型的參數有多大而在于你對業務場景的理解有多深以及你如何用工程化的思維去“駕馭”它。SecGPT-14B是一個強大的工具但如何設計Prompt、如何預處理數據、如何評估和迭代這些才是決定項目成敗的“手藝活”。