kev365/ual-timeliner

GitHub: kev365/ual-timeliner

基于 Polars 构建的 Windows UAL 数据库解析工具,用于离线取证并重建服务器用户与主机活动的详细时间线。

Stars: 0 | Forks: 0

# ual-timeliner **ual-timeliner** (User Access Logging Timeliner) 是一个用于解析 Windows User Access Logging (UAL) 数据库的取证工具。它从 Windows Server 2012+ 服务器中提取历史访问数据,以便从离线检查收集和取证镜像中重建用户和主机活动时间线。 最初衍生自 BriMor Labs 的 [KStrike](https://github.com/brimorlabs/KStrike)。 ## 功能 - **多表提取**: 从 UAL ESE 数据库中解析 `CLIENTS`、`DNS` 和 `ROLE_ACCESS` 表。 - **脏数据库恢复**: 自动修补处于 Dirty Shutdown 状态的 ESE 数据库以进行离线解析。 - **时间戳关联**: 将 `InsertDate`、`LastAccess`、`FirstSeen`、`LastSeen` 和历史 `Day###` 列合并为统一的按时间顺序排列的视图。 - **高性能**: 基于 [Polars](https://pola.rs/) 构建,用于快速处理大型 UAL 数据集。 - **标准化输出**: 导出到 CSV、Excel (XLSX)、SQLite、Parquet 或 K2T (Timesketch JSONL)。 - **去重**: 智能处理 `Current.mdb` 和历史 GUID 数据库之间的重叠数据。 - **角色 GUID 解析**: 将已知的 Windows Server 角色 GUID 映射为人类可读的名称。 ## 安装 需要 Python 3.9 或更高版本。 ``` # 克隆仓库并安装 pip install -e . # 'ual-timeliner' 命令现已可用 ual-timeliner --help ``` ### 依赖项 - `polars` — 高性能 DataFrame 库 - `libesedb-python` — 用于读取 ESE (.mdb) 数据库 - `openpyxl` — 用于 Excel 输出 ## 用法 ``` # 基本用法 — 将 CSV 输出到 stdout ual-timeliner path/to/UAL_data/ # 导出到 Excel ual-timeliner path/to/UAL_data/ -f xlsx -o timeline.xlsx # 递归搜索并输出完整取证数据(所有列 + Day### 条目) ual-timeliner path/to/UAL_data/ -r --full-output -f parquet -o timeline.parquet # 将大输出拆分为多个文件(仅限 CSV 和 K2T) ual-timeliner path/to/UAL_data/ -f csv -o timeline.csv --split-rows 100000 # 单文件输入 ual-timeliner path/to/Current.mdb -o timeline.csv ``` ### 示例输出 (默认) ``` timestamp (UTC) | timestamp_desc | source_table | authenticated_user | ip_address | host_name | user | total_accesses | role_name | source_file 2021-06-05T18:47:19.633980 | FirstSeen | ROLE_ACCESS | | | | | | Print and Document Services | Current.mdb 2021-06-12T23:47:14.167754 | FirstSeen | ROLE_ACCESS | | | | | | Active Directory Domain Services | Current.mdb 2021-06-12T23:47:21.232323 | InsertDate | CLIENTS | lab\dc-1$ | ::1 | dc-1 | | 310 | Active Directory Domain Services | Current.mdb 2021-06-12T23:48:45.468902 | InsertDate | CLIENTS | lab\dc-1$ | fe80::e15c:... | dc-1 | | 101 | Active Directory Domain Services | Current.mdb 2021-06-12T23:49:44.255548 | InsertDate | CLIENTS | lab\dc-1$ | 10.0.0.10 | dc-1 | | 1 | File Server | Current.mdb 2021-06-13T14:26:58.359685 | InsertDate | CLIENTS | lab\administrator | 10.0.0.10 | | administrator | 1 | File Server | Current.mdb 2021-06-23T11:47:37.042000 | LastSeen | DNS | | 10.0.0.123 | Laptop-Bob| | | | Current.mdb ``` ### 示例输出 (`--full-output`) 完整输出增加了 `access_count`、`role_guid`、`tenant_id` 和 `client_name` 列,并包含 Day### 历史访问事件: ``` timestamp (UTC) | timestamp_desc | source_table | authenticated_user | ip_address | host_name | user | access_count | role_name | role_guid | tenant_id 2021-06-12T00:00:00.000000 | Day163 | CLIENTS | lab\administrator | fe80::... | | administrator | 1 | File Server | {10A9226F-50EE-49D8-A393-9A501D47CE04} | {00000000-...} 2021-06-12T00:00:00.000000 | Day163 | CLIENTS | lab\dc-2$ | 10.0.0.20 | dc-2 | | 4 | File Server | {10A9226F-50EE-49D8-A393-9A501D47CE04} | {00000000-...} ``` ### 输出格式 | 格式 | 标志 | 描述 | | :--- | :--- | :--- | | CSV | `-f csv` | 逗号分隔值 (默认)。如果未指定 `-o`,则打印到 stdout。 | | Excel | `-f xlsx` | 带自动筛选和 900K 行工作表拆分的流式 XLSX。 | | SQLite | `-f sqlite` | 包含 `timeline` 表的 SQLite 数据库。 | | Parquet | `-f parquet` | 用于大规模分析的压缩列式存储。 | | K2T | `-f k2t` | 与 Timesketch 兼容的 JSONL,包含 `message`、`datetime` 和 `timestamp_desc` 字段。 | ### Timesketch 集成 当使用 `-f k2t` 时,提供专用的 OpenSearch 映射文件,位置为: `resources/ual-timeliner-opensearch-mapping.json` 这确保了像 `ip_address` (类型: `ip`) 和 `datetime` (类型: `date`) 这样的字段在 OpenSearch 中正确输入类型,以便 Timesketch 摄取。 ## UAL 背景 User Access Logging (UAL) 是 Windows Server 内置功能,用于记录客户端对服务器角色的访问。UAL 数据库作为 ESE (Extensible Storage Engine) 文件存储在 `%SystemRoot%\System32\LogFiles\SUM\`: | 文件 | 用途 | | :--- | :--- | | `Current.mdb` | 当前正在写入的活动数据库 | | `{GUID}.mdb` | 每日 (每 24 小时) 轮换的年度快照 | | `SystemIdentity.mdb` | 服务器身份信息 (本工具跳过) | 数据保留期最长可达 3 年,涵盖的角色包括文件服务器、AD DS、DHCP、DNS、IIS、RDS、WSUS 等。第三方软件也可以注册到 UAL。 欲了解更多信息: - [KStrike 关于 UAL 取证的文章](https://dfir-kev.medium.com/kstrike-2aff53eaecce) - [Microsoft: User Access Logging 入门](https://learn.microsoft.com/windows-server/administration/user-access-logging/get-started-with-user-access-logging) ### 示例数据 [原始 KStrike 示例 UAL 数据库](https://github.com/brimorlabs/KStrike/tree/master/Sample_UAL) ## 许可证 MIT 许可证。请参阅 [LICENSE](LICENSE)。 本项目衍生自 Brian Moran (BriMor Labs) 的 [KStrike](https://github.com/brimorlabs/KStrike)。原始 KStrike 许可证保留在 [LICENSE-KSTRIKE](LICENSE-KSTRIKE) 中。
标签:Dirty Shutdown, ESE数据库, HTTPS请求, LibESEDB, Polars, UAL, User Access Logging, Windows Server, Windows取证, 主机取证, 开源安全工具, 数字取证, 数据库解析, 数据恢复, 活动重构, 用户活动审计, 电子取证, 离线取证, 自动化脚本, 逆向工具, 逆向工程平台