據報道,.NET編碼庫存在反序列化(Deserialization)漏洞,會讓攻擊者在處理反序列化數據的服務器和計算機上執行代碼,從而影響.NET生態系統。
何為序列化和反序列化?
序列化(Serialization)是將對象轉換成字節流的過程,以存儲對象或將對象傳輸至內存、數據庫或文件。序列化的主要目的在于保存對象的狀態,以便能在需要時重新創建對象,而逆向過程就被稱為反序列化(Deserialization)。
2015年和2016年 “Java末日”(Java Apocalypse)
通過反序列化操作實施攻擊自2011年就已為人所知,但這類攻擊2015年初成為困擾每個人的問題,當時兩名研究人員(克里斯?弗洛霍夫和加布里埃爾?勞倫斯)發現一款相當熱門的Java應用程序---Apache Commons Collection中存在反序列化漏洞。
Foxglove Security的研究人員于2015年底詳細闡述了此類攻擊的最初攻擊模式,展示了攻擊者如何使用Java應用程序(開發人員正確使用Apache Commons Collection庫處理反序列化操作的應用程序)中的反序列化漏洞。
研究人員的實驗表明,攻擊者可以在熱門Java中間件(例如WebLogic、WebSphere、JBoss、Jenkins和OpenNMS)內上傳惡意數據。惡意數據會被序列化并存儲在數據庫或內存中,但當應用程序將數據反序列化時,中間件還將執行被感染系統上的其它惡意代碼。
該漏洞2016年掀起Java生態系統大波瀾,因為此漏洞還影響了70個其它的Java庫,甚至被用來感染PayPal服務器。
包括Apache、Oracle、Cisco、Red Hat、 Jenkins、VMWare、IBM、Intel、Adobe、HP和SolarWinds在內的公司均發布了產品安全補丁。
這個Java反序列化漏洞相當危險,以至Google工程師利用自由時間修復開源Java庫,并限制漏洞的企及范圍,修復了2600多個項目。
在Google內部,該漏洞被稱為“瘋狂工具”(Mad Gadget),而業界將其稱之為“Java末日”(Java Apocalypse)
反序列化漏洞也會影響.NET應用程序
如今,惠普(HP)軟件安全研究人員阿爾瓦羅?穆尼奧斯和亞科文科·麥羅西在一份新研究中披露,類似的反序列化漏洞也會影響.NET生態系統。
.NET應用程序中存在的反序列化漏洞允許攻擊者偷偷溜進目標設備執行代碼。
與Java類似,某些.NET庫未受該漏洞影響。使用受影響.NET庫的應用程序是安全的,因為程序員視序列化的數據為不安全因素,不允許訪問特定功能和方法。
穆尼奧斯和麥羅西著重分析使用JSON數據的.NET和Java庫。
研究人員還在研究論文中評價了分析的所有.NET和Java應用程序,并提到哪些應用程序是安全的,并建議開發人員使用JSON數據時用相對安全的應用程序避免反序列化攻擊(參見文末鏈接了解詳情)。
熱門.NET項目中存在反序列化漏洞
為了說明該漏洞可能會影響真實存在的應用程序,而不僅僅是理論威脅,研究人員在.NET數據管理后端框架Breeze中發現一個JSON反序列化漏洞(CVE-2017-9424);此外,還在基于 Ruby's Sinatra的網絡框架NancyFX中發現JSON反序列化漏洞(CVE-2017-9785)。
除了JSON反序列化漏洞,其它處理XML數據對象的庫也存在這類漏洞。研究人員還發現如今最常用的.NET CMS--- DotNetNuke中存在XML反序列化漏洞。
上述這些漏洞反映了.NET庫中存在的漏洞以及開發人員的不良編碼習慣,開發人員并未認識到,默認序列化數據并不一定安全。
要解決該漏洞,須改進許多.NET庫的安全性,同時還需普通程序員提高意識。
研究人員表示,序列化器(Serializer)是對安全性要求特別高的API,不應與不受信任的數據一起使用。這不是Java序列化、特定.NET格式化程序或任何特定格式(例如JSON、XML或Binary)的特定問題。所有序列化器需重建對象,通常會調用攻擊者試圖濫用以啟動工具鏈執行任意代碼的方法。
研究人員建議使用的.NET應用程序見:
https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-JSON-Attacks-wp.pdf#page=5