Skip to content

Latest commit

 

History

History
238 lines (175 loc) · 11.1 KB

README.LAB.md

File metadata and controls

238 lines (175 loc) · 11.1 KB

Quasar 检测评估实验台 · 实验室基线样本

作者:陈森于(Chen Senyu)· https://github.com/chendashi666

本项目所有实验室工程改造与新增代码均为陈森于创作。禁止盗卖。禁止商业用途。 上游 Quasar 代码版权归 MaxXor 及 Quasar 贡献者所有,遵循 MIT License,其署名与许可证必须原样保留。 详见 NOTICE.md 与 LICENSE.LAB.md。

上游 Quasar 1.4.1 的可复现构建工程,用于企业终端检测栈 (Microsoft Defender / Sysmon / EDR)对远程管理工具的覆盖度测量与盲区定位。

  • 功能完整:远程连接、文件管理、远程桌面、键盘记录、密码恢复等功能模块原样保留,未删减、未降级
  • 最小改动:仅做参数外置、元数据标准化、构建自动化、资源规范化
  • 无外部依赖:不引入任何第三方加壳平台或检测规避服务
  • 可复现:一份构建 + 一个 config.json = 一个实验条件,切换条件不需要重新编译

仅用于自建隔离靶场中的检测能力评估。


1. 环境要求

组件 要求
操作系统 Windows 10 / 11 x64(构建机)
Visual Studio 2022 或更新,勾选「.NET 桌面开发」工作负载;也可只用 Build Tools
.NET Framework 4.8 开发包(必须提供 net452 目标包所需的 v4.5.2 引用程序集)
Windows SDK 可选,提供 signtool.exe;没有就加 -SkipSign
PowerShell 5.1(Windows 自带)
网络 首次 NuGet 还原需要联网,之后可完全离线

环境自检:

[Environment]::Version                            # 应为 4.x
Test-Path "C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.2"
Get-ChildItem "C:\Program Files (x86)\Windows Kits\10\bin" -Recurse -Filter signtool.exe -ErrorAction SilentlyContinue

2. 首次构建(一条命令)

git clone <仓库地址>
cd Quasar-LabBaseline
powershell -ExecutionPolicy Bypass -File .\build_release.ps1 -Hosts "<控制端内网IP>:4782;" -Tag "COND-A" -Subnet "<内网网段>"

流水线共 9 段,全部通过才算成功:构建 → 元数据断言 → 依赖合并校验 → 实验台证书 → 基线样本 → 控制端分发 → 本地签名 → 清单 → 运行验证与连接烟测。

独立于网络的控制端/被控端参数一律通过命令行传入,脚本正文不含任何硬编码地址。

3. 一键出包(图形控制台)

双击 lab\tools\open_packager.cmd,或:

.\dist\ControlConsole\Quasar.exe --lab-packager

填入控制端内网 IP,点「一键出包」,直接得到单文件被控端:

  • 运行参数(含实验台证书绑定)内嵌进 exe,投递时只需这一个文件
  • 默认同目录再写一份 config.json 作为覆盖层,用于以后切换实验条件
  • 日志区回显产物路径、大小、SHA256 与内嵌参数

3.1 独立出包工具(单文件 exe)

不想安装构建环境时,直接用预构建的独立工具:

prebuilt\LabToolkit\QuasarLabToolkit.exe   单文件 3.7 MB,含图形出包控制台 + 完整 CLI
prebuilt\LabToolkit\client.bin             客户端模板,必须与 exe 同目录

双击 exe 打开图形出包控制台;也支持与主控制端完全相同的命令行:

.\QuasarLabToolkit.exe --help-lab
.\QuasarLabToolkit.exe --build-client --out .\LabBaseline\LabBaseline.exe --hosts "<控制端内网IP>:4782;" --tag "COND-A" --subnet "<内网网段>"
.\QuasarLabToolkit.exe --write-config --out .\LabBaseline --hosts "<控制端内网IP>:4782;"
.\QuasarLabToolkit.exe --sync-ca --to .\ControlConsole
.\QuasarLabToolkit.exe --make-cert

