絡(luò)安全大模型數(shù)據(jù)獲取實(shí)戰(zhàn):從數(shù)據(jù)源到訓(xùn)練集的全流程解析)
網(wǎng)絡(luò)安全大模型訓(xùn)練這件事真正動(dòng)手之后會(huì)發(fā)現(xiàn)模型結(jié)構(gòu)、并行策略、調(diào)參技巧這些反而不是最先卡住你的環(huán)節(jié)。最開始卡住我的就是數(shù)據(jù)獲取。這期實(shí)戰(zhàn)篇我來好好聊聊“網(wǎng)絡(luò)安全大模型的數(shù)據(jù)獲取”這個(gè)話題我會(huì)把數(shù)據(jù)源怎么選、采集紅線怎么避、清洗流程怎么搭、質(zhì)量怎么評(píng)估這些過程中踩過的坑和驗(yàn)證過的方法都拆開來講希望對(duì)正在準(zhǔn)備數(shù)據(jù)或者已經(jīng)卡在數(shù)據(jù)環(huán)節(jié)的朋友有一點(diǎn)參考價(jià)值。先說清楚我為什么要單獨(dú)寫一期數(shù)據(jù)獲取。網(wǎng)絡(luò)安全領(lǐng)域和通用領(lǐng)域有個(gè)本質(zhì)區(qū)別通用大模型可以靠Common Crawl、維基百科、GitHub這些海量公開語料堆出來但網(wǎng)絡(luò)安全語料高度分散、極度依賴領(lǐng)域知識(shí)大量有價(jià)值的樣本藏在漏洞庫(kù)、安全公告、滲透測(cè)試報(bào)告、流量日志、紅隊(duì)工具文檔里而且很多內(nèi)容還有時(shí)效性和合規(guī)限制。如果不先把數(shù)據(jù)問題解決掉后面做預(yù)訓(xùn)練、指令微調(diào)、RLHF都會(huì)變成無米之炊。所以這一篇我會(huì)圍繞三個(gè)核心問題展開有哪些合法合規(guī)的數(shù)據(jù)來源、如何把這些異構(gòu)數(shù)據(jù)變成模型能用的高質(zhì)量樣本、以及數(shù)據(jù)管線的自動(dòng)化實(shí)現(xiàn)。1. 網(wǎng)絡(luò)安全大模型訓(xùn)練數(shù)據(jù)獲取的整體思路1.1 先想清楚模型要做什么再?zèng)Q定采集什么數(shù)據(jù)在動(dòng)手寫爬蟲和腳本之前我建議你先花一天時(shí)間想明白一個(gè)事情這個(gè)網(wǎng)絡(luò)安全大模型到底要解決什么任務(wù)不同任務(wù)對(duì)數(shù)據(jù)的需求完全不一樣這里很容易犯“什么都想收集”的毛病。我做過幾個(gè)不同類型的項(xiàng)目數(shù)據(jù)側(cè)重點(diǎn)差異非常大如果目標(biāo)是做安全知識(shí)問答助手重點(diǎn)是漏洞原理、攻擊鏈路、防御方案、合規(guī)標(biāo)準(zhǔn)這類解釋性語料需要的是高質(zhì)量的長(zhǎng)文本類似于“OWASP Top 10漏洞詳解”這種結(jié)構(gòu)清晰的資料數(shù)據(jù)量不用特別大幾萬到幾十萬條優(yōu)質(zhì)問答就夠了。如果目標(biāo)是做威脅情報(bào)分析重點(diǎn)是IOC失陷指標(biāo)、攻擊團(tuán)伙畫像、惡意樣本行為描述這部分?jǐn)?shù)據(jù)講究“新”需要持續(xù)從開源威脅情報(bào)源增量拉取一個(gè)月前的數(shù)據(jù)價(jià)值都會(huì)明顯下降。如果目標(biāo)是做代碼安全審計(jì)重點(diǎn)是有漏洞的代碼片段和無漏洞的對(duì)照代碼這需要從開源倉(cāng)庫(kù)、CVE修復(fù)提交記錄里提取pair樣本數(shù)據(jù)清洗難度最高但效果也最明顯。如果目標(biāo)是做日志與流量異常檢測(cè)重點(diǎn)是有標(biāo)簽的攻防流量日志這類數(shù)據(jù)一般沒辦法公開采集多數(shù)要靠自己做靶場(chǎng)環(huán)境產(chǎn)線或者找合作單位合規(guī)獲取數(shù)據(jù)成本非常高。我見過不少團(tuán)隊(duì)在數(shù)據(jù)階段拼命追求“大而全”結(jié)果數(shù)據(jù)堆了幾百GB真正對(duì)模型能力有幫助的領(lǐng)域適配樣本反而不夠。我的經(jīng)驗(yàn)是先畫清楚任務(wù)邊界和目標(biāo)能力再倒推數(shù)據(jù)需求。哪怕你后面要做全流程預(yù)訓(xùn)練也建議先把垂直任務(wù)的數(shù)據(jù)管線打通再談擴(kuò)展。我給內(nèi)部團(tuán)隊(duì)做方案評(píng)審的時(shí)候一定會(huì)先看一張“任務(wù)—數(shù)據(jù)映射表”這張表里每一項(xiàng)能力都對(duì)應(yīng)明確的數(shù)據(jù)源和預(yù)估數(shù)據(jù)量沒有這張表后面幾乎必然返工。1.2 自研采集為主、開源數(shù)據(jù)集為輔兩手都要抓關(guān)于數(shù)據(jù)獲取的技術(shù)路線市面上有兩種主流思路一是盡量找已經(jīng)整理好的開源安全語料數(shù)據(jù)集比如各類GitHub上的安全NLP數(shù)據(jù)集、漏洞描述數(shù)據(jù)集二是自研爬蟲和采集管道從公開渠道批量抓取原始數(shù)據(jù)再清洗加工。我之前一直傾向于前者因?yàn)槭∈?。但?shí)際操作之后發(fā)現(xiàn)現(xiàn)成的開源安全數(shù)據(jù)集普遍存在三個(gè)問題一是數(shù)量太少二是時(shí)效性差三是任務(wù)格式不匹配。比如我想做“CVE描述到修復(fù)建議的生成任務(wù)”開源數(shù)據(jù)集里的CVE描述往往只有兩三行英文摘要根本撐不起一個(gè)生成模型的訓(xùn)練需求。反而是自己采集的原始安全公告、補(bǔ)丁說明、漏洞分析文章經(jīng)過加工后信息密度和格式豐富度都遠(yuǎn)高于開源數(shù)據(jù)集。最后我采用的方案是“兩條腿走路”開源數(shù)據(jù)集作為基座和驗(yàn)證集自研采集管道作為主力數(shù)據(jù)來源。開源數(shù)據(jù)集用來冷啟動(dòng)驗(yàn)證數(shù)據(jù)格式和標(biāo)注規(guī)范是否合理自研管道負(fù)責(zé)規(guī)?;a(chǎn)按周或者按天增量更新。這套組合的好處是可以快速跑通流程同時(shí)保證數(shù)據(jù)源是活的、可持續(xù)更新的。2. 合法合規(guī)邊界與公開數(shù)據(jù)源的工程化篩選2.1 哪些數(shù)據(jù)能用于訓(xùn)練哪些絕對(duì)不能碰在聊數(shù)據(jù)源之前必須先立規(guī)矩。這一節(jié)可能是整篇文章里最重要的一節(jié)因?yàn)榫W(wǎng)絡(luò)安全領(lǐng)域的數(shù)據(jù)獲取比其他行業(yè)更容易踩到合規(guī)紅線。我自己在項(xiàng)目啟動(dòng)前都會(huì)把合規(guī)條款列成清單逐項(xiàng)確認(rèn)寧可進(jìn)度慢一點(diǎn)也不碰有風(fēng)險(xiǎn)的數(shù)據(jù)。能用于訓(xùn)練的數(shù)據(jù)主要有四類一是官方公開的漏洞庫(kù)和公告比如CVE、NVD、CNNVD、各廠商安全公告二是公開技術(shù)資料比如安全博客、會(huì)議論文、開源書籍、官方文檔、標(biāo)準(zhǔn)規(guī)范文件三是有明確授權(quán)或開源協(xié)議允許使用的數(shù)據(jù)集比如MITRE ATTCK框架、OWASP項(xiàng)目文檔四是自己在合規(guī)環(huán)境下產(chǎn)生的數(shù)據(jù)比如靶場(chǎng)中的滲透測(cè)試日志、自建蜜罐捕獲的樣本。絕對(duì)不能碰的數(shù)據(jù)也有四類這個(gè)沒有任何商量余地一是涉及個(gè)人隱私的數(shù)據(jù)比如真實(shí)用戶的通訊錄、聊天記錄、賬號(hào)密碼哪怕是從公開渠道泄露出來的也不行二是未公開的漏洞細(xì)節(jié)和未脫敏的實(shí)戰(zhàn)滲透報(bào)告這類可能涉及未授權(quán)測(cè)試或敏感單位信息三是需要授權(quán)才能訪問的商業(yè)威脅情報(bào)數(shù)據(jù)脫離授權(quán)范圍使用就違約了四是任何暗網(wǎng)渠道、黑產(chǎn)渠道流出的數(shù)據(jù)。這些紅線不是開玩笑的一旦出事不光項(xiàng)目完蛋整個(gè)團(tuán)隊(duì)都可能背上法律風(fēng)險(xiǎn)。提示有朋友可能會(huì)問公開泄露的數(shù)據(jù)庫(kù)能不能用來訓(xùn)練我的明確結(jié)論是不能。公開泄露不代表可以合法使用里面往往包含大量個(gè)人信息使用即違規(guī)。這一點(diǎn)我和法務(wù)反復(fù)確認(rèn)過也建議你在項(xiàng)目啟動(dòng)前找專業(yè)合規(guī)人員做一次數(shù)據(jù)合規(guī)審查。2.2 值得重點(diǎn)建設(shè)的公開數(shù)據(jù)源清單與優(yōu)先級(jí)明確了邊界之后我整理了一份網(wǎng)絡(luò)安全大模型訓(xùn)練中值得重點(diǎn)建設(shè)的公開數(shù)據(jù)源清單。這份清單不是網(wǎng)上隨便找的推薦列表而是我在實(shí)際項(xiàng)目中逐項(xiàng)驗(yàn)證過、確實(shí)能拿到高質(zhì)量數(shù)據(jù)的來源。第一梯隊(duì)是官方結(jié)構(gòu)化數(shù)據(jù)源優(yōu)先級(jí)最高。NVD和CVE列表提供了漏洞編號(hào)、描述、CVSS評(píng)分、參考鏈接等結(jié)構(gòu)化字段清洗成本最低MITRE ATTCK提供了攻擊技戰(zhàn)術(shù)的完整知識(shí)體系是理解攻擊鏈路的骨架OWASP系列文檔覆蓋Web安全、API安全、移動(dòng)安全等主題特別適合訓(xùn)練問答能力。這些數(shù)據(jù)源穩(wěn)定、權(quán)威、結(jié)構(gòu)清晰建議作為整個(gè)數(shù)據(jù)底座的基石。第二梯隊(duì)是高質(zhì)量非結(jié)構(gòu)化內(nèi)容。安全廠商的公告和技術(shù)博客比如微軟安全響應(yīng)中心、Google Project Zero的帖子內(nèi)容深度很好時(shí)效性也很強(qiáng)頂會(huì)論文和開源安全書籍比如USENIX Security、SP的論文學(xué)術(shù)性強(qiáng)但語言偏抽象對(duì)模型的邏輯推理能力提升幫助很大。這一梯隊(duì)的數(shù)據(jù)量不大但價(jià)值密度高適合作為訓(xùn)練數(shù)據(jù)中的“精品語料”。第三梯隊(duì)是代碼與威脅情報(bào)相關(guān)數(shù)據(jù)。GitHub上帶有安全主題的倉(cāng)庫(kù)、CVE修復(fù)的commit記錄這些是訓(xùn)練代碼審計(jì)能力的核心素材公開的惡意樣本分析報(bào)告、YARA規(guī)則、Snort規(guī)則這類規(guī)則類文本可以幫助模型理解檢測(cè)邏輯。這類數(shù)據(jù)有一個(gè)特點(diǎn)結(jié)構(gòu)性強(qiáng)但格式混亂清洗時(shí)需要針對(duì)不同子類型分別寫解析器。第四梯隊(duì)是社區(qū)討論和問答數(shù)據(jù)比如Stack Overflow上帶安全標(biāo)簽的問題、安全論壇的技術(shù)討論。這類數(shù)據(jù)口語化強(qiáng)、場(chǎng)景豐富適合讓模型學(xué)會(huì)用接地氣的語言回答問題但噪聲也比較大需要嚴(yán)格過濾掉低質(zhì)量灌水內(nèi)容。數(shù)據(jù)源建設(shè)優(yōu)先級(jí)我可以直接用一句話總結(jié)先官方庫(kù)打底再補(bǔ)精華文章再挖代碼和情報(bào)最后看社區(qū)內(nèi)容。這個(gè)順序既考慮了數(shù)據(jù)質(zhì)量也兼顧了合規(guī)風(fēng)險(xiǎn)。3. 核心數(shù)據(jù)源解析與采集實(shí)操3.1 漏洞庫(kù)與安全知識(shí)庫(kù)的結(jié)構(gòu)化數(shù)據(jù)采集漏洞庫(kù)是整個(gè)網(wǎng)絡(luò)安全語料里我最推薦優(yōu)先采集的部分原因是它同時(shí)具備權(quán)威性、結(jié)構(gòu)化、增量更新三個(gè)優(yōu)點(diǎn)。以NVD為例它提供了完整的JSON數(shù)據(jù)接口支持按時(shí)間批量拉取CVE記錄每條記錄里包含漏洞描述、CVSS向量、影響產(chǎn)品、參考鏈接、CWE分類等多個(gè)字段這是天然的優(yōu)質(zhì)訓(xùn)練語料。采集NVD數(shù)據(jù)時(shí)我的做法是先做全量歷史數(shù)據(jù)同步再按天做增量更新。NVD的JSON數(shù)據(jù)壓縮包大約幾百M(fèi)B解壓后是幾十萬條CVE記錄全量同步一次的時(shí)間在一個(gè)小時(shí)左右。關(guān)鍵是增量部分我建議用lastModifiedDate字段做增量判斷而不是用發(fā)布時(shí)間因?yàn)镹VD會(huì)不時(shí)修訂歷史CVE的描述和評(píng)分修訂內(nèi)容對(duì)模型準(zhǔn)確性同樣有價(jià)值。在實(shí)際處理中CVE描述原文通常比較簡(jiǎn)短比如“Buffer overflow in function foo allows remote attackers to execute arbitrary code via a crafted request”這樣一句話對(duì)訓(xùn)練來說信息量不夠。我的經(jīng)驗(yàn)是把CVE、CWE、CAPEC、ATTCK四類數(shù)據(jù)做關(guān)聯(lián)拼接用CVE里的參考鏈接去抓取對(duì)應(yīng)的分析文章、補(bǔ)丁描述、Exploit-DB利用代碼然后生成一條信息完整的“漏洞全景樣本”。這種關(guān)聯(lián)后的樣本格式大概長(zhǎng)這樣{ cve_id: CVE-2024-1234, cwe_id: CWE-89, cvss_score: 9.8, description: 原始描述, affected_products: 受影響產(chǎn)品列表, attack_vector: 來自CAPEC/ATTCK的攻擊路徑描述, patch_reference: 補(bǔ)丁內(nèi)容摘要, analysis: 從分析文章提煉的漏洞成因與影響, remediation: 修復(fù)建議 }這樣處理后一條原本只有幾十個(gè)token的CVE記錄可以擴(kuò)展到幾百甚至上千token信息密度和關(guān)聯(lián)性都大幅提升模型訓(xùn)練時(shí)能學(xué)到的東西明顯更多。需要提醒的是抓取參考鏈接里的文章時(shí)一定要設(shè)限速我通??刂圃诿空?qǐng)求間隔1到3秒避免給對(duì)方服務(wù)器造成壓力這也是一個(gè)從業(yè)者最基本的素養(yǎng)。3.2 安全博客、論壇與代碼倉(cāng)庫(kù)的非結(jié)構(gòu)化采集非結(jié)構(gòu)化內(nèi)容采集是數(shù)據(jù)量最大的來源也是最容易翻車的地方。安全博客和論壇數(shù)據(jù)采集的核心難點(diǎn)不是寫爬蟲本身而是如何保證“相關(guān)性”和“質(zhì)量”。我先說相關(guān)性。直接把一個(gè)科技新聞網(wǎng)站的所有安全頻道文章抓下來里面會(huì)混入大量產(chǎn)品發(fā)布類、公關(guān)類低質(zhì)內(nèi)容。我采用的方案是基于關(guān)鍵詞白名單加AI預(yù)篩選的兩級(jí)過濾。關(guān)鍵詞白名單覆蓋漏洞、攻擊、惡意軟件、釣魚、滲透、加固、取證、應(yīng)急響應(yīng)這些核心詞第一級(jí)過濾把完全不相關(guān)的頁面直接丟掉。第二級(jí)用一個(gè)小型的text classifier對(duì)標(biāo)題和首段做分類判斷這篇內(nèi)容偏“技術(shù)干貨”還是“新聞資訊”技術(shù)干貨進(jìn)入訓(xùn)練池新聞資訊直接歸檔為參考材料。再說質(zhì)量。安全論壇的內(nèi)容質(zhì)量波動(dòng)很大比如Reddit的r/netsec板塊精品率高但有些板塊的水貼率能到40%以上。我的處理方式是按發(fā)帖分?jǐn)?shù)、評(píng)論數(shù)、回復(fù)長(zhǎng)度綜合排序只保留綜合得分在前30%的高質(zhì)量討論串。這里有一個(gè)很實(shí)用的技巧用樓層回復(fù)的長(zhǎng)度和代碼塊數(shù)量來輔助判斷質(zhì)量。一個(gè)被大量長(zhǎng)回復(fù)討論、且包含代碼示例的主題大概率是有價(jià)值的技術(shù)討論只有一兩個(gè)“1”、“mark”的帖子直接丟棄即可。代碼類數(shù)據(jù)我主要從GitHub采集但不會(huì)用公共倉(cāng)庫(kù)全量鏡像那種粗暴方式。我的做法是先用GitHub搜索API按安全關(guān)鍵詞拉取候選倉(cāng)庫(kù)列表再通過倉(cāng)庫(kù)的star數(shù)、更新時(shí)間、Liscense類型做一輪過濾要求優(yōu)先采集帶有MIT、Apache-2.0等寬松協(xié)議且近期活躍的倉(cāng)庫(kù)。拿到倉(cāng)庫(kù)之后進(jìn)一步提取兩類信息一是README和docs目錄下的技術(shù)說明文檔這是訓(xùn)練模型理解安全工具用法的好材料二是issues和commit message里涉及漏洞修復(fù)的討論文本這些是理解真實(shí)安全問題的金礦。3.3 數(shù)據(jù)的增量更新與版本管理網(wǎng)絡(luò)安全數(shù)據(jù)有一個(gè)和通用語料完全不同的訴求——強(qiáng)時(shí)效性。去年發(fā)布的漏洞分析對(duì)于通用問答可能還有參考價(jià)值但對(duì)于威脅情報(bào)類任務(wù)幾乎沒有意義。所以數(shù)據(jù)管線在設(shè)計(jì)第一天就要把增量更新和版本管理考慮進(jìn)去否則三個(gè)月后你會(huì)發(fā)現(xiàn)模型還在輸出已經(jīng)過時(shí)的CVE信息。我把數(shù)據(jù)存儲(chǔ)設(shè)計(jì)成了分層結(jié)構(gòu)raw層存原始抓取結(jié)果按來源和時(shí)間分區(qū)processed層存清洗后的標(biāo)準(zhǔn)格式數(shù)據(jù)curated層存經(jīng)過質(zhì)量評(píng)估和去重后的最終訓(xùn)練集。每一層都打上數(shù)據(jù)版本號(hào)版本規(guī)則用“日期數(shù)據(jù)源hash”來表示比如20250519_cve_full_a3f9c2。這樣做的好處是當(dāng)訓(xùn)練結(jié)果不理想時(shí)可以快速定位是哪一批數(shù)據(jù)引入的問題直接回退到上一個(gè)數(shù)據(jù)版本不需要整個(gè)流程重跑。增量更新的調(diào)度策略我用了兩套任務(wù)每日增量任務(wù)覆蓋漏洞庫(kù)、威脅情報(bào)這類高時(shí)效數(shù)據(jù)源抓取間隔可以設(shè)為6到12小時(shí)一次每周全量任務(wù)覆蓋博客、論壇、論文這類相對(duì)穩(wěn)定的數(shù)據(jù)源每周做一次深度抓取即可。這樣既保證了時(shí)效性又不會(huì)對(duì)目標(biāo)網(wǎng)站造成過大訪問壓力服務(wù)器開銷也控制在合理范圍。4. 數(shù)據(jù)清洗、標(biāo)準(zhǔn)化與安全合規(guī)過濾4.1 爬蟲原始數(shù)據(jù)的自動(dòng)清洗與格式統(tǒng)一從不同數(shù)據(jù)源抓到的原始數(shù)據(jù)格式千差萬別有HTML、JSON、Markdown、PDF文本、XML還有純文本。清洗的第一步是把所有內(nèi)容統(tǒng)一成標(biāo)準(zhǔn)Markdown格式這個(gè)步驟看似簡(jiǎn)單但細(xì)節(jié)相當(dāng)多。HTML清洗時(shí)需要注意三個(gè)點(diǎn)一是去除script、style、iframe等非內(nèi)容標(biāo)簽以及追蹤參數(shù)、分享按鈕這類噪聲二是保留結(jié)構(gòu)信息比如把h1到h6標(biāo)簽轉(zhuǎn)成Markdown標(biāo)題把table標(biāo)簽轉(zhuǎn)成Markdown表格把code標(biāo)簽轉(zhuǎn)成代碼塊這樣模型能學(xué)到結(jié)構(gòu)化的文檔排版三是對(duì)正文做編碼糾錯(cuò)我發(fā)現(xiàn)很多安全站點(diǎn)是從Word或WPS粘貼發(fā)布的內(nèi)容會(huì)帶有全半角混用、彎引號(hào)、中文亂碼等問題需要統(tǒng)一做字符規(guī)范化。代碼片段在網(wǎng)絡(luò)安全語料里的重要性非常高但也是清洗最容易出問題的環(huán)節(jié)。很多爬蟲框架在提取正文時(shí)會(huì)誤刪代碼塊導(dǎo)致命令行的參數(shù)和漏洞代碼的語法被破壞。我強(qiáng)烈建議在提取正文時(shí)單獨(dú)把pre和code標(biāo)簽抽出來保存不要和正文混在一起做標(biāo)簽剝離。我寫過一個(gè)基于BeautifulSoup的提取器對(duì)頁面結(jié)構(gòu)解析后的輸出結(jié)構(gòu)大概是這樣的import re from bs4 import BeautifulSoup, Tag def extract_content(html: str) - dict: soup BeautifulSoup(html, html.parser) # 去掉無意義標(biāo)簽 for tag in soup([script, style, iframe, noscript]): tag.decompose() # 單獨(dú)提取代碼塊避免正文清洗時(shí)誤刪 code_blocks [] for code in soup.find_all([pre, code]): if code.get_text(stripTrue): code_blocks.append(code.get_text()) code.replace_with(f\n\n{code.get_text()}\n\n) # 提取正文并轉(zhuǎn)Markdown text str(soup) # 省略具體Markdown轉(zhuǎn)換邏輯…… return { title: soup.find(title).get_text(stripTrue) if soup.find(title) else , content_md: text, code_blocks: code_blocks, source_url: canonical_url }這里面有一個(gè)經(jīng)驗(yàn)之談不能只保存清洗后的Markdown也要把代碼塊單獨(dú)存一份方便后續(xù)做安全代碼語料的專項(xiàng)提取。4.2 敏感信息識(shí)別與合規(guī)過濾網(wǎng)絡(luò)安全數(shù)據(jù)里經(jīng)?;煊幸恍┛雌饋怼昂苡袃r(jià)值”但實(shí)際上不應(yīng)該進(jìn)入訓(xùn)練集的內(nèi)容。最典型的是大量的IP地址、郵箱、手機(jī)號(hào)、密碼哈希片段等敏感信息。我采用的正則規(guī)則加實(shí)體識(shí)別兩層過濾方案能有效控制這部分風(fēng)險(xiǎn)。第一層用正則做粗過濾覆蓋郵箱、電話號(hào)碼、身份證號(hào)、銀行卡號(hào)、車牌號(hào)等常見PII類型。第二層用NLP實(shí)體識(shí)別對(duì)上下文做判斷比如識(shí)別出“admin/admin123”作為示例登錄憑證放在技術(shù)教程中是可以保留的但如果是真實(shí)生產(chǎn)環(huán)境的憑據(jù)樣例哪怕打碼不完整也不能留。這里的判斷標(biāo)準(zhǔn)是數(shù)據(jù)是否指向可識(shí)別的真實(shí)主體是否包含未脫敏的真實(shí)憑證、密鑰、內(nèi)網(wǎng)拓?fù)湫畔?。合?guī)過濾規(guī)則我維護(hù)了一個(gè)黑名單詞庫(kù)包括未公開漏洞利用代碼的變體、特定企業(yè)內(nèi)部系統(tǒng)命名比如內(nèi)部OA、ERP系統(tǒng)名、未授權(quán)掃描工具的配置片段等命中即整段刪除。這個(gè)黑名單需要定期迭代因?yàn)榘踩鐓^(qū)的語言習(xí)慣也在變。訓(xùn)練數(shù)據(jù)出現(xiàn)合規(guī)風(fēng)險(xiǎn)是大事寧可過濾激進(jìn)一些也不要因?yàn)槁┑粢粭l敏感信息導(dǎo)致整個(gè)數(shù)據(jù)集作廢。關(guān)于這塊我在文末還會(huì)再給幾條具體的部署建議。4.3 數(shù)據(jù)去重策略與代碼語義去重訓(xùn)練大模型時(shí)數(shù)據(jù)去重是最影響訓(xùn)練效率的環(huán)節(jié)之一尤其是網(wǎng)絡(luò)安全領(lǐng)域同一篇漏洞分析會(huì)被幾十個(gè)博客轉(zhuǎn)載CVSS評(píng)分?jǐn)?shù)據(jù)會(huì)在多個(gè)數(shù)據(jù)源重復(fù)出現(xiàn)。如果不去重模型會(huì)把這些重復(fù)內(nèi)容背得滾瓜爛熟但對(duì)新數(shù)據(jù)的泛化能力反而下降。去重我分了三個(gè)層次。第一層是URL和標(biāo)題級(jí)別的精確去重直接把相同URL和完全相同標(biāo)題的內(nèi)容過濾掉。第二層是正文MinHash去重計(jì)算正文的MinHash簽名用Jaccard相似度閾值0.75以上判為近似重復(fù)。第三層是代碼片段級(jí)去重對(duì)提取出來的代碼塊單獨(dú)計(jì)算LSH簽名把同一段漏洞代碼在各種文章里反復(fù)出現(xiàn)的副本刪掉。有效去重后我的網(wǎng)絡(luò)安全語料庫(kù)從最初抓取的幾十GB文本降到約10GB左右的有效數(shù)據(jù)。一開始我覺得這個(gè)損耗率太嚇人了但實(shí)際上這10GB的信息密度比未去重版本高了幾個(gè)量級(jí)最終模型效果也驗(yàn)證了這一點(diǎn)。做數(shù)據(jù)的人一定要有“舍得刪”的心態(tài)保留有價(jià)值的信息而不是保留文件體積。5. 數(shù)據(jù)標(biāo)注與質(zhì)量評(píng)估實(shí)戰(zhàn)5.1 標(biāo)簽體系設(shè)計(jì)與多粒度標(biāo)注網(wǎng)絡(luò)安全語料和通用語料在標(biāo)注上的區(qū)別是安全領(lǐng)域有比較成熟的知識(shí)分類體系不需要完全從零設(shè)計(jì)標(biāo)簽。我的標(biāo)簽體系是在MITRE ATTCK和CWE的基礎(chǔ)上擴(kuò)展出來的多粒度方案每條訓(xùn)練樣本可以打上多個(gè)維度的標(biāo)簽。第一維度是漏洞類型標(biāo)簽直接采用CWE的分類ID比如CWE-89對(duì)應(yīng)SQL注入、CWE-79對(duì)應(yīng)XSS這個(gè)維度讓模型能識(shí)別漏洞的“家族”關(guān)系。第二維度是攻擊階段標(biāo)簽采用ATTCK的戰(zhàn)術(shù)階段比如初始訪問、執(zhí)行、持久化、橫向移動(dòng)這個(gè)維度幫助模型理解攻擊者在某個(gè)環(huán)節(jié)的動(dòng)作目標(biāo)。第三維度是數(shù)據(jù)能力標(biāo)簽標(biāo)記這條數(shù)據(jù)適合訓(xùn)練什么能力比如漏洞解釋、檢測(cè)規(guī)則生成、修復(fù)建議、威脅情報(bào)分析。第四維度是時(shí)間與來源標(biāo)簽記錄數(shù)據(jù)的原始來源和時(shí)間戳方便后續(xù)做時(shí)間衰減和溯源。標(biāo)注執(zhí)行上我采用“規(guī)則自動(dòng)標(biāo)注為主、人工抽檢為輔”的混合策略。自動(dòng)標(biāo)注用規(guī)則和弱監(jiān)督模型實(shí)現(xiàn)比如文本中出現(xiàn)“SQL注入”關(guān)鍵詞且命中CWE-89對(duì)應(yīng)的特征詞表就自動(dòng)打上CWE-89標(biāo)簽。人工標(biāo)注主要用于處理冷門漏洞類型和復(fù)雜攻擊鏈描述這類數(shù)據(jù)比例不高但模型能不能區(qū)分“不同漏洞之間的細(xì)微差異”就靠這部分精標(biāo)數(shù)據(jù)。我一般會(huì)讓兩個(gè)標(biāo)注員獨(dú)立標(biāo)注再用Cohen‘s Kappa系數(shù)評(píng)估一致性Kappa低于0.6的題目要重新討論標(biāo)準(zhǔn)。5.2 數(shù)據(jù)質(zhì)量評(píng)估指標(biāo)體系很多團(tuán)隊(duì)做數(shù)據(jù)只管“量”不管“質(zhì)”等模型訓(xùn)練出來效果差又找不到原因。我建立了一套數(shù)據(jù)質(zhì)量的評(píng)估體系在每次數(shù)據(jù)版本發(fā)布前自動(dòng)跑一遍評(píng)分分?jǐn)?shù)不達(dá)標(biāo)直接攔下來。我用的核心指標(biāo)有五個(gè)。一是毒性率用現(xiàn)成的內(nèi)容審核模型掃描語料的違規(guī)比例網(wǎng)絡(luò)安全語料的毒性率理論上應(yīng)該接近0二是PII命中率統(tǒng)計(jì)數(shù)據(jù)集中殘留的個(gè)人信息比例要求低于萬分之一三是語言質(zhì)量分用perplexity或者語法錯(cuò)誤率粗略評(píng)估文本是否通順太低的文本基本是亂碼或者機(jī)器翻譯殘次品四是信息密度分統(tǒng)計(jì)每個(gè)樣本的有效概念數(shù)量太低的樣本可能是灌水內(nèi)容五是指令匹配度需要結(jié)合具體任務(wù)來評(píng)估比如問答數(shù)據(jù)要檢查是否存在問題和答案錯(cuò)位的情況。質(zhì)量評(píng)估報(bào)告會(huì)按數(shù)據(jù)源維度拆分這樣能直觀看到哪個(gè)數(shù)據(jù)源的質(zhì)量在下滑。比如發(fā)現(xiàn)某個(gè)安全論壇近期的采集質(zhì)量持續(xù)下降就可以降低這個(gè)來源的采樣權(quán)重把算力讓給更優(yōu)質(zhì)的數(shù)據(jù)源。這套評(píng)估機(jī)制上線后我踩過最典型的例子是某個(gè)看起來內(nèi)容非常豐富的安全百科站點(diǎn)毒性率雖然沒問題但語言質(zhì)量分持續(xù)偏低排查后發(fā)現(xiàn)是一部分頁面被站方用低質(zhì)機(jī)器翻譯覆蓋了。如果只靠人工抽查這個(gè)問題很難被發(fā)現(xiàn)。6. 從數(shù)據(jù)到訓(xùn)練集的數(shù)據(jù)管道完整實(shí)現(xiàn)6.1 數(shù)據(jù)管道的整體架構(gòu)與調(diào)度設(shè)計(jì)講完單獨(dú)的數(shù)據(jù)處理環(huán)節(jié)我把數(shù)據(jù)獲取環(huán)節(jié)的整體架構(gòu)做一個(gè)串聯(lián)。這個(gè)數(shù)據(jù)管道不追求太復(fù)雜但要求穩(wěn)定、可觀測(cè)、出了問題能快速定位。我的管道分成五個(gè)階段采集階段、解析清洗階段、去重階段、質(zhì)量過濾與標(biāo)注階段、格式轉(zhuǎn)換階段。五個(gè)階段用消息隊(duì)列串聯(lián)各階段做成獨(dú)立的worker進(jìn)程這樣任何一步故障都可以單獨(dú)重啟不會(huì)把整個(gè)管道拖死。調(diào)度上用到的是基于配置文件的定時(shí)任務(wù)每個(gè)數(shù)據(jù)源都有自己的抓取頻率和清洗參數(shù)改配置不用重新部署代碼。管道運(yùn)行狀態(tài)用一張核心指標(biāo)表來監(jiān)控我會(huì)每天看四個(gè)指標(biāo)采集成功條數(shù)、清洗后保留率、去重后唯一率、質(zhì)量評(píng)估合格率。保留率突然下降大概率是清洗邏輯誤刪了有效內(nèi)容唯一率異常升高則可能是新一輪采集出現(xiàn)了數(shù)據(jù)源重復(fù)。用這些指標(biāo)做預(yù)警基本能做到24小時(shí)內(nèi)發(fā)現(xiàn)數(shù)據(jù)管道異常而不是等模型效果出來之后才反應(yīng)過來數(shù)據(jù)出了問題。6.2 訓(xùn)練集格式轉(zhuǎn)換與數(shù)據(jù)配比數(shù)據(jù)管道最后輸出的訓(xùn)練集格式要跟著訓(xùn)練階段走。預(yù)訓(xùn)練階段和指令微調(diào)階段的格式完全不同需要分別轉(zhuǎn)換。預(yù)訓(xùn)練階段的數(shù)據(jù)格式比較簡(jiǎn)單我用的是純文本加文檔分隔符的方案每個(gè)樣本來自同一個(gè)數(shù)據(jù)源保持原始段落結(jié)構(gòu)不做指令模板包裝。這個(gè)階段的重點(diǎn)是打亂數(shù)據(jù)順序避免同類數(shù)據(jù)連續(xù)出現(xiàn)導(dǎo)致模型局部過擬合。我的經(jīng)驗(yàn)是預(yù)訓(xùn)練數(shù)據(jù)里網(wǎng)絡(luò)安全垂直語料占比控制在15%到25%之間比較合理如果占比太高模型的通用能力會(huì)下降占比太低垂直領(lǐng)域能力又不夠突出。指令微調(diào)階段的數(shù)據(jù)則需要構(gòu)造成人機(jī)對(duì)話格式。這里有一個(gè)很關(guān)鍵的經(jīng)驗(yàn)指令數(shù)據(jù)的配比要遵循“難度遞進(jìn)多任務(wù)均衡”原則。先放簡(jiǎn)單的事實(shí)問答讓模型學(xué)會(huì)基礎(chǔ)安全知識(shí)再放需要推理的分析題比如給一個(gè)日志片段問攻擊鏈路是什么最后放需要生成完整方案的復(fù)雜任務(wù)比如“針對(duì)某Web應(yīng)用給出滲透測(cè)試方案”。三類數(shù)據(jù)的比例我一般控制在4:4:2效果比較穩(wěn)。指令數(shù)據(jù)量不需要特別大質(zhì)量比數(shù)量重要得多幾千條精標(biāo)指令往往就能帶來明顯的任務(wù)能力提升。6.3 數(shù)據(jù)版本管理與訓(xùn)練結(jié)果的可追溯性很多做數(shù)據(jù)的朋友容易忽略數(shù)據(jù)版本管理的重要性導(dǎo)致后面訓(xùn)練出問題根本沒法排查。我強(qiáng)烈建議從第一天開始就用數(shù)據(jù)版本管理工具來管理每一版訓(xùn)練集。我目前的方案是每次發(fā)布訓(xùn)練數(shù)據(jù)集時(shí)都生成一份數(shù)據(jù)版本清單內(nèi)容包括數(shù)據(jù)源的清單和各自占比、清洗參數(shù)版本、去重閾值、質(zhì)量評(píng)分報(bào)告、隨機(jī)種子。任何一個(gè)訓(xùn)練實(shí)驗(yàn)跑完模型卡的命名都會(huì)帶上數(shù)據(jù)版本號(hào)比如safe-model-7b-ds20250519v3。這樣當(dāng)模型效果出現(xiàn)異?;蛘哂脩舴答伳硞€(gè)安全知識(shí)回答錯(cuò)誤時(shí)可以精確定位到是哪一版數(shù)據(jù)引入了問題是數(shù)據(jù)源的問題、清洗規(guī)則的問題、還是標(biāo)注標(biāo)準(zhǔn)的問題。我印象很深的一次排查經(jīng)歷是模型在其他任務(wù)上表現(xiàn)正常但總是把某個(gè)漏洞的CVSS評(píng)分答錯(cuò)。靠數(shù)據(jù)版本回溯后發(fā)現(xiàn)是某一批數(shù)據(jù)同步時(shí)把NVD的一個(gè)修訂版本漏掉了導(dǎo)致訓(xùn)練集里保留了舊的錯(cuò)誤評(píng)分。修復(fù)后重新訓(xùn)練錯(cuò)誤率立刻降了下來。這件事讓我深刻意識(shí)到數(shù)據(jù)版本管理和代碼版本管理一樣重要是所有可復(fù)現(xiàn)性的地基。7. 常見問題與排查技巧實(shí)錄7.1 網(wǎng)絡(luò)安全語料獲取的典型問題速查表我把實(shí)際運(yùn)行數(shù)據(jù)管道過程中遇到的頻率最高、最讓人頭疼的問題整理成一張速查表方便你碰到了直接對(duì)照排查。問題現(xiàn)象可能原因處理方案采集到的數(shù)據(jù)90%以上是同一篇轉(zhuǎn)載多個(gè)數(shù)據(jù)源互相轉(zhuǎn)載去重環(huán)節(jié)沒生效檢查MinHash閾值是否設(shè)置過高或過低確認(rèn)去重任務(wù)是否被跳過清洗后內(nèi)容丟失嚴(yán)重只剩下標(biāo)題正文提取器匹配了錯(cuò)誤的HTML結(jié)構(gòu)逐站點(diǎn)調(diào)試解析規(guī)則為高頻數(shù)據(jù)源單獨(dú)維護(hù)解析模板增量更新后數(shù)據(jù)量驟減數(shù)據(jù)源頁面結(jié)構(gòu)改版解析規(guī)則失效建立頁面結(jié)構(gòu)變更監(jiān)控周期性抽樣校驗(yàn)解析結(jié)果模型頻繁輸出過時(shí)的CVE信息增量更新周期太長(zhǎng)或NVD修訂未同步縮短增量周期改用lastModifiedDate字段做增量判斷合規(guī)審核報(bào)告顯示PII殘留超標(biāo)正則過濾規(guī)則未覆蓋新類型擴(kuò)充PII識(shí)別模式庫(kù)增加NLP實(shí)體識(shí)別兜底模型的安全知識(shí)偏好某個(gè)特定廠商訓(xùn)練數(shù)據(jù)中該廠商內(nèi)容占比過高做數(shù)據(jù)源配比均衡控制單一來源份額上限在20%以內(nèi)訓(xùn)練出來的模型通用能力明顯下降垂直語料占比過高擠占了通用語料降低安全語料在預(yù)訓(xùn)練階段的整體占比重新平衡配比這張表是我踩坑記錄的濃縮版如果你在實(shí)操中遇到了不在這張表里的問題大概率問題出在某個(gè)數(shù)據(jù)源的頁面結(jié)構(gòu)變化上——這是公共數(shù)據(jù)源采集中最常見的不確定性因素要習(xí)慣性先檢查這一項(xiàng)。7.2 數(shù)據(jù)源封禁應(yīng)對(duì)與采集限速策略采集公共網(wǎng)站時(shí)被封IP幾乎是每個(gè)做數(shù)據(jù)的人都要面對(duì)的問題。我的應(yīng)對(duì)經(jīng)驗(yàn)分三個(gè)層次。第一層次是遵守基本禮儀控制請(qǐng)求頻率加隨機(jī)延時(shí)設(shè)置合理的User-Agent標(biāo)識(shí)自己第二層次是設(shè)計(jì)任務(wù)隊(duì)列讓每個(gè)抓取任務(wù)的qps都可以獨(dú)立限速高價(jià)值低頻率的數(shù)據(jù)源和低價(jià)值高頻率的數(shù)據(jù)源分開調(diào)度第三層次是設(shè)計(jì)優(yōu)雅降級(jí)機(jī)制連續(xù)多次失敗時(shí)自動(dòng)暫停該數(shù)據(jù)源任務(wù)并發(fā)送告警而不是無限重試把對(duì)方服務(wù)器打掛。這里我想多說一句做網(wǎng)絡(luò)安全的人更應(yīng)該有網(wǎng)絡(luò)秩序意識(shí)在采集他人數(shù)據(jù)時(shí)守法合規(guī)是底線要求。我見過有些人寫爬蟲完全不設(shè)限速幾個(gè)小時(shí)內(nèi)把一個(gè)技術(shù)博客站點(diǎn)抓掛了這種事既壞了行名聲也給自己帶來法律風(fēng)險(xiǎn)。官方提供了API的數(shù)據(jù)源優(yōu)先用API頁面沒有提供API的也要控制頻率在合理范圍內(nèi)?!澳苣玫降臄?shù)據(jù)很多”不等于“應(yīng)該全部拿下來”做數(shù)據(jù)工程要考慮對(duì)方服務(wù)器的承受以及后續(xù)合作的可能性。7.3 不同應(yīng)用場(chǎng)景下的數(shù)據(jù)獲取策略最后聊一個(gè)數(shù)據(jù)獲取之外的延伸話題不同規(guī)模的團(tuán)隊(duì)做網(wǎng)絡(luò)安全大模型數(shù)據(jù)獲取策略應(yīng)該完全不同不能照搬同一個(gè)方案。如果你是一個(gè)人維護(hù)的開源項(xiàng)目或者小團(tuán)隊(duì)我建議直接采用“高價(jià)值開源數(shù)據(jù)集精標(biāo)指令集”的輕量方案不要在自研采集管道上投入過多精力。重點(diǎn)放在整理開放的安全知識(shí)庫(kù)數(shù)據(jù)、手工構(gòu)造幾千條高質(zhì)量指令樣本上小模型微調(diào)照樣能出不錯(cuò)的效果。我自己早期做過一個(gè)小參數(shù)量的安全問答模型用的數(shù)據(jù)量不到5GB也沒有自研采集管道純粹靠精心整理公開數(shù)據(jù)效果已經(jīng)能用來做內(nèi)部安全知識(shí)檢索了。如果你是中型團(tuán)隊(duì)有專門的算法工程師和數(shù)據(jù)工程師就可以按我前面講的方案搭建自研采集管道重點(diǎn)建設(shè)官方漏洞庫(kù)、代碼倉(cāng)庫(kù)和高質(zhì)量安全博客三個(gè)核心數(shù)據(jù)源。大型團(tuán)隊(duì)則需要考慮更完善的數(shù)據(jù)合規(guī)審查、數(shù)據(jù)資產(chǎn)管理平臺(tái)、聯(lián)邦式數(shù)據(jù)獲取機(jī)制以及和高校、研究機(jī)構(gòu)的合規(guī)數(shù)據(jù)合作??傊痪湓挃?shù)據(jù)獲取方案要和團(tuán)隊(duì)資源、項(xiàng)目目標(biāo)匹配不要為了做數(shù)據(jù)管道而做數(shù)據(jù)管道。我在實(shí)際建設(shè)中還有一個(gè)越來越深的體會(huì)網(wǎng)絡(luò)安全大模型的數(shù)據(jù)工作不會(huì)一次完成它更像一個(gè)持續(xù)運(yùn)營(yíng)的數(shù)據(jù)產(chǎn)品。漏洞在持續(xù)出現(xiàn)、攻擊技術(shù)在持續(xù)演進(jìn)、防御方案在持續(xù)更新這就決定了模型底座數(shù)據(jù)需要按天或按周持續(xù)更新而不是做完一版就束之高閣。如果團(tuán)隊(duì)預(yù)算有限建議至少保證每季度對(duì)高時(shí)效性數(shù)據(jù)源做一次全量刷新兩條好的CVE增量數(shù)據(jù)可能比一次大規(guī)模預(yù)訓(xùn)練對(duì)模型實(shí)際性能的提升更大。希望這期關(guān)于數(shù)據(jù)獲取的分享能讓準(zhǔn)備做網(wǎng)絡(luò)安全大模型的朋友少走一些我開始時(shí)走過的彎路。