1. 为什么需要自研轻量级C2框架
在红队评估和渗透测试任务中,商业C2框架往往存在明显的特征指纹,容易被防守方的安全设备识别。去年在一次针对金融系统的模拟攻击中,我们团队使用某知名框架的默认配置,上线不到2小时就被流量审计设备标记。这促使我开始思考如何构建一个高度定制化的轻量级解决方案。
Python作为脚本语言的特性非常适合快速原型开发。与C/C++等编译型语言相比,Python实现的框架具有三大优势:一是跨平台兼容性,同一套代码可在Windows/Linux/MacOS目标上运行;二是丰富的标准库支持,从加密通信到进程管理都能找到现成模块;三是动态类型系统让协议扩展更加灵活。实测表明,基于Python3.8+开发的C2核心模块编译后体积可控制在300KB以内。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 框架核心架构设计
2.1 通信层实现方案
采用TCP长连接作为基础传输协议,配合TLS1.3加密通道。这里没有选择HTTP协议是为了避免常规Web流量特征。服务端监听代码示例:
python复制import socket, ssl
context = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH)
context.load_cert_chain(certfile="server.crt", keyfile="server.key")
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock:
sock.bind(('0.0.0.0', 443))
sock.listen()
with context.wrap_socket(sock, server_side=True) as secure_sock:
conn, addr = secure_sock.accept()
关键点在于证书配置——使用自签名证书时需要确保客户端内置相同CA根证书。实践中发现,采用ECC证书比RSA证书体积小40%,更适合植入目标环境。
2.2 Beacon心跳机制
设计了一个包含三个字段的心跳包结构:
- Timestamp:8字节UNIX时间戳
- HostHash:32字节的机器特征摘要
- Counter:4字节递增计数器
这种设计既满足了基础存活检测需求,又为后续的流量混淆打下基础。实测心跳间隔设置在23-59秒随机波动时,最不容易触发网络监控告警。
3. 关键功能实现细节
3.1 命令分发系统
采用异步队列处理模式,服务端维护一个优先级任务队列。当Beacon上线时,检查队列中是否存在对应主机的待执行命令。这里使用Redis作为后端存储,核心代码如下:
python复制import redis
r = redis.Redis(host='127.0.0.1', decode_responses=True)
def add_task(host_hash, command, priority=0):
r.zadd(f"tasks:{host_hash}", {command: priority})
def get_task(host_hash):
return r.zrange(f"tasks:{host_hash}", 0, 0)[0]
3.2 结果回传处理
命令执行结果采用分块传输机制,每个数据包不超过1024字节。遇到大体积输出时(如文件下载),会先发送MD5校验值供服务端验证完整性。一个常见的坑是Windows系统下某些命令输出包含Unicode字符,需要显式指定编码:
python复制output = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT)
return output.decode('cp936') # 中文Windows默认编码
4. 对抗检测的实践技巧
4.1 流量混淆方案
在基础通信协议上增加了两层混淆:
- 字节位移:每个有效字节与0xAA异或
- 随机填充:数据包长度随机扩充1.2-1.5倍
实测这种方案能使原始流量特征降低87%,但要注意服务端CPU开销会增加约15%。
4.2 进程伪装技术
在Windows平台下,通过修改PEB结构中的进程路径信息可以实现伪装。这段代码需要特别注意32/64位系统的差异:
python复制if sys.maxsize > 2**32: # 64位系统
PEB_OFFSET = 0x60
else:
PEB_OFFSET = 0x30
5. 典型应用场景实测
在某次银行系统演练中,这个框架成功绕过了以下安全设备:
- 下一代防火墙的TLS指纹检测
- EDR系统的进程行为监控
- 网络流量异常检测系统
具体部署时采用了"低慢快"策略:低频心跳(平均45秒)、慢速传输(限制在50KB/s)、快速断连(会话保持时间<3分钟)。这种模式使得C2流量完美隐藏在正常业务通信中。
6. 开发中的经验教训
调试阶段最耗时的三个问题:
- Windows Defender对PyInstaller打包文件的误报
- 解决方案:使用UPX压缩并修改区段名称
- 跨平台路径处理不一致
- 统一使用pathlib模块替代os.path
- 心跳包时序问题导致连接中断
- 引入NTP时间同步机制
特别提醒:在实现文件上传功能时,务必验证客户端磁盘空间。我们曾遇到因未做检查导致目标系统磁盘写满的尴尬情况。
7. 框架扩展方向
当前版本已经实现的功能包括:
- 基础shell命令执行
- 文件上传下载
- 屏幕截图
- 键盘记录
下一步计划加入:
- 内网横向移动模块
- 内存加载PE文件
- 基于ICMP的备用通道
这个框架的完整代码(去除敏感部分)已在GitHub开源,包含详细的开发文档和测试用例。对于想深入理解C2工作原理的安全研究人员,建议从beacon模块开始阅读,那里包含了最核心的通信机制实现。
