现在只对常读和星标的公众号才展示大图推送,建议大家把潇湘信安“设为星标”,否则可能看不到了!
文章主要内容
0x01 背景
某次应急事件中拿到一个攻击者使用的钓鱼样本,这个样本比较有意思和之前的分析有些不同,第一次分析也算曲折,此文记录下对该样本的分析过程。
0x02 样本行为分析
运行样本:
首先通过ApateDNS看到可疑dns请求:
同时我们往前看几条,也就是发起dns前,可以看到有一个进程创建操作,详情如下:
如上图,我们可以看到这个mobsync.exe其父进程就是样本进程,所以这个进程我们的样本进程创建运行的,所以我们这里其实是直接就拿到了c2地址。
进一步我们看下mobsync.exe这个进程干了些啥,如下图pcmonitor监测到其修改涉及internet Explorer 安全区域的信息的注册表,来增加成功回连的概率:
这里笔者进一步通过inetsim 模拟真实环境,其实就是给样本一个回连的https服务,看看其网络行为:
inetsim记录如下:如下图,好家伙直接空手套白狼,拿到回连的url了,ps:看着就像CS;
通过模拟环境的行为分析到这就差不多了,接下来就是样本文件逆向分析了,毕竟谁知道上面的这个些是不是攻击者给我们设置的陷阱呢?(比如当他的反虚拟化比我们的反反虚拟化做的多的时候,那么攻击者的样本里面检测到这个是虚拟环境,就随便弄些行为让我们分析的人去分析,回连一些正常域名/IP等,ps:这个样本回连域名正好就是这个情况,比较特殊,所以全文笔者都把域名脱敏了)。光从行为侧去下结论是不太行的。
0x03 样本逆向分析
https://www.sapien.com/software/powershell_studio
我们可以得到一个结论这个工具可以用来对powershell代码保护以及封装成一个可执行文件。所以我们这里的样本文件很大可能是这么来的。
如下图,通过启发式扫描,这个样本可能是一个.net的c#程序(这里也印证了上面我们的推测,因为powershell也是基于.net的,所以兼容c#),但是也正是因为这个基于.net所以我们的ida之类的反编译工具不太行了。
接着我们用dnspy来反编译这个通过.net c#开发的exe文件,将其从中间语言还原成c#源码:
定位入口:
如上图,可以看到,这个样本逻辑里面还是做了一些反调试操作的,第65-68行通过kernel32里面的IsDebuggerPresent()函数来检测进程是否被调试;
还有第69行的Class7.smethod3方法,如下图是其实现,可以看到是通过kernel32里面的CheckRemoteDebuggerPresent()来检测当前进程是否被调试:
分析到这的时候,笔者猜测这里这个函数在做一些解密操作。
我们跟进来看下Class9的smethod_7来看下,如下图,简单看下,其实就是一个长度for循环,对传入的byte_0参数进行一顿操作,其中包括加106,减byte_1里面对应for轮数的索引的值(超过长度会自动清零 338-342行),之后对一堆情况判断,比如但钱轮数是否是5的倍数,是的话byte_0的对应字节要加2,等等之类的
这里我们没必要去深入分析,因为不需要知道具体是这么干的,我们只需要知道这个函数就是在解密就行。解密的逻辑就是上图。
当然要是搁以前我肯定是不会去分析的,但是现在不一样了,现在我们有gpt了,直接让gpt来分析具体功能细节,反正我又不用动手,如下图是gpt对该函数的分析结果:和我们看的差不多。
#SAPIENPRESETS
替换成$PSScriptRoot = \"{0}\"\r\n
+$PSCommandPath = \"{0}\"\r\n
,其实这里就是获取当前路径和运行的进程路径替换之后直接丢到Runspace.CreatePipeline.Commands.addscript()
里面,这里其实就是把我们解密后的内容当成powershell脚本语言运行了;
下面一堆代码,特别长,主要是一些ui之类的命令和资源的存储,比如运行样本的图标之类的,我们来看关键的地方:
首先发现一个函数inject_Apc的函数:函数实现如下,就是一个简单的APC注入,shellcode加载,稍有不同的是这里是为了不影响主进程的运行,是通过创建一个新进程mobsync.exe进程来加载shellcode:
接着看补丁检查:其实现如下:效果就是将会返回一个对象数组,每个对象代表一个安装的快速修复工程。这些对象包括有关修复程序名称、描述、安装日期和时间以及其他相关信息的属性;除此之外没有其他远控操作了。
这个没啥好说的,笔者把shellcode扣下来的时候,windowsdefender直接杀了,应该没啥研究价值,所以这里笔者就直接模拟跑下得到如下结论:
如下图,可以看到,这个shellcode”动态“加载了wininet.dll ,然后调用internetconnectA回连c2地址,发送get请求(其实就是一个Cobaltstrike 的shellcode),这里拉取/themes/default/js/jquery-3.3.2.slim.min.js
其实就是在拉beacon,对cobaltstrike shellcode上线过程感兴趣的话可以阅读下笔者之前写的对csshellcode分析的文章cs shellcode分析
https://forum.butian.net/share/2017
0x04 反思
1、如何去检测这种样本
我们可以通过yara规则去静态检测,可疑的可执行文件中是否存在上文提到的sapien powershell studio的标记(如下图);
strings:
$a = "SAPIEN PowerShell.v5" wide
condition
all of them and uint16(0) == 0x5A4D
那么当杀软将这种可以执行任意powershell代码的exe程序标记成恶意文件的时候,红队视角如何对其进行免杀呢?
首当其冲的就是要去特征化,把SAPIEN PowerShell studio的特征去掉,这样能保证静态免杀。
0x05 总结
笔者才疏学浅,若文中存在错误观点,欢迎斧正。
文章来源:奇安信攻防社区(Ga0WeI)
原文地址:https://forum.butian.net/share/2340
关注我们
还在等什么?赶紧点击下方名片开始学习吧!
信 安 考 证
CISP、PTE、PTS、DSG、IRE、IRS、NISP、PMP、CCSK、CISSP、ISO27001... |
推 荐 阅 读
文章引用微信公众号"潇湘信安",如有侵权,请联系管理员删除!