概述
本周,许多Facebook用户都会发现,一些用户发布图片上出现了原本应该隐藏的图像标签。由此可以证明,图像可以携带大量表面上不可见的数据。实际上,Facebook和Instagram所使用的图片元数据与恶意攻击者制作的特制图像相比显得非常简单,攻击者可以采用复杂的方法,制作出用于传递恶意代码或泄露用户数据的图像。在过去几年中,使用隐写技术和隐写式技巧的野外恶意软件活动有显著增加。攻击者利用这种技术,在图片和其他“载体”文件中嵌入隐藏的信息。在本篇文章中,我们将了解隐写术是什么,以及恶意攻击者是如何使用它的。
什么是隐写术?
隐写术(Steganography)是一种可以隐藏代码的技术,例如在图像文件中加入隐藏的标签信息。该技术也通常被称为“Stego”,是指在其他非秘密文本中(在“载体”消息内)隐藏消息或信息的做法。这也就意味着,恶意行为者可以使用此技术,在网站上仅仅托管图像,或仅通过电子邮件发送图像。
尽管隐藏数据的载体文件不一定必须是图像,但数字图像具有与其他文件一样的字节流,就使得它们成为隐藏秘密文本和其他数据的一个有效媒介。当用户在设备上打开图片时,很少有人会关注除了视觉呈现之外的内容,也就是隐藏在.jpg、.png、.bmp或其他图像文件格式内的内容。
隐写术是一种混淆的方法,它与密码学完全不同。密码学是编制编码或加密消息的实践。一段加密的消息,能够很明显地被看出它隐藏了一些内容,这些消息通常看起来没有任何逻辑,需要采用专业的方法来进行解码或解密。
另一方面,尽管隐写信息看起来像普通信息,但却巧妙地隐藏了一些意想不到的信息。我们可以采用熟悉的技术,使用简单的示例来说明隐写术背后的基本思想:
秘密消息“HelLo, worlD”没有被编码,阅读者只需要知道以某种特定的方式来查看消息,即可读取其中的信息,我们无需向“载体”中添加任何额外数据来实现传播。尽管图像隐写术的实现过程具有较强的技术性,但它在一个更低的维度上来看,其原理是相同的。
在上面这个简单的例子中,是由人类的大脑解码在纯文本中隐藏的消息,但计算机程序读取的字节并不是自然语言,这样一来,对计算机来说就非常容易隐藏明显的信息。对于人类来说,也几乎不可能在没有任何工具帮助的情况下实现对其的解析。
事实上,考虑到图像文件的性质,它不仅可以用来隐藏文本字符串,还可以隐藏.jpg和其他图像格式的整个文件。实际上,根据所使用的技术,也可以实现在原始图像的文件大小不明显增长的情况下隐藏信息。
隐写术如何隐藏信息?
要了解图像隐写术的工作原理,首先我们先来看看在图像文件中隐藏文本的一些基本方法。
最简单的一个方法,就是将一个字符串附加到文件的末尾。这样做,既不会影响图像的正常显示,也不会改变图像的视觉外观。在这里,我们只需要将“hello world”附加到文件的末尾。通过Hexdump,我们看到了被添加的额外字节。
纯文本字符串可以很容易地被程序转储或读取。在这种情况下,我们只需使用xxd实用程序来逆向十六进制,并以纯文本的形式打印出来。
echo 68 65 6c 6c 6f 20 77 6f 72 6c 64 0a | xxd -r -p
我们可以使用相同的思路,借助RAR压缩格式将完整的文件附加到图像之中。图像查看器只会读取并显示与图像相关的代码,会忽略压缩包中包含的其他任何文件。但是,恶意行为者或程序可以轻松提取附加的文件。
在此示例中,文件new.jpg在图像查看器应用程序中打开时会显示图片,但在使用WinRAR压缩实用程序进行查看时,我们可以看到解压缩后的.jpg文件中包含一个秘密的28字节文本文件msg.txt。
这些简单的技术,可能对于扩展用户数据很有帮助,但同时也具有缺点。首先,这些技术会增加文件的大小,其次,它们会更改文件的哈希值。此外,由于其不寻常的格式,可以很容易被安全软件检测到。
有一种更好的方式,是以二进制形式修改代码,并操纵每个像素的最低有效位(LSB)。彩色图像中的像素可以用3个字节表示,分别是R(红色)、G(绿色)、B(蓝色)。假设我们有三个字节,表示一种特定的颜色,例如橙色:
如果我们从左到右看,最后的四位,实际上对颜色的视觉外观没有太大的影响。
1 1 1 1 1 1 1 1
0 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0
我们可以将最后四位修改成我们希望的任何值,最终会导致该像素看起来与原来的值几乎相同。接下来,我们来看看另一个完全不同的颜色,比如绿松石色:
1 0 0 1 1 0 0 1
1 1 0 0 1 1 0 0
1 1 0 0 1 1 0 0
我们使用绿松石代码的前四位,来替换橙色代码的后四位,从而生成复合的RGB:
1 1 1 1 1 0 0 1
0 1 1 1 1 1 0 0
0 0 0 0 1 1 0 0
新生成的颜色与此前相比,没有明显的颜色变化。
然而,如果我们构建一个程序,来分别读取和提取这四位,那么我们就可以有效地在橙色的代码中隐藏了绿松石的代码。两个像素的信息共同保存在一个像素之中,所以文件的大小也没有增加。由此证明,我们可以在不增加原始消息长度的情况下传输隐藏的消息,也无需操纵文件格式,因此对于依赖于文件扫描查找的简单检测方式来说是无效的。实际上,这些代码完全被混淆,直到攻击者重新组装。
简而言之,这意味着攻击者可以使用最后四位编码的RGB数据来写入其他数据,而不会显著降低图像的视觉呈现效果,也不会增加文件的大小。随后,隐藏的数据可以被另一个程序读取,并用于重建恶意文件或泄露用户数据。
LSB操纵只是众多隐写技术中的一种。实际上,有许多其他方法可以操纵图像和其他类型的文件,以实现隐藏密码的目的。攻击者甚至还可以在网络协议中使用隐写术,即所谓的“网络隐写术”,以携带隐藏的消息。在这些情况下,其原则保持不变,通过在可见载体上搭载不可见的信息,从而将特定内容隐藏在人们的视线之外。
目前在野外发现已经使用隐写术的恶意软件
目前,已经在野外发现存在一些针对Windows和macOS平台的恶意软件使用了隐写术。我们已经发现,攻击者使用隐写术来隐藏部分勒索软件的攻击代码,提供恶意JavaScript,甚至承载挖矿工具。下面展示了使用隐写术的主要恶意软件。
AdGhonlas:该恶意软件在图像、文本、HTML文件中隐藏了恶意JavaScript。
Cerber:在图像文件中嵌入恶意代码。
DNSChanger:使用PNG LSB隐藏恶意软件的AES加密密钥。
Stegano:在PNG格式的横幅广告中包含恶意代码。
Stegoloadr(又名Lurk):该恶意软件使用隐写术和密码术,隐藏加密的URL,从而提供后期阶段的Payload。
Sundown:使用合法PNG文件来隐藏漏洞利用代码或泄露用户数据。
SyncCrypt:勒索软件,将部分核心代码隐藏在图像文件中。
TeslaCrypt:在HTTP 404错误页面中,存在HTML注释标记,其中包含C2服务器命令。
Vawtrak(又名Neverquest):在图标的LSB中隐藏用于下载恶意Payload的URL。
VeryMal:该恶意软件针对macOS用户,将恶意JavaScript嵌入到合法文件中。
Zbot:将数据附加到包含隐藏数据的JPEG文件的末尾。
ZeroT:使用隐写技术,将恶意软件隐藏到Britney Spears的照片之中。
如何防范恶意图像
将恶意代码隐藏在图像或其他载体中,只是威胁行为者试图绕过反病毒安全产品时所利用的众多技术之一。无论使用哪种技术,恶意软件作者总有着相同的目标:在终端上保证持久性、扫描遍历网络、收集并泄露用户数据。为了实现这些目标,恶意软件作者留下了可以通过行为AI解决方案检测到的足迹。
总结
将文件、图片、消息甚至是视频隐藏在另一个文件中,可能是恶意软件作者用于模糊其Payload或者泄露用户数据的一种有效方式。考虑到社交媒体网站上图像的覆盖程度之高,以及大多数广告都是以图像形式展现,我们预计未来恶意软件使用隐写术的趋势将会保持。考虑到最终用户难以鉴别出精心构造的的恶意图像文件,对于企业来说,使用行为AI软件来检测恶意代码的执行就显得至关重要,无论该代码是来自图像还是来自其他文件,甚至还包括无文件恶意软件。因此,我们建议企业用户可以考虑选用自动化终端防护产品来防范此类风险。