JAVA世界中不安全的反序列化風險

2018/01/05

INTRODUCTION

OWASP Top 10 Application Security Risks - 2017在上個月底熱騰騰的出爐啦!其中與先前2013版本新增的重大風險是:A4XML外部實體注入的風險、A8不安全的反序列化、A10不充分的記錄及監控。這次的專欄我們針對A8不安全的反序列化做介紹。我們將會以Java語言作為示範反序列化的過程、以及以CVE2017-12149 JBOSS Application Server 5.X/6.X的反序列化遠端代碼執行的弱點作為示範。

What is DESERIALIZATION?

要提到反序列化,想當然爾必須先了解何為"序列化"。
我們從Java的官網的tutorial中找到這段文字介紹:
To serialize an object means to convert its state to a byte stream so that the byte stream can be reverted back into a copy of the object.
(將一個物件轉換成一個"可還原"的byte stream)
讓我們來看以下這段簡單的SAMPLE CODE:

editor_1515125855.png

大致上的意思是在建立一個文字字串的物件,然後將它序列化成檔案"serialization.demo"之後儲存到硬碟中,隨後將檔案讀回程式,再反序列化後將字串輸出。執行過程如下:

editor_1515125876.png

其中的關鍵我們可以來觀察"serialization.demo"這個檔案:由於是byteStream格式,所以我們使用xxd將binary格式轉換一下,變成可以看懂的字元,可以看到我們寫好的字串的確被包裝於檔案中。
再來下一步我們進階"實作"一個Serializable的MyObject物件來嘗試做反序列化:

editor_1515125906.png

我們實作了一個MyObject物件,並且在readObject時印出serializable!!!字串。執行情況如下:

editor_1515125955.png

果真如預期的先是印出了serializable!!!字串,再行印出物件所帶出的字串。
有注意到兩次輸出之後我們都有再將資料做一次base64編碼嗎?可以注意到有趣的是Java的反序列化物件在編碼後都是以rO0AB開頭,這是一個在執行滲透測試時相當重要的特徵。

What is INSECURE DESERIALIZATION in Java?

