安全領(lǐng)域中機器學(xué)習(xí)的對抗和博弈
0x00 背景
最近,偶然看到一篇論文講如何利用機器學(xué)習(xí)從加密的網(wǎng)絡(luò)流量中識別出惡意軟件的網(wǎng)絡(luò)流量。一開始認(rèn)為這個價值很高,畢竟現(xiàn)在越來越多的惡意軟件都開始使用TLS來躲避安全產(chǎn)品的檢測和過濾。但是看完論文之后又有些失望,雖然文章的實驗結(jié)果非常漂亮,但是有一點治標(biāo)不治本的感覺,機器學(xué)習(xí)又被拿來作為一個噱頭。
回顧過去的幾年,機器學(xué)習(xí)在安全領(lǐng)域有不少應(yīng)用,但其處境卻一直比較尷尬:一方面,機器學(xué)習(xí)技術(shù)在業(yè)內(nèi)已有不少成功的應(yīng)用,大量簡單的重復(fù)性勞動工作可以很好的由機器學(xué)習(xí)算法解決。但另一方面,面對一些“技術(shù)性”較高的工作,機器學(xué)習(xí)技術(shù)卻又遠(yuǎn)遠(yuǎn)達不到標(biāo)準(zhǔn)。
和其他行業(yè)不同,安全行業(yè)是一個比較敏感的行業(yè)。比如做一個推薦系統(tǒng),效果不好的最多也就是給用戶推薦了一些他不感興趣的內(nèi)容,并不會造成太大損失;而在安全行業(yè),假如用機器學(xué)習(xí)技術(shù)做病毒查殺,效果不好的話后果就嚴(yán)重了,無論是誤報或漏報,對客戶來說都會造成實際的或潛在的損失。
與此同時,安全行業(yè)也是一個與人博弈的行業(yè)。我們在其他領(lǐng)域采用機器學(xué)習(xí)算法時,大部分情況下得到數(shù)據(jù)都是“正常人”在“正常的行為”中產(chǎn)生的數(shù)據(jù),因此得到的模型能夠很好的投入實際應(yīng)用中。而在安全領(lǐng)域,我們的實際對手都是一幫技術(shù)高超、思路猥瑣的黑客,費盡心思構(gòu)建的機器學(xué)習(xí)模型在他們眼中往往是漏洞百出、不堪一擊。
如何讓機器學(xué)習(xí)從學(xué)術(shù)殿堂真正走進實際應(yīng)用,是每個安全研究人員值得思考的問題。本文從我所了解的一些案例和研究成果談?wù)剛€人的看法和思考。
0x01 從加密的網(wǎng)絡(luò)流量中識別惡意軟件?
既然文章的開頭提到了從加密的網(wǎng)絡(luò)流量中識別惡意軟件,我們先來看看這個論文的作者是如何考慮這個問題的,他們發(fā)現(xiàn),在握手階段(該過程是不加密的),惡意軟件所表現(xiàn)出的特征與正常的應(yīng)用有較大區(qū)別。典型的TLS握手過程如下圖所示:
在握手的第一階段,客戶端需要告訴服務(wù)端自身所支持的協(xié)議版本、加密和壓縮算法等信息,在這個過程中,正常的應(yīng)用(用戶能夠按時更新)使用高強度加密算法和最新的TLS庫,而惡意軟件所使用的往往是一些較老版本協(xié)議或強度較低的加密算法。以此作為主要特征,加上網(wǎng)絡(luò)流量本身的信息如總字節(jié)數(shù)大小、源端口與目的端口、持續(xù)時間以及網(wǎng)絡(luò)流中包的長度和到達次序等作為輔助特征,利用機器學(xué)習(xí)算法即可訓(xùn)練得到一個分類模型。
看完這段描述,我的內(nèi)心是崩潰的,因為該方法是把TLS握手階段的信息作為主要特征來考慮的。道高一尺,魔高一丈。以其人之道,還治其人之身,這句話點中了機器學(xué)習(xí)的死穴,我相信凡是看到這個篇論文的黑客都會想到:以后寫木馬的時候一定要采用最新版本的TLS庫,和服務(wù)器通信時采用加密強度較高的算法,盡量選取和正常應(yīng)用類似的參數(shù)……做到以上幾點,論文中提出的方法就可以當(dāng)成擺設(shè)了。
0x02 域名生成算法中的博弈
早期的一些DGA算法所產(chǎn)生的域名有著比較高的辨識度,例如下面這些域名
給我們的直觀感受就是英文字母隨機出現(xiàn),而且不是常見的單詞或拼音的組合,而且很難“念”出來。事實上這些特征可以用馬爾可夫模型和n-gram分布很好的描述出來,早就有相應(yīng)的算法實現(xiàn),識別的效果也非常不錯。然而,很快就出現(xiàn)了一些升級版的DGA算法,如下面的這個域名
indianbrewedsmk.rutwistedtransistoreekl.biz
這無非就是隨機找?guī)讉€單詞,然后拼湊在一起構(gòu)成的域名,但是卻完美的騙過了我們剛才提到的機器學(xué)習(xí)方法,因為這個域名無論從馬爾可夫模型或是n-gram分布的角度來看,都和正常的域名沒有太大的區(qū)別。唯一可疑的地方就是這個域名的長度以及幾個毫無關(guān)聯(lián)拼湊在一起的單詞,所以額外從這兩個角度考慮仍然可以亡羊補牢。
更有甚者,在今年的BSidesLV 2016上,有人提出了一種基于深度學(xué)習(xí)的DGA算法——DeepDGA,將Alexa上收錄的知名網(wǎng)站域名作為訓(xùn)練數(shù)據(jù),送入LSTM模型和生成對抗網(wǎng)絡(luò)(GAN, Generative Adversarial Networks)訓(xùn)練,最終生成的隨機域名效果拔群。如下圖所示(左側(cè)是給定的輸入)
從字符的分布情況上來看,也與正常網(wǎng)站的域名基本一致
隨著深度學(xué)習(xí)技術(shù)的普及,或許在不久的將來安全研究人員就可以“驚喜的”發(fā)現(xiàn)某個勒索軟件家族開始采用這種高端的域名生成算法了……
0x03 來自恐怖分子的垃圾郵件
事實上類似域名生成算法的博弈早就出現(xiàn)了,2003年美國打擊塔利班武裝時,從一名恐怖分子手中繳獲了一臺筆記本電腦,發(fā)現(xiàn)里面用于通信的電子郵件的風(fēng)格都是典型的垃圾郵件,而真正傳遞的消息暗藏于這樣的垃圾郵件中。因為面對NSA這樣無孔不入的情報機構(gòu),越是遮遮掩掩,越是采用高強度的加密,反而越容易被盯上。同樣因為NSA的無孔不入,他們每天需要處理的數(shù)據(jù)量也是天文數(shù)字,仔細(xì)檢查所有數(shù)據(jù)是不可能的,必須有所取舍,而這其中有一類數(shù)據(jù)恰恰是被NSA所忽視的,那就是每天成千上萬的垃圾郵件。在機器學(xué)習(xí)算法大行其道的今天,各大郵件服務(wù)提供商早就配備了一套成熟的垃圾郵件檢測系統(tǒng),無論是采用邏輯回歸算法或是SVM算法,只要加上幾句諸如優(yōu)惠代開各類發(fā)票或是想免費擁有自已的xxx這樣的垃圾郵件標(biāo)配,妥妥的直接過濾掉。如果一封郵件都被郵件服務(wù)提供商認(rèn)定為垃圾郵件,NSA又有什么理由去進一步懷疑呢?
退一步講,如果NSA想找出混在垃圾郵件中的有價值情報該怎么做呢?設(shè)關(guān)鍵詞嗎,上更復(fù)雜的機器學(xué)習(xí)算法嗎?要是恐怖分子采用類似“藏頭詩”這樣的信息隱藏手法怎么辦?
有的同學(xué)說還可以通過郵件的通連關(guān)系啊,如果你聽說過“死郵件”就不會這么想了。兩人共用一個賬號,利用郵箱的草稿箱傳遞消息,完全沒有郵件的發(fā)送與接收等通連關(guān)系,這又是不按套路出牌。
0x04 容易被騙的圖像識別
近幾年來,如果你稍有關(guān)注圖像識別領(lǐng)域,就知道基于深度學(xué)習(xí)技術(shù)的圖像識別技術(shù)在各大圖像識別比賽中大放異彩,甚至在某些任務(wù)上超過了人類。雖然目前人們?nèi)匀徊荒芎芎玫慕忉尀槭裁瓷疃葘W(xué)習(xí)技術(shù)如此有效,但這依然阻擋不住眾多數(shù)據(jù)科學(xué)家們孜孜不倦的搭建模型、調(diào)優(yōu)參數(shù)。
但正當(dāng)一票又一票研究小組努力“刷榜”的時候,另一些人總是能看的更遠(yuǎn)一些。谷歌的Szegedy研究員就發(fā)現(xiàn),基于深度學(xué)習(xí)的圖像識別技術(shù)可能并不如我們相像的那么靠譜,利用一些簡單的trick即可將其輕松欺騙。如下圖所示:
這兩幅圖在我們正常人眼中并沒有太大區(qū)別,但是對圖像識別系統(tǒng),左圖能夠正確的識別為熊貓,右圖卻識別成了長臂猿,而且是99.3%的置信度
而更為詭異的是一些在我們?nèi)祟惪雌饋砗翢o意義的圖片,卻被圖像識別系統(tǒng)“正確”的識別了出來。比如下面這些例子
0x05 一起躺槍的自動駕駛
關(guān)于自動駕駛汽車的安全問題,國內(nèi)外眾多安全公司和研究人員已經(jīng)做了很多次詳細(xì)的分析和現(xiàn)場演示。例如在今年的ISC 2016上,來自浙大的徐文淵教授團隊和360汽車信息安全實驗室共同演示的針對特斯拉Model S汽車自動駕駛技術(shù)的攻擊,通過干擾特斯拉汽車的三種傳感器(超聲波傳感器、毫米波雷達和前置高清攝像頭),可以實現(xiàn)強制停車、誤判距離、致盲等多種不安全的情況。
以上都是黑客主動發(fā)起的攻擊,自動駕駛自身也存在著缺陷。今年5月發(fā)生在美國發(fā)生的自動駕駛系統(tǒng)致人死亡的案例也引發(fā)了社會的大量關(guān)注:
按照特斯拉的解釋,這起事故發(fā)生時,車主布朗正駕駛Model S行駛在一條雙向、有中央隔離帶的公路上,自動駕駛處于開啟模式,此時一輛牽引式掛車與Model S垂直的方向穿越公路。特斯拉表示,在強烈的日照條件下,駕駛員和自動駕駛系統(tǒng)都未能注意到牽引式掛車的白色車身,因此未能及時啟動剎車系統(tǒng)。而由于牽引式掛車正在橫穿公路,且車身較高,這一特殊情況導(dǎo)致Model S從掛車底部通過時,其前擋風(fēng)玻璃與掛車底部發(fā)生撞擊,導(dǎo)致駕駛員不幸遇難。
正如這起事件暴露出來的問題,當(dāng)車身周圍傳感器和車前的毫米波雷達都失靈時(當(dāng)然該案例中這傳感器和毫米波雷達并未失靈,而是由于毫米波雷達安裝過低,未能感知到底盤較高的卡車),唯一能依靠的輸入就是車窗前方的高清攝像頭。我們來看看事發(fā)當(dāng)時的街景現(xiàn)場
以及被撞的卡車樣式(注意白色車身上什么標(biāo)致都沒有)
由于車前的高清攝像頭為長焦鏡頭,當(dāng)白色拖掛卡車進入視覺區(qū)域內(nèi)的時候,攝像頭只能看到懸浮在地面上的卡車中部,而無法看見整個車輛,加上當(dāng)時陽光強烈(藍(lán)天白云),使得自動駕駛統(tǒng)無法識別出障礙物是一輛卡車,而更像是飄在天上的云。再加上當(dāng)時特斯拉車主正在玩游戲,完全沒有注意到前方的這個卡車,最終導(dǎo)致悲劇發(fā)生。
結(jié)合剛才的圖像識別對抗樣本和浙大徐文淵教授團隊的研究成果,我們完全有可能設(shè)計一個讓自動駕駛系統(tǒng)發(fā)生車禍的陷阱,例如在某個車輛上噴涂吸收雷達波的涂料以及帶有迷惑性的圖案,讓自動駕駛系統(tǒng)無法識別出前方的物體;再比如,找個夜深人靜的夜晚在道路標(biāo)識上加一些“噪音”,人類可以正常識別,而自動駕駛系統(tǒng)卻會誤判等等。
0x06 邪惡的噪音與隱藏的指令
除了容易被騙的圖像識別系統(tǒng),我們每個人手機上的語音助手同樣不靠譜,也許未來某天你正在使用語音助手時,旁邊突然傳來一串奇怪的聲音,你的手機就詭異的打開了某個掛馬網(wǎng)站或者給一個完全不認(rèn)識的人轉(zhuǎn)賬。
來自加州大學(xué)伯克利分校的Carlini等人發(fā)現(xiàn)一些語言助手如Google Now和Siri都有可能理解一些人類無法辨識的“噪音”,并將其解析為指令進行執(zhí)行。其實原理并不難理解,人工生成這種邪惡的噪音流程如下
如圖所示,這是一個反復(fù)迭代的過程。我們首先通過抽取正常語音中關(guān)鍵特征,再做一次“逆向特征”合成語音并加入一些噪音作為候選,并將其分別給語音識別系統(tǒng)和正常人播放試聽,直到得到一個語音識別系統(tǒng)可以識別而人類無法辨識的邪惡噪音。
0x07 思考與對策
看完上文中提到的這些案例和分析,相信同學(xué)們有自己看法和認(rèn)識。我也簡單談?wù)勎覀€人的一些思考。
最基本的一點是不要迷信機器學(xué)習(xí),不要覺得機器學(xué)習(xí)是解決一切問題的銀彈。有的同學(xué)總覺得自己懂機器學(xué)習(xí),那些靠人工上規(guī)則的辦法就是low,這種就是典型的學(xué)術(shù)思維,真正在業(yè)務(wù)系統(tǒng)中純粹靠機器學(xué)習(xí)算法硬上的遲早是要栽跟頭的。只有拋開這種觀念,從實際角度出發(fā)才能想出切實可行的方法。
盡量從多個數(shù)據(jù)來源或者多個特征維度綜合分析。以隨機域名生成算法為例,單靠域名本身的特征很難判斷其是否為C&C域名時,就應(yīng)該從多個數(shù)據(jù)渠道入手進一步分析,如惡意軟件家族的域名關(guān)聯(lián)關(guān)系以及和某個可疑進程的通信行為等。
要有未雨綢繆的思維,在用機器學(xué)習(xí)算法解決一個問題的同時,應(yīng)該從黑客猥瑣的角度思考如何攻擊這個算法,而不是簡單的回避,為了解決問題而解決問題。
本文提到了對抗樣本現(xiàn)象(圖像識別、語音識別都有涉及),目前學(xué)術(shù)界稱之為生成對抗網(wǎng)絡(luò)(GAN, Generative Adversarial Networks),雖然目前還沒有實際的攻擊案例,但特斯拉的車禍其實已經(jīng)敲響了警鐘。就像著名黑客Barnaby Jack在Black Hat USA 2010上演示的針對ATM機的攻擊,當(dāng)時人們覺得非??苹?,現(xiàn)實中不一定存在這樣的威脅,而今年發(fā)生的幾起黑客攻擊ATM機事件(臺灣第一銀行ATM機遭黑客入侵 吐出7000萬臺幣、泰國ATM機被入侵導(dǎo)致1200萬泰銖被盜)才讓人們真正意識到原來這些看似只在電影的中發(fā)生的情節(jié)在真實世界中同樣存在。
當(dāng)黑客都開始研究機器學(xué)習(xí)技術(shù)了,我們又有什么理由落后呢?