牧雲(CloudWalker)開源手記 | Webshell 監控檢測策略初探
長亭新品 牧雲(CloudWalker)伺服器安全平臺 開源在即 。 ofollow,noindex"> 《牧雲開源的背後》 (點選進入)
長亭研發攻城獅們在對開源產品持續優化,期待用更智慧、高效的演算法賦予當前CWPP類產品更多創新。 今日奉出研發手記一枚拋磚引玉,聊一下市場上比較關心的Webshell監控檢測的一些方法策略。
Webshell也在升級,混淆、變形等問題都會造成誤報, 是否存在技術創新對當前檢測方法進行有益的補充?
產品特
色
目前大多 Webshell 檢測存在 檢測維度單一,檢測時間較長,檢測手段需要執行入侵 等產品策略問題,某些知名 Webshell 檢測產品的 召回率也遠不能達到實際需求 的效果,牧雲Webshell 監控檢測針對這些做了改進,嘗試呈現全新的技術解決方案。
-
在檢測維度上,牧雲採用樣本模糊匹配、統計特徵檢測、AST 語法檢測、正則補充檢測的多維度檢測方案。
-
檢測過程完全在主機進行,無網路傳輸和雲端請求的時間成本。
-
檢測方案覆蓋了非入侵式檢測中絕大多數可以使用的資料模型。
-
檢測過程無程式碼執行,避免沙箱逃逸,也無需更改原有服務架構和路由策略,使得配置更為方便。
研發思路
Webshell 檢測在的很長一段歷史時間內,是基於正則匹配的,這也是 Webshell 繞過極為便捷的原因 。即便在普遍部署雲服務的今天,高強度編碼和加密過的 Webshell 指令碼也是各種挖礦指令碼的元凶。牧雲在研發開始前,就試圖以一種全新的檢測方式和檢測層次,豐富現有的技術方案。
研發初期我們嘗試站在安全從業者視角觀察問題:對整個樣本檔案概覽之後,能否快速地得到一個結論:這個像是/不像是一個正常檔案? 我們也希望牧雲可以像人一樣,在進行 AST 分析之前,通過“看一眼”的方式,得到一個基本判斷。
檢測策略的核心是使用 SVM 作為分類器。 作為安全防護產品,防護過程中出現漏網之魚比過度保護對客戶的價值損失更大。 牧雲要實現的不是一個普通的機器學習分類器, 而是一個對某一分類成本敏感(Cost-sensitive)的分類器 。針對多個檢測維度,牧雲通過兩個層次的機器學習設計使得資料分析更為準確。
階段至此,沒有進行任何諸如正則的精確的匹配,這種智慧化的監控檢測策略已經使得很多常見“大馬”無法繞過牧雲的檢測。
這是機器學習的優勢,也是它的劣勢。針對特殊構造的小型檔案以及一些已知的 Webshell 樣本,牧雲還不能進行巨集觀上的預測。於是,我們基於 GitHub 上大量開源 Webshell 樣本檔案, 採用了一套模糊 Hash 和模糊正則的策略 ,將一些上層的漏網之魚一網打盡。
此外,考慮到客戶的主機環境不可能像訓練中的資料集一樣有大量 Webshell 檔案混雜在其中,嚐嚐僅存在千分之一甚至萬分之一的惡意檔案,在研發後期的產品評估過程中,我們 儘可能按不同編碼層次水平抽樣,創造一個非平衡資料集的評估環境 。
經過系列資料集測試和部分知名產品進行對比,牧雲在 Webshell 監控監測方面顯示出了較大的優勢。
策略優勢
類人化思考
牧雲使用類人化的思考方式對樣例檔案進行基本判斷。
作為技術專業人員,身為人類的我們在看到上圖的瞬間可以基本判斷這個檔案這不是一個正常的 PHP 檔案:因為程式碼可讀性極低、奇特的命名方式、拼接方式、編碼方式,以及極為不正常的一個超長字串。這些都是可以通過統計學得到的相關指標: 字和行長度的分佈規律、全文中符號的和 <tag> 標籤的佔比、檔案的資訊熵值等等。 將這些指標進一步細化到牧雲的檢測演算法後,初步檢測顯示牧雲可以根據統計學指標粗略的指出:這是一個不正常的檔案。
AST 的特徵提取
牧雲針對每一個測試樣本的 AST 特徵,進行了兩個維度的匹配:操作序列和操作命名。
對於已生成的 AST,牧雲通過 BFS 方式遍歷非葉節點,將每個非葉節點和它的子節點形成一個元組,稱之為操作序列。 在得到操作序列後,牧雲會對操作序列內部重複迭代的子序列進行多次清洗,最終得到一套最為簡短並保留全部操作特徵的操作序列,並將選取出現次數較多的序列作為特徵,通過 SVM 訓練分類,得到操作序列的資料特徵。
另一維度,牧雲在 AST 中提取全部的字串樣本,實際為 AST 中所有的 name,即操作命名。AST 中的操作命名樣本比文字檔案中字串更能體現語法層次的特徵,牧雲再將操作命名元組通過樸素貝葉斯分類器進行分類,獲取操作命名的資料特徵。
Cost-sensitive 分類器
Cost-sensitive 是機器學習在應用的過程中的一個重要難題,通常我們會使用下面的例子來解釋這個問題。
假設銀行會通過一個機器學習分類器,預測貸款申請人的信用狀況,判斷是否應該接受貸款申請。這是一個典型的 2-class 的分類問題。從機器學習演算法的角度考慮,最優解應該是將正確分類率提升到最高,這個值可以通過Accuracy=(TP+TN)/(TP+TN+FP+TN)得出。而在實際應用中,將貸款發放給失信者造成的損失比拒絕將貸款發放給守信者的損失要高得多,最優解應該保證分類結果給銀行造成的損失最小。
在 Webshell 檢測的過程中,我們面臨同樣的問題:漏報會比誤報對客戶造成更大的損失,同時誤報也會對使用者造成很大困擾。在訓練過程中,我們在收集了大量正負樣本的基礎上,通過 Rescaling 方法,更改了交叉驗證中每一 fold 的正反資料比例, 通過對右圖的 cost matrix 不斷修正,達到最佳的 cost-sensitive 分類訓練效果。
模糊 Hash 和模糊正則
模糊 Hash 和模糊正則策略是作為以上策略的補充存在的。
模糊 Hash 通過經典的 ssdeep 將大於 4096bit 的樣本與已知樣本 Hash 進行比對。ssdeep 將檔案以特定演算法進行分片,採用滾動 Hash 演算法取得所有 Hash 值連線,得到不定長度的 Hash 值。在比較時,兩個文字進行同樣的模糊 Hash 操作,並通過加權編輯距離(Weighted Edit Distance)與兩文字長度和的比值得到相似度。
模糊正則策略是在可配置的正則列表中新增部分正則表示式和正則表示式組。模糊正則在正則匹配前,根據一套詞法分析規則,將檔案標記化(Tokenization)之後再進行正則匹配。
策略流程
如研發思路所述,整個策略的執行流程完全不涉及對樣本 PHP 檔案的執行和操作,做到真正意義上的非侵入式監控檢測。
策略流程大致包括以下幾個步驟:
1. 提取樣本的統計學特徵,標明檔案大致狀態 2. 提取 AST,根據 AST 進行操作序列和操作命名的特徵提取 3. 根據 Step2 的兩個特徵進行分類,得到兩個分類值 4. 將統計學特徵值和 Step3 的兩個分類值進行第二層分類 5. 進行模糊 Hash 和模糊正則匹配 6. 綜合各分類值和匹配結果給出最終判定,如圖所示。
非平衡資料集評估
在對訓練模型的評估過程中,為了接近真實環境的正負樣本比,我們收集了 GitHub 上 Star 數量處於各種層次的正常檔案樣本,也包括一定數量的非 PHP 檔案,使得正負樣本比例(常規檔案:Webshell)達到8000:1。在最後的評估測試中,正樣本數量大於 15 萬個, 使得訓練模型更有說服力,確保了牧雲可以在生產環境中達到設計的監控檢測效果。
產品評估
在產品研發最終階段,我們將牧雲產品與友商產品進行了橫向對比測試(最外圈為牧雲產品),以下圖表分別從準確率(1:1 正負樣本中正確報出佔總報出的比例)、召回率(負樣本中報出比例)和檢測時間(1:1 正負樣本,每萬個樣本)評估, 牧雲可以做到在較短時間內以較高的準確率、極高的召回率對大量樣本檔案進行準確的監控檢測,儘可能避免客戶的損失。
牧雲(CloudWalker)受到業內人士廣泛關注,不斷有使用者詢問產品細節與開源進度。
我們也在持續不斷打磨,使創新技術在落地的過程中更加貼合用戶需求。
牧雲最終實力幾何,我們和你們一樣拭目以待。
更多開源資訊請持續關注!
長亭科技是國際頂尖的網路資訊保安公司,全球首發基於智慧語義分析的下一代Web應用防火牆產品。目前,公司已形成以攻(漏洞掃描器)、防(下一代Web應用防火牆)、查(雲伺服器安全)、抓(內網威脅感知系統)為一體的全方位企業級應用安全防護塔防體系,並提供優質的安全測試及諮詢服務。
作為改變世界的下一代網路安全技術代表,長亭科技被評選為《財富》中國創新企業“人工智慧和機器人”領域的全國第一、《CIO Advisor》亞太地區25家最熱門人工智慧公司。公司產品被Gartner《Web應用防火牆魔力象限》報告提名。目前已服務中國銀行、交通銀行、安信證券、中國平安、愛奇藝、Bilibili、華為等系列知名客戶。