王沁心,楊望,2
(1.東南大學網絡空間安全學院,江蘇南京 211189;2.網絡空間國際治理研究基地(東南大學),江蘇南京211189)
安全研究人員通常會將網絡安全事件進行整理和分析后以文本的形式發布,這類文本通常包括安全類新聞、博客等,但其中最具價值的是安全廠商針對高級持續性威脅(Advanced Persistent Threat, APT)攻擊事件溯源分析后形成的APT報告,其中蘊含大量的威脅情報相關信息,但這些信息無法進行自動化處理,也不方便進行共享。
因此,為了便于威脅情報的存儲、傳輸、自動化處理,以及情報的共享和分析,業界提出了許多威脅情報表達規范,比如OpenIOC[1]、MAEC[2]、STIX[3]等,它們擁有不同的特點,適用于不同的場合,其中STIX標準提供了完整的結構化威脅情報表達框架,具有類型豐富,共享方便等特點,可以適用于各種場景。
在過去,從安全文本到STIX等結構化威脅情報這一轉換過程往往由研究人員完成,需要耗費大量的人力和時間。近年來,隨著自然語言處理(Natural Language Processing, NLP)等技術的發展,已經能使用多種自動化方法對文本進行抽取和理解。但現有研究抽取的內容較為單一,也不適用于STIX標準,利用價值較低。
為了解決上述問題,本文引入了STIX標準中的主要威脅情報實體,并構建了標注數據集,在此基礎上對基于該數據集的威脅情報自動抽取方法進行研究,并對不同抽取方法下的效果進行了對比。
STIX(Structured Threat Information Expression)是由OASIS推出的威脅情報交換標準,在STIX 2.0中定義了12種稱為STIX Domain Objects(SDOs)的實體,比如攻擊模式(Attack Pattern)、應對措施(Course of Action)、威脅指標(Indicator)等,以描述對應類型的威脅信息。除實體外,STIX還定義了實體之間的關系,稱為STIX Relation Objects(SROs)。
使用SDO、SRO等標準化的定義進行情報表示,有助于威脅情報的共享和自動化處理。不過,完整的STIX定義結構較為復雜,同時為了保證其擴展性和靈活性,STIX定義中也存在部分模糊和寬泛的內容,因此本文僅僅選取了STIX的部分子集進行標注和預測。
目前,安全文本抽取的相關研究主要集中在兩個方面:數據集的構建和如何獲取不同類型的威脅信息。在數據集方面的代表性工作是Lal[4]提出的安全實體的標注數據集,包括了對文件名、網絡名詞、操作系統、軟件名等實體的標注。
在威脅信息類型方面,現有的安全文本抽取工作已經涵蓋了多種類型的威脅情報。對威脅指標(Indicator of Compromise, IOC)進行抽取的代表性工作是Liao等人提出的iACE[5],綜合運用了正則表達式和機器學習等方法實現抽取。此外劉浩杰等人[6]提出了檢測惡意域名的集成學習方法。在行為信息的挖掘方面,主要有Husari等人開發的TTPDrill[7]系統通過基于文本相似度匹配來判斷攻擊行為。
在安全實體的抽取方面,Bridges等人[8]提出的通過綜合運用數據庫匹配,啟發式規則和術語詞典實現安全實體的自動抽取。
不過,現有的安全實體標注或文本抽取相關研究中并未涉及本文提出的對惡意軟件或攻擊者身份相關信息的識別,也并非基于STIX標準,無法轉換為結構化的威脅情報進行共享,因此本文提出的標注框架更具有實用價值。
上述研究表明NLP技術在安全領域得到廣泛的應用。在方法上,常用的模型都可以直接應用于安全領域的文本數據集,比如傳統的特征工程+機器學習,以及近年興起的深度學習方法,包括CNN、RNN模型等。
但安全領域的NLP應用和傳統NLP相比也存在以下重要的區別。(1)安全領域的文本普遍比較“臟”,為了清晰描述安全事件,作者會在文中加入大量的URL、IP、Hash值、代碼片段以及各類圖表等信息,如果不進行處理會在訓練過程中引入大量的噪聲,這些信息大多數情況下需要進行識別并從文本中去除。(2)當前絕大部分NLP技術是基于監督學習的,需要大量的人力參與標注,但由于安全文本具有專業性的特點,難以和普通文本一樣通過眾包來獲取大量標注數據。(3)由于安全文本中存在的大量專有名詞,在普通文本上預訓練的模型無法在安全領域的任務中取得滿意的效果,比如常用的各類詞向量。
可以看出,在安全領域應用NLP技術的挑戰主要在于文本處理和構建數據集,因此本文也在這兩個方面進行了重點說明。
由于上述安全文本的特性,本文對數據集的標注和擴展流程進行了詳細介紹。在實驗方法上,本文選擇了幾種常用的NLP模型,用于對比不同方法在本數據集上的有效性。
本文從APTnotes[9]等來源收集了近10年共528篇APT報告,對其中31篇進行了人工標注,將另外497篇用于擴展標注數據集。31篇標注的文檔經過仔細篩選,時間均為2018-2019年,保證了時效性。在作者方面,選取了多家不同安全公司的報告,包括Symantec、FireEye、Palo Alto Networks、Trend Micro、360等。在題材選取上主要有三種類型,包括對攻擊組織的分析、對某次攻擊活動的分析和對惡意軟件的分析,從而保證了題材多樣性,對于題材的具體統計如表1所示。
(1)預處理
對于所有的文檔,本文建立了如圖1所示的文本預處理流程。
由于所有的文檔均為PDF格式且語言為英語,本文首先使用PDFMiner[10]將其轉為文本文件,并在此過程中過濾掉所有非ASCII字符。PDFMiner可以根據PDF文檔的布局,初步對文檔進行分段,但無法進行分句。經測試,現有的分詞和分句工具無法準確處理安全類文本。因此,本文根據安全文本的特點,重新編寫了分句規則。
對于每一個經PDFMiner處理得到的段落,本文使用首先去除段落內所有的換行符,連續空格,空括號等多余符號,并準確判斷并處理文檔換行處單詞的截斷問題(比如ser- vice),得到一個單行的段落,再在此基礎上分句。本文測試了多種分句規則,發現最簡單的基于句號和單空格的規則(r'.s')最為有效。

