Anthropic-Cybersecurity-Skills 实战指南:Outlook PST 邮件取证的完整证据提取工作流
【免费下载链接】Anthropic-Cybersecurity-Skills817 structured cybersecurity skills for AI agents · Mapped to 6 frameworks: MITRE ATT&CK, NIST CSF 2.0, MITRE ATLAS, D3FEND, NIST AI RMF & MITRE F3 (Fight Fraud) · agentskills.io standard · Works with Claude Code, GitHub Copilot, Codex CLI, Cursor, Gemini CLI & 20+ platforms · 29 security domains · Apache 2.0项目地址: https://gitcode.com/GitHub_Trending/an/Anthropic-Cybersecurity-Skills
导读
本文围绕analyzing-outlook-pst-for-email-forensics技能中的Email Evidence Extraction(邮件证据提取)工作流,系统讲解从证据获取、哈希固定、pffexport 导出、邮件头路由解析、附件提取与哈希,到关键词搜索、通信时间线重建与证据链文档化的完整流程。结合本仓库中的 SKILL.md、api-reference.md、standards.md 与 scripts/agent.py 源码实现,读完本文你将掌握一套可直接复制的 PST/OST 取证操作手册,可用于邮件安全事件调查、电子发现(e-discovery)与应急响应中重构通信模式、追溯邮件路由。
工作流总览:Email Evidence Extraction
workflows.md定义了邮件取证的标准流程骨架,八个环节环环相扣,前一个环节的输出是后一个环节的输入:
Acquire PST/OST files from evidence | Hash original files (SHA-256) | Export with pffexport (items + recovered) | Parse email headers for routing | Extract and hash attachments | Search for keywords across messages | Build communication timeline | Document findings with chain of custody该技能在仓库中被映射到 MITRE ATT&CKT1114(Email Collection),见 mappings/mitre-attack/coverage-summary.md,同时在 NIST CSF 2.0 中对应 RS.AN-03(事件分析)与 DE.AE-02(异常与事件分析),在 MITRE AI RMF 中对应 MANAGE-2.4、MEASURE-3.1,说明这一流程既服务于攻击溯源取证,也服务于防御侧的分析验证。
第 1 步:从证据中获取 PST/OST 文件
PST/OST 是什么
Microsoft Outlook 的 PST(Personal Storage Table)与 OST(Offline Storage Table)文件是数字取证中的关键证据来源。PST 以基于 MAPI(Messaging Application Programming Interface)属性系统的专有二进制格式存储邮件、日历事件、联系人、任务与便笺。取证分析 PST 能够实现:
- 从Recoverable Items(可恢复项目)文件夹恢复已删除邮件;
- 提取邮件头以追溯消息路由;
- 分析附件中的恶意软件或外泄数据;
- 重建通信模式与时间线。
格式层面需注意:现代 PST 采用Unicode 格式,以 4KB 页面存储,最大可达 50GB;而旧版 ANSI 格式上限为 2GB。这直接影响后续导出工具的参数选择与存储规划。
常见取证路径
取证人员应优先从以下标准位置获取 PST/OST:
| 来源 | 路径 |
|---|---|
| Outlook 2016+ 默认 | %USERPROFILE%\Documents\Outlook Files\*.pst |
| Outlook 旧版 | %LOCALAPPDATA%\Microsoft\Outlook\*.pst |
| OST 缓存 | %LOCALAPPDATA%\Microsoft\Outlook\*.ost |
| 归档 | %USERPROFILE%\Documents\Outlook Files\archive.pst |
注意:OST 是 Exchange 账户的离线缓存,其内部结构与 PST 一致,可用同一套 libpff 工具链解析。
前置工具与环境
- libpff/pffexport:开源 PST 解析器(首选)
- Python 3.8+,安装
pypff或libratom库 - 商业工具(可选):MailXaminer、Forensic Email Collector、SysTools PST Forensics
- Microsoft Outlook(可选,用于原生访问)
- 充足的磁盘空间存放导出内容
第 2 步:对原始文件进行 SHA-256 哈希固定
证据固定是取证流程中不可跳过的第一步。在开始任何解析之前,必须对原始 PST/OST 文件计算 SHA-256 哈希,以证明后续分析所基于的数据与原始证据一致。仓库中的 scripts/agent.py 给出了可复用的分块哈希实现:
def compute_hash(filepath): sha256 = hashlib.sha256() with open(filepath, "rb") as f: for chunk in iter(lambda: f.read(65536), b""): sha256.update(chunk) return sha256.hexdigest()该实现采用 64KB 分块读取,避免一次性将大文件载入内存——对于动辄数 GB 的 PST 文件尤为重要。取证建议:
- 在证据获取现场、写入只读介质之后立即计算哈希;
- 同时记录文件大小、获取时间、获取人、介质序列号等元数据;
- 分析全程在**写保护(write-blocker)**的副本上进行,原始镜像只读;
- 将哈希值记入后续证据链文档,与最终报告中的结果相互印证。
第 3 步:使用 pffexport 导出邮件与已恢复项目
pffexport 核心命令
libpff 套件中的pffexport是命令行导出主力,其常用参数如下:
# 导出 PST 中的所有项目 pffexport -m all evidence.pst -t exported_pst # 仅导出邮件消息 pffexport -m items evidence.pst -t exported_emails # 导出已恢复/已删除项目(Recoverable Items) pffexport -m recovered evidence.pst -t recovered_items # 获取 PST 文件信息(结构、格式、统计) pffinfo evidence.pst-m参数控制导出的消息类型(all全部、items仅消息、recovered仅已恢复项目),-t指定导出目标目录。其中-m recovered是恢复已删除邮件的关键——Outlook 的 Recoverable Items(垃圾站)文件夹需要专门提取,常规导出不会覆盖。
配合pffinfo可以先验证文件是否损坏、确认是 Unicode 还是 ANSI 格式、查看各文件夹的统计信息,再决定导出策略。
pffexport 其他常用形态
api-reference.md 补充了更多 CLI 用法:
pffexport mailbox.pst # 导出全部到当前目录 pffexport -m all mailbox.pst # 导出所有消息类型 pffexport -t target_dir mailbox.pst # 导出到指定目录 pffexport -f text mailbox.pst # 以文本格式导出导出后的典型目录结构为按文件夹层级组织的消息与附件:
Export/ Inbox/ Message001/ Message.txt Attachment001.pdf Sent Items/ Deleted Items/备选工具:readpst(libpst)
除 libpff 外,readpst(libpst 套件)也是常用开源方案,适合并行与递归场景:
readpst -o output_dir mailbox.pst # 提取到指定目录 readpst -e mailbox.pst # 仅提取附件 readpst -r mailbox.pst # 递归提取 readpst -j 4 mailbox.pst # 4 线程并行 readpst -S mailbox.pst # 每条消息单独文件PST 文件内部结构
理解导出工具的工作对象有助于判断解析结果。PST 由三个逻辑层组成(见 api-reference.md):
| 层 | 名称 | 说明 |
|---|---|---|
| NDB 层 | Node Database | 原始数据存储,负责页面与节点管理 |
| LTP 层 | Lists/Tables/Properties | 消息属性、列表与表的组织层 |
| Messaging 层 | Folders, messages, attachments | 用户可见的文件夹、消息、附件结构 |
第 4 步:解析邮件头以追溯路由
邮件头是路由分析的核心证据。pffexport 导出后,每条消息的Message.txt中保留完整的 SMTP 传输头;在 Python 侧,pypff 通过message.transport_headers属性暴露原始头。仓库 SKILL.md 中的分析器使用标准库email.message_from_string解析头部字段:
parsed = email.message_from_string(headers) msg_data["from_header"] = parsed.get("From", "") msg_data["to_header"] = parsed.get("To", "") msg_data["date_header"] = parsed.get("Date", "") msg_data["message_id"] = parsed.get("Message-ID", "") msg_data["x_originating_ip"] = parsed.get("X-Originating-IP", "") msg_data["received_headers"] = parsed.get_all("Received", [])关键邮件头的取证价值
| 头 | 取证价值 |
|---|---|
| Received | 消息路由链(自下而上阅读) |
| X-Originating-IP | 发送者的真实 IP 地址 |
| Message-ID | 用于关联的唯一标识符 |
| Date | 发送时间戳 |
| Return-Path | 退信地址(可能与 From 不同) |
| DKIM-Signature | 域身份认证签名 |
| Authentication-Results | SPF、DKIM、DMARC 验证结果 |
| X-Mailer | 所使用的邮件客户端 |
实际案例中(见 SKILL.md 的 Example Output),一封钓鱼邮件it-support@c0rporate-help.com的X-Originating-IP指向203.0.113.55,SPF FAIL、DKIM NONE、DMARC FAIL,这些字段组合直接暴露了伪造发件人与真实来源,是判定初始入侵向量的关键证据。
第 5 步:提取并哈希附件
附件可能携带恶意载荷或外泄数据,是取证分析的另一重点。pypff 的附件 API 为:
for i in range(msg.number_of_attachments): att = msg.get_attachment(i) print(f"Name: {att.name}, Size: {att.size}") data = att.read_buffer(att.size)仓库 SKILL.md 中的save_attachments方法给出了带大小限制与文件名清洗的完整导出实现:
def save_attachments(self, max_size_mb: int = 100): """Export attachments to disk for analysis.""" att_dir = os.path.join(self.output_dir, "attachments") os.makedirs(att_dir, exist_ok=True) root = self.pst.get_root_folder() self._save_attachments_recursive(root, att_dir, max_size_mb)递归逻辑中对每个附件做了三层防护:att.size < max_size_mb * 1024 * 1024限制超大文件、safe_name清洗非法文件名字符、try/except跳过无法完整读取的损坏附件,保证海量邮件场景下导出过程不中断。
附件提取后应立即计算 SHA-256(复用第 2 步的compute_hash),并与 VirusTotal 等威胁情报平台比对。SKILL.md 的示例输出中,Password_Reset_Form.xlsm的哈希被用于后续关联,加密的archive_part1.7z等附件则成为数据外泄(exfiltration)的关键指标。
可疑附件启发式检测
仓库 scripts/agent.py 提供了自动化可疑附件检测的参考实现:对.exe .scr .bat .cmd .ps1 .vbs .js .hta .lnk .iso .img等高风险扩展名标记HIGH严重度,并对urgent、password expired、verify your account等紧急性措辞标记MEDIUM严重度的钓鱼指标——这套逻辑可以直接用于大规模邮件批量研判。
第 6 步:跨消息关键词搜索
关键词搜索是定位目标邮件的快速通道。在 pffexport 导出的文本文件上可执行 grep 类工具;在 Python 分析器中则对subject与body字段进行匹配。SKILL.md 的示例报告展示了关键词命中统计的价值:
--- Keyword Hits --- "confidential": 45 emails "password": 23 emails "transfer": 12 emails "resign": 3 emails "delete evidence": 1 email (Email #9200, 2024-01-17 22:30:00 UTC)搜索建议:
- 结合案件背景设定词典(如
confidential、password、transfer、客户名单、离职相关词汇); - 对命中结果按文件夹、时间、收发双方聚合,形成可疑邮件候选集;
- 注意区分大小写与编码问题,Unicode PST 中的非 ASCII 内容需按原编码检索;
- 把关键词搜索与第 4 步的路由分析、第 5 步的附件哈希关联,互相印证。
第 7 步:构建通信时间线
将解析出的creation_time、delivery_time、modification_time等时间戳汇总排序,即可重建通信时间线。仓库分析器在extract_message中采集了三种时间属性:
"creation_time": str(message.creation_time) if message.creation_time else None, "delivery_time": str(message.delivery_time) if message.delivery_time else None, "modification_time": str(message.modification_time) if message.modification_time else None,时间线分析要点:
- 按时间排序所有消息事件(发送、接收、修改),标注发件人、收件人、主题、附件;
- 关注深夜/非工作时间的异常外发(示例报告中
2024-01-16 03:15 UTC的加密附件外发即是典型); - 将日历事件、联系人变更、Journal 日志条目一并纳入时间线(见 standards.md 的关键工件列表);
- 时间线同时服务于攻击路径还原与电子发现的时间范围界定。
第 8 步:记录发现并维护证据链
最后一步是产出可呈堂(admissible)的取证文档。仓库PSTForensicAnalyzer.generate_report将全部结果落盘为结构化 JSON:
report = { "analysis_timestamp": datetime.now().isoformat(), "pst_file": self.pst_path, "pst_size_bytes": os.path.getsize(self.pst_path), "statistics": dict(self.stats), "messages": self.messages[:500], "attachments": self.attachments[:200], }报告至少应包含:
- 分析时间戳、证据文件路径与大小;
- 统计信息(总消息数、总附件数、解析错误数);
- 邮件明细(文件夹、主题、发件人、时间、附件);
- 可疑发现(钓鱼邮件、外泄指标、关键词命中);
- 从获取哈希到最终报告的完整证据链(chain of custody)记录,包括每一步的操作者、时间、工具版本与哈希值。
agent.py的generate_report还额外输出sha256、unique_addresses、top_addresses与suspicious_findings,便于快速形成摘要并导出 JSON 供后续 SIEM 或威胁情报平台消费。
完整的可运行 Python 分析器
将上述环节落地的完整实现位于 SKILL.md 的PSTForensicAnalyzer类,其关键方法包括:
process_folder:递归遍历文件夹树,逐条提取消息并统计total_messages与parse_errors;extract_message:提取主题、发件人、三种时间戳、附件计数、正文本/HTML 正文大小,并解析传输头;save_attachments:带大小上限与文件名清洗的附件落盘;generate_report:输出 JSON 报告并打印统计摘要。
使用方式:
pip install libpff-python # 安装 pypff 绑定(见 api-reference.md) python process.py <pst_file> <output_dir>pypff 的核心 API 速查(来自 api-reference.md):
import pypff pst = pypff.file() pst.open("mailbox.pst") root = pst.get_root_folder() for i in range(root.number_of_sub_folders): folder = root.get_sub_folder(i) print(f"{folder.name}: {folder.number_of_sub_messages} messages") msg = folder.get_sub_message(0) print(msg.subject) print(msg.sender_name) print(msg.delivery_time) print(msg.transport_headers) print(msg.plain_text_body) print(msg.html_body)关键 MAPI 属性对照
解析器读取的字段对应 PST 底层的 MAPI 属性标签:
| 属性 | MAPI 标签 | 说明 |
|---|---|---|
| Subject | PR_SUBJECT (0x0037) | 邮件主题 |
| Sender | PR_SENDER_NAME (0x0C1A) | 发件人显示名 |
| From | PR_SENT_REPRESENTING_EMAIL (0x0065) | 发件人邮箱 |
| Delivery Time | PR_MESSAGE_DELIVERY_TIME (0x0E06) | 投递时间 |
| Headers | PR_TRANSPORT_MESSAGE_HEADERS (0x007D) | 完整 SMTP 头 |
命令行一键式 Agent
仓库 scripts/agent.py 提供了一个开箱即用的命令行版本,集成了文件夹遍历、消息提取、邮箱地址抽取、可疑邮件启发式检测与报告生成:
python agent.py mailbox.pst输出包括文件夹结构、总消息数、唯一邮箱地址数,以及带严重度分级的可疑发现列表,非常适合在应急响应中快速跑出初步研判结果。
取证注意事项与标准依据
取证要点(Forensic Considerations)
- Deleted Items 文件夹可能包含关键证据;
- **Recoverable Items(垃圾站)**需要专门提取,常规导出不覆盖;
- 日历、联系人中可能包含与案件相关的时间与人员线索;
- Journal 日志条目可提供时间线证据。
相关标准
| 标准 | 作用 |
|---|---|
| MS-PST | Outlook Personal Folders (.pst) 文件格式规范 |
| MS-OXMSG | Outlook 邮件项目文件格式规范 |
| NIST SP 800-86 | 取证技术集成指南(工作流设计依据) |
工具生态方面,开源首选 libpff/pffexport 与 pypff(Python 绑定),商业可评估 MailXaminer、PST Walker 与 Kernel Outlook PST Viewer(见 standards.md)。
实战输出示例
以下是 SKILL.md 给出的完整运行示例(节选),可作为流程正确性的验收基准:
$ pffexport /evidence/jsmith_archive.pst -t /analysis/pst_output pffexport 20231205 - libpff PST/OST Export Tool ================================================= Input: /evidence/jsmith_archive.pst (2.3 GB) Exporting PST contents... Folders: 45 Messages: 12,456 Attachments: 3,234 Contacts: 567 Calendar: 234 Tasks: 89 Export completed in 3m 42s.--- Phishing / Suspicious Emails --- Email #8923 Date: 2024-01-15 14:30:22 UTC From: "IT Support" <it-support@c0rporate-help.com> To: john.smith@corporate.com Subject: Urgent: Password Reset Required Headers: Return-Path: bounce@mail-relay.c0rporate-help.com X-Originating-IP: 203.0.113.55 Received: from mail-relay.c0rporate-help.com (203.0.113.55) SPF: FAIL (domain c0rporate-help.com) DKIM: NONE DMARC: FAIL Attachments: - Password_Reset_Form.xlsm (245 KB) SHA-256: 7a3b8c9d...e1f2a3b4--- Data Exfiltration Indicators --- Email #9102 Date: 2024-01-16 03:15:45 UTC From: john.smith@corporate.com To: j.smith.personal8842@protonmail.com Subject: (no subject) Attachments: - archive_part1.7z (24.5 MB) - encrypted - archive_part2.7z (24.5 MB) - encrypted最终报告汇总(Summary)示例:检测到 1 封钓鱼邮件(初始入侵向量)、5 封可疑外发邮件(发往个人账户且带附件)、3 个加密附件(共 67.2MB,疑似外泄),报告落盘于pst_forensic_report.json。这一示例完整展示了八个步骤的产出如何汇集成可行动的调查结论。
小结
Outlook PST 邮件取证是一条「获取 → 固定 → 导出 → 解析 → 关联 → 重建 → 归档」的完整证据流水线。本文基于 workflows.md 的八步工作流骨架,结合 SKILL.md、api-reference.md 与 scripts/agent.py 的源码实现,给出了从pffexport命令行到pypffPython 分析器、再到可自动研判可疑邮件的完整方案。对于安全分析师、取证调查员与 SOC 团队,直接复用本文的命令与代码,即可对任意 PST/OST 归档开展结构化、可复现、可呈堂的邮件取证分析。
【免费下载链接】Anthropic-Cybersecurity-Skills817 structured cybersecurity skills for AI agents · Mapped to 6 frameworks: MITRE ATT&CK, NIST CSF 2.0, MITRE ATLAS, D3FEND, NIST AI RMF & MITRE F3 (Fight Fraud) · agentskills.io standard · Works with Claude Code, GitHub Copilot, Codex CLI, Cursor, Gemini CLI & 20+ platforms · 29 security domains · Apache 2.0项目地址: https://gitcode.com/GitHub_Trending/an/Anthropic-Cybersecurity-Skills
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考