Java序列化對象:流行性調研、漏洞滲透、利用開發和安全識別

關于JSO的安全和Java反序列化漏洞的原理,JSO漏洞流行度,以及如何使用Metasploit 框架驗證和測試JSO有關的漏洞,小編參考有關報告總結分析和大家一起分享學習。

概述

Java序列化對象(Java Serialization Object,JSO)是Java語言中在不同Java程序之間進行數據交換的機制,通過序列化和反序列可以在程序保存和恢復Java執行態的對象,JSO給Java開發帶來極大的方便,但同時也是個極大的安全隱患。JSO給攻擊者提供了一個穩定可靠的載體,來實現對Java APP的攻擊和遠程控制。近年JSO的反序列化漏洞層出不窮,針對JSO的攻擊也越來越多。比如知名Java框架Stuts 2,基本上成了一個篩子,一股腦暴露了幾十個安全漏洞,其中很多都是反序列化漏洞。關于JSO的安全和Java反序列化漏洞的原理,JSO漏洞流行度,以及如何使用Metasploit 框架驗證和測試JSO有關的漏洞,小編參考有關報告總結分析和大家一起分享學習。

首先列舉一下關于JSO現實數據:

2017年和2018年兩年間分配給JSO相關漏洞CVE在大幅度增加。兩年內公增加了大概100個,而此前2013年至2016年四年內也僅僅有7個。

基于JSO的應用程序通??赏ㄟ^互聯網遠程訪問。在2019年1月的Rapid7  Sonar安全掃描統計(基于JSO的T3協議)顯示有11831個可通過互聯網訪問的WebLogic服務器。

JSO的使用和濫用

雖然正對JSO漏洞的攻擊防御已經為廣大開發者和安全人員熟知。但是關于JSO以及由于JSO濫用導致的漏洞許多人并不了解。所以我們首先來解釋一下:

關于JSO

JSO允許Java服務在沒有嚴格定義的結構的情況下相互通信。它為Java服務之間交換數據提供了一種靈活方便的方法,通常使用文件對Java對象持久化并通過網絡連接。發送方傳遞數據字節碼,包括數據結構和數據類型(序列化對象JSO),而接收方通過接受序列化對象,并將其反序列化為內存中的Java對象,這個過程就可以把Java運行時、狀態和數據實現隔空轉移。JSO將類型信息與數據一起保留,并用于傳輸復雜的Java對象,而不會過多操心其內容。例如,Java應用程序的一個組件可能構建了一個“顧客”對象,其中包含諸如“姓名”,“性別”等的字段,甚至包括整數型的“消費金額”等元素。包括一些整數和字符串。如果組件可以只是將這些“顧客”對象堆到一起,那么接口就不需要知道或關心“顧客”對象中的實際內容。只需要將其序列化和反序列化,不用不考慮其內容,其他交給發送者和接收者就是了。

JSO濫用

然而,這樣是不行的。反序列化過程可能會接收的對象字節碼轉換為一些良好的類型定義的字符串和整數,但如果不對其進行認真校驗,很容易就會引入安全漏洞,攻擊者可以控制的進程,在反序列化之前增加惡意代碼和指令從而實現攻擊。事實上,很多程序的接收者都未對接收的序列化字節碼進行驗證,所以可以構建自定義JSO并注入遠程代碼執行(RCE)并將其發送到給反序列化接口執行,當反序列化毫無驗證執行反序列化過程時候就會引入一個“Web shell”或在遠程服務器上執行一些惡意腳本。

JSO處理通常作為Java標準模塊被融入到產品中,要對這些產品修改其這通信方式通常很難,所以反補序列化漏洞的修復非常麻煩,造成的影響也很大。

為了緩解由此帶來的安全威脅,供應商通常會通過有針對性的黑名單,通過黑名單防止使用特定庫可能會導致的RCE,而不是進行更全面的修補漏洞,重新設計有漏洞輸入的接口。所以,當開發人員通過禁用某些可能引入攻擊的庫,暫時解決了漏洞的發作,但是有問題的JSO通信漏洞還存在,當有個新0 day爆發時,這就變成了一顆炸彈。

1.png

一旦攻擊者識別出具有類似功能的另一個庫,就可以快速而傻瓜化的攻擊這個新庫。比如Chris Frohoff的ysoserial這樣的工具可以使用任意數量的庫構建一個JSO,并將有效載荷包裝在幾十個JSO之一中。這些工具大大簡化了漏洞演示和JSO相關的漏洞測試。這意味著,單單通過類庫黑名單來解決漏洞的方法是臨時無效的策略。

2.png

JSO相關漏洞(CWE-502)流行性調研

Java反序列化攻擊并不新鮮,但攻擊者越來越多地發現這類漏洞利用來越越簡單。反序列化漏洞成了攻擊者最喜歡的王牌,還能長久的利用不衰。

