沒有不漏的鍋, 如果底層的程式設計語言如果出現問題, 頂層的應用程式還能倖免於難嗎?
這周在 Black Hat Europe 2017 安全會議上, 一名安全研究員公開了幾款目前非常流行的解釋型程式設計語言中出現的漏洞。 這些程式設計語言上存在的問題, 可能讓運用這些語言開發的應用程式因此也很容易遭受攻擊。
這項研究的作者是 IOActive 的高級安全顧問 Fernando Arnaboldi。 這位專家表示他使用了自動化的模糊測試工具在解譯器中對五種程式設計語言進行了測試:JavaScript, Perl, PHP, Python和Ruby。 在對預設庫和內置函數進行模糊測試之後, 他在研究中公佈了每種語言存在的一些問題。
使用 XDiFF 對 5 款語言進行模糊測試
使用模糊測試工具, 對軟體進行測試通常需要檢測到不尋常的行為, 以及對記憶體崩潰以及溢出進行檢測。 目前比較流行的測試工具(如AFL和Peach)通常需要在尋找漏洞的時候的時候採用相同的邏輯,
在這位研究員的研究過程中, 他自訂了自己的模糊測試工具 XDiFF(擴展差分模糊測試框架), 以此適應這幾款不同的程式設計語言。 在測試過程中, 他將每種程式設計語言都分解成了最基本的功能, 然後使用XDiFF來提供各種payload輸入來進行測試。
在這次測試中, 我們的的輸入中主要使用了不到 30 種的原始資料類型, 但也有一些特別的payload。 這些特別的payload 是用於測試程式獲取外部資料資源時是否會出現問題。
以上這些測試都是用於分析測試目標——是否會出現“暴露本地檔、未授權的代碼注入、未授權的系統代碼執行操作”等安全問題。
測試結果:均暴露出問題而從他的測試結果來看, 我們確實可以看到JavaScript、PHP、Ruby、Perl、Python分別在經歷了多項測試之後, 暴露出來了哪些問題。
Python中存在可用於OS命令執行的未記錄方法和本地環境變數。
Perl 中有一種可執行如 eval() 的 typemap 函數。
NodeJS 中輸出的錯誤資訊會洩露部分檔內容。
JRuby 可以載入和執行並非設計為遠端代碼執行的代碼
PHP中常量的名字可以用來執行遠端命令。
最安全的應用層序也會因此“倒下”Arnaboldi 表示攻擊者可以利用這些程式設計語言上的漏洞來“放倒”最安全的應用程式。
一些軟體發展者可能會在沒有意識到的情況下將代碼包含在應用程式中, 而這些代碼可能導致的後果卻是開發者沒有考慮到的。
即便是按照安全指南來進行開發的最安全的應用程式也可能會因此出現“安全隱患”。
即便開發者沒有惡意企圖, 但這些漏洞也可能因為開發者無意識或試圖簡化開發而引入進來。
目前XDiFF已經作為開源項目公佈在GitHub上。
更具體的演講和演示內容也可以在Arnaboldi的論文中瞭解。
參考資料:http://securityaffairs.co/
https://www.bleepingcomputer.com/
本文轉載自FreeBuf.COM
阿裡聚安全
阿裡聚安全(http://jaq.alibaba.com)由阿裡巴巴安全部出品,