2016 年 Java 應(yīng)用程序及開發(fā)者受到反序列化漏洞的破壞性影響,而如今 .NET 生態(tài)系統(tǒng)也正在遭受同樣的危機(jī)。新的問題存在于 .NET 代碼庫中處理反序列化的操作中,攻擊者同樣可以通過這個漏洞在服務(wù)器或相關(guān)計算機(jī)設(shè)備上進(jìn)行代碼注入。
我們知道,序列化指的是將對象轉(zhuǎn)化為字節(jié)序列以便保存在內(nèi)存、文件、或數(shù)據(jù)庫中。而這個序列化過程主要是為了將對象的狀態(tài)保存下來,在之后有需要之時可以重新創(chuàng)建對象。而與之相反的過程則被稱為反序列化。而在這個過程中,如果沒有對數(shù)據(jù)進(jìn)行安全性檢驗(yàn),而直接對不可信數(shù)據(jù)進(jìn)行反序列化處理,那么攻擊者可以通過構(gòu)建惡意的數(shù)據(jù)輸入,讓反序列化構(gòu)建的對象帶來非預(yù)期的結(jié)果,帶來任意代碼執(zhí)行的后果。
2015 –2016 年的 Java 反序列化啟示
自2011年開始,攻擊者就開始利用反序列化問題發(fā)起攻擊。
2015年上半年,兩名研究員Chris Frohoff 和 Gabriel Lawrence 發(fā)現(xiàn) Apache Commons Collection 中的反序列化漏洞后,這個問題才真正開始讓每個開發(fā)者頭疼。
在2015年年底,F(xiàn)oxglove Security 的安全研究員,揭開了攻擊者如何利用Java程序中的反序列化漏洞進(jìn)行攻擊。
研究調(diào)查顯示,常見的Java app 中均存在這個問題(如 WebLogic,WebSphere,JBoss,Jenkins 以及 OpenNMS)。攻擊者可以利用漏洞進(jìn)行惡意數(shù)據(jù)上傳,而上傳上去的數(shù)據(jù)會被序列化,然后存儲到數(shù)據(jù)庫或內(nèi)存中,當(dāng) app 反序列化這些數(shù)據(jù)內(nèi)容時,就會觸發(fā)惡意代碼,影響整個系統(tǒng)。
這個漏洞在 2016 年撼動了整個Java 生態(tài)系統(tǒng),也影響到了 70余個其他的Java 庫,甚至還讓 PayPal 的服務(wù)器遭受影響。而大型的組織和機(jī)構(gòu),如Apache, Oracle, Cisco, Red Hat, Jenkins, VMWare, IBM, Intel, Adobe, HP, 和 SolarWinds之類,都對自己的系統(tǒng)和產(chǎn)品進(jìn)行徹底排查和漏洞修復(fù)。
Java 反序列化漏洞造成了嚴(yán)重的影響,還引發(fā) Google工程師的 “在業(yè)余時間修復(fù)開源Java 庫” 的活動,他們共計修復(fù)了2600多個項(xiàng)目,以減輕此漏洞帶來的影響。盡管在谷歌的內(nèi)部,這個漏洞的別名叫做“瘋狂小工具”(Mad Gadget),但對整個世界而言,反序列化漏洞問題是 Java 世界的一次浩劫。
反序列化問題同樣影響 .NET 應(yīng)用程序
目前,惠普軟件的兩名研究員 Alvaro Mu oz 和 Oleksandr Mirosh 發(fā)現(xiàn),一個與此前Java 反序列化漏洞相似的問題也在 .NET 中重現(xiàn)了。
和 Java 應(yīng)用程序一樣,漏洞存在于 .NET 庫中反序列化過程中,處理序列化數(shù)據(jù)的方法中,而當(dāng)目標(biāo)計算機(jī)運(yùn)行時這些惡意注入的代碼就會執(zhí)行。和 Java世界同樣,這些 .NET 漏洞在整個生態(tài)系統(tǒng)中并非全部存在。某些 .NET 庫是不受影響的,開發(fā)時可以正常使用這些庫。還有一些應(yīng)用即便使用了受影響的庫,也是安全的,因?yàn)槌绦騿T在應(yīng)用中禁用了獲取序列化數(shù)據(jù)的函數(shù)和方法。
在他們的研究報告中,Mu oz 和 Mirosh 將研究重點(diǎn)放在分析使用 JSON 存儲數(shù)據(jù)的 .NET /Java 反序列化漏洞上。他們指出哪些應(yīng)用程序是安全可靠的,開發(fā)人員應(yīng)該如何在使用 JSON 數(shù)據(jù)時,避免遭受反序列化攻擊。
許多常見 .NET 項(xiàng)目中存在的反序列化漏洞
這些漏洞不只是理論層面已經(jīng)發(fā)現(xiàn),在實(shí)際的應(yīng)用中也已經(jīng)證實(shí)會造成影響,研究人員發(fā)現(xiàn)在 .NET 數(shù)據(jù)管理后端框架 Breeze 中存在 JSON 反序列化漏洞 CVE-2017-9424; 還有 CVE-2017-9785,這是一個存在于 NancyFX 中的反序列化漏洞——基于 Ruby 的 輕量級 .NET web 框架。
而除了JSON 反序列化之外,還有一些 .NET 庫中還存在著 XML 數(shù)據(jù)對象的反序列化問題。研究員發(fā)現(xiàn)DotNetNuke 這個流行的 .NET CMS系統(tǒng)中也存在 XML 反序列化漏洞。
如上所述,這些問題是由各種 .NET庫中的漏洞組合而成的,同時也是因?yàn)殚_發(fā)人員的不良編碼實(shí)踐導(dǎo)致的,他們沒有意識到序列化數(shù)據(jù)并不一定是安全的。由此避免此類的安全問題除了修復(fù) .NET庫之外,還需要對開發(fā)者的編程習(xí)慣加以規(guī)范。
序列化過程很能影響產(chǎn)品的安全性的,開發(fā)時需要注意不能使用未加驗(yàn)證的數(shù)據(jù)。反序列化問題并非只出現(xiàn)在 Java 序列化之中,或者如JSON,XML之類特定的 .NET 數(shù)據(jù)格式中。所有序列化操作后都會重新創(chuàng)建對象,攻擊注入的代碼即可能被其他方法調(diào)用,觸發(fā)任意代碼執(zhí)行。
今年8月初,研究小組也在美國拉斯維加斯舉行的 Black Hat和DEF CON安全會議上發(fā)表了他們的調(diào)查結(jié)果。