利用统计分析方法,检测当代网络攻击中的隐写术

前情提要

隐写术是一种将数据以隐藏格式发送的做法,目的是为了掩盖发送数据的事实。“隐写术”(steganography)这个词是希腊语单词 στεγανός (steganos,意思是“覆盖、隐蔽、或受保护”)和γράφειν (graphein,意思是“书写”) 的组合。

与密码术不同,密码术是隐藏了秘密信息的内容,而隐写术则是隐藏了一个信息被传达的事实。“隐写术”的概念最早是在1499年引入的,但这个概念由来已久。早在罗马帝国的时代,就有这样一种方法:一个奴隶被选中来传达一个秘密信息,他的头皮被剃光,将信息被纹在头皮上。当信使的头发长回来的时候,他被派遣去执行任务。信息的接收者再次剃掉信使的头皮,并阅读信息。

本文中,将使用到以下定义:

  • 有效载荷(Payload):被隐藏并秘密地发送的信息,或者被秘密地通信的数据;
  • 载体/隐写容器(Carrier,stego-container):有效载荷被秘密嵌入的对象(可以是人或其他任何物体);
  • 隐写系统(stego-system):用于创建信息通信的隐藏通道的方法和方法;
  • 信道(Channel):传输隐写容器的数据通信的信道;
  • 密钥(Key):用于从隐写容器中提取有效载荷的密钥(并非总是必要的)。

隐写术简介

隐写术在整个20世纪期间内都是积极发展的,就像隐写分析技术,或者是确定隐藏信息在一个容器中传播的事实。基本上可以说,隐写分析技术就是攻击隐写系统的实践。然而,今天出现了一种危险的新趋势:“隐写术”正越来越多地被恶意攻击者所使用,他们将其适用于制造恶意软件和网络间谍工具。当代大多数的反恶意软件解决方案在抵抗隐写术方面基本上束手无策,即使提供了保护但也很少,所以任何能够秘密携带有效载荷的载体都可能带来潜在的威胁。它可能包含被间谍软件过滤过的数据,恶意程序和它的C&C之间的通信,或者新的恶意软件。

各种隐写术的方法和算法已经得到了科学的开发和测试。下面简要的对其中的一些方法进行描述:

  • LSB隐写术:有效载荷被编码成一个或几个不显眼的载体。携带有效载荷的比特数越小,对载波(即原始载体信号)的影响就越小。
  • 离散余弦变换或基于DCT的隐写术:是LSB隐写术的子类型,通常应用于jpeg格式的载体(即:当JPEG图像被用来携带有效载荷时)。在这种方法中,通信数据被秘密编码到DCT系数中。在其他因素相同的条件下,这种方法提供的数据量稍低一些;其中一个原因是0和1的系数值不能被改变,所以当系数取这些值时,任何数据都不能被编码。
  • 基于调色板的图像隐写术:基本上可以看作是LSB隐写术的另一种子类型,在这种模式下,通信数据被编码成图像调色板中的最小有效位,而不是被传送到载体上。这种方法的明显缺点是它的低数据承载能力。
  • 使用数据格式的服务字段:这是一种相对简单的方法,例如奖有效负载嵌入到承运人(作为载体容器)的头皮上。这种隐写模式的缺点是数据承载能力和对有效载荷保护的能力都很低。例如有时候使用常规的图像查看软件检测嵌入的有效载荷,就能够看到服务字段的内容。
  • 有效载荷嵌入:是一种将有效载荷编码到载体上的方法,在交付时,使用双方已知的算法进行解码。如果它们的嵌入方法是不相干的,那么几个有效载荷可以被单独地编码到同一个载体上。
  • 宽带方法:包含以下几种类型:(1)伪随机序列法,即一个秘密载波被伪随机信号调制。

(2)频跳法,在此方法中,载波的频率根据特定的伪随机规则发生变化。

  • 覆盖法:严格地说,这不能被称为隐写术,它是基于一些数据格式在头文件中包含数据大小的事实,或者这种格式的处理程序读取文件直到它到达结束数据标记的事实。例如著名的基于级联一个图像文件的RAR/JPEG方法,它由JPEG格式部分和RAR存档部分组成。一个JPEG查看器软件程序将读取它直到文件标题中指定的边界,而一个RAR 压缩工具将忽略所有在RAR之前的所有内容!签名就表示存档的开始。因此,如果在图像文件查看器中打开该文件,它将显示该图像;如果在RAR文件中打开该文件,它将显示RAR存档文件的内容。这种方法的缺点是,添加到载波段的覆盖层容易被分析文件的分析人员识别。

