查看原文
其他

黑白鉴定入门之一款后门的分析思路

SSH山水画 看雪学苑 2022-07-01

本文为看雪论坛优秀文章

看雪论坛作者ID:SSH山水画





文章简介


这是一篇针对初学小白的文章, 楼主也刚刚进入安全行业实习,本篇文章主要记录分析过程,思想方法,如有不对不足,欢迎指出。





分析思路


样本hash:

3c8ba5a38cd1e4048c969464ab86591d9b08cba9


在拿到一个样本之后,第一件事拖入PEID查壳:

没壳,区段正常。
 
分析一下字符串,选出一些有用的字符串:
 
LoadLibraryA
GetProcAddress
ReadFile
CreateFileW
 
剩下的都是大片的乱码:
没什么有用的信息。
 
拖入ida看一下导入表:
找出一些能下手的地方:

0040301C LoadLibraryA KERNEL32
00403020 GetProcAddress KERNEL32
00403034 ReadFile KERNEL32
 
能作为突破点的API很少,先试着从LoadLibraryA入手。
通过IDA的交叉引用查看调用:
发现样本使用了CreateFileW,推测有释放文件的操作。

拟机打开OD,定位到调用CreateFileW处,在00401FF8 下段,看看样本创建了么文件。
观察堆栈 发现样本创建了自身,放行,样本直接结束。

转为在CreateFileW函数头部下断,重新运行样本,观察堆栈。

发现断下多次,我们将每一次的堆栈信息都截图下来,并且将文件备份一份:

根据以上可以推测出样本创建了第二个自身,结束第一个自身,然后释放文件
为了验证,打开火绒剑捕捉行为:

过滤没有用的动作,分析剩下的动作。

和我们预测的差不多,启动自身,释放文件,结束。
 
因为他释放完紧接着删除了,很不正常,我们是用火绒的拦截功能,拦截样本的删除动作,捕获被释放的文件:
再次执行样本:
可以看到样本在试图删除tmp,我们点击阻止,然后分析这个tmp:
可以发现tmp是0字节,是哪里出了问题,这是样本的障眼法?或者是他的写入代码没有被执行。
 
到这里好像所有步骤都白费了,抓到的释放行为,结果是释放了一个空文件。
 
那么他的真正功能在哪里呢,既然没被释放到磁盘,那就有可能直接在内存开辟了缓冲区去执行。
 
接下来试着验证这条猜想,打开OD,在VirtualAlloc处下断。
 
放行:
果然断下来了,跟出函数,看看他申请这块内存要干什么。

这就是申请好的内存地址,右键数据窗口中跟随,下内存写入断点,放行。

卧槽,竟然直接终止了,肯定是哪里不对。
 
还是回到那个申请的内存,下硬件写入断点。
 
再次放行:

这次断下了,观察数据,发现是很熟悉的PE结构。
 
右键->备份->保存数据到文件
 
将导出的数据拖入PEID:
果然,这段数据很有问题。
 
打开beyond进行代码比较:


和本体一模一样的数据,这可能就是火绒剑行为中的创建自身进程用到的数据。
 
回到OD,删除硬件断点,放行。
 
竟然又在alloc处断下,本来以为程序差不多结束了,没想到有意外收获。
 
同样的方法查看这块内存的数据:

同样的方法比对代码,依然一样。
 
再次放行,又在alloc断下,同样方法,再次来一遍。
 
这次你会发现,硬断触发的代码,有个循环用来向开辟的内存中赋值。
 
跳出这段循环,被填充的代码是没见过的,但是当你F8下去的时候,会发现下面还有个循环,跳出这个循环,再次F8下去,会有一个大循环:

当这个大循环全部执行完毕时,内存中的数据变得清晰了起来 如下图:

同样是PE结构,但是这次还做了加密解密,必然有问题。
 
同样的方法保存下来,进行对比:


正如我们猜测的,这个PE文件开始发生了变化,先将其存好。
 
回到OD,删除硬断,放行。
 
程序结束。
 
由此看来,整个程序的真正作用就是释放第三次alloc处的代码,也就是上面那幅图。
 
接下来的步骤我们将针对这第三个文件,我们取名为new。
 
将new拖入PEID:

UPX壳,这更证明了这个文件有大问题。
 
拖入火绒剑,过滤动作,看一下干了什么:
又是释放TMP……打开火绒,拦截删除动作,发现TMP还是空的。
 
那就不管它,new和原版一个明显的区别就是,new没有退出,而原版直接退出了,所以原版看起来啥也没干。
 
继续火绒剑:

捕捉到了connect,自身文件属性也变为了隐藏。
符合一个后门的特征了。
 
为了验证猜想,拖入IDA,分析导入表,字符串:



数据很少,既然有了connect动作,不应该只有这么点东西。
 
既然这样,就把壳脱掉,使用ESP定律脱掉壳子,定律可以自行百度,资料很多。
 
脱壳后拖入IDA,分析导入表和字符串。

截取敏感信息:
根据以下行为:

内存运行代码
隐藏自身
无窗口
静默发送connect链接
遍历IP地址
敏感字符串
 
可以推测为一个后门病毒,并可能带有扫描IP爆破的功能。
 
PS:楼主为个人自学逆向,所以没有接受过专业的培训,可能逆向思维,实践思路有些奇葩,各位谅解。此文章希望可以帮助自学的小白建立一些逆向思维。


- End -



看雪ID:SSH山水画

https://bbs.pediy.com/user-home-867232.htm

  *本文由看雪论坛 SSH山水画 原创,转载请注明来自看雪社区。



2.5折优惠票数量有限,先到先得哦!


推荐文章++++

格式化字符串漏洞解析

一个KimsukyAPT样本分析

* 一种基于frida和drony的针对flutter抓包的方法

* Minifilter学习的那些事

* 老树开花,一例新上传的KimSuky老样本分析







公众号ID:ikanxue
官方微博:看雪安全
商务合作:wsc@kanxue.com



求分享

求点赞

求在看


“阅读原文”一起来充电吧!

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存