您真的可以在图像文件中添加木马吗?如果可以,它将如何执行?

您真的可以在图像文件中添加木马吗?如果可以,它将如何执行?

我刚刚将几张 LP 数字化,需要一些封面图片。我的扫描仪不够大,无法扫描专辑,所以我从网上搜索并下载了图片。

当我这样做时,Avast 报告说其中一个包含“Win32:Hupigon-ONX”木马并立即将其隔离。为了不冒任何风险,我下载了另一个报告为干净的副本。

那么这是否只是 Avast 的误报,或者 jpg 中真的存在木马?

如果有的话,将如何执行?

我必须承认,木马和病毒的这个方面一直让我困惑。作为一名软件开发人员,我总是检查数组的长度等,所以我不明白为什么会发生缓冲区溢出之类的事情。我理解人们确实会偷工减料并犯错误,如果软件足够复杂,这些错误就会溜走。

答案1

图像文件中的漏洞利用了操作系统图像处理代码中的缓冲区溢出缺陷。几年前,Windows 的 GDI 层中发现了几个重大此类缺陷 - 补丁早已发布,但漏洞图像仍然存在,要么是因为它们仍然存在,要么是希望它们能够攻击尚未打补丁的机器。

此类安全漏洞的常见原因是在调用堆栈上的函数之间传递图像数据,并且没有正确检查数据的最大长度。巧妙构造的数据可能会利用此漏洞,这些数据过大且排列方式不当,最终会覆盖堆栈框架中的下一行代码(用其他代码覆盖它)或覆盖指向将用于调用其他函数或被调用函数返回给调用者的代码的指针(覆盖此类指针以使其指向漏洞代码),或者以导致另一个漏洞暴露的方式覆盖数据。具体方法因所涉及的安全漏洞而异。

如果代码支持,现代 CPU 具有一种保护功能,可以阻止大多数此类攻击。该功能通过程序/库明确标记其哪些页面是数据,哪些是代码来实现 - 如果任何应该是数据(例如图像数据)的内容试图作为代码执行,则 CPU 将引发异常。我记得 Vista 及更高版本和最新版本的 .Net 已重新调整其所有库以支持此保护,其他操作系统也支持此保护,但这并不能阻止全部此类漏洞只有在明确打开时才会起作用(否则很多旧代码会崩溃)。

答案2

我必须承认,木马和病毒的这个方面一直让我困惑。作为一名软件开发人员,我总是检查数组的长度等,所以我不明白为什么会发生缓冲区溢出之类的事情。

好吧,欢迎来到现实世界 ;-)。缓冲区溢出等问题可能发生在许多语言中(尤其是那些手动内存管理的语言,如 C 语言),当开发人员犯错时,他们发生。

虽然缓冲区溢出通常只会导致程序崩溃(分段违规或类似情况),但它可能允许攻击者执行代码->木马激活。

例如:

http://www.microsoft.com/technet/security/bulletin/MS04-028.mspx

http://secunia.com/advisories/35216/

关于如何允许代码执行的解释如下:

https://stackoverflow.com/questions/460519/how-are-buffer-overflows-used-to-exploit-computers

答案3

2006 年,曾有一个漏洞利用程序导致损坏的 JPEG 库出现缓冲区溢出,从而可以运行任意代码。微软发布了一个补丁来修复它,速度比我见过的任何补丁都快。您的机器几乎肯定不会受到攻击,而 Hupigon 现在产生的误报太多了。

http://www.microsoft.com/security/portal/Threat/Encyclopedia/Entry.aspx?name=Win32/Hupigon

答案4

我必须承认,木马和病毒的这个方面一直让我困惑。作为一名软件开发人员,我总是检查数组的长度等,所以我不明白为什么会发生缓冲区溢出之类的事情。我理解人们确实会偷工减料并犯错误,如果软件足够复杂,这些错误就会溜走。

也许您正在检查所有指针、数组等。但是您确定您(可能)使用(某一天)的任何第三方库的所有程序员也都这样做了吗?

对此最简单的解决方案是下载“image.jpg.exe”或类似的文件,而不是真实图像。

感染您 PC 的更高级方法已在此处描述(例如缓冲区溢出......)

相关内容