隐写术在当代网络攻击中的应用

在本文中,我们将重点讲述图像类型为载体和网络通信中隐藏信息的方法。然而,我们应当了解,隐写术的应用比这两个领域要广泛得多。

最近,我们在以下恶意软件和网络间谍工具中看到了隐写术的应用:

•Microcin;

•NetTraveler;

•Zberp;

•Enfal (Zero.T的新载荷);

•Shamoon;

•KinS;

•ZeusVM;

•Triton (Fibbit).

恶意软件作者在其开发过程中越来越多地使用隐写术,这样做的主要原因有:

  • 不仅可以帮助数据隐藏,而且可以隐藏数据上传和下载的事实;
  • 有助于绕过DPI系统(与企业系统有关);
  • 使用隐写术可能有助于绕过反APT产品的安全检查,因为后者不能处理所有图像文件(公司网络包含太多的文件,而且分析算法相当昂贵)。

对于用户而言,检测载体内的有效负载似乎是一项不平凡的任务。这里我们简单的句一个例子,请看下边的两幅图像,其中一个是无载体的,另一个是携带了有效负载载体的。我们以经典的Lenna 测试图像为例:

Lenna.bmp

Lenna_stego.bmp

这两个图像都是786×486字节;然而,第二幅图片中包含了Nabokov的小说《洛丽塔》的前10章。

仔细看看这两张图片,你能看出有什么区别吗?它们在大小和外观上都是一样的。然而,其中一个是嵌入了消息的载体。

问题显而易见:

  • 隐写术现在非常受恶意软件和间谍软件作者的欢迎;
  • 一般来说,反恶意软件工具,特别是周边安全工具,在对抗隐写术方面几乎没有什么帮助。隐写载体很难被检测,因为它们看起来与普通的图像文件(或其他类型的文件)很相似;
  • 如今,所有的隐写术检测程序基本上都是概念验证,它们的逻辑不能在商业安全工具中实现,因为它们的速度很慢、检测率很低,有时甚至会包含数学错误(我们已经看到了一些实例)。

上面提供了一个使用隐写术来隐藏通信的恶意程序的列表(并不一定是完整的),接下来就让我们一起分析一下列表中的一个具体案例:恶意加载器Zero.T。

Zero.T加载器在2016年底被发现,之所以将其命名为Zero.T是因为这个字符串在其可执行代码中(在通向项目PBD文件的路径中):

这里不再累述恶意加载器渗透并保持在受害者系统中的具体方法,只关注它以位图文件的形式加载了一个有效负载:

然后,它以一种特殊的方式处理它们,以获取恶意模块:

从表面上看,这三个BMP文件似乎都只是图像:

然而,它们不仅仅是普通的图像,还是携带了有效载荷的隐写容器。每幅图片中,都有几个(算法具有可变性)最小有效位被有效负载取代。

如何判断一个图像是否携带了恶意的有效负载呢? 这里有几种方法可以做到,一个最简单的方法是可视化攻击,其原理是从源图像中生成新的图像,源图像包含了不同色彩平面的最小有效位。

这里我们尝试对老乔的这张图片进行可视化攻击,并按照适当的顺序从不同的有效位构建新的图像:

在上边的第二个和第三个图像中,高熵(指数据密度高)区域是明显的:这些区域包含了嵌入的有效载荷。

听起来似乎很简单?的确,分析师(甚至是普通用户)都能很容易地看到嵌入的数据;但是,不简单的一点是这类分析很难做到自动化。幸运的是,科学家们早就开发出了一种基于图像统计特性检测携带了有效载荷的载体的方法。然而,所有这些都是基于一个假设,那就是假定有效载荷具有高熵。大多数情况下,可以这么认为:由于容器的容量有限,在编码前对有效载荷进行压缩和/或加密,从而增加其熵。

但是,并不适用于上边提到的恶意加载器Zero.T的例子,其在编码之前没有压缩它的恶意模块,相反,它还增加了所使用的最小有效位的数量,可以是1、2或4。是的,使用大量的最小有效位将视觉伪影引入到载体图像中,普通用户可以通过视觉效果就察觉出异常,但别忘记我们这里讨论的是自动分析。所以,我们面临的问题是:统计方法是否适用于检测低熵的嵌入式有效载荷?

