当有人将恶意二进制代码注入图像文件(在 Windows 上)时,究竟会发生什么?这是怎么做的?
什么是损坏的图像漏洞?它是如何工作的?
这种攻击依赖于包含错误的图像解析器,该错误允许执行原本会有点古怪的图片。
例如,计算机可能会尝试将其解释为 shell 命令,而不是将“红色”解释为一种颜色。
比@Zian 提到的缓冲区溢出类型错误(尽管我认为 4-5 年前在 Windows 中存在此类 WMF 漏洞)更常见的是GIFAR(也在 SO 上搜索)
:文件既是有效的图像文件(例如 GIF),也是有效的 ZIP 文件(例如 JAR(编译的 Java 字节码))。
这是可能的,因为这些格式存储其标头的方式:具体来说,它们不是互斥的。
因此,您可以拥有一个通过所有有效性检查的文件,但是当它显示在浏览器中时,会执行 java 代码(因为,好吧,您刚刚下载了一个有效的 JAR 文件,dincha?)
据我所知,主要供应商已经解决了这个问题,但我承认我并不是最新的。
(GIFAR的原始发现者可以在这里找到。)
我假设当您说“图像”时,您的意思是 JPEG 或 GIF 之类的东西。
答案是旧软件存在错误,因此当它们显示图像时,它们可能会感到困惑。例如,图像内部有通常不显示的注释字段,但可以包含拍摄照片的 iPhone 相机的 GPS 坐标等内容。典型的软件期望这些评论永远不会超过 100 个字符,但黑客可以做一些荒谬的事情,比如发表 10,000 个字符的评论。软件应该安全地拒绝这个,但有些没有,它们有一个错误,这些意外字符溢出到内存的其他区域。如果黑客对这 10,000 个字节的处理恰到好处,他就可以让有缺陷的软件运行代码。
仅仅因为我们人类期望这些注释是简短的英文文本,并不能阻止黑客在这些字段中输入长的可执行代码。
从 MSPaint 到 Internet Explorer 到 Microsoft Word,有许多不同的代码段可能存在此类错误。他们都使用不同的代码来做同样的事情,而且他们都有不同的错误。这就是为什么你应该让你的软件保持最新,这样当发现新的错误时,这些损坏的图像就不会影响你。
从评论到问题,我了解到人们可能有兴趣了解可执行图像的细节(哎呀,“图像”与磁盘副本相冲突,比如说,可执行/可运行脚本或程序的图片)在人类看来是图像(图片)和计算机作为可执行脚本(程序):
更新:
这里是关于如何将病毒(PHP、JavaScript、ActionScript 等)代码嵌入图像的另一个参考: