capetron/microsoft-365-security-baseline
GitHub: capetron/microsoft-365-security-baseline
一套与 CIS 基准对齐的 Microsoft 365 安全加固指南与自动化审计脚本,解决企业租户配置不一致与合规难以量化的痛点。
Stars: 0 | Forks: 0
# Microsoft 365 安全基线
一个与 CIS 基准对齐的 Microsoft 365 安全加固指南,涵盖条件访问、多因素身份验证 (MFA)、数据丢失防护 (DLP)、Microsoft Defender、Intune 和 Azure AD。包含用于自动合规性检查的 PowerShell 审计脚本。
## 目录
- [概述](#overview)
- [身份与访问管理](#identity-and-access-management)
- [条件访问策略](#conditional-access-policies)
- [多因素身份验证 (MFA)](#multi-factor-authentication-mfa)
- [Azure AD / Entra ID 加固](#azure-ad--entra-id-hardening)
- [Microsoft Defender for Office 365](#microsoft-defender-for-office-365)
- [数据丢失防护 (DLP)](#data-loss-prevention-dlp)
- [Microsoft Intune / 端点管理](#microsoft-intune--endpoint-management)
- [SharePoint 和 OneDrive 安全](#sharepoint-and-onedrive-security)
- [Teams 安全](#teams-security)
- [审计与日志记录](#audit-and-logging)
- [PowerShell 审计脚本](#powershell-audit-scripts)
- [CIS 基准映射](#cis-benchmark-mapping)
- [关于 Petronella Technology Group](#about-petronella-technology-group)
## 概述
Microsoft 365 是部署最广泛的企业生产力套件,这使其成为攻击者的主要目标。默认配置优先考虑可用性而非安全性。本指南与 CIS Microsoft 365 Foundations 基准保持一致,旨在加固您的租户以抵御常见的攻击向量,包括凭证盗窃、业务电子邮件破坏、数据外泄和账户接管。
**范围:** Microsoft 365 Business Premium、E3 和 E5 租户。某些功能需要特定许可,请在各部分中查看说明。
## 身份与访问管理
### 全局管理员加固
- [ ] **将全局管理员限制在 2-4 个账户** -- CIS 1.1.1。过多的全局管理员会增加攻击面
- [ ] **使用专用的管理员账户** -- 管理员账户不应包含邮箱或用于日常办公
- [ ] **启用紧急访问账户** -- 2 个云专用应急访问账户,排除在条件访问之外,并启用登录警报监控
- [ ] **禁用管理员账户的 SSPR** -- 应为特权角色禁用自助服务密码重置
- [ ] **要求管理员使用防钓鱼 MFA** -- 所有管理员角色应使用 FIDO2 密钥或 Windows Hello for Business
### 用户账户设置
- [ ] **阻止旧版身份验证** -- CIS 1.2。禁用 POP3、IMAP4、SMTP AUTH 和旧版 Exchange Web Services
- [ ] **禁用用户对应用的同意** -- CIS 1.3。所有 OAuth 应用注册需管理员批准
- [ ] **启用用户风险策略** -- 自动阻止或要求高风险用户更改密码
- [ ] **禁用 LinkedIn 账户连接** -- 防止 M365 与 LinkedIn 之间的数据共享
- [ ] **配置空闲会话超时** -- Web 应用 1 小时,管理员门户 15 分钟
## 条件访问策略
### 推荐基线策略
| 策略 | 目标 | 条件 | 授权 |
|------|------|------|-------|
| 要求所有用户使用 MFA | 所有用户 | 所有云应用 | 要求 MFA |
| 阻止旧版身份验证 | 所有用户 | Exchange ActiveSync、其他客户端 | 阻止 |
| 要求合规设备 | 所有用户 | 所有云应用 | 要求设备合规 |
| 要求管理员使用 MFA | 目录角色 | 所有云应用 | 要求防钓鱼 MFA |
| 阻止高风险登录 | 所有用户 | 高风险登录 | 阻止 |
| 要求 Azure 管理使用 MFA | 所有用户 | Azure 管理 | 要求 MFA |
| 阻止特定国家/地区 | 所有用户 | 指定国家/地区(被阻止) | 阻止 |
### 实施步骤
- [ ] **创建命名位置** -- 定义可信网络(公司 IP)和被阻止的国家/地区
- [ ] **先在报告模式下部署策略** -- 监控影响 2 周后再强制执行
- [ ] **排除紧急访问账户** -- 应急访问账户必须绕过条件访问
- [ ] **要求合规或混合加入设备** -- 访问敏感数据时需满足此条件
- [ ] **阻止从未管理设备访问** -- 或限制为仅浏览器访问且无法下载
- [ ] **配置登录频率** -- 对敏感应用要求每 8 小时重新验证一次
### 条件访问 PowerShell 检查
```
# 连接到 Microsoft Graph
Connect-MgGraph -Scopes "Policy.Read.All"
# 列出所有条件访问策略
Get-MgIdentityConditionalAccessPolicy | Select-Object DisplayName, State, CreatedDateTime | Format-Table -AutoSize
# 检查阻止旧版身份验证的策略
Get-MgIdentityConditionalAccessPolicy | Where-Object {
$_.Conditions.ClientAppTypes -contains "exchangeActiveSync" -or
$_.Conditions.ClientAppTypes -contains "other"
} | Select-Object DisplayName, State
```
## 多因素身份验证 (MFA)
- [ ] **为 100% 用户启用 MFA** -- 无例外。使用安全默认设置或条件访问
- [ ] **禁用 SMS 和语音呼叫 MFA** -- 仅允许 Microsoft Authenticator、FIDO2 或 Windows Hello
- [ ] **启用数字匹配** -- 要求用户输入显示的数字以防止 MFA 疲劳攻击
- [ ] **启用附加上下文** -- 在 MFA 提示中显示应用名称和地理位置
- [ ] **配置 MFA 注册策略** -- 账户创建后 14 天内要求注册 MFA
- [ ] **监控 MFA 注册情况** -- 对管理员账户的 MFA 方法更改发出警报
```
# 检查所有用户的 MFA 注册状态
Connect-MgGraph -Scopes "UserAuthenticationMethod.Read.All"
Get-MgUser -All | ForEach-Object {
$methods = Get-MgUserAuthenticationMethod -UserId $_.Id
[PSCustomObject]@{
User = $_.UserPrincipalName
MFAMethods = ($methods | Measure-Object).Count
Methods = ($methods.AdditionalProperties.'@odata.type' -join ', ')
}
} | Where-Object { $_.MFAMethods -le 1 } | Format-Table -AutoSize
```
## Azure AD / Entra ID 加固
- [ ] **启用特权身份管理 (PIM)** -- 即时管理员访问并包含审批流程(需要 P2 许可)
- [ ] **配置访问审查** -- 每季度审查所有特权角色分配
- [ ] **禁用来宾用户对目录的访问** -- 限制来宾用户仅访问其自身目录对象
- [ ] **限制谁可以邀请来宾** -- 仅管理员或特定用户可邀请外部来宾
- [ ] **启用身份保护** -- 配置用户风险和登录风险策略
- [ ] **禁用自助服务组创建** -- 创建 Microsoft 365 组需管理员批准
- [ ] **配置密码保护** -- 启用包含组织特定术语的自定义禁止密码列表
- [ ] **启用智能锁定** -- 锁定阈值为 10 次,锁定持续时间为 60 秒
## Microsoft Defender for Office 365
### 安全链接策略
- [ ] **为电子邮件启用安全链接** -- URL 重写和点击时扫描
- [ ] **为 Teams 启用安全链接** -- 扫描 Teams 消息中的 URL
- [ ] **为 Office 应用启用安全链接** -- 在 Word、Excel、PowerPoint 中扫描 URL
- [ ] **不允许绕过警告直接访问恶意 URL** -- 阻止用户绕过警告
- [ ] **跟踪用户点击** -- 启用点击跟踪以进行安全调查
### 安全附件策略
- [ ] **启用动态投递的安全附件** -- 邮件即时投递,附件在沙箱中扫描
- [ ] **为 SharePoint、OneDrive 和 Teams 启用安全附件** -- 扫描上传到云存储的文件
- [ ] **配置检测到恶意软件后的重定向** -- 将检测到的附件发送至安全团队进行审查
### 反钓鱼策略
- [ ] **启用邮箱智能** -- 使用机器学习检测伪装
- [ ] **配置伪装保护** -- 将高管和 VIP 添加到受保护用户列表
- [ ] **启用首次联系安全提示** -- 当收到首次联系的发送者邮件时警告用户
- [ ] **配置欺骗智能** -- 自动阻止检测到的伪装尝试
- [ ] **设置检测到伪装后的操作** -- 隔离伪装消息
## 数据丢失防护 (DLP)
- [ ] **为敏感数据类型创建 DLP 策略** -- 信用卡号、SSN、健康记录
- [ ] **在 Exchange、SharePoint、OneDrive 和 Teams 中应用 DLP** -- 覆盖所有通信渠道
- [ ] **配置策略提示** -- 当用户尝试共享敏感数据时进行教育提醒
- [ ] **阻止对外部收件人共享敏感内容** -- 防止意外数据泄露
- [ ] **启用端点 DLP** -- 将 DLP 控制扩展到端点设备(需要 E5 或合规性附加组件)
- [ ] **每周审查 DLP 警报** -- 监控误报并调整策略
```
# 检查现有的 DLP 策略
Connect-IPPSSession
Get-DlpCompliancePolicy | Select-Object Name, Mode, Enabled, Workload | Format-Table -AutoSize
```
## Microsoft Intune / 端点管理
- [ ] **要求设备注册** -- 访问 M365 的所有设备必须在 Intune 中注册
- [ ] **配置合规性策略** -- 要求加密、最低操作系统版本、屏幕锁定和防病毒软件
- [ ] **部署安全基线** -- 使用 Microsoft 安全基线(适用于 Windows、Edge 和 Defender)
- [ ] **配置应用保护策略** -- 防止从受管理应用复制粘贴到未受管理应用
- [ ] **启用 BitLocker 强制执行** -- 要求 Windows 设备启用全盘加密
- [ ] **配置 Windows Update for Business** -- 使用最多 7 天的延期窗口强制执行安全更新
- [ ] **在受管理设备上禁用 USB 存储** -- 或要求对可移动媒体进行加密
- [ ] **启用远程擦除功能** -- 用于丢失或被盗的设备
## SharePoint 和 OneDrive 安全
- [ ] **限制外部共享** -- 设置为“现有来宾”或“仅限组织内人员”
- [ ] **阻止从未管理设备下载** -- 仅浏览器访问,禁止下载、打印或同步
- [ ] **启用敏感度标签** -- 使用加密和访问控制对文档进行分类和保护
- [ ] **禁用匿名共享链接** -- 所有共享链接需身份验证
- [ ] **设置链接过期时间** -- 外部访问链接最长 30 天后过期
- [ ] **启用版本控制** -- 维护 100+ 个版本以实现勒索软件恢复能力
- [ ] **审计共享活动** -- 在合规性门户中监控外部共享事件
## Teams 安全
- [ ] **限制外部访问** -- 仅允许与特定受信任域通信
- [ ] **禁用来宾访问** -- 或限制到特定 Teams 并提供业务理由
- [ ] **阻止从未管理设备共享文件** -- 防止通过 Teams 数据泄露
- [ ] **禁用第三方应用安装** -- 仅允许管理员批准的应用
- [ ] **配置会议策略** -- 外部参与者需等候,禁止匿名加入
- [ ] **启用会议录制同意** -- 录制会议需获得同意并提示通知
## 审计与日志记录
- [ ] **启用统一审计日志** -- CIS 3.1。必须显式启用,默认未开启
- [ ] **设置审计日志保留至少 1 年** -- 默认保留 90 天(E5 提供 1 年)
- [ ] **启用所有邮箱的邮箱审计** -- 记录所有者、委托人和管理员操作
- [ ] **配置警报策略** -- 为可疑转发规则、批量下载、不可能旅行等情况启用警报
- [ ] **将日志转发到 SIEM** -- 通过管理活动 API 将 M365 审计日志导出到 SIEM
- [ ] **监控管理员活动** -- 对全局管理员登录、角色分配和条件访问更改发出警报
```
# 验证统一审核日志是否已启用
Connect-ExchangeOnline
Get-AdminAuditLogConfig | Select-Object UnifiedAuditLogIngestionEnabled
# 检查邮箱审核状态
Get-OrganizationConfig | Select-Object AuditDisabled
```
## PowerShell 审计脚本
### 完整的 M365 安全审计脚本
```
# 先决条件
# 安装-模块 Microsoft.Graph -作用域 CurrentUser
# 安装-模块 ExchangeOnlineManagement -作用域 CurrentUser
# 连接
Connect-MgGraph -Scopes "Directory.Read.All","Policy.Read.All","User.Read.All"
Connect-ExchangeOnline
Write-Host "=== Global Admin Count ===" -ForegroundColor Cyan
$globalAdmins = Get-MgDirectoryRoleMember -DirectoryRoleId (Get-MgDirectoryRole -Filter "displayName eq 'Global Administrator'").Id
Write-Host "Global Admins: $($globalAdmins.Count)" -ForegroundColor $(if($globalAdmins.Count -gt 4){"Red"}else{"Green"})
Write-Host "`n=== Legacy Auth Check ===" -ForegroundColor Cyan
$legacyAuthPolicies = Get-MgIdentityConditionalAccessPolicy | Where-Object {
$_.Conditions.ClientAppTypes -contains "exchangeActiveSync"
}
Write-Host "Policies blocking legacy auth: $($legacyAuthPolicies.Count)"
Write-Host "`n=== Audit Logging ===" -ForegroundColor Cyan
$auditConfig = Get-AdminAuditLogConfig
Write-Host "Unified Audit Enabled: $($auditConfig.UnifiedAuditLogIngestionEnabled)"
Write-Host "`n=== External Forwarding Rules ===" -ForegroundColor Cyan
Get-TransportRule | Where-Object {$_.RedirectMessageTo -ne $null} | Select-Object Name, State
```
## CIS 基准映射
| CIS 控制 | 描述 | 章节 |
|----------|------|------|
| 1.1.1 | 限制全局管理员 | 身份 |
| 1.2 | 阻止旧版身份验证 | 条件访问 |
| 1.3 | 禁用用户对应用的同意 | Azure AD |
| 2.1 | 启用安全链接 | Defender |
| 2.2 | 启用安全附件 | Defender |
| 3.1 | 启用统一审计日志 | 审计 |
| 4.1 | 配置 DLP 策略 | DLP |
| 5.1 | 为所有用户启用 MFA | MFA |
| 6.1 | 限制外部共享 | SharePoint |
## 附加资源
- [CIS Microsoft 365 Foundations 基准](https://www.cisecurity.org/benchmark/microsoft_365)
- [Microsoft 安全分数](https://security.microsoft.com/securescore)
- [Microsoft 365 安全文档](https://learn.microsoft.com/en-us/microsoft-365/security/)
- [CISA M365 安全配置基线](https://www.cisa.gov/resources-tools/services/secure-cloud-business-applications-scuba-project)
## 许可证
本项目根据 MIT 许可证授权。详细信息请参见 [LICENSE](LICENSE)。
## 关于 Petronella Technology Group
本基线由 [Petronella Technology Group, Inc.](https://www.petronellatech.com/) 维护——一家专注于 Microsoft 365 安全、合规性(CMMC、HIPAA、SOC 2、NIST)以及面向美国企业的托管 IT 服务的网络安全公司。
- 官网:[https://www.petronellatech.com](https://www.petronellatech.com/)
- 预约咨询:[https://book.petronella.ai](https://book.petronella.ai/)
- 电话:[(919) 348-4912](tel:9193484912)
- LinkedIn:[Petronella Technology Group](https://www.linkedin.com/company/petronella-computer-consultants-inc-)
标签:Account Takeover, AI合规, Azure AD, Business Email Compromise, CIS 基准, Credential Theft, Force Graph, GitHub Advanced Security, Intune 端点管理, Microsoft 365 安全, Microsoft Defender, OneDrive 安全, PowerShell 审计脚本, Security Hardening, SharePoint 安全, Teams 安全, 企业安全, 合规性审计, 多因素认证 MFA, 安全加固, 安全基线, 对称加密, 教学环境, 数据丢失防护 DLP, 条件访问, 网络资产管理, 自动化审计, 身份与访问管理