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