■吳軍
近日在Black Hat Europe 2017安全會議上,一名安全研究員公開了幾款目前非常流行的,解釋型編程語言中出現(xiàn)的漏洞。這些編程語言上存在的問題,可能讓運用這些語言開發(fā)的應(yīng)用程序很容易遭受攻擊。
這項研究的作者是IOActive的高級安全顧問Fernando Arnaboldi。這位專家表示他使用了自動化的模糊測試工具在解釋器中對五種編程語言進行了測試:JavaScript、Perl、PHP、Python和Ruby。在對默認(rèn)庫和內(nèi)置函數(shù)進行模糊測試之后,他在研究中公布了每種語言存在的一些問題。
使用模糊測試工具,對軟件進行測試通常需要檢測到不尋常的行為,以及對內(nèi)存崩潰以及溢出進行檢測。目前比較流行的測試工具(如AFL和Peach)需要在尋找漏洞的時候的時候采用相同的邏輯,而這些工具無法存儲執(zhí)行過的測試用例的信息。
在這次研究過程中,他自定義了模糊測試工具XDiFF(擴展差分模糊測試框架),以此適應(yīng)這幾款不同的編程語言。在測試過程中,將每種編程語言都分解成了最基本的功能,然后使用XDiFF來提供各種payload輸入來進行測試。
在這次測試中,主要使用了不到30種的原始數(shù)據(jù)類型,但也有一些特別的payload。這些特別的payload是用于測試程序獲取外部數(shù)據(jù)資源時是否會出現(xiàn)問題。
以上這些測試都是用于分析測試目標(biāo)是否會出現(xiàn)“暴露本地文件、未授權(quán)的代碼注入和未授權(quán)的系統(tǒng)代碼執(zhí)行操作”等安全問題。
從測試結(jié)果來看,我們確實可以看到JavaScript、PHP、Ruby、Perl和Python分別在經(jīng)歷了多項測試之后,暴露出來了哪些問題。
Python中存在可用于OS命令執(zhí)行的未記錄方法和本地環(huán)境變量;
Perl中有一種可執(zhí)行如eval()的typemap函數(shù);
NodeJS中輸出的錯誤信息會泄露部分文件內(nèi)容;
JRuby可以加載和執(zhí)行非設(shè)計為遠程代碼執(zhí)行的代碼;
PHP中常量的名字可以用來執(zhí)行遠程命令。
Arnaboldi表示攻擊者可以利用這些編程語言上的漏洞來“放倒”最安全的應(yīng)用程序。
一些軟件開發(fā)者可能會在沒有意識到的情況下將代碼包含在應(yīng)用程序中,而這些代碼可能導(dǎo)致的后果卻是開發(fā)者沒有考慮到的。
即便是按照安全指南來進行開發(fā)的“最安全的應(yīng)用程序”也可能會因此出現(xiàn)“安全隱患”。即便開發(fā)者沒有惡意企圖,但這些漏洞也可能因為開發(fā)者無意識或試圖簡化開發(fā)而引入進來。目前XDiFF已經(jīng)作為開源項目公布在GitHub上。