工具介绍
项目地址:
https://github.com/trustedsec/trevorc2
说明
TrevorC2是一个创新的客户端-服务器模型,巧妙地将命令与控制系统隐藏于正常可浏览的网站之下,大大增加了检测的难度。
流量&逻辑分析
环境&测试准备
环境配置
控制端 Kali 192.168.2.139
被控端 Win10 192.168.2.145
测试方式
- Kali运行以下命令启动服务端
python3 trevorc2_server.py
注意需要修改一下clone的网站配置,默认的google国内环境无法直接访问
- Windows上运行trevorc2_client.py,需要配置一下site_url指向服务端
- 成功上线
检测特征
Server逻辑分析
就一个文件trevorc2_server.py,其中的注释和相关代码都和清楚明了,入口位置为#465的main函数,主要相关的方法和说明如下
if __name__ == "__main__":
...
# 利用所给的UA保存访问url返回的内容到clone_site/index.html
clone_site(USER_AGENT, URL)
...
# 运行C2主程序,后面分析
threading.Thread(target=main_c2).start()
...
# prompt使用
commandline = TrevorPrompt()
主要功能代码在main_c2方法中,包括请求处理、SSL支持等,主要代码如下
def main_c2():
...
"""Start C2 Server."""
# ROOT_PATH_QUERY请求交给RPQ处理,SITE_PATH_QUERY请求交给SPQ处理
application = tornado.web.Application([
# RPQ处理/访问情况,通过判断Cookie中是否存在COOKIE_SESSIONID_STRING字段,存在则发送处理之后的对应id的内容
(ROOT_PATH_QUERY, RPQ),
# SPQ用于处理针对预定通讯路径的处理
(SITE_PATH_QUERY, SPQ),
# UnknownPageHandler没满足以上的路径就设置特定的响应,返回特定内容
(r'/.*', UnknownPageHandler) # Make this the last line, if not matched, will hit this rule.
])
SPQ主要处理方法如下
对解密的数据做判断,如果内容包含magic_hostname,也就是初始的注册阶段,那么设置指定nothing,否则按照::::进去分块并将数据保存在clone_site/received_xxx文件
其中AES解密的做法如下:
server中还有一处逻辑为TrevorPrompt,其实就是服务端和控制台的数据交互,其中主要方法为do_interact
Client逻辑分析
Client类型有好多种,实现语言不同但是功能都是一样的,这里以py脚本为例,入口为#120#connect_trevor
请求响应特征
请求响应特征由于配置易修改,这里只检测默认配置的情况
请求:
- uri以images开始,后面的参数有guid,并且guid为base64编码形式
- 可能携带Cookie: sessionid=[a-zA-Z]{15} 初始请求没有
- UA为Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko 可修改
响应:
- 可能携带Cookie字段Set-Cookie: sessionid=[a-zA-Z]{15}
- 命令特征的响应内容中携带以下格式数据
- 命令获取的响应特征为server为IIS,并且响应体内容为空