0x01
上一篇中已經(jīng)提到了機器學習的相關概念,從0到1:學安全的你不該懂點AI?這一篇按照計劃聊一聊機器學習與網(wǎng)絡安全。
本系列主要以理論為主,覺得枯燥的話就去看兜哥的三部曲吧,網(wǎng)絡安全結(jié)合我上篇提到的機器學習、深度學習和強化學習。個人建議還是應該沉下心先把理論打扎實,萬丈高樓平地起,不把背后的原理搞清楚,只會調(diào)用這些庫,終究會淪為調(diào)參民工的。
0x02
安全領域有四大頂級會議(CCS,S&P,USENIX,NDSS)近年來收錄了50+的機器學習在網(wǎng)絡安全中的研究,CSS會議甚至成立了專題AISec來研討AI在安全領域的應用,另外在Defcon,BlackHat等黑客大會上關于機器學習與安全領域結(jié)合研究的議題也在逐年增加,當下,ML+Sec已經(jīng)成為了關注熱點,也是未來的趨勢。
網(wǎng)絡空間安全一級學科設立以來,主要有五個研究方向—網(wǎng)絡空間安全基礎,密碼學及應用,系統(tǒng)安全,網(wǎng)絡安全,應用安全,后三個研究方向頗受ML的青睞,大量的研究成果都是在這三個方向發(fā)表,工業(yè)界更是如此,現(xiàn)在幾乎所有賣給甲方的安全產(chǎn)品都會套上“ml”的外衣。
這三個方向又可以細分為下圖中的技術(shù)
我們知道機器學習一般有這么幾個步驟:問題抽象-》數(shù)據(jù)采集-》數(shù)據(jù)預處理及安全特征提取-》模型構(gòu)建-》模型驗證-》效果評估,用機器學習的方法研究安全自然也不例外。
0x03
問題抽象
數(shù)據(jù)采集
企業(yè)有自身積累以及客戶會提供部分數(shù)據(jù),至于學術(shù)界一般會采用公開的數(shù)據(jù)集。一般有如下:
http://www.secrepo.com/安全相關數(shù)據(jù)樣本集
http://kdd.ics.uci.edu/databases/kddcup99/kddcup99.htmlKDDCup1999數(shù)據(jù)集
https://westpoint.edu/crc/SitePages/DataSets.aspx NSA的數(shù)據(jù)集
https://plg.uwaterloo.ca/~gvcormac/treccorpus07/ TREC公開垃圾郵件合集
http://www.sysnet.ucsd.edu/projects/url/惡意url數(shù)據(jù)集
https://github.com/foospidy/payloadsweb攻擊payload數(shù)據(jù)集
https://www.ll.mit.edu/ideval/data/ DARPA入侵檢測數(shù)據(jù)集
等等
數(shù)據(jù)預處理及特征提取
這一部分的工作是相當重要的
從上圖就可以看出來60%的時間都是花在數(shù)據(jù)處理和提取上。
一般而言,必要的工作就是剔除重復數(shù)據(jù),去噪等,然后進行聚類、歸一化處理。期間會遇到很多問題,需要根據(jù)具體情況
比如缺失問題
首先看將要采用什么模型
如果是隨機森林,貝葉斯網(wǎng)絡等,這些模型它們自身能夠處理數(shù)據(jù)缺失的情況,不需要我們做額外處理
如果不是采用那幾個模型,此時要判斷缺失情況
如果缺失較多,則舍棄,缺失較少,則填充,填充的方法又包括固定值填充、均值填充、中位數(shù)填充等。
非平衡問題
像入侵檢測、惡意軟件檢測等方向攻擊樣本、惡意樣本的數(shù)量遠少于正常樣本,此時直接套用模型自然會出問題,此時我們一般采用過采樣或欠采樣的方法進行平衡。
異常問題
首先要排除確實是數(shù)據(jù)異常,而不是人為失誤,確實是數(shù)據(jù)的問題的話,一般作為缺失值處理。
處理之后需要進行分割,將其分為三個集合:訓練集,驗證集,測試集
接著就是特征提取,這一塊基本上都是由專業(yè)的安全人員在做,比如提取payload,判斷攻擊行為等。實際上,這也是傳統(tǒng)機器學習的主要缺陷之一--依賴于特征提取(featureextraction)——即人類專家規(guī)定每個問題的重要特征(比如屬性)的過程。比如說為了實現(xiàn)機器學習能夠識別惡意軟件,安全人員需要首先手動編制與惡意軟件相關的各種特征。對于網(wǎng)絡安全領域而言,這無疑將會限制到威脅檢測的效率和精確度。因為安全人員需要定義特定的特征,所以尚未定義到的特征可能就會逃避掉安全檢測,使其無法被發(fā)現(xiàn)。此外,這種對人類參與的依賴還引發(fā)了機器學習最大的挑戰(zhàn)之一——人為錯誤的可能性。鑒于特征工程需要人類專家來定義特征,就不可避免地會出現(xiàn)遺漏或忽略等人為失誤現(xiàn)象。還是以惡意軟件為例,如果人類專家在編程期間遺漏或忽略某些特征,都可能會造成系統(tǒng)崩潰的結(jié)果。
模型構(gòu)建
模型構(gòu)建包括算法選擇和參數(shù)調(diào)優(yōu)兩個部分
算法的話就如上篇提到的,分為無監(jiān)督學習和有監(jiān)督學習。
監(jiān)督學習典型算法包括
K-近鄰算法
核心思想是由K確定“近鄰”的范圍,由近鄰的數(shù)值和屬性得出特定未知變量的數(shù)值和屬性。俗話說的“人以類聚”就是這個算法的體現(xiàn)。
決策樹
使用決策樹進行決策的過程就是從根節(jié)點開始,測試待分類項中相應的特征屬性,并按照其值選擇輸出分支,直到到達葉子節(jié)點,將葉子節(jié)點存放的類別作為決策結(jié)果。下圖是一個二叉樹的示例
樸素貝葉斯
樸素,英文原文是na?ve,意思是表示所有特征變量間相互獨立,不會影響彼此。主要思想就是:如果有一個需要分類的數(shù)據(jù),它有一些特征,我們看看這些特征最多地出現(xiàn)在哪些類別中,哪個類別相應特征出現(xiàn)得最多,就把它放到哪個類別里.比如我們要判斷一個人物,有如下特征1)超級英雄2)有盾牌3)美國人4)和鋼鐵俠打過架,結(jié)合這四個特征,才能得出這個人物是美國隊長,單靠某一個特征是無法得出的。
無監(jiān)督學習典型算法包括
K-Means(K均值算法)
1.隨機的選取K個中心點,代表K個類別;
2.計算N個樣本點和K個中心點之間的歐氏距離;
3.將每個樣本點劃分到最近的(歐氏距離最小的)中心點類別中——迭代1;
4.計算每個類別中樣本點的均值,得到K個均值,將K個均值作為新的中心點——迭代2;
5.重復234;
6.得到收斂后的K個中心點(中心點不再變化)——迭代4。
層次聚類算法
將每個樣本都視為一個聚類
計算各個聚類之間的相似度
尋找最近的兩個聚類,將他們歸為一類
重復2,3
直到所有樣本歸為一類。
DBSCAN密度聚類算法
給定某空間里的一個點集合,這算法能把附近的點分成一組(有很多相鄰點的點),并標記出位于低密度區(qū)域的局外點(最接近它的點也十分遠)
下圖中,minPts= 4,點 A和其他紅色點是核心點,因為它們的ε-鄰域(圖中紅色圓圈)里包含最少4 個點(包括自己),由于它們之間相互相可達,它們形成了一個聚類。點B 和點 C不是核心點,但它們可由 A經(jīng)其他核心點可達,所以也屬于同一個聚類。點N 是局外點,它既不是核心點,又不由其他點可達。
模型驗證
最常用的就是k折交叉驗證法。K次交叉驗證,將訓練集分割成K個子樣本,一個單獨的子樣本被保留作為驗證模型的數(shù)據(jù),其他K-1個樣本用來訓練。交叉驗證重復K次,每個子樣本驗證一次,平均K次的結(jié)果或者使用其它結(jié)合方式,最終得到一個單一估測。這個方法的優(yōu)勢在于,同時重復運用隨機產(chǎn)生的子樣本進行訓練和驗證,每次的結(jié)果驗證一次,10次交叉驗證是最常用的,稱作10倍交叉驗證模型。
效果評估
安全領域分類問題效果評估指標
0x04
機器學習在系統(tǒng)安全中的應用
機器學習在網(wǎng)絡安全中的應用
機器學習在應用安全中的應用
0x05
用機器學習來做安全,那是否有考慮過機器學習自身的安全性呢?這幾年在軟件供應鏈安全問題很火,就是源頭安全性無法保障,同樣,機器學習也面臨著類似的問題
主要包括
1.平臺自身缺陷,如騰訊Blade發(fā)現(xiàn)的針對TensorFlow的重大安全漏洞,當含有安全風險的代碼被編輯進諸如面部識別或機器人學習的AI使用場景中,攻擊者就可以利用該漏洞完全接管系統(tǒng)權(quán)限,竊取設計者的設計模型,侵犯使用者隱私,甚至對用戶造成更大傷害
2. 對抗樣本,對抗樣本是一類被惡意設計來攻擊機器學習模型的樣本。它們與真實樣本的區(qū)別幾乎無法用肉眼分辨,但是卻會導致模型進行錯誤的判斷。對抗樣本的存在會使得機器學習在安全敏感性領域的應用受到威脅
0x06
本文從安全頂會的趨勢談及機器學習在網(wǎng)絡安全中的研究,針對機器學習的6個步驟中的典型算法給出了闡釋與圖示,力求通俗易懂,文中大部分總結(jié)性表格援引自《Applicationof Machine Learning in Cyberspace SecurityResearch》,在此表示真摯感謝,最后捎帶提到了機器學習自身的安全問題,相信這會是現(xiàn)在甚至未來的一個較為熱門的研究方向,筆者涉獵不深,作拋磚引玉之用。
在前文中稍微提及了機器學習的一些缺陷和挑戰(zhàn),因為機器學習是一種基于線性的模型,所以人類專家選擇的特征只能依賴簡單的線性屬性。由于這種限制,一些企業(yè)及學者開始轉(zhuǎn)向研究深度神經(jīng)網(wǎng)絡(DNN)。這就引出了深度學習的概念,深度學習與傳統(tǒng)機器學習在概念上的一大區(qū)別在于,深度學習可以直接對原數(shù)據(jù)進行訓練,而不需要對其特征進行抽取。具體的闡述將會在下一篇展開。
另:受限于篇幅,很多名詞默認讀者已經(jīng)清楚不再解釋,如果有不清楚的概念性問題可以文末留言,盡量及時解答。