在我們看完簡單的序列化原理後,就要進入正題啦!為什麼反序列化被當作參數後,遭到惡意攻擊者修改後,就能輕鬆的達到遠端代碼執行的攻擊效果呢?
我們用倒果為因的方式,先從當下時下攻擊Java反序列化攻擊必備的ysoserial這套攻擊代碼產生工具( https://github.com/frohoff/ysoserial )的思維和程式碼,來快速切入思考反序列化的問題。

從使用方法中我們可以看到必須輸入Payload類型,而每個類型的Payload有其對應有反序列化問題的Java函式庫Dependency,為什麼Payload會有相依性呢?

editor_1515126015.png

我們挑選其中最常見的CommonCollections這個系列的第五項,來做為這次探討反序列化發生的原因,並在最後以一個Real Case: CVE2017-12149 JBOSS Application Server 5.X/6.X的反序列化遠端代碼執行的弱點作為示範。
在ysoserial的CommonCollections5.Java原始碼中,我們可以看到最上面註解部分提到利用來執行反序列化達成遠端代碼執行的"Gadget Chain",所謂"Gadget Chain"是利用Java語言反射的特性,將前面Dependency函式庫中,所定義的類別裡的函式做組合後,構成繞過Java機制可強制被執行的函式鍊,再將此函式鍊反序列化後的byteStream送至伺服器端,讓伺服器成功達到我們想要的遠端代碼執行。

editor_1515126055.png

此Gadget Chain的撰寫技巧在於將一般正常的執行函式,以反射的方式與Apache CommonCollections 中的ChainedTransformer結合,只要可以觸發transform()這個函式,就能成功將鏈結裡的InvokerTransformer串起後執行。這時我們從頂層重新看起,觸發的部分就靠Java原有的AnnotationInvocationHandler當作初始的關鍵觸發元件,其中的entrySet()被稱作magic method,會觸發Map中的invoke方法,再傳遞至內層的AnnotationInvocationHandler的invoke方法,最後包裝於CommonCollections的LazyMap中,將前面的ChainedTransformer放在裡面,即可成功執行。

editor_1515126085.png

CVE2017-12149 JBOSS AS 5.X/6.X Insecure Deserialization to RCE

editor_1515126115.png

我們先針對JBOSS AS 做簡單的code review,這個漏洞發生於URL路徑/invoker/readonly之中,經過Trace之後發現實際程式位置在org.jboss.invocation.http.servlet中的ReadOnlyAccessFilter,其中針對了輸入資料做反序列化的動作。

editor_1515126160.png

既然程式端有反序列化,那麼我們就來開始構造我們的payload吧!
由於最後會執行Runtime.getRuntime().exec()的關係,加上最後解析時會出現一些問題,所以我們透過以下工具將執行語句( http://jackson.thuraisamy.me/runtime-exec-payloads.html )快速編碼成base64格式:

editor_1515126213.png

隨後再將編碼好之payload以ysoserial工具,將payload填入Gadget Chain中再反序列化。

editor_1515126256.png

最後就可以在我們預先設定好之nc之下得到reverse shell了!editor_1515126286.png

Conclusion
由於攻擊者利用Java反射機制的副作用,在物件return之前就將所有動作執行完畢,導致反序列化在解開byteStream時並且跳出error之前就將Payload全數執行。導致攻擊者只要掌握後端程式中有何種函式庫,將函式庫中各種函式做組合,跨函式庫呼叫函式組合成Gadget Chain,最終執行Runtime.getRuntime().exec()以執行任意惡意代碼。

簡單來說就是一個使用者將110V的電器插入220V的插座中,雖然是一樣的插座孔,不過使用者並不知道插座的伏特數是多少,直到插座與電器通電、電器燒壞後才發現伏特數不合拍。同樣的,反序列化也是在含有遠端代碼執行的byteStream進入系統,在Payload執行後才發現,這byteStream格式是有問題的。



其他訊息
嚇!手遊資安危機 數小時恐喪失上億營收

嚇!手遊資安危機 數小時恐喪失上億營收

2016/08/10
Pokemon Go越紅公司損失越大! 歷時兩年開發,上市不到72小時就被駭

Pokemon Go越紅公司損失越大! 歷時兩年開發,上市不到72小時就被駭

2016/07/20
注意!金融業已成為駭客攻擊目標,4個防範手機App的資安威脅!

注意!金融業已成為駭客攻擊目標,4個防範手機App的資安威脅!

2016/07/15
準行政團隊Line國事作法急轉彎,準經長受命客製臺版即時通

準行政團隊Line國事作法急轉彎,準經長受命客製臺版即時通

2016/04/29
從Google Play下載App保證安全!? 資安業者:超過100款惡意程式會偷資料、點擊詐騙

從Google Play下載App保證安全!? 資安業者:超過100款惡意程式會偷資料、點擊詐騙

2016/04/27
網銀App漏洞 金管會關注

網銀App漏洞 金管會關注

2016/04/07
Google釋出Nexus Android 4月份更新,一次修補近40項漏洞

Google釋出Nexus Android 4月份更新,一次修補近40項漏洞

2016/04/07
Android逆向之旅---靜態分析技術來破解Apk

Android逆向之旅---靜態分析技術來破解Apk

2015/11/28
Xcode Ghost事件說明及處理建議

Xcode Ghost事件說明及處理建議

2015/09/22
NEW-【第一季資安報告】加密勒索軟體感染翻兩倍;行動惡意威脅App突破500萬大關!

NEW-【第一季資安報告】加密勒索軟體感染翻兩倍;行動惡意威脅App突破500萬大關!

2015/06/01
Critical GHOST vulnerability affects most Linux Systems

Critical GHOST vulnerability affects most Linux Systems

2015/01/30
會員、個人資料外洩怎麼辦?4個預防資料外洩方法一次看懂!

會員、個人資料外洩怎麼辦?4個預防資料外洩方法一次看懂!

2017/03/10
駭客工具的氾濫VS企業所面對的資安威脅

駭客工具的氾濫VS企業所面對的資安威脅

2017/05/26
API 安全問題探討

API 安全問題探討

2017/09/09
JAVA世界中不安全的反序列化風險

JAVA世界中不安全的反序列化風險

2018/01/05
來自外部的威脅 - XXE漏洞攻擊成因

來自外部的威脅 - XXE漏洞攻擊成因

2018/06/15
網路詐騙手法!釣魚信件、釣魚網站的社交工程駭客常見3手法!

網路詐騙手法!釣魚信件、釣魚網站的社交工程駭客常見3手法!

2019/06/04
要如何預防駭客攻擊?6步驟教你如何提升網路資安的安全性!

要如何預防駭客攻擊?6步驟教你如何提升網路資安的安全性!

2020/01/22
注意!行動裝置App資安檢測最需要注意「防記憶體偵測」技術!

注意!行動裝置App資安檢測最需要注意「防記憶體偵測」技術!

2021/06/22
什麼是Web Cache?3分鐘快速帶你瞭解Web Cache的功能及使用方式!

什麼是Web Cache?3分鐘快速帶你瞭解Web Cache的功能及使用方式!

2021/07/13
如何防範網站速度的延遲及停機?看國外在特賣期間是如何做到的!

如何防範網站速度的延遲及停機?看國外在特賣期間是如何做到的!

2021/07/13
常見手機APP駭客工具-FRIDA,預防你的網站遭受駭客攻擊!

常見手機APP駭客工具-FRIDA,預防你的網站遭受駭客攻擊!

2021/07/13
App手機行動裝置的Xposed軟件攻擊模式,該如何防禦網路資安?

App手機行動裝置的Xposed軟件攻擊模式,該如何防禦網路資安?

2021/07/22
手機被駭怎麼辦?5分鐘一次教你破解Mobile App駭客攻擊手法!

手機被駭怎麼辦?5分鐘一次教你破解Mobile App駭客攻擊手法!

2021/07/30
支付、網銀金融App安全嗎?你必知的白帽App資安漏洞分析!

支付、網銀金融App安全嗎?你必知的白帽App資安漏洞分析!

2021/08/09
預防駭客行動詐騙!看懂App網路資訊安全「原始碼加密」技術!

預防駭客行動詐騙!看懂App網路資訊安全「原始碼加密」技術!

2021/08/13
什麼是ApkCrack?3步驟瞭解駭客工具並完美預防駭客攻擊!

什麼是ApkCrack?3步驟瞭解駭客工具並完美預防駭客攻擊!

2021/08/20
新型Android安卓駭客破解工具Mhook出現!當心被手機駭客攻擊!

新型Android安卓駭客破解工具Mhook出現!當心被手機駭客攻擊!

2021/08/26
從零基礎學破解的駭客工具     Magisk Root,     看懂駭客攻擊如何操作!

從零基礎學破解的駭客工具 Magisk Root, 看懂駭客攻擊如何操作!

2021/09/06
什麼是幸運破解器Lucky Patcher?不得不正視的APP資安問題!

什麼是幸運破解器Lucky Patcher?不得不正視的APP資安問題!

2021/09/15
飛馬間諜軟體讓駭客監控你的手機!不點連結就能自動感染

飛馬間諜軟體讓駭客監控你的手機!不點連結就能自動感染

2021/09/16
什麼是DDoS攻擊?一次教你如何做好DDoS防護,保護你的網站!

什麼是DDoS攻擊?一次教你如何做好DDoS防護,保護你的網站!

2021/09/28
APP資安防禦不可輕忽!最新手遊作弊修改器GameGuardian!

APP資安防禦不可輕忽!最新手遊作弊修改器GameGuardian!

2021/10/04
什麼是滲透測試?從網路資安看Client-Side Template Injection

什麼是滲透測試?從網路資安看Client-Side Template Injection

2021/10/07
手機更新後銀行帳密全被盜!小心Flubot惡意軟體入侵

手機更新後銀行帳密全被盜!小心Flubot惡意軟體入侵

2021/10/07
如何提升網站速度及效能?推薦先搞懂動態v.s靜態網站的差 異!

如何提升網站速度及效能?推薦先搞懂動態v.s靜態網站的差 異!

2021/10/25
網站在中國速度很慢?中國網站加速的CDN內容傳遞最佳實務!

網站在中國速度很慢?中國網站加速的CDN內容傳遞最佳實務!

2021/10/25
如何提升網站效能優化?推薦5個改善網站速度的方法一次看!

如何提升網站效能優化?推薦5個改善網站速度的方法一次看!

2021/11/23
線上學習網站速度太慢怎麼辦?透過CDN達到網站加速!

線上學習網站速度太慢怎麼辦?透過CDN達到網站加速!

2021/12/13
遇到DDoS駭客攻擊怎麼辦?一站式的雲端安全管理有用嗎?

遇到DDoS駭客攻擊怎麼辦?一站式的雲端安全管理有用嗎?

2021/12/13
企業安全合規5式,做好DDOS防護提升您的網絡安全策略!

企業安全合規5式,做好DDOS防護提升您的網絡安全策略!

2021/12/27
「負載平衡」是什麼意思?網站加速與負載平衡也有關嗎?

「負載平衡」是什麼意思?網站加速與負載平衡也有關嗎?

2022/01/03
2021最大資安漏洞!修補方式一次完整揭露

2021最大資安漏洞!修補方式一次完整揭露

2022/01/05
SSTI惡意指令注入防不勝防,面對駭客惡意攻擊,要如何戒備與防範?

SSTI惡意指令注入防不勝防,面對駭客惡意攻擊,要如何戒備與防範?

2022/01/14
內容傳遞網路(CDN)提供哪些服務?Alibaba Cloud CDN如何?

內容傳遞網路(CDN)提供哪些服務?Alibaba Cloud CDN如何?

2022/01/18
網站速度太慢怎麼辦,速度也會影響到網站的轉換率嗎?

網站速度太慢怎麼辦,速度也會影響到網站的轉換率嗎?

2022/01/24
OWASP Top 10 2021 十大常見的弱點與風險,如何做好企業資安防護?

OWASP Top 10 2021 十大常見的弱點與風險,如何做好企業資安防護?

2022/02/22
源碼檢測是什麼?動態&靜態的弱點掃描測試有什麼不同?

源碼檢測是什麼?動態&靜態的弱點掃描測試有什麼不同?

2022/04/06
Hack Talk駭客論壇,深度剖析ICS攻擊與Windows提權威脅!

Hack Talk駭客論壇,深度剖析ICS攻擊與Windows提權威脅!

2022/04/11
2021年OWASP Top 10新規範,有效補強企業資安機制缺陷!

2021年OWASP Top 10新規範,有效補強企業資安機制缺陷!

2022/04/20
【企業案例】《今日新聞》融合CDN技術,網站流量成長 50%

【企業案例】《今日新聞》融合CDN技術,網站流量成長 50%

2022/05/04
2021 OWASP Top 10 A02加密機制失效的問題

2021 OWASP Top 10 A02加密機制失效的問題

2022/05/20