概述

本周,许多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软件来检测恶意代码的执行就显得至关重要,无论该代码是来自图像还是来自其他文件,甚至还包括无文件恶意软件。因此,我们建议企业用户可以考虑选用自动化终端防护产品来防范此类风险。

本文翻译自:https://www.sentinelone.com/blog/hiding-code-inside-images-malware-steganography/如若转载,请注明原文地址: https://www.4hou.com/technology/19065.html更多内容请关注“嘶吼专业版”——Pro4hou

什么方式可以通过影子系统传播恶意代码_将恶意代码隐藏在图像中:揭秘恶意软件使用的隐写术...相关推荐

  1. java计分系统编程代码_使用Java代码对实时系统进行编程

    由于许多重要原因,Java语言在实时系统中的使用并不广泛. 这些包括Java语言设计固有的不确定性性能影响,例如动态类加载,以及Java Runtime Environment(JRE)本身,例如垃圾 ...

  2. 同步代码和异步代码_告别异步代码

    同步代码和异步代码 Quasar是一个将真正的轻量级线程(纤维)添加到JVM的库. 它们非常便宜且非常快-实际上,光纤的行为就像Erlang进程或Go goroutines-并允许您编写简单的阻塞代码 ...

  3. 读代码读的什么代码_您的代码应读得像书

    读代码读的什么代码 There's a pandemic among programmers. Long functions, broad and nondescriptive names for f ...

  4. python2转python3代码_收集python2代码转python3遇到的问题

    在程序中做python版本判断 sys.version_info # sys.version_info(major=2, minor=7, micro=16, releaselevel='final' ...

  5. 回滚master代码_[转]Git 代码撤销、回滚到任意版本(当误提代码到本地或master分支时)...

    两种情况(场景) 情况一 代码还只在本地,未push到运程仓库,想把代码还原到上一次commit的代码,此时操作为代码撤销 解决方案: 情况二 代码已经push到运程仓库,想把代码还原到上一次提交,此 ...

  6. python实现图结构github_Github项目+代码:新型深度网络体系结构去除图像中的雨水痕迹...

    雨水痕迹会严重降低图像能见度,导致许多当前的计算机视觉算法无法工作.因此去除图像中的雨水是有必要的. 北京大学等研究团队提出了一种基于深度卷积和递归神经网络的新型深度网络体系结构,用于单图像去除. 由 ...

  7. html实时时间代码_价值十万代码之三-获取全部历史数据

    前面文章 价值十万的代码之二---手把手教你获取数据篇 中,手把手教大家如何获取股票行情的实时数据,大家自己亲自动手实现了吗?首先感谢大家一贯的支持和鼓励,给我了持续分享的动力.本篇将接着上一篇的内容 ...

  8. 收藏本站html,加入收藏代码_加入收藏代码 -收藏本站的代码

    摘要 腾兴网为您分享:加入收藏代码 -收藏本站的代码,追书神器,智慧医疗,云端学习,央视影音等软件知识,以及workflow,电脑管家2017,自动考勤表,双录系统,国泰君安富易,佳缘佳信,谷歌浏览器 ...

  9. c++hello world代码_在 Rust 代码中编写 Python 是种怎样的体验?

    作者 | Mara Bos,Rust资深工程师译者 | Arvin 责编 | 屠敏头图 | CSDN 下载自东方 IC出品 | CSDN(ID:CSDNnews) 以下为译文: 大约一年前,我发布了一 ...

最新文章

  1. 第四课-程序的循环结构
  2. 三个字帮大家总结一下刘强东事件
  3. linux线程间同步(1)读写锁
  4. Web后端学习笔记 Flask(1)基础知识
  5. 【数据库系统概论】数据库系统概述
  6. JavaWeb 之 Listener监听器及Session的钝化与活化
  7. docker 搭建frp内网穿透以及frp详细使用
  8. linux脚本编写图形,shell图形化界面脚本实现
  9. Ubuntu音乐播放器
  10. Matlab 预失真器放大,如何实现射频功率放大器的基带自适应预失真技术
  11. MongoDB连接URL说明
  12. stm32(声音传感器控制LED)
  13. Python爬虫:逆向分析某云音乐加密参数
  14. 计算机网络的前沿技术和热点问题,中国信息技术十大前沿热点问题
  15. 史上最全网络端口号大全,肝货
  16. 金融大数据模型分享-股市评论数据情感分析
  17. 多线程MT和多线程MD的区别
  18. javascript等比例缩放图片的实现代码
  19. 2014年工作中遇到的20个问题:101-120
  20. matlab绘制庞加莱截面_matlab画的相图和庞加莱截面图

热门文章

  1. 将10进制整数转换成16进制整数输出
  2. NOD32升级ID获取器For流星无语更新了
  3. 地球化学图解系统GCDPlot 0.33
  4. Linux以oracle用户登录,Linux_oracle 10G for linux常用命令,首先以Oracle用户登录1、 - phpStudy...
  5. mysql 关联查询慢_mysql慢查询语句分析总结
  6. STM32 HAL库 .c/.h 文件介绍
  7. python人工智能原理及其应用_人工智能原理与实践:基于Python语言和TensorFlow
  8. nginx 根证书 服务器证书,Nginx双向证书校验(服务器验证客户端证书)
  9. wince下Gpio 驱动程序
  10. 学校计算机教室安全预案,小学校园微机室安全事故应急疏散预案