扫描一批 Windows 和 Linux 主机以寻找入侵迹象,判断哪些真正重要, 并采取行动——从一个控制台完成,每台主机只需一条命令。
狩猎不是扫描。Douglas 会收集分析师本应手动收集的痕迹—— 进程、服务、计划任务、自启动项、连接、账户、 驱动、事件日志、cron、systemd、shell 历史、Web 根目录——并在其上运行 201 条内置检测规则,外加你自己的 Sigma、YARA 和自定义规则。
然后它完成大多数工具留给你的部分:它会告诉你哪些发现仍 需要决策、六十个外部地址中应先看哪一个, 并让你对其采取行动,而无需打开 RDP 会话。
部署一条命令 ──▶ 狩猎 ──▶ 发现实时出现
│
┌──────────────────────┼──────────────────────┐
▼ ▼ ▼
IOC 源匹配 信誉评分 响应操作
"这是已知 C2" "92/100,340 条报告" 隔离 · 终止 · 收集
最需要狩猎的环境往往正是那些没有 EDR 的:几十台 服务器、没有代理预算,以及三天前开始的 事件。选择通常介于无人批准过的商业平台 和某人手动运行的 PowerShell 脚本文件夹之间。
Douglas 介于两者之间。你正在调查的主机上不安装任何东西—— 收集器运行一次即退出——所有结果都汇入 一个控制台,你可以交给接下来接手事件的人。
产生发现很容易,阅读它们却很昂贵。这个界面存在的目的就是让 队列足够短,以至于在第三轮时仍有人在阅读。
三种结果,它们之间的区别在六个月后至关重要:
| 决策 | 作用 |
|---|---|
| 已确认 | 真实。保留在风险评分中,主机保持红色。 |
| 误报 | 仅针对该主机从评分中移除。 |
| 抑制 | 一条常设规则,在未来每次扫描中隐藏相同的发现。 |
任何内容都不会被删除。撤销抑制,它隐藏的一切都会 回来。最嘈杂的规则位于底部,因为调整它们比逐条处理 更快地清理队列。
全部 201 条检测规则分为 15 个类别——可逐条切换,或 一次切换整个类别。点击任意规则即可阅读它检查什么、如何 合法触发,以及下一步该做什么。
该界面明确指出的区别,因为弄错很常见:
关闭规则与抑制规则不同。 关闭意味着 收集器从不运行该检查——不产生任何内容,也就没有东西可 审查。抑制会记录该发现,并将其标记为某人做出的 决策,附带原因。
对于你已接受的某类噪声,使用关闭。对于 特定主机上的特定模式,使用抑制。
已触发下的短横线通常是健康的答案:DGL-014 仅在 日志看起来被清除时触发。该列表是工具检查的内容,而非出了什么 问题。
表单对于你的第一条规则更快,对于第二十条则更慢。因此规则 也可以写成文本——在你输入时进行校验,对照 11 个痕迹 表和 13 个运算符。
下方的框承担两项工作。当规则有误时,它会指出行号, 而非规则:
line 7: Condition 1: 'is_maybe' is not an operator.
当规则正确时,它会说明该规则实际会匹配什么——因为一条 通过校验、却匹配到与其作者本意不同的内容的规则,正是 值得捕获的失败:
有效——ACME-001 读取 Services,当 Signed 为 false 且 PathName 不 包含 'Program Files' 且 PathName 不包含 'System32' 时匹配
支持以 JSON、YAML 或 CSV 导入导出。往返转换有保证——我们自己的 导出在全部三种格式下都能通过我们自己的校验器。
| 问题 | 时机 | 结果 | |
|---|---|---|---|
| IOC 源 | 我的主机上是否有来自此 C2 列表的任何内容? | 狩猎期间 | DGL-IOC——确认匹配,而非评分 |
| 富化 |
十五个源开箱即用——Feodo、ThreatFox、URLhaus、TweetFeed、 USOM、SSL Blacklist、Emerging Threats、OpenPhish、MISP——外加一个自定义源, 可读取任何返回指标形状数据的 URL。
四个信誉提供商:AbuseIPDB、VirusTotal、ThreatFox(免费套餐)以及 GreyNoise(付费,默认关闭)。判定结果从不混合成一个 数字——AbuseIPDB 统计投诉,VirusTotal 统计引擎,ThreatFox 了解 基础设施,而它们的平均值是它们中任何一个都不会为之辩护的 数字。徽章显示最差的判定及其来源提供商。
免费套餐受到保护:结果缓存 12 小时,每次运行 40 个地址,以及一个 在提供商之前停止的每日计数器。私有地址从不 发送。
十一个操作分为三组——查看、操作、遏制。五个 只读操作与六个会改变主机的操作标记不同,并且 每个变更操作都需要书面理由。
隔离有意保持控制台可达:一台与自己的
代理断开的主机无法被远程释放,必须有人走过去
处理。会破坏机器而非遏制入侵的目标——
lsass.exe、systemd、pid 1、Administrator、/bin/bash——会被拒绝,而非
警告,因为用到这个的时刻,正是没人在读
警告的时刻。
输出以结构化卡片而非终端转储的形式返回,且行是 可操作的:进程列表每行有一个终止按钮,地址有 信誉。
| Windows | Linux | |
|---|---|---|
| Sigma | 事件日志 + Sysmon | auditd execve + auth/cron/syslog |
| YARA | 文件内容 | 文件内容 |
日志源无法读取的 Linux Sigma 规则会在上传时被拒绝并附 原因,而非加载后永不触发——一条无法运行的规则产生的空结果, 看起来与一台干净的主机一模一样。
Linux 代理会检查 auditd 是否已安装、正在运行、且已加载规则,
然后说明缺少什么及其代价:
Detection capabilities on this host
auditd : NOT RUNNING
Nothing records what executes on this host, so execution
rules cannot fire and a clean result only means the sweep
could not look. Install it:
apt install auditd && systemctl enable --now auditd
十一个目的地分为三组:
聊天和寻呼目的地渲染的是一句话而非一条记录,并限制 单条消息中包含多少发现:一个被粘贴进上百行的 频道,就是人们会静音的频道。
git clone https://github.com/YOURNAME/douglas-042.git
cd douglas-042
pip install -r requirements.txt
uvicorn app.main:app --host 0.0.0.0 --port 8000
或使用 Docker:
docker compose up -d
默认登录
用户名:
admin密码:douglas控制台在首次登录时强制更改密码——打包进软件包的默认值 绝不能悄无声息地存续。如果你更愿意自己选择密码,请在首次启动前 在
.env中设置DOUGLAS_CONSOLE_PASSWORD。
.env仅在数据库为空时被读取。首次启动后,使用python3 -m app.manage passwd admin重置。
启动时你会获得下一步所需的注册令牌:
Created the initial admin account: admin
The default password is still in use. Change it at first sign-in.
Enrollment token ready: dgl-enroll-xBAk8...
Douglas-042 console 1.0 ready
部署 → 选择平台 → 复制一条命令。
Windows——提升权限的 PowerShell:
iex (irm 'http://console:8000/api/v1/reports/deploy/script?token=YOUR_TOKEN')
Linux——以 root 身份:
curl -sSL 'http://console:8000/api/v1/reports/deploy/script?token=YOUR_TOKEN&platform=linux' | sudo bash
六个步骤在终端中流式输出:下载、注册、获取收集器、安装 服务、确认其存活、首次签到。如果注册失败,不会安装 任何东西,并且它会说明这一点。
┌──────────────────────────────────────────────────────────┐
│ 控制台——FastAPI + SQLite,单进程,无队列 │
│ 分诊 · 发现 · 图 · 规则 · 响应 · 报告 │
└───────────────▲──────────────────────────────────────────┘
│ 代理轮询:心跳 20 秒,操作 5 秒
┌───────────────┴──────────────────────────────────────────┐
│ 代理(PowerShell / shell) │
│ └── 收集器——运行、报告、退出 │
│ 201 条内置规则 + Sigma + YARA + 你的规则 │
└──────────────────────────────────────────────────────────┘
仪表盘 · 案例 · 主机群 · 狩猎 · 响应 · 发现 · 分诊 · 频率 · 图 · MITRE 矩阵 · 时间线 · 差异 · 内置规则 · 我的规则 · Sigma · YARA · IOC 源 · 威胁情报 · 集成 · 计划 · 用户 · 部署 · 日志与事件
收集完整性 · 自启动与启动项 · 进程与网络 · 服务 与任务 · 持久化机制 · 安全态势 · 驱动与内核 · 执行证据 · 身份验证与账户 · 远程访问 · Sysmon、 Kerberos 与 AD · 文件、webshell 与数据外泄 · 用户活动与信任 · Rootkit 与内存 · 指标匹配
两者: 本地账户与组 · 带签名和 哈希的运行中进程 · TCP 连接与外部端点 · 服务 · 最近写入的 文件 · 内存中的代码 · Web 根目录与 webshell 模式
Windows: 事件日志 · 计划任务 · 自启动项 · 注册表持久化 · WMI 订阅 · 驱动 · SMB 共享 · Prefetch · 证书存储
Linux: cron · systemd 单元 · shell 启动文件 · LD_PRELOAD · setuid 二进制文件 · authorized_keys 与 sshd 配置 · shell 历史 · 认证日志 · 内核污染 · WordPress
控制台: Python 3.11+,六个依赖项(FastAPI、uvicorn、SQLAlchemy、 pydantic、python-multipart、PyYAML)。可在 1 GB 虚拟机上运行。
Windows 主机: PowerShell 5.1+,管理员权限。无需其他。
Linux 主机: bash 和 curl。python3 启用实时进度和
文件内容规则;auditd 启用执行检测。控制台会告诉你
哪台主机缺少哪些。
0600——打包进软件包的固定
密钥会被所有下载它的人共享。📄 技术报告(PDF)——14 页, 涵盖架构、每个控制台界面、全部 37 个收集器模块、 检测模型、响应操作和安全模型。
根据 MIT 许可证授权。参见 LICENSE。
| 此主机与 60 个地址通信过——先看哪个? |
| 狩猎之后 |
| 92/100,340 条报告,已知 Cobalt Strike C2 |
| # | 界面 | 执行此操作 | 你将获得 |
|---|
| 1 | IOC 源 | 添加 Feodo Tracker,按刷新 | C2 检测——无需编写规则 |
| 2 | 威胁情报 | 粘贴免费的 AbuseIPDB 密钥,按测试 | 图上的分诊顺序 |
| 3 | 主机群 | 选择一台主机,启动狩猎 | 发现,实时 |
| 4 | 日志与事件 | 查找模块错误 | 扫描是否真的能查看 |
| 5 | 分诊 | 处理队列,调整最嘈杂的规则 | 一份仍有人阅读的列表 |
| 6 | 我的规则 | 加载 6 个示例,打开一个 | 如何编写你自己的规则 |
| 7 | 集成 | Slack webhook,下限设为 HIGH | 无需盯着也能得知 |