YDSantos12/DRAKE

GitHub: YDSantos12/DRAKE

DRAKE 是一款基于 PowerShell 7 的本地 AD 事件响应工具,用于跨域服务器批量追踪并终止用户活跃会话,弥补本地 AD 缺乏即时会话撤销机制的缺陷。

Stars: 1 | Forks: 0

# DRAKE 用于本地 AD 事件响应的会话追踪与抑制。 ## 问题所在 Entra ID 在用户配置文件中提供了“撤销会话”选项。只需点击一下—— token 即刻失效,并强制重新认证。而本地 Active Directory 没有类似的功能。为了在那里终止会话,必须知道用户在哪台服务器上,并直接在该服务器上进行操作。在发生活跃安全事件时,面对包含数百台服务器的环境,手动完成这项工作是不可行的。 人们总是会提出这样的论点:*“只需重置密码即可。”* 这是必要的,但这并不能关闭漏洞窗口。 Kerberos TGT 的默认生命周期为 10 小时。重置密码并不会使已颁发的票据失效——只要 TGT 还在有效期内,攻击者就可以继续使用它来获取服务票据并访问资源。更改密码后,已打开的 RDP 会话并不会被终止;攻击者依然保持连接。在密码重置之前建立的 SMB 和网络会话(登录类型 3)仍然有效。NTLM 会话也不会被重新验证。Entra ID 通过立即撤销刷新令牌解决了这个问题——而本地环境并没有这种机制。 真正的抑制措施是重置密码加上终止活跃会话。如果没有第二步,即使密码已被更改,攻击者仍然有一个操作窗口——默认长达 10 小时。DRAKE 负责处理的就是第二步。 ## 工作原理 扫描分为三个阶段进行。首先,对端口 135 进行 TCP 预检查,在进行任何尝试之前过滤掉无法访问的主机——把时间浪费在无响应的主机上是没有意义的。接着,作为主要的追踪方法,在所有可达主机上并行运行 `quser /server`。通过基于 DCOM 的 CimSession 执行的 WMI 在并行的 ThreadJobs 中运行(每个主机设有超时),用于捕获 `quser` 无法检测到的会话。这两组结果将被合并,并根据 `server|user|sessionid|logonid` 键进行去重。 终止顺序:首先使用 `rwinsta`,接着使用 `logoff`,最后将 `Win32_Process.Terminate` 作为可选的兜底方案。该兜底方案默认处于停用状态——因为它非常激进,可能会中断不属于该会话的进程。终止后的确认环节采用带有指数退避机制的重试,以验证会话是否确实已被切断。 ## 特权组 选项 `[8]` 用于审计当前特权组的成员身份——包括直接成员和嵌套成员。涵盖的内置组包括:Domain Admins、Enterprise Admins、Schema Admins、Administrators、Backup Operators、Account Operators、Server Operators、Group Policy Creator Owners 和 Protected Users。可以根据环境在 `$PRIV_GROUPS_CUSTOM` 中配置额外的组。 选项 `[9]` 执行相同的操作,并利用安全事件日志包含添加的日期。系统将从所有 DC 收集事件 4728、4732 和 4756。在配置的时间窗口(默认为 24 小时)内添加的成员将被标记出来。这取决于 DC 的日志保留策略——显示为 N/A 并不意味着添加操作没有发生,仅仅说明在查询的时间段内未找到该事件。 ## 要求 - PowerShell 7.0+ - RSAT:Active Directory PowerShell 模块 - 在目标服务器上拥有执行远程 `quser` 和 WMI 的适当权限 - 拥有对 DC 安全事件日志的读取权限(仅适用于选项 `[9]`) ## 安装 ``` git clone https://github.com/YDSantos12/DRAKE.git cd DRAKE Copy-Item Config.example.ps1 src\Config.ps1 pwsh -File Drake.ps1 ``` 在执行之前编辑 `src/Config.ps1`: - `$AD_PRIMARY_SERVER` — DC 的 FQDN - `$AD_GROUP_SERVIDORES` — 包含待扫描服务器的 AD 组 - `$PRIV_GROUPS_CUSTOM` — 特定环境的特权组(可选) `src/Config.ps1` 已被包含在 `.gitignore` 中。 ## 用法 ``` [1] set incident context (ID, analyst, reason) [2] load servers from AD groups [3] load servers from .txt file [4] reload AD list [5] hunt sessions — list only [6] hunt + kill [7] IR mode — hunt, kill, report [8] privileged groups — current membership [9] privileged groups — current membership + addition history (requires DC Event Log access) [R] view session report [H] generate HTML report [D] toggle dry-run [F] toggle aggressive WMI fallback (Win32_Process.Terminate) [S] save and exit ``` `[D]` dry-run 模式会执行完整的追踪并模拟终止操作而不实际执行——这非常适合在进行真正的抑制之前评估影响范围。 ## 输出 ``` Logs/drake_YYYYMMDD_HHmmss.log — plain text session log Reports/drake_YYYYMMDD_HHmmss.json — structured data (actions, results, context) Reports/drake_YYYYMMDD_HHmmss.html — executive summary + action table, opens automatically ``` 如果在此会话中执行了特权组审计,HTML 报告中将包含该部分内容。 ## 警告 仅在获得明确授权可以终止会话的环境中使用。在执行期间,远程终止会话是不可逆的。 ## 许可证 MIT
标签:IPv6, Libemu, Modbus, PB级数据处理, PowerShell, 安全运维, 库, 应急响应, 活动目录