背景

IOActive 公司的高级安全咨询师Fernando Arnaboldi 在上周举行的2017年欧洲黑帽大会上指出,多种流行的解释型编程语言遭受严重漏洞影响,导致构建于它们基础之上的app易遭攻击。Arnaboldi表示他通过模糊测试找到了目前最流行的五款解释型编程语言中的漏洞。这五款流行编程语言是JavaScript、Perl、PHP、Python和Ruby。

 

表1:所测试的解释型编程语言实现

编程语言 解释器
JavaScript V8, ChakraCore, Spidermonkey, NodeJS (v8), Node (ChakraCore)
PHP PHP, HHVM
Ruby Ruby, JRuby
Perl Perl, ActivePerl
Python CPython, PyPy, Jython

 

模糊测试涉及向软件应用提供无效、异常或随机数据。多年来模糊测试技术都一直应用在软件测试领域,不过最近广受安全研究员尤其是谷歌安全团队和Linux 社区的青睐,原因是模糊测试能够识别出崩溃、挂起或内存损坏问题。通常来讲,这些问题产生的原因不仅在于app的源代码需要优化,还因为其中隐藏着安全问题。

 

自定义模糊测试工具从五款编程语言中发现问题

Arnaboldi专门构建了 XDiFF (Extended Differential Fuzzing Framework,可扩展差异化模糊测试框架)“差异化模糊器”,旨在适应编程语言的结构和工作方法。Arnaboldi将每种编程语言都解剖为最基本的函数,然后通过 XDiFF 填入多种类型的输入(即 payload)。

他指出,“找到有意思的漏洞完全依赖于选择合适的输入。这次测试使用的原始值(即数字、字母等)和特殊 payload 组合不到30个。这些特殊 payload 旨在帮助识别软件何时会尝试访问外部资源”。这个特殊的 payload 能暴露本地文件内容、检测未授权代码执行并找到未授权的操作系统代码执行。

他从五种编程语言中都找到了严重漏洞。

1、  Python 中包含未记录方法和本地环境变量,可用于操作系统命令执行。

2、  Perl 中包含能执行如 eval() 代码的 typemaps 函数。

3、  NodeJS 输出能暴露部分文件内容的错误信息。

4、  JRuby 在目的并非执行远程代码的函数上加载并执行远程代码。

5、  PHP 中包含可被用于执行远程命令的名称。

 

即使最安全的 app 也受影响

Arnaboldi表示,攻击者即使在构建于这些编程语言基础上的最安全的应用中也能利用这些漏洞。

 

表2:针对每种编程语言所测试的函数数量

编程语言 所测试函数数量
JavaScript 450
PHP 1405
Ruby 2483
Perl 3105
Python 3814

 

他指出,“软件开发人员可能在不知情的情况下在应用中使用了有漏洞的代码,而这种应用可被以某种设计人员并未预测到的方式利用。有些行为会给按照安全指南开发的应用带来安全风险。假设开发人员并无恶意,这些漏洞可能是因错误导致或者是为了简化软件开发过程。这些漏洞会最终影响到使用此解释器的应用。”

Arnaboldi在 GitHub 上开源了 XDiFF。感兴趣的读者可从他发表的论文 《通过差异化模糊测试技术暴露编程语言中的隐藏可利用行为 (Exposing Hidden Exploitable Behaviors in Programming Languages Using Differential Fuzzing)》 中了解更多详情。

文章原文链接:https://www.anquanke.com/post/id/90124