【问题标题】:Find malicious PDF files using PHP validation?使用 PHP 验证查找恶意 PDF 文件?
【发布时间】:2017-01-29 15:09:20
【问题描述】:

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

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

但有些 PDF 文件中含有 JavaScript 等恶意脚本会破坏系统

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

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

问题:对于这种情况有什么推荐的解决方案吗?

【问题讨论】:

标签: javascript php validation pdf file-upload


【解决方案1】:

几年前我做过一次(不再有代码)。

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

恶意代码通常隐藏在文件元内的 base 64 函数中,或者使用字符代码来呈现恶意代码。

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

此时,您可能会认为,这不是很优化或者会很慢......等等。

这是正确的;每当你抛出安全问题时,它确实会影响性能,但你可以通过创建一个新服务器来解决它,文件被上传到并扫描,然后传回原始服务器......等等。

就扫描仪而言,我相信您可能会找到服务或开源代码,只是找到了这个; https://github.com/mikestowe/Malicious-Code-Scanner/blob/master/phpMalCodeScanner.php(没用过,还是推荐)

【讨论】:

    【解决方案2】:

    看看这个项目https://github.com/urule99/jsunpack-n - A Generic JavaScript Unpacker

    jsunpack-n 在访问 URL 时模拟浏览器功能。它是 目的是检测针对浏览器和浏览器插件的漏洞利用 漏洞。它接受许多不同类型的输入: (还有 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 文件输入此工具并检查结果。

    下面是一些与该漏洞相关的有趣资源,可以深入解释所有内容。

    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 长度(13,未定义)

    【讨论】:

      【解决方案3】:

      添加另一个答案,因为下面的这个项目更容易使用,并且能够找到 CVE-2008-2992 漏洞。我知道你问的是 PHP,但你可以简单地从 PHP 运行任何脚本,例如 escapeshellcmd

      peepdf 是一个 Python 工具,用于探索 PDF 文件以找出是否 该文件可能有害或无害。该工具的目的是提供所有 安全研究人员可能需要的必要组件 PDF 分析无需使用 3 或 4 个工具即可完成所有任务。和 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] 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-09-05
        • 2019-01-14
        • 2013-09-09
        • 1970-01-01
        • 1970-01-01
        • 2011-01-13
        • 2018-02-11
        • 1970-01-01
        相关资源
        最近更新 更多