如何在图像中嵌入可执行代码

信息安全 恶意软件 开发 反恶意软件 隐写术
2021-08-28 19:44:50

我正在阅读FireEye并看到这篇纽约时报的文章,详细介绍了一个 Skype 聊天,其中发送了一张充满恶意软件的图像:

引用:

为了获取设备上的信息......,黑客在 Skype 上伪装成女性,识别目标正在使用的设备类型,并发送带有恶意软件的照片。

第二张照片是一个特别强大的恶意软件,它从目标计算机复制文件

我知道图像中存在 exif 数据和 IPTC 标头,并且很确定您可以使用 FileMagic mimetype 标头信息在图像文件中填充一些额外的信息,但是如何将可执行代码嵌入图像中呢?

图像文件格式是pif,所以除非计算机有一个应用程序可以打开文件并在秘密执行代码时显示图片,否则我看不出它是怎么可能的。

4个回答

答案很简单。不是照片。并且.pif不是图像格式。指望纽约时报提供正确的技术信息。

正如 NYTimes 文章中的日志所说,并且正如FireEye 的实际报告所证实的那样,所使用的文件是一个.pif 文件它是 Windows 的可执行文件扩展名中鲜为人知的一种。

.pif 是 MS-DOS 的遗留文件,如 .com。它旨在成为“程序信息文件”(因此得名),存储(DOS)程序的快捷方式以及系统有关如何处理它的各种信息。即使在今天,Windows 也为 .pif 文件提供了一个快捷方式类型的图标。

有趣的是,今天,Windows 并不真正关心 .pif 是否真的只是一个程序信息文件。试试看:将任何 .exe 文件重命名为 .pif 并运行它。可能会有一些差异,例如图标未显示,但仅此而已。这就是对不同格式文件的统一处理。谢谢,微软!

为什么会这样?简短的回答:因为 Windows . 更长的答案:Windows 通过 .pif 运行ShellExecute,从技术上讲,它应该找到合适的程序来打开文件,然后使用它来打开它。对于 .pif 文件,它首先检查它是否真的是一个指向 MS-DOS 可执行文件的文件。如果它不符合 .pif 文件格式,ShellExecute 会检查它是否包含可执行代码。如果是这样,它将像运行 .exe 一样运行。为什么?因为视窗!

超恐怖的天才黑客们做了什么这些家伙懒得做任何复杂的事情:他们用一个病毒安装程序和一个程序(可能只是一个 .bat)制作了一个自解压和执行的 SFXRAR 存档,打开了他们在互联网上找到的一个女孩的图像,将那个邪恶的装置重命名为 .pif 文件,并将其发送给倒霉的自由斗士。

他们为什么使用 .pif?显然有两个原因:

  1. 很少有人知道它可以作为可执行文件运行(感谢微软!

  2. 它显然听起来像 .gif 或 .tiff 或 .pdf 或非常形象化东西。即使你从它的名字也不会怀疑它是一种图像格式,不是吗,OP?;)

关于您的实际问题(“如何在图像中嵌入可执行代码”)。是的,只要在易受攻击的程序中打开特制图像,就可以通过特制图像执行代码。这可以通过利用像缓冲区溢出这样的攻击来实现。但这些特定的黑客很可能对此不够聪明。

编辑

有趣的提示:这些人实际上使用了 DarkComet,它能够生成具有不同扩展名的压缩可执行文件,.pif 在他们的列表中。我不确定是否要显示图像,但这可能是较新版本中添加的功能。

另一个编辑

我看到你在问如何防止这个特定的“漏洞”。答案很简单。

首先,确保Windows 向您显示文件扩展名默认情况下,Windows 大多隐藏它们(谢谢,微软!

然后背诵这个:.exe .com .cmd .bat .pif .vb .vba .vbs .msi .reg .ws .wsc .wsf .cpl .lnk这些是最知名的文件类型,无论您是否安装了易受攻击的应用程序,它们都可以轻松执行潜在的恶意代码或以其他方式损害您的计算机。如果有人向您发送这样的文件,说这是一个漂亮女孩的图像,您可以确定这是另一个像这些叙利亚人一样低调的黑客。

另一种选择是积极主动地检查和仔细检查任何下载的文件格式不熟悉的文件。你知道,它可能是恶意软件。

至于带有漏洞的真实图像......您可能会尝试使您的软件保持最新状态。

没有什么是完美的,一种常见的错误是缓冲区溢出,简而言之,数据被复制到不应该复制的地方,在某些情况下,这可能导致任意代码被执行。

例如,这是旧 Microsoft 版本中的一个错误,如果您使用 IE 查看某个图像,则可以执行任意代码。

请注意,这是非常特定于实现的,因此在 Firefox 或 chrome 中打开相同的图像只会导致图像损坏,但不会执行代码。

通俗的说缓冲区溢出

缓冲区溢出技术细节

Mints97 的回答很棒,但我认为可能不止于此。Windows 的一个特别奇妙(阅读:可怕)的问题是它支持文件名中的完整 Unicode 字符集,包括(这是最糟糕的)U-202E。

虽然我确信它有一些很好的无害用途,但它可以让人们以普通用户难以注意到的方式恶意更改文件名。这在howtogeek.com 文章中有很好的记录。

本质上,黑客可以将 U-202E 放入文件名中并更改filename by gnp.tabfilename by bat.png. 该字符将其后所有名称的顺序颠倒。攻击者需要做的就是选择正确的执行文件类型,Windows 会将其与可执行文件名相关联。

这比你想象的更难防范。最好的防御方法是为此扫描文件名。CMD 命令dir似乎报告了?这个 Unicode 字符。Python,我确信其他语言可以获取 Unicode 名称,因此某种脚本或程序可以防止这个问题。

到目前为止,最简单的解决方案是同时查看文件扩展名前的四个字母,并确保相反的不是可执行文件名。(我认为有一些四个字母的可执行名称,但我不确定)。

警惕!

编辑:我在这里下载了一个 python 脚本,它读取 U-202E 目录中的文件名。它会告诉您 a) 实际名称和 b) 扩展名。它应该支持在一个名称中处理多个文件和多个 U-202E。

您写道,“图像文件格式是 pif”,但文章指出“FireEye 研究人员在研究隐藏在 PDF 文档中的恶意软件时发现了一组聊天和文档。” Microsoft Windows 系统上使用了程序信息文件格式,尽管这种格式的文件现在比以前少了。存在与 PIF 文件相关的漏洞,例如,参见Microsoft Windows 自动执行快捷方式文件中指定的代码,但《纽约时报》的文章提到了 PDF 文档。

图像可以存储在 PDF 文档中,打开 PDF 文档的人可能会使自己容易受到使用 PDF 文件的攻击。在这种情况下,问题不太可能是由图像造成的,而是由容器(即传输它的 PDF 文件)造成的。对于某些 PDF 漏洞,请参阅pdf 当前威胁利用旧 PDF 漏洞的兴起例如,后一个参考文献提到了一个与 PDF 文件中的 JavaScript 相关的漏洞,指出“嵌入式 JavaScript 可能包含恶意指令,例如下载和安装其他恶意软件的命令”。