DGA特征挖掘


摘自:https://paper.seebug.org/papers/Archive/drops2/%E7%94%A8%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0%E8%AF%86%E5%88%AB%E9%9A%8F%E6%9C%BA%E7%94%9F%E6%88%90%E7%9A%84C%26amp%3BC%E5%9F%9F%E5%90%8D.html

0x00 前言


本文用識別由域名生成算法Domain Generation Algorithm: DGA生成的C&C域名作為例子,目的是給白帽安全專家們介紹一下機器學習在安全領域的應用,演示一下機器學習模型的一般流程。機器的力量可以用來輔助白帽專家們更有效率的工作。

本文用到的演示數據集和python演示代碼請參見 https://github.com/phunterlau/dga_classifier 關於編碼和行文風格過於倉促的問題,請不要在意這些細節,如果有相關問題可以微博上@phunter_lau,大家互相交流進步。

0x02 數據收集


分類的任務需要告訴機器他用來學習的正例(positive samples)和反例(negative samples),在這里正例就是C&C域名,反例就是正常的合法域名。

正例和反例的涵蓋范圍和具體問題有關,具體到本文的例子,我選擇Conficker(ABC三種混合)當作正例,Alexa前10萬當作反例。Conficker的算法早在多年前公開。

0x03 特征工程


這幾乎是整個文章最有值得讀的部分。如果能把人類的經驗用數量化表達給機器,機器就能學習到人類的經驗,而特征(feature)就是人類經驗的數量化。特征工程是個反復循環的過程,一開始我們找到基線特征,用分類算法計算並評價結果,如果結果不能達到預期,再回頭來加入新的特征幫助更好的分類。

基本特征:隨機性和熵

Shannon熵可以很好的判別fryjntzfvti.bizgoogle.com/qq.com之間的區別,因為前者用了很多不重復字母而qq.com的重復字幕比較多。但是很多合法域名的熵值和C&C域名之間的並非是絕對差距,比如baidu.com也是五個不重復的字母,這單個特征不足以最終決策,我們還一些其他高級的特征。

高級特征:還有什么能表達隨機性呢

合法域名一般比較好念出來,C&C域名不好念

思考一下合法域名和C&C域名的目的,就可以想到:合法域名為了讓人類記住會選一些好念(pronounceable)的域名,比如 google yahoo baidu等等有元音字母之類好念的,而C&C域名為了隨機性就不太好念,比如fryjntzfvti.biz。域名里元音字母占的比重可以是個很好的特征。

“好念“這個概念也可以有另外一個高級一些的特征,叫做gibberish detection,判斷一個字符串是不是能用人類的語言念出來,比如google就不是一個英文單詞但是朗朗上口。這背后是一個基於馬爾可夫鏈的模型,具體細節可以參見 https://github.com/rrenaud/Gibberish-Detector

連續 vs 分散

通過進一步觀察我們可以發現,C&C域名的隨機性也表現在連續出現的字母和數字上。一般隨機生成的域名都不會出現大段連續的數字或者連續出現相同的字母。同時因為英文字母分布里輔音字母遠多於元音字母,C&C更可能連續反復出現輔音字母,而合法域名為了好念多是元音輔音交替。這些都是不容易想到但是容易計算的特征,代碼並不復雜。

還有什么?n-gram 的平均排名!

這是我個人認為比較巧妙的想法。

對於字符串文本的機器學習,n-gram (unigram(單字)bigram(相鄰雙字)trigram(相鄰三字))常常能提供重要的特征。舉例來說,fryjntzfvti.biz的域名的bigram分解是以下12個:

^f,fr,ry,yj,jn,nt,tz,zf,fv,vt,ti,i$

這里^$代表字符串的開頭和結尾。觀眾朋友可以自行計算trigram當作練習。bigram/trigram本身出現的頻率也可以當作特征,但是對這個問題來說,bigram本身可能有 (26+2)^2=784種組合,trigram就有21952種組合,特征向量的長度太長而我們的數據約有25萬組,如果把他們本身當作特征,模型訓練的速度很慢。(比較熟悉機器學習的觀眾朋友可能會提示用PCA等降維方法,我實際實驗表明降維到20維左右效果也不錯,在此不當作本文內容,請有興趣的觀眾朋友自己實驗一下。)

C&C域名的隨機算法產生的bigram和trigram比較分散,而合法域名喜歡用比較好念好見的組合。如果把正例反例出現的bigram按照出現頻率進行排序會發現,合法域名的bigram在頻率排序里的位置比較靠前,而隨機C&C域名產生的比較分散的bigram/trigram基本上頻率都很低,所以bigram/trigram的平均排名也可以很好的區分C&C和合法域名。

扯一些額外內容。n-gram的分析方法也常用於malware的代碼和二進制碼的自動分析,比如ASM里面每個指令當作一個gram,指令的組合可能對應於一些可疑行為。靠人工找這些可能可疑行為對應的指令組合十分麻煩,但是機器就適合做這些繁瑣的事情啊,只要把所有n-gram扔給機器做分類,最后機器會給出特定組合的權重,就能找到這些對應的指令對了。二進制代碼的分析也有類似方法,參見最近Kaggle的malware分類比賽的獲勝報告(參考文獻3)。有白帽專家可能會問,有些可疑指令對可能距離比較遠怎么辦?這種情況就是skip-gram分析,建議谷歌搜索相關關鍵詞,這里就不多說撐篇幅了。

究竟還能再挖出來什么特征呢?

特征工程就好像Taylor Swift的胸一樣,你只要需要,用力擠努力擠還是有的。如果按照反例Alexa前10萬名訓練隱含馬爾可夫鏈,計算一下從A_iA_i+1轉換的概率。這個轉換概率的分布對於正例有一些區別,也可以用來幫助區分。具體關於馬爾可夫鏈相關知識請參見http://en.wikipedia.org/wiki/Markov_chain (解釋起來背后的原因篇幅比較大,就只貼一下這個特征的分布圖,但是不要害怕,看示例代碼里的實現其實很簡單,只是計算轉移矩陣而已)

markov example

領域特征:安全專家的領域知識

對於C&C域名,不只是隨機性,其他白帽專家才知道的領域知識也會提供重要的特征。

比如域名所在的ccTLD可以當作特征。我們知道多數情況下.com的域名申請又貴又要審核,所以現在很多C&C不會選擇.com,反而會選一些審核不嚴的比如.biz .info .ru .ws以及最近爆發的.xyz之類的ccTLD都是C&C重災區。中國的白帽專家也可能知道.cn現在申請都得備案,所以C&C也不太可能用.cn的根域名當作C&C。值得提醒的是,這些情況並非100%確定,比如C&C可能找到一個cn域名的下級域名當C&C而主域名已備案,這些需要機器綜合考慮其他特征來判斷。ccTLD這樣的類別特征(categorial feature)在使用的時候需要編碼變成 is_biz=0/1, is_ws=0/1這樣展開的0/1向量,這個方法叫做OneHotEncoder。實際的模型結果也顯示出來.biz .info之類的ccTLD對C&C域名的判斷占的重要性比重很大。

還有一些看似比較無聊但是很有價值的知識:比如C&C域名現在越來越長,因為短的域名都被搶光了,所以域名長度也可以是重要的特征。更多這些特征需要安全專家加入自己的領域知識來得到,專家的領域知識在機器學習里的重要程度幾乎是第一位的。

 

見原文。。。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM