实战复盘:如何从混杂的Web流量中揪出Cobalt Strike Beacon?一份完整的解密指南
从混杂流量中解密Cobalt Strike信标的实战手册当安全团队在例行流量审计中发现异常HTTP请求时往往意味着内网已经存在失陷主机。最近处理的一起案例中攻击者通过Laravel框架的已知漏洞植入Webshell后在服务器上遗留了包含Cobalt Strike信标密钥的压缩包。本文将完整还原从流量识别到最终解密C2通信的全过程。1. 初始线索发现与关键文件提取在分析pcap文件时首先需要关注异常HTTP POST请求。某次案例中攻击者上传的Webshell响应包包含以下特征字符串AAA*VGhpcyBpcyBhIHRlc3Q*AAA这类经过伪装的Base64字符串通常需要特殊处理去除AAA*前缀和*AAA后缀将替换为00进行标准Base64解码通过反复解码多个类似字符串最终发现了服务器上的关键文件线索cd /d D:\phpstudy_pro\WWW\secretC:\Program Files\7-Zip\7z.exe x secret.zip -pP4Uk6qkh6Gvqwg3y关键文件特征对比表文件类型识别特征提取工具典型位置secret.zipPK文件头被Webshell输出包裹WinHex修复/tmp或Web目录.cobaltstrike.beacon_keysRSA密钥对特征7z解压攻击者指定目录2. 压缩包修复与密钥提取受损的压缩包需要通过十六进制编辑器手动修复。以下是使用WinHex的标准操作流程从原始流量中导出被污染的zip文件片段搜索50 4B 03 04(PK头)和50 4B 05 06(中央目录结束记录)删除头尾的非zip数据保存为标准zip格式使用之前获得的密码P4Uk6qkh6Gvqwg3y解压后得到.cobaltstrike.beacon_keys文件其内容结构如下# 公钥 -----BEGIN PUBLIC KEY----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx6QZ6OZ7O8Z6O8Z6O8Z6 ... -----END PUBLIC KEY----- # 私钥 -----BEGIN RSA PRIVATE KEY----- MIIEowIBAAKCAQEAx6QZ6OZ7O8Z6O8Z6O8Z6O8Z6O8Z6O8Z6O8Z6O8Z6O8Z6O8Z ... -----END RSA PRIVATE KEY-----3. C2流量解密实战获得密钥对后可以开始解密Cobalt Strike的通信流量。典型C2流量包含两种类型心跳包(元数据)GET请求/en_US/all.js密钥通过Cookie传输数据回传POST请求/submit.php?idxxxxxx包含加密的失陷主机信息3.1 解密元数据获取AES密钥使用Python脚本解密元数据from Crypto.PublicKey import RSA from Crypto.Cipher import PKCS1_v1_5 private_key RSA.import_key(open(beacon_keys).read()) cipher PKCS1_v1_5.new(private_key) aes_key cipher.decrypt(encrypted_metadata, None)关键参数说明encrypted_metadata从HTTP Cookie中提取的Base64编码数据aes_key解密后得到的32字节AES密钥3.2 解密主机回传数据获得AES密钥后可以解密POST请求中的实际数据from Crypto.Cipher import AES import base64 def decrypt_c2_data(encrypted_data, aes_key): iv encrypted_data[:16] cipher AES.new(aes_key, AES.MODE_CBC, iv) return cipher.decrypt(encrypted_data[16:]) raw_data base64.b64decode(http_post_data) decrypted decrypt_c2_data(raw_data, aes_key)典型解密结果示例{ hostname: DC01.corp.local, username: admin, process: lsass.exe, data: 收集的凭证数据... }4. 防御建议与检测增强基于多次事件响应的经验建议在安全设备上部署以下检测规则Suricata规则示例alert http any any - any any (msg:Cobalt Strike Beacon Metadata Request; http.method; content:GET; http.uri; content:/en_US/all.js; http.cookie; content:.cobaltstrike.beacon_keys; sid:1000001;)网络设备配置建议对出站HTTP流量实施TLS拦截检查限制服务器发起的异常HTTP POST请求监控Web目录下的.zip文件创建行为在一次实际事件中攻击者在解密后的数据中泄露了其C2服务器的真实IP这成为溯源突破的关键。通过交叉分析多个解密数据包的时间戳我们还成功还原了攻击者在失陷主机上的完整操作链条。