统计分析方法:直方图法

这种方法又被称为“卡方检验”(“chi-squared”),是以χ2分布为基础的一种常用的假设检验方法,2000年由Andreas Westfeld和Andreas Westfeld提出。概括地讲,就是对整个图像光栅进行分析,在光栅中计数每一种颜色的点数。(简单起见,我们用一种色彩平面来处理图像。)这个方法假设普通图像中两个相邻颜色 (指只有一个最小有效位不同的颜色) 的像素数量有很大的不同(如下图A),而对于携带有效负载的载体的图像,相邻颜色的像素数量是相似的(如下图B)。

图A:普通图像

图B:包含载体的图像

上面是“chi-squared”方法简单而直观地阐述。严格地说,该算法包括以下步骤(注意:这些步骤必须按顺序执行):

  • 在嵌入了有效载荷的图像中,颜色 i (期待出现)的像素频率的计算方法如下:

  • 特定颜色确定出现的像素频率的计算方法:

  • 自由度为K-1的卡方分布计算方法:

  • P是指在这些条件下ni 和 ni*的分布相等的概率,通过密度函数进行积分得到的:

这种方法是否适用于检测隐写容器?对此我们进行了测试,结果如下:

卡方分布的阈值分别为101.9705929和92.88655838(p=0.95和p=0.99)。由此可见,对于计算卡方值低于阈值的区域,我们可以接受原始假设“相邻的颜色有相似的频率分布,因此我们处理的是带有有效载荷的隐写图像”。

事实上,如果我们看一下可视化攻击图像,就可以清楚地看到这些区域包含了一个嵌入的有效载荷。因此,该方法也适用于高熵的载荷。

统计分析方法:RS方法

另一种可以被用来检测有效载荷的载体的统计方法是Andreas Pfitzmann、Andreas Pfitzmann和Miroslav Goljan在2001年提出的RS方法,RS代表“正则/奇异”。RS方式是利用基于图像空域相关性的灵敏双重统计的检测方法。

待检测的图像被分为一组像素组,对每个组应用一个特殊的翻转操作。根据构造的判别函数将所有的组划分为三类:常规组、奇异组、不可用组。

该算法是基于这样一种假设:在原始图像中,没有隐写载体的图像,经过翻转后,普通类和奇异类的像素数量近似相等。如果执行了翻转操作后,这两组的数量有明显的变化,表明检测的图像是带有有效载荷的载体的。

该算法由以下步骤组成:

  • 原始图像被分成 n 个像素组(x1,…,xn)。
  • 使用判别函数,为每一个像素组G=(x1,…,xn分配)一个实数f(x1,…,xn) ∈
  • 像素组的判别函数(x1,…,xn)可以定义如下:

  • 定义翻转函数,其具有一下特性:

根据翻转前后判别函数的值,将所有的像素组分为常规组、奇异组和不可用组:

对RS方法进行测试(样本与卡方算法的一样),结果如下:

请注意,这种攻击方法并不是对“这个特定的载体是否包含嵌入的有效负载”进行“是”或“否”的二元判定,而是确定了嵌入式有效负载的近似长度(如,以百分比的形式)。

从上边的结果可以看出,这个方对于普通图片的判定是:有效负载填充量不足1%,而对于嵌入了有效载荷的载体的图片,它返回的结果是:有效负载填充量大约为44%。很明显,与卡方检验的结果相比,稍微有些偏差。从可视化攻击中可以看到容器50%以上被有效载荷填满,而RS攻击则告诉我们容器有44%被有效载荷填满。因此,如果我们建立一个特定的“触发阈值”,就可以应用这个方法。经过多次实验,结果表明,10%是一个足够可靠的阈值。如果RS攻击声称容器有10%以上被有效载荷填满,那么可以相信这个结论,并将目标标记为隐写容器。

我们对Zero.T 加载器的样本(有效载荷的熵值较低)进行检测,看一下这两种统计方法的效果。

测试结果如下:

如上图所示,卡方攻击并不适用于低熵图像:它产生不满意或不准确的结果。然而,RS攻击的效果很好。在两个案例中,它都检测到图像中包含有隐藏的有效负载。

但是,如果自动分析方法显示没有有效负载,但是我们仍然怀疑可能有一个有效负载,这时候,我们该怎么办?

