【问题标题】:Image sanitization library图像清理库
【发布时间】:2012-04-29 02:16:38
【问题描述】:

我有一个显示用户提交的图像的网站。我很担心 一些聪明人上传了一张图片,该图片可能会利用一些 0-day 漏洞 浏览器渲染引擎。此外,我想清除元数据的图像 (如 EXIF 数据),并尝试以无损方式进一步压缩它们 (有几个这样的用于 PNG 和 JPEG 的命令行实用程序)。

考虑到上述情况,我的问题如下:是否有一些 C/C++ 满足上述情况的图书馆?而且即使 解析->清除->清理->压缩->写入的完整管道 在任何单个库中都不可用,我至少可以实现 解析 -> 清除 -> 清理 -> 写入 管道(不压缩) 支持 JPEG/PNG/GIF 的库?

【问题讨论】:

    标签: security png jpeg gif


    【解决方案1】:

    您的要求无法满足:如果您使用的某个图像读取库中存在 0-day 漏洞,那么您的代码在尝试解析和清理传入文件时可能会被利用。通过在收到图像后立即进行“预清理”,您只会提前而不是推迟利用点。

    唯一有帮助的是在沙箱中解析和清理传入的图像,这样至少,如果存在漏洞,它将包含在沙箱中。沙盒可以是一个单独的进程,在chroot 环境(或虚拟机,对于非常偏执的人)中以非特权用户身份运行,其接口仅包含字节流输入和经过清理的图像输出。

    清理本身可以很简单,只需使用ImageMagick 打开图像,将其解码为光栅,然后重新编码并以标准格式(例如 PNG 或 JPEG)发出。请注意,如果输入和输出都是有损格式(如 JPEG),则此转换将是有损的。

    【讨论】:

    • 是的,我的想法是在密封环境中进行消毒。理由是我可以完全控制清理工作,并且可以通过这种方式保护自己和我的用户。
    • “接口只包含字节流输入,经过净化的图像输出。”这很重要……因为人们报告了 ImageMagick 中允许远程代码执行的最近漏洞……您需要限制此沙箱中可用的内容。即使是简单的事情,比如允许出站 http 流量,也可以让你的主机被接管以用于 DDOS 攻击等事情。
    【解决方案2】:

    我知道,我迟到了 9 年,但是……

    您可以在 Qubes OS 中使用类似于the PDF sanitizer 的想法,它将 PDF 复制到一次性虚拟机,运行 PDF 解析器,将 PDF 转换为基本上 TIFF 图像,然后将其发送回原始 VM 并重新组装成那里有一个PDF。通过这种方式,您可以将攻击面减少到 TIFF 文件。这是很小的。

    (图片取自本文:https://blog.invisiblethings.org/2013/02/21/converting-untrusted-pdfs-into-trusted.html

    如果该 PDF 中的特定解析器确实存在 0-day 漏洞利用,则它会破坏一次性 VM,但由于原始 VM 只接受有效的 TIFF,并且一旦处理完成,一次性 VM 就会被丢弃,这是没有意义的。当然,除非攻击者手头有 Xen 漏洞利用来突破一次性 VM,或者使用 Spectre 类型的全内存读取原语加上侧通道将数据泄漏到他们的机器。由于一次性虚拟机没有连接到互联网或没有分配任何音频硬件,这归结为通过调制 CPU 功耗来产生电磁干扰,因此攻击者可能需要一个大天线和一个靠近服务器的位置。

    这将是一次代价高昂的攻击。

    【讨论】:

      猜你喜欢
      • 2016-07-23
      • 2017-11-30
      • 2020-02-26
      • 2018-08-10
      • 1970-01-01
      • 2012-10-03
      • 2013-11-07
      • 2021-10-31
      • 1970-01-01
      相关资源
      最近更新 更多