叢磊,白山合伙人兼工程副總裁。
叢磊先生2016年加入白山,主要負責(zé)云聚合產(chǎn)品的研發(fā)管理和云鏈產(chǎn)品體系構(gòu)建等。
叢磊2006年至2015年就職于新浪,原SAE(SinaAppEngine)創(chuàng)始人,曾任總負責(zé)人兼首席架構(gòu)師,2010年起,帶領(lǐng)新浪云計算團隊從事云相關(guān)領(lǐng)域的技術(shù)研發(fā)工作。(注:SAE是國內(nèi)最大的公有云PaaS平臺,擁有70萬用戶。)
叢磊擁有10項發(fā)明專利,現(xiàn)任工信部可信云服務(wù)認證評委。
云給安全帶來的影響
距離2006年Amazon發(fā)布EC2服務(wù)已經(jīng)過去了11年,在這11年里,發(fā)生的不僅僅是AWS收入從幾十萬美金上漲到100多億美金,更重要的是云計算已經(jīng)走進每一家企業(yè)。根據(jù)信通院發(fā)布的“2016云計算白皮書”,目前近90%的企業(yè)都已經(jīng)開始使用云計算(包括公有云、私有云等),這說明大規(guī)模云化對于企業(yè)而言已經(jīng)不只是趨勢,更是確鑿的既成事實。
云化普及的同時也給安全帶來很多挑戰(zhàn),主要包括:
云化導(dǎo)致以硬件設(shè)備為主的傳統(tǒng)安全方式失效。我在跟企業(yè)交流時,不止一家企業(yè)提出了這樣的擔(dān)心:在上公有云的過程中,因為無法把已購買的硬件防護搬到云上,所以非常擔(dān)心業(yè)務(wù)安全性。有趣的是,他們對于上云后的流量層攻擊反倒不擔(dān)心,因為他們認為云上的高防IP等產(chǎn)品可以解決大部分問題。云化導(dǎo)致了業(yè)務(wù)層的安全空白,這不僅發(fā)生在公有云環(huán)境,在私有云環(huán)境也時有發(fā)生,以O(shè)penStack Icehouse版本為例,至今仍缺少能夠有效橫向擴展的Web安全組件。
云化導(dǎo)致攻擊/作惡成本大大降低。云是IT領(lǐng)域里“共享經(jīng)濟”的再升級,從最早的IDC租用升級進化到Linux kernel namespace租用,但這種“共享經(jīng)濟”在給企業(yè)帶來成本降低、使用便利等益處的同時,也順便給攻擊者帶來了同樣的好處。按目前市場行情,攻擊者租用一個公網(wǎng)彈性IP的成本可低至1元/天,租用一個IaaS平臺的hypervisor層的計算環(huán)境,每日成本也只有幾元,如果是container層的計算環(huán)境,成本還要更低。如此低的成本,致使攻擊者不再像過去那樣花大力氣挖掘培養(yǎng)肉機,而是可以在瞬間輕松擁有用于攻擊的計算網(wǎng)絡(luò)資源。以白山服務(wù)的某著名互聯(lián)網(wǎng)招聘領(lǐng)域客戶為例,攻擊者最多可以在一天內(nèi)動用上萬個IP以極低的頻率爬取核心用戶簡歷。
云化導(dǎo)致業(yè)務(wù)可控性降低,遭遇攻擊的風(fēng)險大大提高。實際上云客觀造成了業(yè)務(wù)的復(fù)雜性和不可控性:大量自身或合作方的業(yè)務(wù)都跑在同一個云上,其中任何一個業(yè)務(wù)被攻擊,都有可能對其他部分造成影響。不可否認,現(xiàn)有的hypervisor隔離技術(shù)很成熟,以CPU為例,通過計算時間片分配進而在執(zhí)行指令間插入各種自旋鎖可以精確控制執(zhí)行體的CPU分配,其他資源包括內(nèi)存、IO也都可以恰當?shù)目刂?。但在所有資源里,隔離性最脆弱的就是網(wǎng)絡(luò),尤其是公網(wǎng),畢竟NAT出口、域名等很難被隔離。
所以,我們不得不面對這樣的現(xiàn)實:在享受云計算時代紅利的同時,面臨的業(yè)務(wù)層安全問題也越來越嚴重。
安全產(chǎn)品需要變革
遺憾的是,很多傳統(tǒng)安全產(chǎn)品并沒有跟上這個時代。最明顯的例子,15年前的防火墻就依靠著在命令行設(shè)定各種各樣的policy工作;而15年后的今天,一切的變化只是由命令行設(shè)定policy變成了界面設(shè)置policy,這不得不說是一種悲哀!
對于傳統(tǒng)安全產(chǎn)品,設(shè)定policy是一種痛苦
我曾經(jīng)聽某著名安全廠商的布道師演講,“買了我們的產(chǎn)品不代表你的業(yè)務(wù)就安全了,你必須學(xué)會怎么配置!”,這話聽起來有道理,但遺憾的是,大多數(shù)公司的安全人員并不是公司的業(yè)務(wù)開發(fā)者,他們不知道業(yè)務(wù)頁面應(yīng)該從哪個referer過來、不應(yīng)該接受哪個user-agent的請求,也不知道某個接口應(yīng)該接受哪些參數(shù),甚至不知道業(yè)務(wù)對于單個用戶的合理訪問頻率區(qū)間。更遺憾的是,這些傳統(tǒng)安全產(chǎn)品價值不菲,在你花了上百萬銀子后,很可能毫無作用,而最悲哀之處在于“你以為它在起作用!”
傳統(tǒng)的安全產(chǎn)品因為必須要串接到業(yè)務(wù)中間,這帶來了極大的不穩(wěn)定性。雖然某些先進的硬件機制可以通過技術(shù)降低這個風(fēng)險,但仍不可避免的是:串接會帶來性能延遲+帶寬瓶頸。有些企業(yè)一開始購買了100Mbps吞吐量的硬件安全產(chǎn)品,但當業(yè)務(wù)突增時,硬件卻無法自由橫向擴容。更麻煩的是,串行模式一旦分析的維度變得復(fù)雜(如策略變多時),就注定會造成業(yè)務(wù)的訪問延遲;而分析維度一旦少,如退化為只做固定時間內(nèi)訪問頻率限制,又會造成識別錯誤率上升。這是傳統(tǒng)安全產(chǎn)品無法解決的永恒矛盾體。
不幸的是,雖然傳統(tǒng)安全產(chǎn)品存在諸多問題,但很多用戶仍在默默忍受,甚至習(xí)慣了每天配置策略的工作。但這并不意味著合理。
在不便中,一直蘊藏著技術(shù)革新的機會!這時,機器學(xué)習(xí)來了!
機器學(xué)習(xí)是解決安全問題的金鑰匙
機器學(xué)習(xí)發(fā)展史
機器學(xué)習(xí)其實早已到來。由上圖中可以看出,目前大紅大紫的深度學(xué)習(xí),其源頭-神經(jīng)網(wǎng)絡(luò),早在上世紀70年代就已經(jīng)被提出。從上世紀80年代到本世紀,機器學(xué)習(xí)本身經(jīng)歷了幾次平淡期和爆發(fā)期,隨著大數(shù)據(jù)的發(fā)展和一些熱點事件(如AlphaGo戰(zhàn)勝李世石)機器學(xué)習(xí)又一次進入爆發(fā)期。
那么大數(shù)據(jù)和機器學(xué)習(xí)具有什么關(guān)系呢?這還要和深度學(xué)習(xí)掛鉤,從理論上講,深度學(xué)習(xí)本質(zhì)上是利用多層的神經(jīng)網(wǎng)絡(luò)計算,代替?zhèn)鹘y(tǒng)特征工程的特征選取,從而達到媲美甚至超越傳統(tǒng)特征工程進行分類算法的效果?;谶@個邏輯,當標注樣本足夠多時(即所謂“大數(shù)據(jù)”),通過深度學(xué)習(xí)就可以構(gòu)造出非常強大的分類器,如判斷一個圍棋的棋局對哪方有利。
AI隨著目前深度學(xué)習(xí)的火爆看似非常強大,但不幸的是,坦白講目前AI的發(fā)展成熟度遠沒有達到可以取代人腦抑或接近人腦的水平。根據(jù)圖靈測試理論,AI本身要解決的問題無外乎:識別、理解、反饋。
這三個問題逐步遞進,真正智能的機器人最終可以跟人腦一樣反饋,從而在圖靈測試中無法區(qū)分它是人還是機器。
按當前AI發(fā)展情況,“識別”的進展目前效果最好,無論是圖像、語音還是視頻,目前很多廠商都可以做到很高的識別率;但“理解”就差強人意了,大家都用過蘋果的Siri,它還未能達到與人真正對話的程度;而反饋就更難了,這要求在理解的基礎(chǔ)上不斷地應(yīng)變,同一個問題可能因?qū)Ψ缴矸荨⑿那?、交流場合不同,以不同的語氣語調(diào)做出不同反應(yīng)。
所以,目前應(yīng)用機器學(xué)習(xí)效果非常好的領(lǐng)域,幾乎都是某個特定領(lǐng)域內(nèi)的識別問題,并非通用領(lǐng)域,如人臉識別、人機對弈(人機對弈本質(zhì)上也是某個棋種領(lǐng)域的識別問題:機器通過學(xué)習(xí)成千上萬的棋局后,就可以自動識別某一棋局在一方走的情況下對誰有利。)
非常幸運的是,安全領(lǐng)域中問題大多是特定場景下的識別問題,而非通用場景,也并未涉及理解和反饋,你只需要把相關(guān)數(shù)據(jù)交給機器學(xué)習(xí)系統(tǒng),讓它做出識別判斷即可:安全或者不安全,不安全的原因。
正因為安全問題本質(zhì)是特定領(lǐng)域內(nèi)的識別問題,所以從理論上講,機器學(xué)習(xí)非常適合應(yīng)用在安全領(lǐng)域,是解決安全問題的金鑰匙。
安全結(jié)合機器學(xué)習(xí)的難點
雖然機器學(xué)習(xí)早已存在,但是長久以來并未改變安全市場,以“土辦法(設(shè)定策略)”立足的產(chǎn)品仍舊占據(jù)主導(dǎo)地位,究其原因,主要有以下幾點:
1、不同于其他通用領(lǐng)域,安全領(lǐng)域的樣本標注成本較高。對于機器學(xué)習(xí)而言,擁有海量、完整、客觀、準確的標注樣本異常重要,標注樣本越多、越全面,訓(xùn)練出來的分類器才可能越準確。對于所有行業(yè)來講,獲取樣本(標注樣本)都并不容易,而安全領(lǐng)域尤為困難。如對人臉識別的標注,初中生甚至小學(xué)生就可以完成,但對于一次安全的威脅事件,就需要極具經(jīng)驗的安全人員才可以完成,兩者的成本差距十分巨大。
某個注入攻擊
如上圖所示,這個注入攻擊經(jīng)多次復(fù)雜編碼,非專業(yè)人事很難進行樣本標注。所以目前在通用場景下,之所以安全領(lǐng)域中深度學(xué)習(xí)落地并不多,主要原因也是很難獲取海量的標注數(shù)據(jù)。
2、不同于通用領(lǐng)域,安全領(lǐng)域的場景特點更加明顯,判斷攻擊的標準會隨著業(yè)務(wù)特點的不同而不同。以最簡單的CC攻擊為例,600次/ 分鐘的訪問對于某些企業(yè)可能意味著破壞性攻擊,但對其它企業(yè)則屬于正常訪問范圍。所以,即便有大量的標注樣本,某一企業(yè)的標注樣本可能對于其他企業(yè)毫無用處,這也是導(dǎo)致安全領(lǐng)域應(yīng)用機器學(xué)習(xí)較為困難的另一個重要原因。
3、針對傳統(tǒng)的文本型攻擊,傳統(tǒng)思維認為簡單的特征工程,甚至直接的正則匹配更有效。
我們把Web攻擊分為行為型攻擊和文本型攻擊兩類:
- 行為型攻擊:每個請求看起來都是正常的,但將其連接成請求走勢圖時,就會發(fā)現(xiàn)問題,如爬蟲、撞庫、刷單、薅羊毛等。以刷粉行為為例:每個請求看起來都是正常的,但攻擊者可能動用大量IP在短時間內(nèi)注冊大量賬號,并關(guān)注同一個用戶。只有我們把這些行為連接起來一起分析時,才能發(fā)現(xiàn)問題。
- 文本型攻擊:傳統(tǒng)的漏洞類攻擊,如SQL注入、命令注入、XSS攻擊等,單純的把一個請求看成是一段文本,通過文本的特征即可識別其是否為攻擊。
當特征的維度空間較低,且有些維度的區(qū)分度很高時,通過簡單的線性分類器,就可以實現(xiàn)不錯的準確率,例如我們簡單的制定一些SQL注入的正則規(guī)則,也可以適用于很多場景。但是,這樣的傳統(tǒng)思維卻忽略了召回率問題,實際上也很少有人知道,通過SQL注入的正則規(guī)則,可以達到多少的召回率。同時,在某些場景,假如業(yè)務(wù)的正常接口通過JSON傳遞SQL語句,那么這種基于正則規(guī)則的分類器就會產(chǎn)生極高的誤判。
然而傳統(tǒng)安全廠商還尚未意識到這些問題。
4、傳統(tǒng)安全人員并不了解機器學(xué)習(xí)。這是一個不爭的事實,大量傳統(tǒng)安全公司的安全人員精于構(gòu)造各種漏洞探測、挖掘各種邊界條件繞過,善于制定一個又一個的補丁策略,卻并不擅長AI機器學(xué)習(xí)方面的內(nèi)容,這也說明了這種跨界人才的稀缺和重要。
正是由于以上原因,AI智能的安全產(chǎn)品遲遲沒有出現(xiàn),但沒人可以否認,用戶其實早已厭倦policy驅(qū)動的規(guī)則模式,期待有一種可以適應(yīng)大多數(shù)場景、能夠針對行為或文本做深入分析、不需要復(fù)雜配置就可以達到高準確率和召回率的Web安全產(chǎn)品。
于是,我們用AI重新定義Web安全,因為我們堅信異常行為和正常行為可以通過特征識別被區(qū)分。
用AI重新定義Web安全
那如何解決安全領(lǐng)域的樣本標注問題呢?機器學(xué)習(xí)分為兩大類:監(jiān)督學(xué)習(xí)和無監(jiān)督學(xué)習(xí)。監(jiān)督學(xué)習(xí)要求有精準的標注樣本;而無監(jiān)督學(xué)習(xí)則無需標注樣本,即可以針對特征空間進行聚類計算。在標注困難的安全領(lǐng)域,顯然無監(jiān)督學(xué)習(xí)是一把利器。
應(yīng)用無監(jiān)督學(xué)習(xí)
無監(jiān)督學(xué)習(xí)無需事先準備大量標注樣本,通過特征聚類就可以將正常用戶和異常用戶區(qū)分開,從而避免大量樣本標注的難題。聚類的方式有很多,如距離聚類、密度聚類等,但其核心仍是計算兩個特征向量的距離。在Web安全領(lǐng)域,我們獲得的數(shù)據(jù)往往是用戶的HTTP流量或 HTTP日志,在做距離計算時,可能會遇到一個問題:每個維度的計算粒度不一樣,如兩個用戶的向量空間里HTTP 200返回碼比例的距離是兩個float值的計算,而request length的距離則是兩個int值的計算,這就涉及粒度統(tǒng)一歸一化的問題。在這方面有很多技巧,比如可以使用Mahalanobis距離來代替?zhèn)鹘y(tǒng)的歐式距離,Mahalanobis距離的本質(zhì)是通過標準差來約束數(shù)值,當標準差大時,說明樣本的隨機性大,則降低數(shù)值的權(quán)值,反之,當標準差小的時候,說明樣本具有相當?shù)囊?guī)律性,則提高數(shù)值的權(quán)值。
無監(jiān)督的聚類可以利用EM計算模型,可以把類別、簇數(shù)或者輪廓系數(shù)(Silhouette Coefficient)看成EM計算模型中的隱變量,然后不斷迭代計算來逼近最佳結(jié)果。最終我們會發(fā)現(xiàn),正常用戶和異常聚成不同的簇,之后就可以進行后續(xù)處理了。當然,這只是理想情況,更多情況下是正常行為與異常行為分別聚成了很多簇,甚至還有一些簇混雜著正常和異常行為,那么這時就還需要額外技巧處理。
學(xué)習(xí)規(guī)律
無監(jiān)督聚類的前提是基于用戶的訪問行為構(gòu)建的向量空間,向量空間類似:
[key1:value1,key2:value2,key3:value3...]
這里就涉及兩個問題:“如何找到key”以及“如何確定value”。
找到合適的key本質(zhì)是特征選擇問題,如何從眾多的特征維度中,選擇最具有區(qū)分度和代表性的維度。為什么不像某些DeepLearning一樣,將所有特征一起計算?這主要是考慮到計算的復(fù)雜度。請注意:特征選擇并不等同于特征降維,我們常用的PCA主成分和SVD分解只是特征降維,本質(zhì)上DeepLearning的前幾層某種意義上也是一種特征降維。
特征選擇的方法可以根據(jù)實際情況進行。實驗表明在有正反標注樣本的情況下,隨機森林是一個不錯的選擇。如果標注樣本較少或本身樣本有問題,也可以使用Pearson距離來挑選特征。
最終,用戶的訪問行為會變成一組特征,那特征的value如何確定?以最重要的特征——訪問頻率為例,多高的訪問頻率值得我們關(guān)注?這需要我們對于每個業(yè)務(wù)場景進行學(xué)習(xí),才能確定這些key的value。
學(xué)習(xí)的規(guī)律主要包括兩大類:
1、行為規(guī)律:自動找出路徑的關(guān)鍵點,根據(jù)狀態(tài)轉(zhuǎn)移概率矩陣,基于PageRank的power method計算原理,網(wǎng)站路徑的狀態(tài)轉(zhuǎn)移矩陣的最大特征值代表的就是其關(guān)鍵路徑(關(guān)鍵匯聚點和關(guān)鍵發(fā)散點),然后順著關(guān)鍵點,就可以學(xué)習(xí)到用戶的路徑訪問規(guī)律。
2、文本規(guī)律:對于API,可以學(xué)習(xí)出其輸入輸出規(guī)律,如輸入?yún)?shù)數(shù)量、每個參數(shù)的類型(字符串or數(shù)字or郵箱地址等)、參數(shù)長度分布情況,任何一個維度都會被學(xué)習(xí)出其概率分布函數(shù),然后就可以根據(jù)該函數(shù)計算其在群體中的比例。即便是最不確定的隨機分布,利用切比雪夫理論也可以告訴我們這些值異常。例如:假如GET /login.php?username=中的username參數(shù),經(jīng)過統(tǒng)計計算得出平均長度是10,標準差是2,如果有一個用戶輸入的username長度是20,那么該用戶的輸入在整體里就屬于占比小于5%群體的小眾行為。
通過特征選擇和行為、文本規(guī)律學(xué)習(xí),我們就可以構(gòu)建出一套完整且準確的特征空間將用戶的訪問向量化,進而進行無監(jiān)督學(xué)習(xí)。
讓系統(tǒng)越來越聰明
如果一個系統(tǒng)沒有人的參與,是無法變得越來越聰明的,強大如AlphaGo也需要在同人類高手對弈中不斷強化自己。在安全領(lǐng)域,雖然完全的樣本標注不可能,但是我們可以利用半監(jiān)督學(xué)習(xí)的原理,挑選具有代表性的行為交給專業(yè)的安全人員判斷,經(jīng)過評定校正,整個系統(tǒng)會越發(fā)聰明。安全人員的校正可以與強化學(xué)習(xí)和集成學(xué)習(xí)結(jié)合實現(xiàn),對于算法判斷準確的情況,可以加大參數(shù)權(quán)重,反之則可以適當減少。
類似的想法出現(xiàn)于國際人工智能頂級會議CVPR 2016的最佳論文之一,“AI2: Training a big data machine to defend”,MIT的startup團隊,提出了基于半監(jiān)督學(xué)習(xí)的AI2系統(tǒng),可以在有限人工參與的情況下,讓安全系統(tǒng)更安全更智能。
重新定義Web安全
基于上述幾點,我們基本可以勾勒出基于AI的Web安全的基本要素:
AI Web安全技術(shù)棧
從圖中可以看到,所有算法均包含在實時計算框架內(nèi)。實時計算框架要求數(shù)據(jù)流的輸入、計算、輸出都是實時的,這樣才可以保證在威脅事件發(fā)生時系統(tǒng)迅速做出反應(yīng)。但是,實時計算的要求也增加了很多挑戰(zhàn)和難點,一些傳統(tǒng)離線模式下不是問題的問題,在實時計算下會突然變成難題。如最簡單的中位數(shù)計算,要設(shè)計一套在實時流輸入的情況下同時還能保證準確性的中位數(shù)算法并不容易,T-digest是一個不錯的選擇,可以限定在O(K)的內(nèi)存使用空間。還有一些算法可以實現(xiàn)在O(1)內(nèi)存占用的情況下計算相對準確的中位數(shù)。
綜上所述,我們可以看出利用AI實現(xiàn)Web安全是一個必然的趨勢,它可以顛覆傳統(tǒng)基于policy配置模式的安全產(chǎn)品,實現(xiàn)準確全面的威脅識別。但是,構(gòu)造基于AI的安全產(chǎn)品本身也是一個復(fù)雜的工程,它涉及特征工程、算法設(shè)計和驗證,以及穩(wěn)定可靠的工程實現(xiàn)。
ATD深度威脅識別系統(tǒng)
白山一直在基于AI的Web安全方面探索,并于2017年7月正式推出ATD(Advanced Threat Detection,深度威脅識別)產(chǎn)品,可以準確識別并攔截各種行為或者文本攻擊,包括爬蟲、惡意注冊、撞庫、刷單刷票、薅羊毛、各種注入攻擊腳本攻擊等,短短半年內(nèi)已經(jīng)積累了30余家大中型企業(yè)客戶。實踐證明,機器學(xué)習(xí)確實在Web安全方面收效頗佳,如:
- 國內(nèi)某Top3招聘網(wǎng)站,長期以來一直被爬取簡歷,這些惡意爬蟲非常智能,在User-agent、referer等字段上完全模擬正常用戶,并內(nèi)嵌PhantomJS,可以執(zhí)行Javascript腳本,使傳統(tǒng)的JS跳轉(zhuǎn)防御方式完全失效。這些爬蟲動用大量彈性IP,以極低頻率抓取,據(jù)統(tǒng)計,單個客戶端每天最低可以低至十次以下,傳統(tǒng)的安全產(chǎn)品對此完全喪失防御能力。而基于機器學(xué)習(xí)的 ATD則可以通過特征向量建模,準確區(qū)分低頻爬蟲與正常用戶行為。經(jīng)驗證,準確率高達99.98%。
- 國內(nèi)某Top3直播平臺,存在大量的惡意刷分刷排名情況,這種行為破壞了平臺的公平性,本質(zhì)上損害了平臺利益。作惡團伙事先批量注冊大量小號,在需要時沖排名。這些行為顯然傳統(tǒng)安全產(chǎn)品無能為力,某些新興安全產(chǎn)品雖然可以解決,但需要大量定制化規(guī)則,通用性較差。機器學(xué)習(xí)算法正好彌補了以上不足,通過行為分析可以計算出關(guān)鍵路徑和規(guī)律,然后利用子圖識別等算法分析出作惡團伙,最終輸出ID賬號。經(jīng)用戶驗證,ATD的準確率高達99%以上,召回率比傳統(tǒng)安全產(chǎn)品提高10倍以上。
總之,基于AI的Web安全是新興的技術(shù)領(lǐng)域,雖然目前還處于發(fā)展期,但最終一定會取代以policy為驅(qū)動的傳統(tǒng)安全產(chǎn)品,成為保證企業(yè)Web安全的基石。