首次运行会自动生成实验台 CA:同目录没有 quasar.p12 时,工具直接创建一份,无需手工准备证书。

一套 CA 必须两端共用:工具生成的 quasar.p12 要复制到控制端目录(dist\ControlConsole\quasar.p12), 否则工具产出的样本无法通过控制端的服务器证书校验。这个文件是私钥,不要外发、不要提交仓库。

完整版控制端也带同一个出包界面:

.\dist\ControlConsole\Quasar.exe --lab-packager

4. 被控端运行

被控端只需要 LabBaseline.exe 一个文件(纯单文件模式)。可选地在同目录放 config.json 覆盖参数。

.\LabBaseline.exe            # 无人值守运行,无窗口无托盘
.\LabBaseline.exe --config   # 打开参数窗体,改完保存即写 config.json

进程名 LabBaseline.exe。默认 INSTALL=false、STARTUP=false,因此不自我复制、不写启动项, 任务管理器结束进程即彻底停止。

最容易踩的坑:纯单文件模式下不要删掉 exe 里的内嵌配置;带 config.json 时它必须与 exe 同目录, 否则参数不生效。

5. 一键切换实验条件

.\lab\tools\repoint_condition.ps1 -QuasarExe .\dist\ControlConsole\Quasar.exe `
    -BaselineDir .\dist\LabBaseline -Hosts "<控制端内网IP>:4782;" -Tag "COND-B" -Subnet "<内网网段>"

只重写 config.json,被控端 exe 的 SHA256 不变 —— 这是「同一份构建对照不同条件」的关键约束。

6. 参数优先级

层 来源 说明
1 exe 内嵌资源 出包时写入,单文件即可运行
2 同目录 config.json 其中显式出现的字段覆盖内嵌值,未出现的继承内嵌值
3 编译期加密参数 只有前两层都不存在时才启用,与上游行为完全一致

三层都带实验台证书绑定,运行时仍执行与上游一致的 SHA256 服务器证书校验,未做任何降级。

7. 目录结构

build_release.ps1              一键可复现构建流水线
Directory.Build.props          统一元数据单一来源
lab/
  LabBaseline.ico/.png         实验室标准图标
  README.md                    实验室工具链说明
  tools/                       出包/校验/信任/图标工具脚本
Quasar.Client/                 被控端(参数外置 + 配置窗体)
Quasar.Common/                 共享协议与实验室配置模型
Quasar.Server/                 控制端(含一键出包控制台与 CLI 构建入口)
Quasar.LabToolkit/             独立出包工具:复用同一构建引擎,合并为单文件 exe
Quasar.Common.Tests/           单元测试
VERIFICATION_REPORT.md         两台 Win10 靶机隔离内网验证方案与验收矩阵
AGENTS.md                      AI 协作约定(可选,不参与构建)

8. 构建期 CLI(无 GUI)

Quasar.exe --make-cert   [--out <p12>] [--name <CN>] [--key 4096]
Quasar.exe --build-client --out <exe> --hosts "<ip:port;>" [--tag --mutex --subnet --icon ...]
Quasar.exe --write-config --out <dir> --hosts "<ip:port;>" [--tag --mutex --subnet]
Quasar.exe --sync-ca --to <dir>
Quasar.exe --help-lab

9. 相对上游的改造清单

类别 改动
参数外置 新增 LabConfig 模型、WinForms 配置窗体、三层配置优先级;客户端 Settings.Initialize() 增加外置配置注入点
元数据标准化 Directory.Build.props + 四个 AssemblyInfo.cs 统一 Title/Product/Company/Version/Copyright/Description,重新生成 AssemblyGuid
字符串资源 新增 LabResources.resx,项目名/命名空间/默认安装路径/日志标记集中管理,模板标识改运行时拼接
依赖整合 ILRepack.targets 显式合并清单 + 产物校验,被控端为单文件
资源规范化 统一多尺寸实验室图标、版本资源与文件描述
签名 本地自签名证书 + signtool 签名,配套靶机信任导入脚本
构建自动化 build_release.ps1 九段流水线与构建期 CLI
独立工具 新增 Quasar.LabToolkit 项目:复用同一个 ClientBuilder,ILRepack 合并为单文件 exe,缺证书时自动生成实验台 CA
未改动 上线/心跳/消息处理器/所有功能模块与上游一致

10. 常见问题

构建报 MSB4126 解决方案配置无效 解决方案平台名是 AnyCPU(无空格),不是 Any CPU。

找不到 signtool.exe 安装 Windows SDK,或给 build_release.ps1 加 -SkipSign。

被控端不上线

先在被控端看进程和连接状态,两类问题一眼分开:

| netstat -ano | findstr <端口> 的结果 | 结论 | | --- | --- | | 一直 SYN_SENT | 网络层不通 → IP 填错 / 防火墙拦了 / 虚拟机是 NAT 模式(NAT 下不能用宿主机局域网 IP 回连,要用 VMnet 网关地址,如 192.168.x.1;Host-Only 用 192.168.56.1;桥接才能用局域网 IP) | | ESTABLISHED 一两秒后消失、反复重连 | TCP 通了,TLS 校验被拒 → 证书不一致(见下) | | 没有 LabBaseline 进程 | 样本没跑起来,检查 exe 与 config.json 是否同目录 |

另外确认控制端真的在监听(Quasar 默认 4782,必须在界面点 Listen;AutoListen 默认关闭):

netstat -ano | findstr :4782
# 期望 0.0.0.0:4782 LISTENING;若为 127.0.0.1:4782 则只绑了回环

证书不一致的判定与修复

三条命令,指纹必须完全一致:

# 样本期望的证书指纹(config.json 里的 encryptionKey 就是 CA 指纹)
(Get-Content .\LabBaseline\config.json -Raw | ConvertFrom-Json).encryptionKey
# 控制端实际在用的
(New-Object System.Security.Cryptography.X509Certificates.X509Certificate2(".\ControlConsole\quasar.p12","")).Thumbprint
# 出包工具生成的那份
(New-Object System.Security.Cryptography.X509Certificates.X509Certificate2(".\LabToolkit\quasar.p12","")).Thumbprint

不一致时,让控制端改用样本绑定的那一份:

Copy-Item .\LabToolkit\quasar.p12 .\ControlConsole\quasar.p12 -Force

出包工具与控制端自动共用同一套 CA,四条路径都已覆盖:

你的操作 自动行为
出包工具先跑 新建 CA 后同步一份到同级 ControlConsole
控制端先跑 控制端启动时先采纳同级工具目录已有的 CA,不弹证书窗、不自建第二份
用 --make-cert 轮换 CA 新 CA 自动同步到同级目录
两个目录被分开拷贝 手工执行一次 --sync-ca --to <控制端目录>

因此正常出包流程不会再出现证书不一致。

Get-AuthenticodeSignature 显示 UnknownError 自签名根未导入。在靶机执行 lab\tools\trust_lab_certificate.ps1 后即为 Valid。

11. 上游与许可

本项目是上游 Quasar 的衍生工程。上游代码遵循其 MIT License(见 LICENSE,版权归 MaxXor 及 Quasar 贡献者所有), 其署名与许可条款必须原样保留。第三方组件许可见 Licenses/。

本分支新增的实验室工程代码(范围详见 NOTICE.md)由 陈森于(Chen Senyu) 创作, 遵循 LICENSE.LAB.md:禁止盗卖,禁止商业用途,分发须保留完整署名,商业使用需事先取得作者书面授权。

作者:https://github.com/chendashi666