在这种情况下,我们可以使用针对特定恶意软件家庭开发的特定程序来提取有效载荷。对于上述Zero.T 加载器,我们已经编写了专门用于提取嵌入的有效载荷的工具。该工具的操作示意图如下所示:

显然,如果我们得到一个有效的结果(在这个案例中是一个可执行文件),那么就可以判定源图像就被嵌入了有效载荷。

DNS隧道也是隐写术吗?

是否可以认为使用DNS隧道也是一种隐写术的类型?答案是肯定的。

首先,让我们回顾一下DNS隧道是如何工作的。

一个封闭网络中的计算机用户发出一个域名解析的请求,例如,上传的数据作为DNS查询的主机名字段,设置域名为wL8nd3DdINcGYAAj7Hh0H56a8nd3DdINcGYAlFDHBurWzMt[,]imbadguy[。Com,指向一个IP地址。(在这个URL中,二级域名是没有意义。)本地DNS服务器将此请求转发给外部的DNS服务器。同理,后者也不知道三级域名,因此它继续传递这个请求,所以这个DNS请求经过一连串的重定向之后,到达域名为imbadguy.com的DNS服务器。

这时候,DNS服务器并不会回应这一DNS请求,恶意攻击者从接收到的域名中解码第一部分,进而提取他们需要的信息。比如,用户的系统信息就可以通过这种方式进行传输。作为回应,攻击者的DNS服务器也发送一些解码格式的信息,将它们放到第三级或更高级别的域名中。

根据 RFC 1034标准中DNS协议的规定,整个域名的最大长度为253Byte,各级域名之间用“.”进行分割,各部分最大长度为63Byte,因此,一个DNS报文,最多情况下可以携带242个字符,对这些数据进行编码,使其符合协议的要求,就可以利用DNS通道传递任意数据,从而实现内部被控主机与外部控制服务器之间的双向通信!最重要的是,它是肉眼无法识别的隐蔽通信。

不过,对于熟悉网络协议的专家而言,很容易判断出可疑的使用DNS隧道的情况,因为这些通信的网络流量包含了太多的长域。在上图所示的例子中,我们看到的是由特洛伊木马程序Backdoor.Win32.Denis 生成的通信报文,它使用了一个DNS隧道作为隐藏通道来与它的C&C服务器进行通信。

基本上,任何主流的入侵检测(IDS)工具都可以检测到DNS隧道,如Snort、Suiricata或 BRO IDS。可以使用各种方法实现这一功能,例如,使用DNS隧道作为隐藏通道的一个显著特征是发送DNS解析的域名要比平常长的多,检测规则多种多样,如:

alert udp any any -> any 53 (msg:”Large DNS Query, possible cover channel”; content:”|01 00 00 01 00 00 00 00 00 00|”; depth:10; offset:2; dsize:>40; sid:1235467;)

还有一种更原始的方法:

Alert udp $HOME_NET and -> any 53 (msg: “Large DNS Query”; dsize: >100; sid:1234567;)

这里检测规则都试图在误报率和漏报率之间找到一个平衡点。

除了可疑的长域名外,域名的异常语法也是一个有用的因素。我们都知道典型的域名是什么样子的:它们通常包含字母和数字。但是,如果一个域名包含了Base64字符,那么它看起来会很可疑,不是吗?如果这类域名也很长,那么它显然值得一看。

类似这样的异常现象还有很多,通过正则表达式对他们进行描述,进一步检测隐蔽的DNS通道。

结论

我们看到恶意软件开发人员对隐写术的应用呈现强劲上升趋势,体现在多种方面,包括隐藏C&C通信和下载恶意模块。考虑到有效载荷检测工具是有概率的,且价格昂贵,所以,使用隐写术是一种有效的方法。这同时也意味着大多数安全解决方案并不能处理所有可能包含隐写有效载荷的对象。

更多资料

http://www[.]cs[.]cmu[.]edu/~chuck/lennapg/lenna[.]shtml

https://www[.]proofpoint[.]com/us/threat-insight/post/APT-targets-russia-belarus-zerot-plugx

https://en[.]wikipedia[.]org/wiki/Chi-squared_test

原创文章,作者:M0tto1n,如若转载,请注明出处:http://www.mottoin.com/106060.html

发表评论

登录后才能评论

联系我们

021-62666911

在线咨询:点击这里给我发消息

邮件:root@mottoin.com

工作时间:周一至周五,9:30-18:30,节假日休息

QR code