使用PHP验证查找恶意PDF文件?

时间:2016-09-21 11:28:06

标签: javascript php validation pdf file-upload

目前,对于文件验证,实施了以下操作,

  • 使用MIME详细信息(如application / pdf)
  • 的文件类型验证
  • 验证文件扩展名以及MIME详细信息。

但是有些PDF文件包含像JavaScript这样的恶意脚本来破坏系统

有关PDF攻击的更多详细信息:

http://www.cve.mitre.org/cgi-bin/cvename.cgi?name=cve-2008-2992

问题:对于本案例,是否有任何建议的解决方案?

3 个答案:

答案 0 :(得分:2)

几年前我做过这个(不再有代码)。

  • 上传时
    • 扫描文件中的恶意代码(类似于病毒扫描程序)
    • 基于功能逻辑拒绝或允许文件

恶意代码通常隐藏在文件元组内的base 64函数内,或使用char代码呈现恶意代码。

您需要找到常见恶意代码的字典,或创建自己的字典并使用php功能打开文件并扫描字典中的项目(数组)。

在这一点上,你可能会认为,这不是很优化或者会很慢......等等。

这是正确的;任何时候你抛出安全性它确实会带来性能损失,但你可以通过创建一个新的服务器来解决它,文件上传到并扫描然后传回原始服务器......等等。

就扫描仪而言,我确信您可以找到服务或开源代码,只需找到这个; https://github.com/mikestowe/Malicious-Code-Scanner/blob/master/phpMalCodeScanner.php(从未使用它,或者我推荐它)

答案 1 :(得分:2)

查看这个项目https://github.com/urule99/jsunpack-n - 一个通用JavaScript解包器

  

jsunpack-n在访问URL时模拟浏览器功能。它' S   目的是检测针对浏览器和浏览器插件的漏洞   漏洞。它接受许多不同类型的输入:   (也是PDF *)

通过查看文件https://raw.githubusercontent.com/urule99/jsunpack-n/master/pre.js,它看起来直接解决了您的问题。

var util = {
375     printf : function(a,b){print ("//alert CVE-2008-2992 util.printf length ("+ a.length + "," + b.length + ")\n"); },

在上传时,我会将pdf提供给此工具并检查结果。

下面有一些与vunelabirity有关的有趣资源,它们深入解释了所有内容。

http://resources.infosecinstitute.com/hacking-pdf-part-1/

http://resources.infosecinstitute.com/hacking-pdf-part-2/

在文章的第2部分,有一个片段说你可以使用 蜘蛛猴执行pre.js(我提到的文件),获取有关CVE的信息

  

js -f pre.js -f util_printf.pdf.out

     

// alert CVE-2008-2992 util.printf length(13,undefined)

答案 2 :(得分:1)

在下面的这个项目中添加另一个答案更容易使用,并且能够找到CVE-2008-2992漏洞。我知道您在询问PHP,但您可以使用例如escapeshellcmd

从PHP运行任何脚本
  

peepdf是一个Python工具,用于探索PDF文件以查明是否   该文件可能有害或无害。该工具的目的是提供所有   安全研究人员可能需要的必要组件   不使用3或4个工具完成所有任务的PDF分析。同   peepdf可以看到文档中显示的所有对象   可疑元素,支持所有最常用的过滤器和   编码,它可以解析文件的不同版本,对象流   和加密文件

https://github.com/jesparza/peepdf

说明: http://eternal-todo.com/tools/peepdf-pdf-analysis-tool

你可以像下面一样使用它,最后你会得到所有带有CVE信息的有问题的元素

$ ./peepdf.py -f fcexploit.pdf

File: fcexploit.pdf
MD5: 659cf4c6baa87b082227540047538c2a
SHA1: a93bf00077e761152d4ff8a695c423d14c9a66c9
Size: 25169 bytes
Version: 1.3
Binary: True
Linearized: False
Encrypted: False
Updates: 0
Objects: 18
Streams: 5
Comments: 0
Errors: 1

Version 0:
    Catalog: 27
    Info: 11
    Objects (18): [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 22, 23, 24, 25, 26, 27, 28]
        Errors (2): [11, 25]
    Streams (5): [5, 7, 9, 10, 11]
        Encoded (4): [5, 7, 9, 10]
    Objects with JS code (1): [5]
    Suspicious elements:
        /OpenAction: [1]
        /JS: [4]
        /JavaScript: [4]
        getAnnots (CVE-2009-1492): [5]