12月13日,網(wǎng)絡(luò)安全公司IOActive高級(jí)安全顧問費(fèi)爾南多·阿納博迪上周在歐洲2017黑帽大會(huì)上發(fā)布的一項(xiàng)研究結(jié)果顯示,幾款目前熱門的編程語(yǔ)言中存在漏洞,可允許黑客入侵這些語(yǔ)言構(gòu)建的應(yīng)用程序。
阿納博迪使用模糊測(cè)試(Fuzzing)技術(shù)分析了幾個(gè)熱門編程語(yǔ)言,包括JavaScript、Perl、PHP、Python和Ruby。
模糊測(cè)試 (Fuzzing,F(xiàn)uzz testing)是一種軟件測(cè)試技術(shù),其核心思想是自動(dòng)或半自動(dòng)化生成隨機(jī)數(shù)據(jù)輸入到一個(gè)程序中,并監(jiān)控程序異常,如崩潰,斷言(assertion)失敗,以發(fā)現(xiàn)可能的程序錯(cuò)誤,比如內(nèi)存泄漏。模糊測(cè)試常常用于檢測(cè)軟件或計(jì)算機(jī)系統(tǒng)的安全漏洞。
這項(xiàng)研究背后的想法是,安全開發(fā)的應(yīng)用程序也可能受底層編程語(yǔ)言的漏洞所影響。谷歌專家曾使用Fuzzing技術(shù)發(fā)現(xiàn)熱門軟件OpenSSL和Linux組件中存在的許多漏洞。
阿納博迪利用Fuzzing技術(shù)測(cè)試的編程語(yǔ)言如下圖:
阿納博迪開發(fā)了一款專門測(cè)試編程語(yǔ)言結(jié)構(gòu)的自定義差異化模糊測(cè)試工具“XDiFF”(Extended Differential Fuzzing Framework,擴(kuò)展性差異化模糊測(cè)試框架)。這名研究人員將XDiFF發(fā)布在開源GitHub上,鏈接見: https://github.com/IOActive/XDiFF
阿納博迪確定了這些編程語(yǔ)言的大多數(shù)基本功能,并利用XDiFF Fuzzer進(jìn)行測(cè)試。阿納博迪在研究論文中寫到,執(zhí)行之前,XDiFF會(huì)在函數(shù)和Payload之間執(zhí)行置換(Permutation),從而生成所有可能的測(cè)試用例。測(cè)試用例此時(shí)將編程語(yǔ)言的一個(gè)函數(shù)與不同的Payload組合。
阿納博迪解釋稱,發(fā)現(xiàn)漏洞完全取決于選擇正確的輸入。在這項(xiàng)測(cè)試中,不到30個(gè)原始值(例如數(shù)字、字母等)與特殊Payload組合。這些特殊的Payload經(jīng)過定義,以幫助識(shí)別軟件何時(shí)試圖訪問外部資源。
阿納博迪經(jīng)過分析發(fā)現(xiàn)這些編程語(yǔ)言中存在的漏洞如下:
Python包含用于OS命令執(zhí)行的未公開方法和本地環(huán)境變量。
Perl包含像ev al 那樣執(zhí)行代碼的typemaps函數(shù)。
NodeJS輸出可能會(huì)暴露部分文件內(nèi)容的錯(cuò)誤信息。
JRuby會(huì)在非遠(yuǎn)程代碼執(zhí)行功能上加載并執(zhí)行遠(yuǎn)程代碼。
PHP常量名稱能被用來執(zhí)行遠(yuǎn)程命名。
阿納博迪指出,這些漏洞可能是因?yàn)殄e(cuò)誤所致,也可能是試圖簡(jiǎn)化軟件開發(fā)帶來的結(jié)果。這些漏洞最終會(huì)使受影響解釋器解析的常規(guī)應(yīng)用程序受到影響。攻擊者可利用這些漏洞攻擊安全性最高的應(yīng)用程序。
阿納博迪表示,軟件開發(fā)人員可能會(huì)不知不覺地將代碼添加到應(yīng)用程序中,而這些代碼可能會(huì)以設(shè)計(jì)人員未預(yù)見的方式被利用。一些行為可能會(huì)給安全開發(fā)的應(yīng)用程序帶來風(fēng)險(xiǎn)。