CVSS逐年分布統計

3.png

CWE-502是MITRE 通用缺陷分類(Common Weakness Enumeration)JSO專用標識符,用來跟蹤不受信任數據進行反序列化(Java或OO語言語言)導致的漏洞。在過去的五年中,我們看到基于反序列化的CVE急劇增加,包括那些CVSS分數高于7.0的高危漏洞:

4.png

這些CVE都存在于廣泛使用的大眾軟件產品中,比如Oracle WebLogic,IBM WebSphere,思科安全訪問控制系統(ACS),HPE智能管理中心(IMC)和VMware的vSphere Integrated Containers中。

攻擊者可以使用MetasploitFramework中的各種公共漏洞利用來獲取到這些產品的未經身份驗證的RCE,可以利用MF模塊包括:

5.png

WebLogic T3部署調查

由于最近報告的漏洞都涉及Oracle WebLogicT3協議。WebLogic本身使用T3之外的各種協議進行通信,但它與在給定端口上僅使用一種協議的許多其他產品和服務不同。例如,WebLogic實例的默認配置提供了一個默認端點7001/TCP,它使用幾種不同的協議,包括T3,HTTP,SNMP和LDAP。

 Rapid7利用其Project Sonar來掃描了2019年1月暴露在公網上WebLogic服務器。

6.png

Project Sonar是Rapid7 2013年9月發起的一個公共安全分析項目,旨在通過對公網網絡活動的分析來提高安全。為了更多地了解WebLogic如何在公網的開放程度,Rapid7利用了Sonar HTTP和HTTPS研究的一部分收集的數據,這些研究大約每周掃描幾十個端口。通過檢查超過1.2億個HTTP響應服務以獲取大多數WebLogic實例回應。結果顯示有18693個IPv4地址開放了67個不同的TCP端口,這些端口顯示為WebLogic。結果還顯示,WebLogic最常見開放的端口是80(HTTP,占44%)和7001(默認端口,占36%)。

7.png

公共互聯網上的WebLogic服務器監聽TCP端口可能有443,80,7001,8001和8002。通過對這些端口掃描,發送指令,接受相關指令可以用更準確地識別T3協議。

具體指令為發送一個23字節的T3協商消息:

t3 9.2.0.0\nAS:2048\nHL:19\n\n

字符串“t3”發起T3協議。’9.2.0.0′是我們客戶端WebLogic版本banner,服務器需要使用它來確定兼容性。 ‘AS’和’HL’參數分別控制JVM消息頭大小和近似表大小,其值根據觀察到的默認值設置。

實驗證實,T3端點用類似的消息響應,該消息描述了T3協商的結果,分為兩組:

1.確認T3成功協商的T3端點。由此,我們可以識別服務器開放了WebLogic。

2.確認T3端點,其中T3由于連接過濾器或類似限制而未成功協商,或者某些類型的錯誤配置(例如許可問題和WebLogic版本不兼容)以及其他可能的情況。

檢查來這些先前已識別的常見WebLogic端口:80,443,7001,8001和8002。

結果顯示超過8700萬個IPv4端點的響應,確定其中了11831個確認運行了WebLogic的系統。這比我們之前基于HTTP的估計值低35%,這種差異有幾種可能的原因,可能由于一般的互聯網規模掃描時候網絡波動,或者這些WebLogic實例明確配置HTTP屏蔽了T3信息。進一步的分析顯示有1183個服務器對T3探測器給了負面的反饋,可能是由于T3對探測器進行了限制。

在WebLogic使用的默認端口端口7001/TCP上,有4577個反饋了是T3。這比前面基于HTTP估算的3439要少??赡茉蚴?001/TCP上的WebLogic實例,只反饋了T3信息,沒有指明為HTTP。

端口8001/TCP也是WebLogic默認安裝在7001/TCP不可用或安裝額外實例時使用的備用端口。我們在8001/TCP上有1157個反饋是T3的主機。端口8002是WebLogic的不臺常用的替代端口,它顯示有大概300多個WebLogic系統。

在默認的HTTP和HTTPS端口(80和443)上,分別有5672和1133個IPv4終端,被確認啟用可T3協議。

已確認得所有T3終端的WebLogic版本分布顯示涉及各種版本:包括從7.0.1.0(2002年發布)到12.2.1.3最新版本(2019年初):

 

8.png

Sonar endpoint研究的一部分,還包括了IP歸屬地的分布相關元數據,包括可IP歸屬組織和位置詳細信息,比如國家和城市。所有T3結果中IP歸屬地的統計數據顯示:

有超過25%的暴露T3的IP由Oracle所有,WebLogic發行商,其余大部分由各種云提供商擁有。

所有IP歸屬中超過36%為美國,32%是中國,其他國家和地區:

9.png

