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