导语:Black Hat Europe 2017安全会议的成果可谓是成果满满,这不又有专家发现多种编码语言(JavaScript, Perl, PHP, Python, Ruby)都存在严重漏洞,这意味着使用这些语言所编写的各种应用程序也都存在同样的漏洞。

9358d109b3de9c824b6acfc26681800a19d8436b.jpg

Black Hat Europe 2017安全会议的成果可谓是成果满满,这不又有专家发现多种编码语言(JavaScript, Perl, PHP, Python, Ruby)都存在严重漏洞,这意味着使用这些语言所编写的各种应用程序也都存在同样的漏洞。

发表该研究的作者是美国安全公司 IOActive 的高级安全顾问Fernando Arnaboldi,他是通过模糊测试找到了目前最流行的5种解释型语言中的漏洞。

Programming-languages-fuzzing-t1.png

模糊测试(fuzz testing)是一种安全测试方法,它介于完全的手工测试和完全的自动化测试之间。为什么是介于那两者之间?首先完全的手工测试即是渗透测试,测试人员可以模拟黑客恶意进入系统、查找漏洞,这对测试人员的要求比较高。能力强的测试人员可以发现比较多或者高质量的安全性问题,但是如果测试人员的能力不够,可能就不能找到足够多、威胁大的安全漏洞。

虽然模糊测试已经在软件测试领域使用了许多年,不过最近才在安全研究人员的圈子中流行开来,特别是在Google的安全团队和Linux社区中。因为使用模糊测试可以有效地发现崩溃、挂起或内存损坏等问题。一般情况下,我们会认为发生这些问题是因为应用程序的源代码太冗长需要优化,而不会想到是编写代码的语言出现了问题。

5种解释型语言中的漏洞

在Arnaboldi进行的模糊测试中,他为了弄清5种编程语言的结构和运行方式,还专门编写了自己的 XDiFF (Extended Differential Fuzzing Framework,可扩展差异化模糊测试框架)。Arnaboldi首先将每种编程语言都分解为最基本的函数,然后使用XDiFF向每一种语言进行多种类型的输入(即 payload)。

Programming-languages-fuzzing-t2.png

Arnaboldi对此的解释如下:

发现有趣的漏洞完全取决于如何选择正确的输入,在这次测试中,我使用了差不多30组原始值的组合,它们是数字、字母等和特殊的有效载荷的组合。

之所以要和有效载荷组合,是因为它可以检测到应用程序何时会访问外部资源,并识别出本地文件内容、检测未授权代码执行并发现那些未授权的操作系统代码执行

经过这些测试,他最后发现了5种解释型语言中的漏洞:

1.Python 包含可用于操作系统命令执行的违规方法和本地环境变量。
2.Perl 中包含能执行如eval()代码的typemaps函数。
3.NodeJS 可以输出暴露部分文件内容的错误信息。
4.JRuby会加载并执行一些远程代码,而这些代码的初始设计并不是执行远程代码。
5.PHP常量中包含可被用于执行远程命令的名称。

世界上没有一个APP是安全的

Arnaboldi认为,一个经过严格训练的攻击者完全有可能利用这些编程语言的漏洞,对构建在其之上的所有应用程序发起底层攻击。

Arnaboldi表示:

我相信很多程序开发人员都不知道其中的这些漏洞,他们可能会在不知情的情况下,将漏洞编写在程序中。而由于目前的开发都是工业大规模化的,所以可以预测很多程序都会又被攻击的风险。

现在,Arnaboldi已在 GitHub 上开源了XDiFF,另外,他还发表了《通过差异化模糊测试技术来发现编程语言的隐藏行为》的论文。

源链接

Hacking more

...