freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

恶意广告的艺术创作:一个有趣的隐写术实例
2017-07-07 18:26:14

我去年和另外一名同事编译过一篇很有意思的文章,标题为《可能是史上最先进的恶意广告攻击:一个Banner就感染了上百万PC》——我很喜欢在标题中使用“可能是”这三个字,主要是从罗永浩那儿学的。

这篇文章中描绘的恶意广告完全可以用“Sophisticated”来形容,因为真的在隐蔽性和感染能力方便做到了非常出众,即便其中利用的某些漏洞已经被修复。不过当初我跟这位同事一起编译此文的时候,有怀疑过,是否真的不需要交互就能完成整个感染过程——如果是这样的话,那实在是件太牛逼的事情了——这主要涉及到几个已修复漏洞的利用,各位可以去仔细研究一下,这篇文章真的很值得一读。

然而,作为一个对安全不怎么感兴趣,但对显像、成像和数字图像非常感兴趣的安全媒体编辑,我深刻认识到,当某个安全事件中出现对数字图像的说明是多么可贵的一件事。

stego1.jpg

这篇文提到 Steganography 隐写术——隐写术这两年逐步成为信息安全领域的专家和攻击者们研究的一个方向。说句人话,隐写术就是把要传递的信息嵌入到数字媒介中,其目的是要让第三方察觉不到信息的存在性。隐写术就是隐藏信息的一种技术,它和加密的区别就在于,对加密而言,第三方是知道数据被加密的,只是不知道加密前数据是什么样,隐写术则着重于让人无法察觉数据的存在性。

在这篇文章中,我们就以上面提到的“Stegano”恶意程序为例,来说说在 Stegano 中运用的这种隐写术。听起来就感觉逼格很高的样子。

有关 Stegona

相关 Stegona 恶意程序本身的一些特性,这里就不做更具体的介绍了,只简单带过,想了解细节的同学可以点击这里查看。

Stegona 其实是一整套 Exploit Kit,它将恶意代码嵌入到网站的 banner 广告里面。广告内容首先会加载一个脚本,在进行一些初始信息获取后,脚本就会请求恶意广告 banner。这个恶意 banner 中就采用了隐写术,隐藏了某些信息。脚本对这些隐蔽的信息进行解码,获得更多 JS 代码和变量。

然后解码获得的脚本就会对浏览器、计算机环境进行检查(利用IE漏洞CVE-2016-0162),主要检查运行环境中是否存在数据包抓取工具、沙盒、虚拟化软件以及安全软件。如果检查结果“良好”——也就是认为自己不会被检测到,随后就构建一个 iframe (仅1个像素的尺寸),重定向至 exploit 页面。

这个所谓的 landing 页面确认浏览器是IE之后就会加载 Flash 文件,Flash 文件能够根据不同的 Flash Player 版本进行漏洞利用(CVE-2015-8651/1019/4117)。最后就是 payload 阶段了。

当然这其中还有很多细节,主要是在隐蔽性方面下足了功夫,比如在屏幕坐标之外构建 iframe 之后,还会设定其 window.name 属性,而这个属性会在后面请求 GIF 文件的加密 URI 参数中用到。其隐蔽行为还包括 Flash 文件中嵌套 Flash 文件;通过加密的 JSON 文件来设定 FlashVars 参数;上面提到请求获得的 GIF 文件实际上也是用来传递信息的,在丢弃 GIF 文件的第一个字节之后,对剩余的数据进行解密,这些数据主要是确认究竟采用何种 exploit 的,最后再把该信息传递给 Flash ;最后下载的 payload 也是加密的,而且也是伪装成了 GIF 图片...

比较有趣的是,整个过程中,Stegona 在不同阶段对环境进行了多次检查,确保自己不会被检测到,基本上是到了快有强迫症的地步。

5-tgssh-912x1024.png

关于 Alpha 通道

上面这些当然不是重点了,虽然其实就算不用隐写术,这套 Exploit Kit 也足够出众。在上面阐述的这些攻击阶段中,请求获得所谓的 “恶意 Banner 广告”之后,脚本需要对恶意广告中携带的隐蔽信息进行解码。这个恶意广告中的隐蔽信息就是采用某种隐写术,写进去的。

