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