做者簡介:php
叢磊算法
白山合夥人兼工程副總裁。
叢磊先生2016年加入白山,主要負責雲聚合產品的研發管理和雲鏈產品體系構建等。
叢磊2006年至2015年就任於新浪,原SAE(SinaAppEngine)創始人,曾任總負責人兼首席架構師,2010年起,帶領新浪雲計算團隊從事雲相關領域的技術研發工做。(注:SAE是國內最大的公有云PaaS平臺,擁有70萬用戶。)
叢磊擁有10項發明專利,現任工信部可信雲服務認證評委。安全
距離2006年Amazon發佈EC2服務已通過去了11年,在這11年裏,發生的不只僅是AWS收入從幾十萬美金上漲到100多億美金,更重要的是雲計算已經走進每一家企業。根據信通院發佈的「2016雲計算白皮書」,目前近90%的企業都已經開始使用雲計算(包括公有云、私有云等),這說明大規模雲化對於企業而言已經不僅是趨勢,更是確鑿的既成事實。網絡
雲化普及的同時也給安全帶來不少挑戰,主要包括:架構
雲化致使以硬件設備爲主的傳統安全方式失效。我在跟企業交流時,不止一家企業提出了這樣的擔憂:在上公有云的過程當中,由於沒法把已購買的硬件防禦搬到雲上,因此很是擔憂業務安全性。有趣的是,他們對於上雲後的流量層攻擊反倒不擔憂,由於他們認爲雲上的高防IP等產品能夠解決大部分問題。雲化致使了業務層的安全空白,這不只發生在公有云環境,在私有云環境也時有發生,以OpenStack Icehouse版本爲例,至今仍缺乏可以有效橫向擴展的Web安全組件。框架
雲化致使攻擊/做惡成本大大下降。雲是IT領域裏「共享經濟」的再升級,從最先的IDC租用升級進化到Linux kernel namespace租用,但這種「共享經濟」在給企業帶來成本下降、使用便利等益處的同時,也順便給攻擊者帶來了一樣的好處。按目前市場行情,攻擊者租用一個公網彈性IP的成本可低至1元/天,租用一個IaaS平臺的hypervisor層的計算環境,每日成本也只有幾元,若是是container層的計算環境,成本還要更低。如此低的成本,導致攻擊者再也不像過去那樣花大力氣挖掘培養肉機,而是能夠在瞬間輕鬆擁有用於攻擊的計算網絡資源。以白山服務的某著名互聯網招聘領域客戶爲例,攻擊者最多能夠在一天內動用上萬個IP以極低的頻率爬取核心用戶簡歷。機器學習
雲化致使業務可控性下降,遭遇攻擊的風險大大提升。實際上雲客觀形成了業務的複雜性和不可控性:大量自身或合做方的業務都跑在同一個雲上,其中任何一個業務被攻擊,都有可能對其餘部分形成影響。不能否認,現有的hypervisor隔離技術很成熟,以CPU爲例,經過計算時間片分配進而在執行指令間插入各類自旋鎖能夠精確控制執行體的CPU分配,其餘資源包括內存、IO也均可以恰當的控制。但在全部資源裏,隔離性最脆弱的就是網絡,尤爲是公網,畢竟NAT出口、域名等很難被隔離。函數
因此,咱們不得不面對這樣的現實:在享受雲計算時代紅利的同時,面臨的業務層安全問題也愈來愈嚴重。性能
遺憾的是,不少傳統安全產品並無跟上這個時代。最明顯的例子,15年前的防火牆就依靠着在命令行設定各類各樣的policy工做;而15年後的今天,一切的變化只是由命令行設定policy變成了界面設置policy,這不得不說是一種悲哀!學習
我曾經聽某著名安全廠商的佈道師演講,「買了咱們的產品不表明你的業務就安全了,你必須學會怎麼配置!」,這話聽起來有道理,但遺憾的是,大多數公司的安全人員並非公司的業務開發者,他們不知道業務頁面應該從哪一個referer過來、不該該接受哪一個user-agent的請求,也不知道某個接口應該接受哪些參數,甚至不知道業務對於單個用戶的合理訪問頻率區間。更遺憾的是,這些傳統安全產品價值不菲,在你花了上百萬銀子後,極可能毫無做用,而最悲哀之處在於「你覺得它在起做用!」
傳統的安全產品由於必需要串接到業務中間,這帶來了極大的不穩定性。雖然某些先進的硬件機制能夠經過技術下降這個風險,但仍不可避免的是:串接會帶來性能延遲+帶寬瓶頸。有些企業一開始購買了100Mbps吞吐量的硬件安全產品,但當業務突增時,硬件卻沒法自由橫向擴容。更麻煩的是,串行模式一旦分析的維度變得複雜(如策略變多時),就註定會形成業務的訪問延遲;而分析維度一旦少,如退化爲只作固定時間內訪問頻率限制,又會形成識別錯誤率上升。這是傳統安全產品沒法解決的永恆矛盾體。
不幸的是,雖然傳統安全產品存在諸多問題,但不少用戶仍在默默忍受,甚至習慣了天天配置策略的工做。但這並不意味着合理。
在不便中,一直蘊藏着技術革新的機會!這時,機器學習來了!
機器學習其實早已到來。由上圖中能夠看出,目前大紅大紫的深度學習,其源頭-神經網絡,早在上世紀70年代就已經被提出。從上世紀80年代到本世紀,機器學習自己經歷了幾回平淡期和爆發期,隨着大數據的發展和一些熱點事件(如AlphaGo打敗李世石)機器學習又一次進入爆發期。
那麼大數據和機器學習具備什麼關係呢?這還要和深度學習掛鉤,從理論上講,深度學習本質上是利用多層的神經網絡計算,代替傳統特徵工程的特徵選取,從而達到媲美甚至超越傳統特徵工程進行分類算法的效果。基於這個邏輯,當標註樣本足夠多時(即所謂「大數據」),經過深度學習就能夠構造出很是強大的分類器,如判斷一個圍棋的棋局對哪方有利。
AI隨着目前深度學習的火爆看似很是強大,但不幸的是,坦白講目前AI的發展成熟度遠沒有達到能夠取代人腦抑或接近人腦的水平。根據圖靈測試理論,AI自己要解決的問題無外乎:識別、理解、反饋。
這三個問題逐步遞進,真正智能的機器人最終能夠跟人腦同樣反饋,從而在圖靈測試中沒法區分它是人仍是機器。
按當前AI發展狀況,「識別」的進展目前效果最好,不管是圖像、語音仍是視頻,目前不少廠商均可以作到很高的識別率;但「理解」就差強人意了,你們都用過蘋果的Siri,它還未能達到與人真正對話的程度;而反饋就更難了,這要求在理解的基礎上不斷地應變,同一個問題可能因對方身份、心情、交流場合不一樣,以不一樣的語氣語調作出不一樣反應。
因此,目前應用機器學習效果很是好的領域,幾乎都是某個特定領域內的識別問題,並不是通用領域,如人臉識別、人機對弈(人機對弈本質上也是某個棋種領域的識別問題:機器經過學習成千上萬的棋局後,就能夠自動識別某一棋局在一方走的狀況下對誰有利。)
很是幸運的是,安全領域中問題大可能是特定場景下的識別問題,而非通用場景,也並未涉及理解和反饋,你只須要把相關數據交給機器學習系統,讓它作出識別判斷便可:安全或者不安全,不安全的緣由。
正由於安全問題本質是特定領域內的識別問題,因此從理論上講,機器學習很是適合應用在安全領域,是解決安全問題的金鑰匙。
雖然機器學習早已存在,可是長久以來並未改變安全市場,以「土辦法(設定策略)」立足的產品仍舊佔據主導地位,究其緣由,主要有如下幾點:
1.不一樣於其餘通用領域,安全領域的樣本標註成本較高。對於機器學習而言,擁有海量、完整、客觀、準確的標註樣本異常重要,標註樣本越多、越全面,訓練出來的分類器纔可能越準確。對於全部行業來說,獲取樣本(標註樣本)都並不容易,而安全領域尤其困難。如對人臉識別的標註,初中生甚至小學生就能夠完成,但對於一次安全的威脅事件,就須要極具經驗的安全人員才能夠完成,二者的成本差距十分巨大。
如上圖所示,這個注入攻擊經屢次複雜編碼,非專業人事很難進行樣本標註。因此目前在通用場景下,之因此安全領域中深度學習落地並很少,主要緣由也是很難獲取海量的標註數據。
2.不一樣於通用領域,安全領域的場景特色更加明顯,判斷攻擊的標準會隨着業務特色的不一樣而不一樣。以最簡單的CC攻擊爲例,600次/分鐘的訪問對於某些企業可能意味着破壞性攻擊,但對其它企業則屬於正常訪問範圍。因此,即使有大量的標註樣本,某一企業的標註樣本可能對於其餘企業毫無用處,這也是致使安全領域應用機器學習較爲困難的另外一個重要緣由。
3.針對傳統的文本型攻擊,傳統思惟認爲簡單的特徵工程,甚至直接的正則匹配更有效。
咱們把Web攻擊分爲行爲型攻擊和文本型攻擊兩類:
當特徵的維度空間較低,且有些維度的區分度很高時,經過簡單的線性分類器,就能夠實現不錯的準確率,例如咱們簡單的制定一些SQL注入的正則規則,也能夠適用於不少場景。可是,這樣的傳統思惟卻忽略了召回率問題,實際上也不多有人知道,經過SQL注入的正則規則,能夠達到多少的召回率。同時,在某些場景,假如業務的正常接口經過JSON傳遞SQL語句,那麼這種基於正則規則的分類器就會產生極高的誤判。
然而傳統安全廠商還還沒有意識到這些問題。
4.傳統安全人員並不瞭解機器學習。這是一個不爭的事實,大量傳統安全公司的安全人員精於構造各類漏洞探測、挖掘各類邊界條件繞過,善於制定一個又一個的補丁策略,卻並不擅長AI機器學習方面的內容,這也說明了這種跨界人才的稀缺和重要。
正是因爲以上緣由,AI智能的安全產品遲遲沒有出現,但沒人能夠否定,用戶其實早已厭倦policy驅動的規則模式,期待有一種能夠適應大多數場景、可以針對行爲或文本作深刻分析、不須要複雜配置就能夠達到高準確率和召回率的Web安全產品。
因而,咱們用AI從新定義Web安全,由於咱們堅信異常行爲和正常行爲能夠經過特徵識別被區分。
那如何解決安全領域的樣本標註問題呢?機器學習分爲兩大類:監督學習和無監督學習。監督學習要求有精準的標註樣本;而無監督學習則無需標註樣本,便可以針對特徵空間進行聚類計算。在標註困難的安全領域,顯然無監督學習是一把利器。
應用無監督學習
無監督學習無需事先準備大量標註樣本,經過特徵聚類就能夠將正經常使用戶和異經常使用戶區分開,從而避免大量樣本標註的難題。聚類的方式有不少,如距離聚類、密度聚類等,但其核心還是計算兩個特徵向量的距離。在Web安全領域,咱們得到的數據每每是用戶的HTTP流量或 HTTP日誌,在作距離計算時,可能會遇到一個問題:每一個維度的計算粒度不同,如兩個用戶的向量空間裏HTTP 200返回碼比例的距離是兩個float值的計算,而request length的距離則是兩個int值的計算,這就涉及粒度統一歸一化的問題。在這方面有不少技巧,好比可使用Mahalanobis距離來代替傳統的歐式距離,Mahalanobis距離的本質是經過標準差來約束數值,當標準差大時,說明樣本的隨機性大,則下降數值的權值,反之,當標準差小的時候,說明樣本具備至關的規律性,則提升數值的權值。
無監督的聚類能夠利用EM計算模型,能夠把類別、簇數或者輪廓係數(Silhouette Coefficient)當作EM計算模型中的隱變量,而後不斷迭代計算來逼近最佳結果。最終咱們會發現,正經常使用戶和異常聚成不一樣的簇,以後就能夠進行後續處理了。固然,這只是理想狀況,更多狀況下是正常行爲與異常行爲分別聚成了不少簇,甚至還有一些簇混雜着正常和異常行爲,那麼這時就還須要額外技巧處理。
學習規律
無監督聚類的前提是基於用戶的訪問行爲構建的向量空間,向量空間相似:
[key1:value1,key2:value2,key3:value3...]
這裏就涉及兩個問題:「如何找到key」以及「如何肯定value」。
找到合適的key本質是特徵選擇問題,如何從衆多的特徵維度中,選擇最具備區分度和表明性的維度。爲何不像某些DeepLearning同樣,將全部特徵一塊兒計算?這主要是考慮到計算的複雜度。請注意:特徵選擇並不等同於特徵降維,咱們經常使用的PCA主成分和SVD分解只是特徵降維,本質上DeepLearning的前幾層某種意義上也是一種特徵降維。
特徵選擇的方法能夠根據實際狀況進行。實驗代表在有正反標註樣本的狀況下,隨機森林是一個不錯的選擇。若是標註樣本較少或自己樣本有問題,也可使用Pearson距離來挑選特徵。
最終,用戶的訪問行爲會變成一組特徵,那特徵的value如何肯定?以最重要的特徵——訪問頻率爲例,多高的訪問頻率值得咱們關注?這須要咱們對於每一個業務場景進行學習,才能肯定這些key的value。
學習的規律主要包括兩大類:
讓系統愈來愈聰明
若是一個系統沒有人的參與,是沒法變得愈來愈聰明的,強大如AlphaGo也須要在同人類高手對弈中不斷強化本身。在安全領域,雖然徹底的樣本標註不可能,可是咱們能夠利用半監督學習的原理,挑選具備表明性的行爲交給專業的安全人員判斷,通過評定校訂,整個系統會愈加聰明。安全人員的校訂能夠與強化學習和集成學習結合實現,對於算法判斷準確的狀況,能夠加大參數權重,反之則能夠適當減小。
相似的想法出現於國際人工智能頂級會議CVPR 2016的最佳論文之一,「AI2: Training a big data machine to defend」,MIT的startup團隊,提出了基於半監督學習的AI2系統,能夠在有限人工參與的狀況下,讓安全系統更安全更智能。
從新定義Web安全
基於上述幾點,咱們基本能夠勾勒出基於AI的Web安全的基本要素:
從圖中能夠看到,全部算法均包含在實時計算框架內。實時計算框架要求數據流的輸入、計算、輸出都是實時的,這樣才能夠保證在威脅事件發生時系統迅速作出反應。可是,實時計算的要求也增長了不少挑戰和難點,一些傳統離線模式下不是問題的問題,在實時計算下會忽然變成難題。如最簡單的中位數計算,要設計一套在實時流輸入的狀況下同時還能保證準確性的中位數算法並不容易,T-digest是一個不錯的選擇,能夠限定在O(K)的內存使用空間。還有一些算法能夠實如今O(1)內存佔用的狀況下計算相對準確的中位數。
綜上所述,咱們能夠看出利用AI實現Web安全是一個必然的趨勢,它能夠顛覆傳統基於policy配置模式的安全產品,實現準確全面的威脅識別。可是,構造基於AI的安全產品自己也是一個複雜的工程,它涉及特徵工程、算法設計和驗證,以及穩定可靠的工程實現。
白山一直在基於AI的Web安全方面探索,並於2017年7月正式推出ATD(Advanced Threat Detection,深度威脅識別)產品,能夠準確識別並攔截各類行爲或者文本攻擊,包括爬蟲、惡意註冊、撞庫、刷單刷票、薅羊毛、各類注入攻擊腳本攻擊等,短短半年內已經積累了30餘家大中型企業客戶。實踐證實,機器學習確實在Web安全方面收效頗佳,如:
總之,基於AI的Web安全是新興的技術領域,雖然目前還處於發展期,但最終必定會取代以policy爲驅動的傳統安全產品,成爲保證企業Web安全的基石。