表1 所選報告的題材分布
在分詞方面,為了保證不同實驗中分詞結果的一致性,本文使用了BERT[13]提供的Tokenizer對單個句子進行分詞,由于BERT提供的分詞工具會進行WordPiece Tokenization, 產生眾多以##開頭的單詞片段,在使用詞向量等方法作為輸入時,需將被拆分的單詞重新合并。
(2)標注內容
對于STIX 2.0標準中定義的12個SDO,本文選取了以下5項SDO進行標注,它們在文中都以名詞或名詞短語的形式呈現:
1) Identity—身份信息,通常是個人或組織的名稱,用于說明攻擊目標、信息來源等;
2) Intrusion Set—具有共同屬性的攻擊行為和資源的集合,比如APT報告中經常使用APT+編號的方式指代攻擊背后的組織;
3) Malware—惡意軟件名稱,一般出現在APT報告中的都是惡意軟件的家族名稱而非完整的正式命名;
4) Threat Actor—惡意行為的具體實施者;
5) Tool—用于攻擊行動的合法軟件。
(3)標注過程
對于31篇手工標注的數據集,本文在上述預處理流程的基礎上進一步手動檢查了無效信息并將其移除,以確保文本中只包含完整的句子,隨后使用Brat Rapid Annotation Tool (Brat)[11]工具進行文本標注,其界面如圖2所示;標注完成后將Brat自動生成的ann格式文檔轉為常用的BIO標注格式,如表2所示。
在實際標注中發現,Intrusion Set和Threat Actor在定義上的區別比較模糊。在許多APT報告中,這兩種類型甚至使用同一個詞語表示,不同的人很容易給出不同的標注。因此在實驗中,本文將Intrusion Set和Threat Actor的標注進行合并,自定義一個新的實體Attacker,以消除模糊性從而在實驗中取得更好的效果。

表2 BIO標注格式

圖1 預處理流程