这里值得一提的是,脚本在对目标环境进行检查过后,会确认是否要请求恶意广告,如果说攻击环境不理想(或者说不满足攻击要求),获取到的就会是普通广告内容。

3-gxrp4.png4-nejsb-1.png

Screen-Shot-2016-12-06-at-10.00.54.png

恶意广告和普通广告看起来其实是差不多的,只不过如果仔细观察恶意广告图片会发现,其图片上的噪点明显更多,而且图片颜色和普通广告也略有差异,如上图所示。这就是用了隐写术的结果。

恶意广告中携带的隐蔽信息,就隐藏在 Banner 广告图片的 Alpha 通道中——What? 终于出现了我看了会开心的词汇,听到没?Alpha 通道。像我这种对 Photoshop 如数家珍的人,在一篇恶意程序分析文章中居然看到了 Alpha 通道,简直要普天同庆啊。

下面就可以很自豪地进行数字图像的科普过程了。我们常说32位彩色数字图像,这究竟是个什么样的概念?

我们说8位黑白灰度图,意思特别容易理解,是说在这张黑白图片中,从黑到白的过渡,有2^8(二的八次方)种变化;我们又说24位真彩图,意思是指红色有2^8种变化,绿色有2^8种变化,蓝色有2^8种变化,加起来就是 8 + 8 + 8 = 24 比特。

QQ截图20170707181615.png

所以大部分人所知的 RGB (Red, Green, Blue)颜色表达方法就是这么来的,比如白色是(255,255,255),红色是(255,0,0)。从0-255,包含2^8种过渡。

但32位究竟是什么?实际上就是在 RGB 三个通道之外,再多加一个 Alpha 通道(形成所谓的 RGBA 结构)。这个 Alpha 通道是用来表示透明度的,在三种颜色混合之后,再表征每个像素的透明度,透明度从完全透明到完全不透明也有2^8个过渡层次,即形成了32位图像。

一般来说,GIF 格式的图片文件就可以记录 Alpha 通道信息。这就是 Stegona 隐藏传递其 JS 恶意脚本的方式和核心所在。

其中的隐写术方案

其实 Stegona 所用的隐写术方案并不复杂,它在恶意广告图片的 Alpha 通道中写入信息的方式是这样的:图片中每两个连续像素的 Alpha 值代表一个字符代码,两个像素的 Alpha 值分别表示十位和个位。其实通过这种方式来对要传递的数据进行编码,影响到了图片中每个像素的透明度,最后呈现的图片自然会与原本图片有差异。

不过恶意程序作者为了肉眼更难以察觉这种差异,还用上了32这个偏移量。举个例子来说,如果恶意 GIF 广告中连续两个像素的 Alpha 值分别为239和253,那么其表示的字母为“f”,具体是下面这么算的:

Screen-Shot-2016-12-06-at-09.59.34.png

如果说这张恶意广告图片前面一连串像素的 Alpha 值是:239, 253, 237, 243, 239, 237, 241, 239, 237, 245, 239, 247, 239, 235, 239, 237,则它们联合表达一个单词 “function”。

除此之外,对于恶意广告图片中没有用到的像素,则还会加上一些随机的 Alpha 值,让这种噪点分布得更加均匀,令其更难以察觉。

Stegona 最终会对解码得到的 JS 代码完整性进行检查,恶意广告图片最后部分编码进了哈希校验值——这套隐写术就完成了。

shutterstock_228162115-680x400.jpg

这并非多么复杂的一套方案,说起来也相当容易理解。在这个数字时代,所有信息都是用数字传播的,所以任何媒介都可能成为隐写术的应用平台。我在想,要是从音频数据下手来隐写数据,频率方面的变化是否可能造就某些与众不同的艺术流派(...),未来黑客们通过音频隐写来传递信息,构成了独一无二的音乐风格——不过话说回来,如果我们都知道这些音频内容被隐写数据,那就是加密,而不是隐写了。

* 参考来源:ESET,作者:欧阳洋葱,转载请注明来自FreeBuf专栏及作者欧阳洋葱


本文作者:, 转载请注明来自FreeBuf.COM

# 隐写术 # 恶意广告 # Stegona
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
评论 按时间排序

登录/注册后在FreeBuf发布内容哦

相关推荐
  • 0 文章数
  • 0 评论数
  • 0 关注者
登录 / 注册后在FreeBuf发布内容哦
收入专辑