本文收錄於《阿里新一代安全架構之安全基建專欄》
作者:阿里安全工程師簡柏
不久前,我一個同事去相親,這種事情你們懂的,介紹完年齡工作後,就是談談興趣愛好。我同事的相親物件有些不一樣,在聊完工作後,話題居然沒有轉向興趣愛好,而是想詳細瞭解下同事的工作到底是做什麼。“要不是她真的表現得很小白,差點以為是獵頭。”同事說。
“我是搞安全的。”
“嗯,網路安全,知道,大企業有自己的安全部門。”
嘿,這姑娘懂得不少,同事小夥很少碰見能交流工作的。於是,他開始自信地介紹自己是做“RASP”的。
“RASP是什麼?”姑娘有點懵圈了。
“這樣說吧,RASP就是今天你可能不小心摔了一跤,摔傷了腿,但我還要拉著你工作,然後回家你該拖地拖地,該洗碗洗碗,該乾的活一樣不少,彷彿跟沒摔傷一樣,我們就是幫應用做這類安全產品的,你懂吧……”
同事話還沒說完,姑娘白了他一眼就跑了……
我教育了一頓同事,你怎麼能這麼說呢,要是我,我就從開源軟體有很多漏洞開始說起。不久前,媒體報導開源軟體Nagios軟體中包含13個漏洞,極有可能被惡意利用,攻擊者可以靠此劫持基礎設施。
最近,國內安全廠商也釋出相關軟體供應鏈安全分析報告,稱“國內企業軟體專案100%使用了開源軟體,超8成軟體專案存在已知高危開源軟體漏洞,平均每個軟體專案存在66個已知開源軟體漏洞。”
安全行業資料顯示:每天至少會有數千個開源軟體漏洞被公開,應用研發人員需要頻繁升級版本才能降低應用被漏洞利用的風險。每當業界出現了新的安全漏洞後, 大家第一反應就是儘快進行漏洞修復,而披露的漏洞愈發不止, 每一次修復對技術團隊和安全同學來說都苦不堪言。事實上,技術團隊對於這套不斷出現問題,再響應問題的的安全處置流程感到非常被動, 非常希望能有一個更好的方案, “一勞永逸”地解決問題。
執行時應用自防護產品RASP具備在無需應用變更(修改程式碼、升級元件版本、釋出...)的情況下,即時止血新披露出的安全漏洞。它像疫苗一樣注入到應用程式中,根據應用執行時上下文識別攻擊,具備對於未知攻擊(0day、-1day)的防護能力,使應用自身免疫攻擊行為。可以大幅降低研發團隊對安全的成本投入。
這就是典型的工具選得好,漏洞可能就追不上我。
認識一下RASP
RASP,全稱 Runtime Application Self-Protection,是一種在執行時檢測應用程式攻擊並進行自我保護的安全產品。Gartner 在2014年應⽤安全報告裡將 RASP列為應用安全領域的關鍵趨勢。
RSAP將自身注⼊到應⽤程式中,與應用程式融為一體。透過Hook少量關鍵函式,實時觀測程式執行期間的內部情況。當應用出現可疑行為時,RASP根據當前上下文環境精準識別攻擊事件,並給予實時阻斷。相對於常見的基於流量規則的WAF產品,得益於身處程式內部,RASP可以拿到完整的、無花式編碼的攻擊資料, 這帶來了更低的誤報率及漏報率。在產出的報警上, RASP可以清晰的還原出程式碼行級別的攻擊路徑。同時對於東西向流量的覆蓋, RASP有力的補充了WAF邊界防護的不足。
不過,RASP的理念再好,如果不能和企業自身情況結合,那麼也是“不好用”的。因此,阿里安全開發了屬於自己的RASP產品: JAM,歷經雙11、HW等超大流量超大規模的實戰驗證,JAM在阿里經濟體內部得到了非常廣泛的部署,月度分析應用行為資料超過3000億次。目前已支援Java、NodeJs應用,同時其他語言應用正在擴充套件中。
接下來,我將要向大家分享的是阿里安全從甲方企業的角度出發,構建企業級RASP的技術思路,希望可以給其他有相關需求的甲方企業帶來一些建設思路,對安全公司而言,也會為其打造更符合使用者需求的RASP產品提供借鑑。
阿里安全的RASP建設之路
1. JAM的簡單引薦
在2015年底, 阿里安全就已完成了JAM的初版Demo,2016年產品化完成落地日常全量部署。歷經多次技術方案迭代,當前的架構如下:
JAM的整體架構包括3個部分: 客戶端引擎、雲端日誌&分析、控制皮膚。
核心引擎包括Agent、Daemon兩個部分, 基於位元組碼織入技術, 執行時Hook安全關注的敏感函式(如命令執行、DNS訪問...)。內建高效能規則引擎, 應用內每一次的敏感行為都將經過上千條專家規則的檢測, 對rt的影響控制在0.5毫秒內。
雲端分析引擎負責處理客戶端引擎上報的海量日誌, 主要為攔截日誌和風險行為日誌。攔截日誌為準確識別的攻擊日誌,用於攻擊感知, 亦可分析攻擊手法甚至使用的0day。風險行為日誌透過機器學習演算法做異常檢測分析, 避免漏網之魚,同時刻畫應用行為基線。
控制皮膚支撐運營部署、策略下發、裝置管理、資料大盤等場景。
2. 核心優勢帶來的攔路虎
身處應用內部給RASP帶來了眾多核心優勢。JAM透過JavaAgent技術將自身注入業務程式實現安全防護, 這樣的技術棧決定了它存在高度的穩定性風險。稍有不慎即可影響到應用正常執行, 帶來業務風險。
其一是對應用的資源佔用、效能影響風險, JAM採用分體式架構, 將非必要進入業務程式的邏輯單獨抽取成出獨立Daemon程式,最小化對業務的侵入及資源佔用, 提高可用性及穩定性。Agent身處應用內部,與應用共用計算資源,高效能成為一個基礎的技術要求。透過高效能位元組碼編織技術ASM、上下文環境識別過濾大量已知安全事件、細分場景最小化控制對計算資源的佔用、規避正則自實現模式匹配來降低其對應用程式的效能影響。當前部署JAM前後效能差異為: cpu + ~1%、mem + <100m、rt + < 0.5ms, 處於業界領先水平。
其二是與部署應用技術棧的相容性風險,阿里內部有數萬個線上應用, 由於業務形態的差異存在著各式各樣的框架、外掛、JDK,每一種技術元件還擁有眾多版本。在這個規模下期望透過測試覆蓋100%的情況是不切實際的, 但業務的可用性又必須保障萬無一失。為此我們在提高測試覆蓋的同時, 於產品能力上構建一系列保障措施: 應用評估分級、完善的部署灰度流程、快速降級機制等,具體如產品上限制必須在應用預發環境灰度足夠長的時間後才可部署線上環境。
3. 應用自身的攻擊免疫系統
在解決了攔路虎之後, JAM得以充分發揮自身力量, 為構建企業縱深防禦添磚加瓦。JAM於應用內部構建三道安全防線: 已知漏洞(行為)黑名單防護、異常檢測灰名單防護、應用行為白名單防護,為應用量身打造攻擊免疫系統。
應用執行期間的每一次敏感行為都將經過數名安全專家持續沉澱出的上千條專家規則的檢測, 一旦命中到惡意特徵, 即會在觸發呼叫時被實時攔截。
除已知漏洞的防護外, JAM還會對可疑的風險行為保持關注, 進行進一步評估, 如應用突然訪問了一個罕見的域名。JAM每日收集到百億級別應用行為日誌(部署規模較大), 透過大資料平臺結合機器學習演算法訓練異常檢測模型,識別潛在風險,並反哺到專家規則,形成良性迴圈。
JAM收集到的應用行為日誌除了做異常檢測之外,同時也將按應用粒度歸類, 並透過歸一化演算法刻畫出應用行為畫像。即給定一個應用, 可知其正常執行會執行哪些命令,訪問哪些檔案,哪些網路, 甚至包括Http Header粒度的分析, 如應用歷史上響應過302 Location清單。在刻畫出應用畫像後, 便已抽象出應用的邏輯沙箱。配合JAM的實時函式檢測攔截能力, 形成不可複製的高水位防護能力: 應用行為白名單防護。
4. 構建RASP+
在捕獲到攻擊事件後, 溯源是一個重要的事情。
它是怎麼進來的? 是透過哪個漏洞利用進來的?
它是從哪裡進來的? 從南北向哪個Http介面進來的?從東西向哪個RPC進來的?請求報文是什麼?
JAM透過Hook應用各個訪問入口出口(HTTP、RPC、MQ、DB...), 追蹤事件軌跡。當攻擊事件被捕獲時, 事件內容將自動填充關聯的入口Http、RPC報文、執行攻擊時的payload、堆疊等上下文資訊, 聯動阿里其他安全技術產品, 提供到安全專家應用內、應用間全鏈路的攻擊視覺化能力,為溯源提供有力支援。
在保護應用的同時, RASP自身的安全也很重要。RASP的安全策略仍然一定程度上於依賴資訊不對稱, 如何保障策略在傳輸過程、執行時不被惡意竊取分析是一個重要問題。JAM基於阿里集團自研“白盒密碼”技術認證RASP部署環境、全鏈路加密策略內容,保障安全策略可靠下發。
在安全事件頻發的今天, 不斷有新的漏洞爆發出來。RASP可以透過輕鬆的更新一條攔截策略即做到緊急止血,避免技術同學短時間內進行緊急升級, 將一次新披露漏洞的應急時間從數天縮短到數分鐘, 在保障安全風險的同時大幅提高企業人效。即時面對0day攻擊, 也能夠化被動成主動,做到從容不迫。
傳統的網路安全架構基於網路邊界防護,企業在構建防護體系時, 透過在邊界上部署防火牆、WAF等安全產品進行重重防護,內網的安全往往相形見絀。RASP在不僅服務於南北向流量風險,亦可以防護東西向流量,提高內網安全水位。
所以,你們聽懂了嗎?
你們覺得這樣介紹,同事的相親物件還會跑路嗎?