國家 數量
美國 4279
中國 3875
伊朗 511
韓國 307
德國 241
印度 236
英國 138
加拿大 120
法國 118
巴西 115

 

數量最多的十個組織是:

組織 數量
甲骨文云 2,982
中國電信 1,677
中國聯通 867
阿里云 340
亞馬遜AWS 264
YHSRV 252
中國移動 204
SumTotal系統 143
韓國電信 136

 

對JSO的服務滲透測試

對于可遠程訪問的WebLogic漏洞服務,可以利用Metasploit多個模塊(#11136,#11134,#11131和#10436)可以進行滲透測試。先利用手動測試,然后可以使用Burp Suite或ysoserial等工具定位易受攻擊的服務。

例如,對有問題WebLogic服務器的攻擊者可以通過Metasploit輕松獲得未經身份驗證的RCE:

10.png

更精準的攻擊通過網站導航或使用Java應用程序,同時監控網絡流量以獲得基于JSO的交互的跡象。對包含T3標志頭(或0xACEDmagic字節)的流量的簡單搜索可以顯示使用JSO進行通信的服務的存在:

11.png

更積極寫,可使用多個工具組合來來主動掃描基于JSO的用戶輸入的服務。例如,專業版Burp Suite支持Java Deserialization Scanner擴展,可以主動識別和利用JSO漏洞。該擴展使用Wouter Coekaerts的SerialDOS技術的修改來執行基于JSO的服務的庫無關的漏洞檢查,即使庫已被列入黑名單,也會識別固有的漏洞。

任何隨機的二進制數據集也可能在某處存在著神奇的0xACED字節,因此對于應用程序測試人員來說這更有用(但有噪音)。

Metasploit支持JSO利用開發

在測試,開發和驗證序列化攻擊中使用的漏洞時,研究人員和白帽安全從業者會面臨復雜的工具生態系統。將Metasploit內容納入反序列化漏洞通常需要貢獻者在將二進制blob插入到貢獻模塊之前對JSO進行反向工程并手動優化有效負載。

為了簡化創建和驗證漏洞利用程序的過程,MetasploitFramework中增加了對基于ysoserial的對象的本地使用的支持。Metasploit可以輕松生成或修改ysoserial JSO,以用于漏洞利用開發,研究和測試。這個mixin可以將重復的38行函數減少到一行:

data =::Msf::Util::JavaDeserialization.ysoserial_payload(“JSON1″,cmd)

在Metasploit安裝ysoserial

為了向Metasploit貢獻者提供像ysoserial這樣的JSO有效負載生成,需要一種方法來提供有效負載,而無需特定版本的Java和必備庫。調用這些庫不僅耗時并且減慢了JSO的生成速度,還會限制Metasploit的環境。此外,ysoserial需要計算結構內對象的長度,因此在Metasploit中實現JSO有效負載生成也需要定位和更新長度。

截至19年1月,Metasploit提供了預先生成的ysoserial有效載荷和元數據的緩存,允許模塊快速可靠地生成JSO。Rapid7使用Docker創建一個隔離的構建環境,在該環境中可以安裝和運行Java和依賴包(類似于創建Metasploit有效負載的方式)。 Docker容器使用最新版本的ysoserial列出可以構建的庫和變體,然后遍歷每個嘗試構建對象的庫:

metasploit-framework/tools/payloads/ysoserial/Dockerfile

基于ubuntu的dockerfile如下:

12.png

注意,當Metasploit模塊需要生成JSO時,不需要運行Docker環境。相反,容器的輸出被緩存并隨Metasploit Framework一起提供。只有當ysoserial維護者識別要集成到ysoserial工具中的新庫時,才能運行Docker容器,可能每年幾次。會在Metasploit GitHub wiki公布。

找到偏移值

下一個挑戰是找到ysoserial輸出中包含的長度值和有效負載緩沖區。需要通過手動對每個輸出進行反向工程,并且不支持對ysoserial的更新。相反,Docker容器使用不同長度的有效負載生成一系列對象,然后比較它們以定位其他字節(有效負載緩沖區)和遞增字節(長度值):

metasploit-framework/tools/payloads/ysoserial/find_ysoserial_offsets.rb

13.png

刪除指紋標識

事實證明,ysoserial插入字符串ysoserial/Pwner后跟一個時間戳值。由于此字符串很容易識別,滲透測試者和其他希望避免檢測的攻擊性從業者可能會對其感興趣:

14.png

該指紋有助于識別ysoserial使用和確定ysoserial JSO是否在從先前的攻擊中使用過。當然它還有一個副作用,就是其阻礙發現長度偏移和有效載荷緩沖區的差異技術。解決方案有兩個方面:使用易于定位的字符串覆蓋指紋,然后在Metasploit模塊調用時在每次調用期間生成隨機字符串:

metasploit-framework/tools/payloads/ysoserial/find_ysoserial_offsets.rb:
15.png

metasploit-framework/lib/msf/util/java_deserialization.rb:

16.png

輸出將寫入由Metasploit提取的JSON文件。例如,以下是JSON緩存文件中的CommonsCollections1對象的片段:

17.png

該技術可以應用于任何動態有效載荷或對象生成框架的重新實現。特別是,使用JSON,Base64和明確定義的偏移值使其他語言或工具可以輕松使用搞緩存文件。

生成JSO漏洞利用

對Metasploit上述所有工作都縮減為一條線??紤]hp_imc_java_deserialize漏洞利用模塊。