圖2 Brat標注界面
(4)數據集擴展
為了進一步擴大樣本數量,本文將手工標注的31份報告中標注的實體整理為字典,對于剩余的497份報告,經過上述預處理流程進行分句和分詞后進行字典匹配,對于匹配到的句子則將其加入訓練集。由于擴展的樣本基于字典匹配,因此存在一定的噪聲,但考慮到大部分實體都以特殊名詞的形式存在,一般為首字母大寫或全大寫,基本可以忽略由于詞語相同所產生的錯誤樣本。
對于擴展的數據集,本文去除了所有小于5個單詞以及結尾沒有標點的詞組,從而去除了大部分自動處理的報告中非句子的部分,并進一步平衡了各類別的數量,最終形成的數據集比手工標注的部分增加了8,825個樣本。
最終數據集中各項實體標注數量的統計如表3所示。可以看到通過字典擴充訓練集的方法增加了數倍的樣本,在提高樣本數方面具有顯著效果。

表3 數據分布
在完成數據集構建后,在輸入模型前需要將文本中的單詞進行嵌入,得到固定長度的向量。除了隨機生成輸入向量外,使用更廣泛的是通過預訓練得到的詞向量。由于預訓練的詞向量能夠在一定程度上表達自身的語義,能有效提升下游任務的效果。本文中使用了傳統的靜態詞向量GloVe[12]和基于自注意力(Self-attention)機制的BERT[13]作為輸入并進行了對比。
在模型方面,本文分別使用CRF模型,BiLSTM模型以及二者的組合對四種實體進行識別,同時也比較了LSTM的變種GRU(Gated Recurrent Units)網絡。
實驗中,數據按8:1:1劃分為訓練集、驗證集和測試集,同時隨機初始化的向量和GloVe詞向量的維度均為300。在指標方面,計算每種方法下每個類別的精確率(Precision)、召回率(Recall)和F1值(F1 score)以及所有實體類別的平均值,具體結果如表4所示。
本文首先使用單一的CRF模型作為基準值。可以看出本文的數據集在該方法下取得了一定的效果,但召回率偏低。在單獨使用BiLSTM模型的情況下,平均召回率有了顯著的提升,但仍不如組合模型。
隨后本文在CRF前加上BiLSTM模型,并使用隨機向量作為輸入,與模型共同訓練。可以看出組合模型的效果要好于單一模型,這主要是由于加入CRF層能夠滿足標簽之間的依賴關系,修正單一模型的錯誤。

表4 實驗結果
最后是使用GloVe詞向量作為神經網絡輸入。在該方法下,所有指標均低于僅使用CRF的基準值,主要是由于GloVe這類傳統詞向量的詞匯表固定且使用普通文本進行訓練,很多詞語的預訓練向量無法準確描述該詞在安全文本中的語義。此外,GloVe無法處理安全文本中大量特殊的OOV(Out of Vocabulary)詞語,而很多這類詞匯正是本文中需要預測的實體名稱。最后,GloVe詞向量對所有詞語進行了小寫化,丟失了部分文本中的信息,因此此類詞向量的加入起到了反效果。
最后一種方法使用了預訓練BERT作為輸入,比起傳統詞向量,BERT使用的Transformer模型能更有效捕捉上下文語義,同時WordPiece Tokenization能夠有效處理OOV詞匯,得到字符級別的特征,因此該方法取得了最好的效果。
此外,本文也將LSTM替換成雙向GRU進行了實驗。一般來說,LSTM的結構更為復雜,擁有更好的表達能力,但本數據集規模相對較小,從表4可以看出因此二者的性能幾乎一致,在使用BERT作為輸入的模型中,GRU網絡的召回率和F1值都略優于LSTM,詳細指標如表5所示。

表5 BERT-BiGRU-CRF分類指標
在幾乎所有方法中,Attacker和Malware的結果都要優于Identity和Tool,這是因為Identity涵蓋的范圍較大,既包括了各類公司或組織的名稱,也包含了一部分人名,模型并不能很好地學習到該類型中所有的信息,而Tool指標較低則是由于其標注規模小于其他類型的實體。
本文基于STIX 2.0標準定義了一組安全文本中常見的實體,首先對31篇APT報告進行了手工標注,并將其中被標注的實體作為字典匹配更多未標注報告中的句子,有效擴充了標注數據的數量。得到標注數據后,本文對比了不同方法和不同初始化條件下實體抽取的效果,可以看出該系統可以有效捕捉APT報告中的實體信息,以用于后續的威脅情報構建。
由于本數據集手工標注的部分相對較小,為了進一步提升模型的泛化能力,在后續工作中將擴大手工標注的文檔數量。同時,還將對STIX標準中的行為信息以及實體間關系(SRO)的抽取進行研究,以生成更加全面的威脅情報數據。