Apache Shiro是一款強大且易用的Java安全框架,使用範圍很是普遍。Shiro默認使用CookieRememberMeManager,其處理cookie的流程是:rememberMe cookie值–>Base64解碼–>AES解密–>反序列化。在Shiro<=1.2.4版本下,AES密鑰是硬編碼的,致使攻擊者能夠構造加密的反序列化數據執行任意命令。java
下載Shiro 1.2.4的代碼,先看看CookieRememberMeManager.java文件,發現其繼承AbstractRememberMeManager類。安全
跟進到AbstractRememberMeManager類,在80行發現定了私有常量DEFAULT_CIPHER _KEY_BYTES,值爲Base64.decode("kPH+bIxk5D2deZiIxcaaaA=="),而這就是咱們須要找的硬編碼AES key。服務器
解密後的數據會通過AbstractRememberMeManager類的getRememberedPrincipals方法處理,並在該方法中調用了convertBytesToPrincipals方法.cookie
繼續向上追蹤,最後到DefaultSerializer類的deserialize方法調用了readObject,對解密的數據進行反序列化。框架
因爲該漏洞攻擊特徵被加密,和正常數據看起來類似,在護網等場景下被攻擊者大量使用,而且較難在不影響正常業務狀況下直接作攔截。特別是對雲上安全產品,客戶的服務器、應用、業務種類繁多,直接封禁rememberMe cookie難以實現,所以須要先行對數據進行處理再作決定。工具
咱們須要模擬Shiro對Cookie處理的過程,對加密數據進行處理後再進行,處理過程的流程圖以下:學習
提取含有rememberMe cookie的值,對其作base64解碼,再利用AES key對數據進行解密,因爲該漏洞是AES key硬編碼致使的,咱們收集了市面上攻擊者經常使用的20個AES key,覆蓋絕大部分Shiro反序列化攻擊行爲。編碼
對數據解密後,先判斷解密後數據是否以」 aced0005」開頭,即擁有Java序列化數據的特徵。可是到了這步,仍然沒辦法確認是不是攻擊,正經常使用戶的rememberMe值解密後也是序列化的數據。但這裏咱們很清楚,此處存在漏洞是所以對數據作了反序列化操做即存在反序列化入口,而實際觸發漏洞還須要有一個完整的利用鏈條。所以,咱們提取了常見工具的20餘條利用鏈的特徵,再對解密數據進行判斷,從而能正確的處理攻擊數據。加密
3.1攻擊詳情spa
3.2 最近一週攻擊趨勢
百度安全智能一體化解決方案中已支持上述漏洞檢測,而且開放了智能化編排的入口,用戶只須要編寫簡單的腳本,就可以對特定數據進行處理,進行觸發告警、攔截等措施。智能一體化解決方案以下:
對於此類無明顯攻擊特徵的行爲,WAF等設備一般沒法直接攔截,智能網關先將旁路流量給到智能分析中心,經過用戶添加的智能編排腳本處理,再將結果反饋到智能網關,對相應的攻擊進行攔截,可以準確、有效地保護用戶的資產。
另外,智能分析中心還集成了智能API識別,可以有效地對API進行分類識別,幫助用戶梳理API資產;同時還集成了AI白模型等能力,當用戶對資產進行一段時間的學習後,可以有效地防護未知攻擊、0day攻擊等。
本文由百度安全原創,轉載請註明出處及原文連接