zakria03/rdp-cache-workbench

GitHub: zakria03/rdp-cache-workbench

一个用于防御性取证审查的 PowerShell 工具集,自动化搜索、提取并重建 Windows RDP 位图缓存文件以辅助数字调查。

Stars: 0 | Forks: 0

# RDP 缓存审查工作台 用于防御性审查 Windows 远程桌面位图缓存文件的 PowerShell 工具。 此存储库可以直接作为脚本使用,或打包为 `RdpCacheWorkbench` PowerShell 模块。 该项目自动化了实用的 RDP 位图缓存审查工作流程: 1. 在整台 PC 或用户指定的文件夹中搜索 Windows RDP 位图缓存文件。 2. 将缓存文件复制到工作案件文件夹中并生成 SHA-256 清单。 3. 使用固定的本地工具缓存来存放锁定的 ANSSI `bmc-tools` 和 BriMor Labs `rdpieces`。 4. 使用 `bmc-tools` 从 `.bin` / `.bmc` 缓存文件中提取位图图块。 5. 在用户确认后安装/检查 `rdpieces` 所需的依赖项。 6. 运行 `rdpieces` 以尝试自动重建并打开输出文件夹。 ## 它搜索的内容 该脚本搜索符合典型 Windows RDP 位图缓存名称的文件: - `Cache0000.bin`, `Cache0001.bin`, `Cache????.bin` - `bcache*.bmc` 默认的整台 PC 搜索模式会搜索固定的本地驱动器,并将结果缩小至包含以下内容的路径: ``` \Microsoft\Terminal Server Client\Cache\ ``` 当你提供 `-SearchRoot` 参数时,脚本会在该文件夹中更广泛地搜索类似缓存的文件名。这允许你将其指向已复制的取证文件夹。 ## 外部工具和依赖来源 脚本在下载或安装任何内容之前都会询问。来源会显示在提示中。 锁定的 `bmc-tools` 和 `rdpieces` 存储在固定的本地缓存中,以便在首次成功进行在线设置后,后续运行可以离线工作。 默认工具缓存: ``` %LOCALAPPDATA%\RdpCacheWorkbench\tools ``` 使用以下命令覆盖它: ``` .\Invoke-RdpCacheReview.ps1 -ToolCacheRoot D:\RdpCacheWorkbench\tools ``` | 组件 | 用途 | 来源 | |---|---|---| | Python | 运行 `bmc-tools` | | | Pillow | bmc-tools 拼图输出可选/必需的组件 | | | Strawberry Perl | 在 Windows 上运行 `rdpieces.pl` | | | ImageMagick | 被 `rdpieces` 用于图像操作 | | | ANSSI bmc-tools | 提取 RDP 缓存位图图块 | | | BriMor Labs RDPieces | 尝试自动重建 | | | Perl 模块 | `IO::All`, `DBI`, `DBD::SQLite` | | ## 快速开始 打开 PowerShell。对于整台 PC 搜索,请以管理员身份运行以获得更好的覆盖率: ``` Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass .\Invoke-RdpCacheReview.ps1 ``` 或者从本地克隆导入模块: ``` Import-Module .\RdpCacheWorkbench\RdpCacheWorkbench.psd1 Invoke-RdpCacheReview ``` 或者从最新的 GitHub 发布版本下载源代码归档,解压并从解压后的文件夹导入模块: ``` Import-Module .\RdpCacheWorkbench\RdpCacheWorkbench.psd1 Invoke-RdpCacheReview ``` 在该模块发布到 PowerShell Gallery 后,使用以下命令安装: ``` Install-Module RdpCacheWorkbench -Scope CurrentUser Invoke-RdpCacheReview ``` 搜索特定文件夹: ``` .\Invoke-RdpCacheReview.ps1 -SearchRoot "$env:LOCALAPPDATA\Microsoft\Terminal Server Client\Cache" ``` 使用自定义工作文件夹: ``` .\Invoke-RdpCacheReview.ps1 -SearchRoot C:\Users -WorkingRoot D:\Cases\RDP-Case-001 ``` 使用自定义固定工具缓存: ``` .\Invoke-RdpCacheReview.ps1 -SearchRoot C:\Users\ZM -ToolCacheRoot D:\RdpCacheWorkbench\tools ``` 在首次成功进行在线运行后,脚本会重用 `bmc-tools` 和 `rdpieces` 的锁定缓存副本。如果已安装 Python、Pillow、Strawberry Perl、ImageMagick 和所需的 Perl 模块,后续运行不需要互联网连接。 无需交互式选择即可处理所有发现的缓存位置: ``` .\Invoke-RdpCacheReview.ps1 -SearchRoot C:\Users -WorkingRoot D:\Cases\RDP-Case-001 -ProcessAllSources ``` 在不打开资源管理器窗口的情况下以非交互模式运行: ``` .\Invoke-RdpCacheReview.ps1 -SearchRoot C:\Users\ZM -WorkingRoot D:\Cases\RDP-Case-001 -ProcessAllSources -NonInteractive -NoOpenFolders ``` 通过模块命令也可以使用相同的参数: ``` Invoke-RdpCacheReview -SearchRoot C:\Users\ZM -WorkingRoot D:\Cases\RDP-Case-001 -ProcessAllSources -NonInteractive -NoOpenFolders ``` ## 参数 | 参数 | 描述 | |---|---| | `-SearchRoot` | 要搜索的文件夹。如果省略,则搜索固定的本地驱动器。 | | `-WorkingRoot` | 案件输出文件夹。如果省略,则会创建一个带时间戳的桌面文件夹。 | | `-ToolCacheRoot` | 用于存放锁定的第三方工具的固定文件夹。默认为 `%LOCALAPPDATA%\RdpCacheWorkbench\tools`。 | | `-ProcessAllSources` | 处理所有发现的源缓存目录。 | | `-NonInteractive` | 避免提示。专为预先准备好的环境设计。 | | `-InstallDependencies` | 与 `-NonInteractive` 一起使用时,允许安装依赖项。交互式运行在每次安装前仍会询问。 | | `-NoOpenFolders` | 不要在资源管理器中打开提取/重建的输出文件夹。 | ## 输出结构 ``` rdp-cache-review-YYYYMMDD-HHMMSS/ cache/ Copied cache files grouped by source directory extracted/ BMP tiles extracted by bmc-tools rebuilt/ RDPieces reconstruction output logs/ cache-manifest.csv third-party-run-manifest.json run-summary.json %LOCALAPPDATA%\RdpCacheWorkbench\tools\ bmc-tools/ Pinned cached copy, reused across runs rdpieces/ Pinned cached copy, reused across runs ``` ## 解释局限性 RDP 位图缓存数据不是干净的屏幕录制。输出通常是碎片化的。重建的图像应被视为启发式产物,并需要与其他证据进行交叉验证。 常见局限性: - 图块可能来自多个会话。 - 单个图块通常不带有可靠的时间戳。 - 自动重建可能会产生错误匹配。 - 缺失图块是正常现象。 - 敏感数据可能出现在碎片中。 ## 故障排除 ### RDPieces 提示输出文件夹已存在 `rdpieces` 需要自行创建输出目录。请删除目标输出文件夹或选择一个新名称。 ### 安装后找不到 `perl`、`magick`、`py` 或 `python` 打开一个新的 PowerShell 窗口并重新运行脚本。某些安装程序仅为新的 shell 更新 PATH。 ### 找不到文件 提供特定的文件夹: ``` .\Invoke-RdpCacheReview.ps1 -SearchRoot "$env:LOCALAPPDATA\Microsoft\Terminal Server Client\Cache" ``` 或检查所有配置文件: ``` .\Invoke-RdpCacheReview.ps1 -SearchRoot C:\Users ``` ## PowerShell 模块打包 `RdpCacheWorkbench/` 文件夹的结构专为 PowerShell Gallery 打包设计: ``` RdpCacheWorkbench/ RdpCacheWorkbench.psd1 RdpCacheWorkbench.psm1 ``` 验证模块清单: ``` Test-ModuleManifest .\RdpCacheWorkbench\RdpCacheWorkbench.psd1 ``` 运行完整的本地项目检查: ``` powershell -NoProfile -ExecutionPolicy Bypass -File .\scripts\Test-Project.ps1 ``` 验证模块包暂存文件夹: ``` powershell -NoProfile -ExecutionPolicy Bypass -File .\scripts\Test-Package.ps1 ``` `scripts/Sync-ModuleFromScript.ps1` 是维护人员的辅助工具,不是运行时工具,也不是 PowerShell Gallery 模块包的一部分。如果 `Invoke-RdpCacheReview.ps1` 发生更改,请在验证之前重新生成模块包装器: ``` powershell -NoProfile -ExecutionPolicy Bypass -File .\scripts\Sync-ModuleFromScript.ps1 ``` 在审查包并设置 API key 后发布到 PowerShell Gallery: ``` Publish-Module -Path .\RdpCacheWorkbench -NuGetApiKey $env:PSGALLERY_API_KEY ``` 除非项目发展为多个具有独立版本控制的工具,否则请将模块保留在此存储库中。GitHub Releases 和 PowerShell Gallery 都可以指向同一个源存储库。 ## 代码签名 拥有 Authenticode 代码签名证书的发布维护者可以在发布前对 PowerShell 文件进行签名: ``` powershell -NoProfile -ExecutionPolicy Bypass -File .\scripts\Sign-ReleaseFiles.ps1 -CertificateThumbprint "" ``` 在签名前运行 `scripts\Sync-ModuleFromScript.ps1`。在签名后重新生成模块包装器会移除 `RdpCacheWorkbench.psm1` 上的签名。 ## 更新日志 请查看 `CHANGELOG.md` 了解发布历史。 ## GitHub Pages 着陆页 `docs/` 文件夹包含一个静态着陆页。要使用 GitHub Pages 发布它: 1. 将此存储库推送到 GitHub。 2. 转到 **Settings → Pages**。 3. 将 **Source** 设置为 `Deploy from a branch`。 4. 选择分支 `main` 和文件夹 `/docs`。 5. 保存。 ## 离线和重复运行行为 该脚本旨在避免不必要的重新安装/下载循环: - 在安装前会检查 Python、Pillow、Perl、ImageMagick 和 Perl 模块。 - 仅当固定的工具缓存丢失或未锁定到配置的固定 commit 时,才会下载 `bmc-tools` 和 `rdpieces`。 - 仅当 `.rdp-cache-workbench-tool-lock.json` 与配置的 commit 和 ZIP URL 匹配时,才会接受现有的工具文件夹。 - 如果你在首次成功设置之前离线运行,脚本将无法下载缺失的工具或依赖项。 ## 安全说明 仅在固定的本地工具缓存丢失或过时,此脚本才会从 GitHub 下载锁定的公开工具。对于受控环境,请从经过审查的内部来源预先填充 `-ToolCacheRoot`,或者从你自己的 fork 发布经过审查的发布资产并设置 `ExpectedArchiveSha256`。 ## 许可证 该项目基于 BSD 3-Clause 许可证授权。重新分发必须保留版权声明和注明 Zakria Mahmood 的许可证文本。 ## 供应链安全态势 此版本将两个取证辅助工具锁定到明确的 Git commit,而不是下载不断变动的分支头: | 工具 | 版本 | Commit | |---|---:|---| | ANSSI bmc-tools | 3.05 | `5a4cad32be78b3b874aeec910cb478e04ba3501e` | | BriMor Labs RDPieces | 1.1 build 20201118 | `2a74aeb4b8f42fac1af1f6c9d721fcb299224021` | 锁定文件是 `third_party.lock.json`。脚本在执行期间还会写入 `logs/third-party-run-manifest.json`,其中包括固定的工具缓存路径。下载的工具目录会收到自己的 `.rdp-cache-workbench-tool-lock.json`;如果现有的工具文件夹未锁定到配置的 commit,脚本在替换它之前会进行询问。 RDPieces 通过 Perl 反引号执行来使用 ImageMagick。该包装器通过在临时的 `subst` 驱动器下暂存 BMP 输入,并向 RDPieces 传递诸如 `R:\source` 和 `R:\output` 之类的简单路径,来缓解路径注入和路径解析风险。有关详细信息,请参阅 `SECURITY_REVIEW.md`。
标签:AI合规, IPv6, Libemu, PE 加载器, PowerShell, RDP缓存, 数字取证, 数字取证, 自动化脚本, 自动化脚本, 逆向工具