从防护角度看一句话木马的发展变形
来源:岁月联盟
时间:2020-03-16
对于php和asp,aspx作者也使用类似的手法做了加密和变形,这些跟菜刀/Cknife的原理都不一样了,思路非常值得学习,但是流量就很难检测了:-(。
三、二进制一句话木马
起因是看到github上面开源了一个poison ivy的RAT,是国内作者重写的名为poison ivy reload的项目,注释比较完整。这个大名鼎鼎的远控思路跟菜刀是一致的,命令通过shellcode传输,由于shellcode不需要重定位代码,直接分配内存就可以执行命令了,并且不仅命令是shellcode,木马本身就是shellcode。据说今年hw的第一天,就有攻击队钓鱼用的就是这个远控。
3.1poison ivy reload
控制端在Client文件夹,被控端在loader文件夹。先看被控端:
3.1.1被控端
相关配置文件和函数地址定义在global_data_t这个结构,使用到宏指令生成了非常紧凑的结构。下面是生成客户端的配置,包括配置连接方式、启动项、连接密码等。

下面是api地址,需要在加载后重新计算偏移后进行修复

loader_main是主要的入口,初始化global_config配置,然后根据配置主动外联控制端,首先是发包,做一个17字节的头部发送给控制端上线

然后rc4加密后发送出去,等待接收shellcode命令,收到数据后,进行rc4解密,然后分配内存,解压缩并拷贝数据到这块内存,执行代码。

木马有2种启动方式,本进程启动或者远程注入到ie启动。

可选的启动项:

3.1.2控制端
控制端是delphi编写,不过重点也是用到了一些shellcode,shellcode代码还是在loader文件夹下面,其中function目录是基础控制函数,包括入口的shell_main.c,是控制端传过来的第一段shellcode,会初始化相关结构并且作为整体的消息处理框架,information是收集被控端的本地信息并回传,cmdshell是反弹cmd端口,screenspy是抓取屏幕,process是列当前进程,thumbnail是获取图标。

loader_function和extra_function目录下面有一些其他功能函数,包括添加启动项、远程注入、socks5连接等。作者注释掉了生成shellcode的代码,修复后可以用shellcode方式执行,结合office文档漏洞钓鱼是一个不错的选择。
3.1.3通信流量
可以看看PI的上线流量。第一次交互主要是被控端上线,控制端发送shellcode_main的shellcode作为被控端的消息处理框架。

第二次交互则是被控端请求information的shellcode,即需要函数代码来提取本机的信息,但是这些函数都以shellcode形式存在控制端。

传输的这些函数包括下面的获取局域网信息get_lan_info,获取操作系统版本get_os_version,获取cpu频率get_cpu_frequency等。

第三次交互就是执行这些shellcode回传结果了

结果回显

每次交互的结果也会在stat标签页打印出来

3.1.4Poison Ivy Reload连接流量检测
这种加密流量ips之类的网络就比较难识别了。由于PI前期的上线流量比较固定,而且还有大量的ping pong心跳包,我觉得还是可以考虑从这些规律入手,即不通过传统特征匹配,而通过会话统计进行检测。
目前分析的是开源的PI Reload,也只是做了最简单的分析和测试,看了一下会话交互流量,我觉得更值得学习的是作者深厚的开发功底和调试技术。
四、总结
对于这些一句话木马工具,现有的技术手段比较难检测了,主要原因在于交互流量加密,并且协议的私有性,很难通过特征匹配,后续可能还是通过态势感知系统之类的分析统计功能会有效一些,这方面的问题我们团队也一直在思考和测试。由于水平有限,欢迎大家指出文中的错误和交流指教
上一页 [1] [2]
上一篇:如何搭建TCP代理(二)
下一篇:冠状病毒热点引发持续攻击事件