Cobalt Strike 的渗透 Beacon 每 60 秒回连一次,这个默认心跳值让不少团队在实战中吃了亏。工具某次红队评估,渗透防守方就是工具靠流量分析抓到了这个规律,反向定位了 C2 服务器。渗透渗透工具好不好用,工具很多时候不取决于功能多强,渗透而在于你知不知道它会在哪里留下痕迹。工具
先聊 C2 框架。渗透CS 依然是工具主流,但它的渗透流量特征早被蓝队摸透了。默认的工具 malleable C2 profile 如果不改,JA3 指纹直接暴露。渗透我见过有人用 CDN 前置加域前置绕过去,工具效果还行,渗透但配置起来麻烦。Sliver 这两年被提得越来越多,Go 写的,跨平台编译方便,implant 支持 mTLS 和 WireGuard,流量看起来像正常 VPN。不过它的社区版和商业版功能差距不小,团队用的话得掂量预算。
横向移动这块,Impacket 套件几乎是标配。wmiexec.py 和 smbexec.py 用得多,但 wmiexec 会在目标机器上留 WMI 事件日志,smbexec 则依赖服务创建,动静都不小。atexec.py 走计划任务,相对隐蔽一些,不过 Windows 事件日志里 TaskScheduler 的记录跑不掉。真正安静的还是靠已有凭据做 PtH,配合 RDP 或者 WinRM,但 WinRM 的 5985 端口一开,流量特征太明显。
提权工具里,PrintNightmare 的利用脚本 GitHub 上一抓一大把,但补丁打完就废了。现在更多是找服务配置错误,比如 unquoted service path 或者弱权限的 DLL 劫持。PowerUp.ps1 还是好用,不过它跑起来会触发 AMSI,得先 bypass。有个细节:PowerUp 的 Invoke-AllChecks 会调用 Get-Service 和 Get-Process,这些 cmdlet 在受监控环境里会留脚本块日志,最好用反射加载或者直接跑编译后的 exe。
凭据抓取方面,Mimikatz 太老了,lsassy 和 pypykatz 更轻量。lsassy 通过远程注册表读 LSA secrets,不用落地文件,但需要管理员权限。有个坑:Windows Defender 对远程注册表读取的监控越来越严,尤其是 SECURITY 和 SAM 键的访问。pypykatz 解析 minidump 文件,配合 procdump 或者 comsvcs.dll 的 MiniDump 导出,成功率更高。comsvcs.dll 那个方法,rundll32.exe C:\Windows\System32\comsvcs.dll, MiniDump <pid> <path> full,简单粗暴,但 EDR 现在盯得紧。
隧道和代理工具,Chisel 和 Ligolo-ng 用得最多。Chisel 走 HTTP/WebSocket,配置简单,但流量特征明显,尤其是默认的 /chisel 路径。Ligolo-ng 更灵活,支持 TUN 模式,能把目标内网直接路由到攻击机,不用一个个端口转发。不过它需要 root 权限创建 TUN 接口,在受限环境里反而麻烦。Stowaway 和 Venom 这类国产工具,功能类似,但更新频率和文档质量参差不齐。
钓鱼 payload 的生成,现在流行用 donut 或者 sRDI 把 shellcode 包装成合法进程。比如把 Beacon 注入到 notepad.exe 或者 svchost.exe,配合 API unhooking 绕过 EDR 的用户态钩子。但内核回调越来越强,光靠用户态绕过不够。有个取巧的办法:用合法的签名二进制文件做 LOLBin,比如 msbuild.exe 执行内联 C# 代码,或者 installutil.exe 跑 .NET payload。这些微软签名的程序,EDR 一般不敢直接拦。
清理痕迹这块,很多人忽略。CS 的 Beacon 退出时不会自动删注册表键或者计划任务,得手动清。Windows 事件日志里,4688 进程创建、4104 脚本块日志、5156 网络连接,这些都得处理。wevtutil 清日志太粗暴,会留 1102 事件。更好的办法是定向删除特定 Event ID,或者用 Phantom 这类工具做日志篡改。不过说实话,真到清痕迹这一步,说明已经暴露得差不多了。
工具终究是工具,关键看怎么用。同一个 Cobalt Strike,有人十分钟拿域管,有人三天进不去内网。差别不在工具本身,在对目标环境的理解和对流量特征的把控。