18.png

這一行調用默認情況下內置exploit和輔助模塊的mixin。mixin記錄在MetasploitFramework維基上。 ysoserial_payload方法有兩個參數:ysoserial有效負載名稱和要運行的命令。

查看完整的漏洞利用方法,該模塊生成PowerShell有效負載,將其嵌入到緩存的ysoserial JSO中,然后將其全部捆綁到HTTP POST請求中。

19.png

修改JSO漏洞利用

從用戶的角度來看,漏洞仍然是響應式的,JSO生成在后臺發生。以下是Metasploit會話的輸出,使用hp_imc_java_deserialize在HPE IMC中利用未經身份驗證的RCE:

20.png

假設Metasploit用戶發現該模塊中使用的JSON1對象被入侵檢測系統(IDS)或基于黑名單的服務補丁捕獲,則可以修改該模塊以使用新庫(在這種情況下,要用CommonsBeanutils1庫)。

例如,將Metasploit模塊hp_imc_java_deserialize.rb中的第101行更改為使用“CommonBeanutils1”而不是“JSON1”會產生以下會話輸出:

21.png

識別JSO漏洞

防御者可以檢查其網絡中的JSO依賴服務,特別關注針對公網的可訪問服務。例如,檢查或監視已知嚴重依賴JSO的服務的HTTP標頭。此外,使用Nmap等網絡掃描工具,它們集成了腳本來識別基于JSO的T3協議。最后,監控并使用MetasploitFramework對已知的易受攻擊服務進行實際測試。

對JSO進行被動監測

持續監控和響應這些漏洞會非常乏味。為了預先防御這類漏洞,主動防御者可以搜索有問題的協議以及針對這列攻擊的指紋和文件標識。由于JSO具有明確定義的結構,因此可以在文件和網絡流量中查看其標志字串。最明顯得標志是JSO開頭的“魔術字節”序列。例如,監視HTTP參數和二進制協議中的模式很有用:

aced是標識JSO的“魔術字節”序列的十六進制表示。

aced 00 05表示Java序列化格式的常用版本5。

%C2%AC%C3%AD%00%05與上面一樣,不過格式為URI編碼。

rO0AB與上面一樣,格式為Base64編碼。

需要明確的是,這些模式既不是JSO必須的,也不是JSO獨有的。對他們需要進一步分析,因為他們預計這有權訪問該文件或網絡流的攻擊者能夠注入惡意JSO。

如果這些模式被確認為是JSO的服務在使用,則需要更密切地監視它們,對它們進行沙箱化以減少潛在的危害,或者與供應商進行討論研究,以了解它們是否已經使用可以被利用的有漏洞的庫超。

對JSO服務的積極掃描

許多基于Web的服務在HTTP標頭中或響應主體內包含版本字符串,允許管理員和攻擊者識別響應Web請求的軟件名稱和版本。對于Oracle WebLogic,HTML響應包含以下字符串:

22.png

端口掃描工具(如Nmap)可以監視上述字符串,然后使用T3協議與主機協商,以提取有關服務器版本和狀態的更多信息。

23.png

最后,Oracle WebLogic和其他依賴JSO的服務有一些公共漏洞。 Metasploit中包含許多此類漏洞并且會不斷更新。

結論

對于基于Java的服務中未經身份驗證的RCE類攻擊,JSO是一種越來越可靠的手段。NIST CVE公告和公開的此類漏洞在過去三年都有大幅度的增加。由于Java對文件和網絡流的固有信任導致了JSO相關功能的潛在缺陷,因此各種基于Java的軟件產品很容易受到反序列化攻擊。Rapid7的研究表明,這些產品很多可以在互聯網上公開訪問,并且經常接受用戶提供數據,而沒有任何特殊過濾。 Metasploit Framework支持基于ysoserial的JSO的本地使用的支持,可以簡化其測試,安全開發和實現的研究。

除了對依賴Java的主機和服務進行持續漏洞修補和監控之外,防御者還可以考慮為JSO事務中存在的簽名添加監控,既可以使用基于JSO的通信主動識別服務,也可以識別針對反序列化漏洞的攻擊。

取消
Loading...

填寫個人信息

姓名
電話
郵箱
公司
行業
職位
css.php jizzz