使用 Microsoft Graph 分析 Office 365 审计日志检测账户入侵:Anthropic-Cybersecurity-Skills 的 API 参考与实践指南

使用 Microsoft Graph 分析 Office 365 审计日志检测账户入侵:Anthropic-Cybersecurity-Skills 的 API 参考与实践指南 使用 Microsoft Graph 分析 Office 365 审计日志检测账户入侵Anthropic-Cybersecurity-Skills 的 API 参考与实践指南【免费下载链接】Anthropic-Cybersecurity-Skills817 structured cybersecurity skills for AI agents · Mapped to 6 frameworks: MITRE ATTCK, 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-SkillsBEC商业电子邮件入侵攻击常在 Office 365 审计日志中留下痕迹可疑收件箱规则创建、向外部地址的邮件转发、邮箱委派变更、以及未授权的 OAuth 应用授权。本篇文章以 Anthropic-Cybersecurity-Skills 仓库中analyzing-office365-audit-logs-for-compromise技能为例系统讲解其 API 参考文档 与配套 agent.py 脚本的实现细节。读完本文你将掌握如何通过 MSAL 客户端凭据流认证 Microsoft Graph、查询统一审计日志中的可疑操作、枚举收件箱转发规则、检测 SMTP 转发与 OAuth 授权风险并生成带风险评分的入侵指标报告。技能定位从统一审计日志到账户入侵指标该技能位于仓库的cloud-security子域其元数据定义在 SKILL.md 的 YAML frontmatter 中它通过 Microsoft Graph API 解析 Office 365 统一审计日志检测邮件转发规则创建、收件箱委派、可疑 OAuth 应用授权等账户入侵指标。技能同时映射到多套行业框架MITRE ATTCKT1114.002邮箱数据收集——远程邮箱枚举、T1098.002账户操控——额外邮箱委派、T1556.006修改认证流程——Office 365 修改、T1078.004有效账户——云账户NIST CSF 2.0PR.IR-01技术基础设施韧性、ID.AM-08资产管理、GV.SC-06供应链风险管理、DE.CM-01持续监控。在 ATTCK 覆盖总览 中cloud-security子域在 CollectionT1114 属于 TA0009与 Persistence 战术上均有较高相关性而本技能正是Email Collection与Account Manipulation这两类手法的典型检测实现。依赖与运行环境API 参考文档 明确列出了两个核心 Python 库msal 1.24.0Microsoft 身份验证库负责 Graph API 的客户端凭据流认证requests 2.28.0带分页功能的 Graph API HTTP 客户端。前置条件还包括Azure AD 应用注册并授予AuditLog.Read.All、MailboxSettings.Read、Mail.Read应用程序权限Python 3.9用于认证的客户端密钥或证书以及 Global Reader 或 Security Reader 角色。在 agent.py 中两个库均使用try/except ImportError包裹导入缺失时置为None并在认证环节显式报错保证了脚本在依赖不全时能给出清晰反馈。CLI 接口五个子命令对应五类分析任务agent.py使用argparse定义了统一的 CLI 入口所有子命令都需要三个认证参数--tenant-id、--client-id、--client-secret。API 参考文档给出的完整命令如下# 查询过去 7 天的可疑审计事件 python agent.py --tenant-id T --client-id C --client-secret S audit-logs --days 7 # 检查指定邮箱的收件箱转发规则 python agent.py --tenant-id T --client-id C --client-secret S inbox-rules --user userdomain.com # 检查邮箱级 SMTP 转发配置 python agent.py --tenant-id T --client-id C --client-secret S forwarding --user userdomain.com # 审计 OAuth 授权许可 python agent.py --tenant-id T --client-id C --client-secret S oauth # 对多个用户执行全面入侵审计 python agent.py --tenant-id T --client-id C --client-secret S full --users user1d.com user2d.com --days 7从 agent.py 的 main 函数 可以看到参数定义细节audit-logs与full子命令支持--days整型默认 7inbox-rules与forwarding需要必填的--user参数full的--users支持nargs接收多个用户主体名UPN。所有结果统一通过json.dumps(result, indent2, defaultstr)输出为缩进 JSON便于后续机器解析与入库。若未提供子命令full会被作为默认路径执行。核心函数逐一拆解API 参考文档列出了五个核心函数下面结合源码逐一深入。get_access_tokenMSAL 客户端凭据流认证def get_access_token(tenant_id, client_id, client_secret): authority fhttps://login.microsoftonline.com/{tenant_id} app msal.ConfidentialClientApplication( client_id, authorityauthority, client_credentialclient_secret ) result app.acquire_token_for_client(scopes[https://graph.microsoft.com/.default]) if access_token in result: return result[access_token] raise RuntimeError(fAuth failed: {result.get(error_description, result.get(error))})实现见 agent.py 第 29-40 行。它使用ConfidentialClientApplication.acquire_token_for_client()申请应用级非用户委托级令牌scope 固定为https://graph.microsoft.com/.default即向应用注册时授予的全部应用程序权限。失败时抛出包含error_description的RuntimeError便于快速定位租户 ID、客户端 ID 或密钥错误。query_audit_logs统一审计日志可疑操作检测该函数按文档所列的 11 种可疑操作逐一向/auditLogs/directoryAudits发起分页查询SUSPICIOUS_OPERATIONS [ New-InboxRule, Set-InboxRule, Set-Mailbox, Add-MailboxPermission, Set-MailboxJunkEmailConfiguration, Set-OwaMailboxPolicy, New-TransportRule, Add-RecipientPermission, Set-TransportRule, UpdateInboxRules, Set-MailboxAutoReplyConfiguration, ]查询时构造 OData$filteractivityDisplayName eq {operation} and activityDateTime ge {since}since取datetime.utcnow() - timedelta(daysdays)的 UTC 时间戳配合$top: 100控制单页大小agent.py 第 58-84 行。每个事件被规整为统一结构操作名、时间戳、结果、发起者 UPN、来源 IP、目标资源 displayName 列表、附加详情最后按时间倒序排列。分页由通用的graph_get助手函数处理agent.py 第 43-55 行它从响应中提取odata.nextLink持续翻页直到url为空并将params置NonenextLink 已内嵌全部查询参数累计返回全部value数组。这一封装被后续所有 Graph 查询复用。check_inbox_rules转发规则检测与风险评分函数对/users/{id}/mailFolders/inbox/messageRules执行 GET逐条解析规则的actions字段agent.py 第 87-134 行。转发行为的判定覆盖三类动作forwardTo转发、forwardAsAttachmentTo以附件转发、redirectTo重定向任一类存在即标记is_forwarding为真并抽取目标地址。此外还检查delete转发后删除原邮件与markAsRead标记为已读两个危险动作。API 参考文档给出的收件箱规则风险评分表如下因子分值存在转发规则40转发后删除邮件25外部转发地址20标记已读并转发15源码中的计算逻辑与之一一对应is_forwarding加 40、delete_after加 25、mark_read and is_forwarding再加 15外部地址判定为转发目标中不以当前用户邮箱域名user_id.split()[-1]结尾者每个外部转发地址计 20 分。总分经min(risk, 100)截断后映射为风险等级CRITICAL70、HIGH50、MEDIUM25、LOW其余。输出记录包含规则 ID、显示名、启用状态、转发目标、外部转发地址、删除/已读标记、规则条件与风险评分。check_mailbox_forwarding邮箱级 SMTP 转发检查函数对/users/{id}/mailboxSettings执行 GETagent.py 第 137-156 行返回邮箱级配置自动答复状态status ! disabled即视为启用、外部受众范围externalAudience、语言 locale 与时区。攻击者常通过 Set-Mailbox 命令设置自动答复并面向外部受众用以掩护外发行为因此该检查是对收件箱规则层面的重要补充。单条请求失败时以{user: user_id, error: str(e)}返回错误信息而不中断批量扫描。check_oauth_grantsOAuth 授权许可审计函数对/oauth2PermissionGrants执行 GETagent.py 第 159-178 行将每个授权的scope字段按空格拆分后与高危范围集合比对{Mail.Read, Mail.ReadWrite, Mail.Send, Files.ReadWrite.All, MailboxSettings.ReadWrite}命中任意一个高危 scope 即记录为可疑授权输出客户端 ID、授权类型consentType、主体 ID、高危 scope 列表与完整 scope 列表风险分值为min(len(risky) * 20, 100)并按分值降序排列。这一检查对应 ATTCK 中攻击者通过恶意 OAuth 应用申请 Mail.Read/Mail.Send 等权限持续访问邮箱的手法。full_audit全面入侵审计full_audit将上述检测串联为一次综合审计agent.py 第 181-213 行先并行收集审计事件与 OAuth 授权发现再对每个指定用户执行收件箱规则与邮箱转发检查。最终报告包含summary可疑审计事件数、OAuth 高危授权数、转发规则数、外部转发规则数、已扫描邮箱数audit_events前 25 条审计事件oauth_findings前 15 条 OAuth 授权发现forwarding_rules前 20 条可疑转发规则mailbox_settings前 20 条邮箱配置检查结果。报告头部附有审计类型、生成时间戳与回看天数lookback_days直接对应 SKILL.md 中生成带风险评分的 JSON 报告与入侵指标时间线的预期输出要求。Microsoft Graph 端点与所需权限API 参考文档将本技能用到的 Graph 端点汇总如下全部为 GET 请求端点方法所需权限/auditLogs/directoryAuditsGETAuditLog.Read.All/users/{id}/mailFolders/inbox/messageRulesGETMailboxSettings.Read/users/{id}/mailboxSettingsGETMailboxSettings.Read/oauth2PermissionGrantsGETDirectory.Read.All这些权限在 Azure AD 应用注册阶段即需以**应用程序权限application permissions**方式预先授予认证后由https://graph.microsoft.com/.defaultscope 统一获取。注意/auditLogs/directoryAudits属于目录审计日志记录 Exchange Online 管理操作如 Set-Mailbox、Add-MailboxPermission 等与邮箱级配置查询mailboxSettings、messageRules分属不同端点但共享同一认证流程。实战流程与输出解读根据 SKILL.md 定义的标准步骤完整实战流程为使用 MSAL 客户端凭据流认证 Microsoft Graph查询统一审计日志中的可疑操作Set-Mailbox、New-InboxRule 等跨邮箱枚举收件箱规则并标记转发规则检测邮箱委派变更Add-MailboxPermission识别对可疑应用的 OAuth 授权许可从审计日志检查可疑登录模式生成带时间线的入侵指标报告。推荐优先级先跑audit-logs全租户粗筛再对命中的高风险用户执行full深度扫描。解读报告时重点关注三类信号——转发规则风险分 50HIGH 及以上、OAuth 授权包含 Mail.Send 或 Files.ReadWrite.All、审计事件中出现Set-MailboxJunkEmailConfiguration与UpdateInboxRules等攻击者常用来维持访问的操作组合。适用前提与限制说明审计日志数据保留期由 Microsoft 365 许可决定标准订阅通常 90 天--days回看窗口应在其覆盖范围内query_audit_logs依赖activityDisplayName的精确匹配操作名因租户配置或版本差异可能略有出入出现空结果时可先手工在 Microsoft Purview 门户核对日志中的实际操作名check_inbox_rules的外部地址判定基于当前邮箱域名后缀同一租户内跨域邮箱转发可能被误判为外部需结合业务域清单人工复核脚本需要 Global Reader 或 Security Reader 角色方可访问/auditLogs/directoryAudits仅授予应用权限而角色不足会导致 403该技能输出的是检测与取证信号不包含自动阻断动作落地防护如禁用可疑转发规则、撤销 OAuth 授权应由管理员在确认后手动执行。总结本技能以微软 Graph API 为数据源、以统一审计日志为线索源将 BEC 攻击在 Office 365 中最常见的四种痕迹——目录审计可疑操作、收件箱转发规则、邮箱级 SMTP 转发、OAuth 授权许可——收敛为一个可重复执行的检测 Agent。其 API 参考文档 精确描述了 CLI、核心函数、端点权限与风险评分规则而 agent.py 提供了可直接运行的完整实现两者结合即可快速搭建起面向 SOC 场景的 Office 365 账户入侵审计能力。【免费下载链接】Anthropic-Cybersecurity-Skills817 structured cybersecurity skills for AI agents · Mapped to 6 frameworks: MITRE ATTCK, 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),仅供参考