C2 与横向
为什么拿到一台机器只是开始,以及这类流量在网络上长什么样。
一台机器不算什么
Web 入口拿到的权限通常在 DMZ,或者在一个和核心业务隔离的网段。真正的资产在内网:域控、数据库、文件服务器、OA。
从「有权限的机器」到「有权限的人」,中间隔着横向移动。这一段是红队项目的主体,也是多数常规渗透测试的边界之外。
所以这篇只写两件事:为什么难,和怎么被发现。
难在哪
没有直接通路。DMZ 的机器连不到内网 10 段,需要搭隧道:端口转发、SOCKS 代理、DNS 隧道、ICMP 隧道。每条路都有自己的特征,也都有自己的稳定性问题。
凭据不等于权限。拿到一个本地管理员哈希,不代表能登其他机器——域环境里,本地管理员密码每台都不一样(LAPS 之后更是如此),能复用的是域账号和服务账号。
动静大。RDP 登录会挤掉当前用户,管理员立刻知道。批量扫描会让内网 IDS 报警。这条路越往后走,越需要「慢」。
网络上长什么样
这是防守方更该关心的部分。
心跳。C2 的木马要定期回连取指令。这个周期是固定的,加上随机抖动(jitter)来规避检测——但抖动本身也是一种特征:间隔分布不服从正常用户行为。
正常的出网流量,间隔是随机的、长尾的。心跳流量的间隔集中在某个值附近,画个直方图就能看出来。
域名特征。DGA 生成的域名、新注册域名、没有历史解析记录的域名、和业务无关的 TLD。这些在 DNS 日志里都能筛。
TLS 指纹。木马用的 TLS 库和浏览器不一样,JA3/JA3S 指纹不同。这是目前比较有效的一层,因为改起来麻烦。
数据外带。大量上传、非工作时间的出网流量、往云存储的批量上传。
一个现实的比例
多数企业的检测能力分布是这样的:
- 边界防火墙:有,但只看端口和 IP。
- 出网流量:有日志,没人看。
- DNS 日志:有,没接进任何分析。
- 终端:装了 EDR,规则是默认的。
这个状态下,一个用了正常 HTTPS 端口、域名看起来像正常服务、心跳间隔带抖动的 C2,能活很久。
所以建检测的时候,顺序应该是:先接 DNS 日志(成本最低、信息量最大),再做流量基线(找出「这台机器平时不连这些地方」),最后才谈高级规则。
报告里怎么写
如果项目里做到了横向,报告的重点不是「我们拿到了域控」,是「我们从 DMZ 到域控用了 4 小时,中间经过 3 台机器,你们的日志里只记录了 1 台」。
这个差距才是客户要修的东西。
参考
- 《cobalt strike 内网渗透(专栏)》,CSDN 存档
- 检测体系参考:安全监控