欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

捆绑后门的艺术--CobaltStrike backdoor分析

来源:本站整理 作者:佚名 时间:2019-08-06 TAG: 我要投稿

CobaltStrike(以下全部简称为CS)是渗透测试中常用的一个后渗透工具,它可以快速地生成后门并通过其控制目标主机。其中,捆绑型后门是攻击者较为喜欢的一种后门,因为其具有较好的隐蔽性及免杀效果。下面,就来剖析一下该类后门的捆绑及免杀原理。
1. 后门制作
制作捆绑型后门前,先得创建一个监听器用于与后门通信,点击 Cobalt Strike->Listener创建一个监听器,填上IP和端口号,点击save,就可完成创建。选择端口时,可以使用一些较少为使用的协议端口,好伪装,如下选择的2333端口,是snapp协议的端口。

接下来,就可以制作捆绑型的后门,点击 攻击->package->Windows Dropper,填上待捆绑的文件(这里使用flash下载器),完成!

生成的捆绑后门有个缺陷,就是图标不是原文件的图标,官网提示得自己使用图标编辑器进行更换。

点击运行捆绑后门fake_flash.exe,表面上看跟原始的文件没啥区别,都是运行Flash下载器,然而,后面的CS已经通过捆绑后门连接上了该主机。

2. 捆绑原理分析
按照常规操作,捆绑后门应该是将恶意代码插入到原文件中并修改入口点地址进行劫持,然而当比对捆绑后门和原文件的结构时,发现这两个文件的PE结构完全不一样,看来应该不是上述的方法。

生成一个CS非捆绑型后门进行比对,可以观察到,捆绑后门和非捆绑后门的PE结构几乎是一样的,前者只比后者多了一个.rsrc节段,这也说明,捆绑的方式应该是将整个原文件以.rsrc节段的方式附加到后门的末尾。

知道原文件存放的位置,那它是怎么样调用运行原文件的呢?使用bindiff对比捆绑型后门和非捆绑型后门,可以得知前者多了个4018BC函数,猜测该函数就是用来调用原文件的函数。

通过逆向分析,发现其调用逻辑很简单,运行后读取事先硬编码好的原文件大小,然后在相应的位置读取原文件数据,并释放到Documents目录下运行。这样,后门就可以实现运行恶意代码的同时,执行原文件,达到避开用户怀疑的效果。

根据代码中硬编码的原文件地址,我们可以在0x621D处定位到原文件,而在它前面0x1D的地方,存放着原文件的名字。

在“我的文档”下,可以找到原文件flashplayerpp_install_cn.exe。这种捆绑方法的好处就是兼容性好,无论捆绑什么软件,只要将原文件数据追加到后门末尾就行了,但缺点也易见,PE代码结构与非捆绑型后门几乎一样,很容易被检测出来。

3. 后门核心功能分析
看完4018BC函数后,程序还有两个函数4029D0和401800,这两个函数的功能分别是反沙箱以及释放运行shellcode,4029D0主要原理是通过循环执行垃圾代码来耗时绕过沙箱,接下来将主要分析核心函数401800。

该函数也使用了一个有趣的过沙箱的方法,它并没有将shellcode硬编码在程序中,而是硬编码了两段payload(其中一个payload使用命名管道的方式进行创建),将两段payload进行异或运算,得到最终的shellcode并运行,绕过了沙箱的虚拟执行检测。

上图是payload1的生成方法,先创建一个命名管道XXX-MSSE-S-server,将payload1写入管道后,后续再从管道中读取payload1。这里可能大家有个疑惑,把payload1写入管道又读出来,这岂不是多此一举吗?其实并不是,它这样做是为了绕过沙箱的虚拟执行,沙箱有时候为了效率只会模拟一些敏感的函数,但像CreateNamePipeA这种函数比较少用的一般不会模拟,这就导致了沙箱无法获取payload1。

[1] [2]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载