| name | implementing-device-posture-assessment-in-zero-trust |
| description | 在零信任访问控制中实施设备态势评估,将来自 CrowdStrike ZTA、Microsoft Intune 和 Jamf 的端点健康信号集成到条件访问策略中,在授予资源访问权限前强制执行合规性。
|
| domain | cybersecurity |
| subdomain | zero-trust-architecture |
| tags | ["device-posture","zero-trust","endpoint-compliance","crowdstrike-zta","intune","conditional-access","jamf"] |
| version | 1.0 |
| author | mahipal |
| license | Apache-2.0 |
在零信任中实施设备态势评估
适用场景
- 将设备健康作为访问企业应用的前提条件时
- 将 CrowdStrike ZTA 评分、Intune 合规性或 Jamf 设备状态集成到访问决策时
- 实施 CISA 零信任成熟度模型设备支柱要求时
- 构建基于实时端点安全态势自适应的条件访问策略时
- 检测并阻断来自受损、未托管或不合规设备的访问时
不适用于无法运行态势 Agent 的物联网或无头设备、没有身份验证的独立安全控制,以及实时态势数据不可用而陈旧合规数据会产生虚假信任的场景。
前置条件
- 端点检测与响应(EDR):带 ZTA 模块的 CrowdStrike Falcon,或 Microsoft Defender for Endpoint
- 移动设备管理(MDM):Microsoft Intune、Jamf Pro 或 VMware Workspace ONE
- 身份提供商:具有条件访问能力的 Microsoft Entra ID、Okta 或 Ping Identity
- ZTNA 平台:Zscaler ZPA、Cloudflare Access、Palo Alto Prisma Access 或云原生 IAP
- EDR/MDM 平台的 API 访问权限,用于态势信号采集
工作流程
步骤 1:定义设备合规基线
为每个设备类别建立最低安全要求。
# Microsoft Intune:通过 Graph API 创建设备合规策略
Connect-MgGraph -Scopes "DeviceManagementConfiguration.ReadWrite.All"
# Windows 10/11 合规策略
$compliancePolicy = @{
"@odata.type" = "#microsoft.graph.windows10CompliancePolicy"
displayName = "Zero Trust - Windows Compliance"
description = "零信任访问的最低设备要求"
osMinimumVersion = "10.0.19045"
bitLockerEnabled = $true
secureBootEnabled = $true
codeIntegrityEnabled = $true
tpmRequired = $true
antivirusRequired = $true
antiSpywareRequired = $true
defenderEnabled = $true
firewallEnabled = $true
passwordRequired = $true
passwordMinimumLength = 12
passwordRequiredType = "alphanumeric"
storageRequireEncryption = $true
scheduledActionsForRule = @(
@{
ruleName = "PasswordRequired"
scheduledActionConfigurations = @(
@{
actionType = "block"
gracePeriodHours = 24
notificationTemplateId = ""
notificationMessageCCList = @()
}
)
}
)
}
New-MgDeviceManagementDeviceCompliancePolicy -BodyParameter $compliancePolicy
# 通过 Jamf Pro API 设置 macOS 合规策略
curl -X POST "https://jamf.company.com/api/v1/compliance-policies" \
-H "Authorization: Bearer ${JAMF_TOKEN}" \
-H "Content-Type: application/json" \
--data '{
"name": "Zero Trust - macOS Compliance",
"rules": [
{"type": "os_version", "operator": ">=", "value": "14.0"},
{"type": "filevault_enabled", "value": true},
{"type": "firewall_enabled", "value": true},
{"type": "gatekeeper_enabled", "value": true},
{"type": "sip_enabled", "value": true},
{"type": "auto_update_enabled", "value": true},
{"type": "screen_lock_timeout", "operator": "<=", "value": 300},
{"type": "falcon_sensor_running", "value": true}
]
}'
步骤 2:配置 CrowdStrike 零信任评估
启用 ZTA 评分并配置访问层级的评分阈值。
curl -X GET "https://api.crowdstrike.com/zero-trust-assessment/entities/assessments/v1?ids=${DEVICE_AID}" \
-H "Authorization: Bearer ${CS_TOKEN}" \
-H "Content-Type: application/json"
curl -X GET "https://api.crowdstrike.com/zero-trust-assessment/queries/assessments/v1?filter=assessment.overall:<50" \
-H "Authorization: Bearer ${CS_TOKEN}"
步骤 3:将设备态势与 Entra ID 条件访问集成
创建要求合规设备的条件访问策略。
# 创建要求合规设备的条件访问策略
Connect-MgGraph -Scopes "Policy.ReadWrite.ConditionalAccess"
$caPolicy = @{
displayName = "Zero Trust - Require Compliant Device"
state = "enabled"
conditions = @{
applications = @{
includeApplications = @("All")
}
users = @{
includeUsers = @("All")
excludeGroups = @("BreakGlass-Admins-Group-ID")
}
platforms = @{
includePlatforms = @("all")
}
clientAppTypes = @("browser", "mobileAppsAndDesktopClients")
}
grantControls = @{
operator = "AND"
builtInControls = @("mfa", "compliantDevice")
}
sessionControls = @{
signInFrequency = @{
value = 4
type = "hours"
isEnabled = $true
authenticationType = "primaryAndSecondaryAuthentication"
frequencyInterval = "timeBased"
}
persistentBrowser = @{
mode = "never"
isEnabled = $true
}
}
}
New-MgIdentityConditionalAccessPolicy -BodyParameter $caPolicy
# 创建基于设备合规性和登录风险的风险策略
$riskPolicy = @{
displayName = "Zero Trust - Block High Risk Sign-Ins on Non-Compliant Devices"
state = "enabled"
conditions = @{
applications = @{ includeApplications = @("All") }
users = @{ includeUsers = @("All") }
signInRiskLevels = @("high", "medium")
devices = @{
deviceFilter = @{
mode = "include"
rule = "device.isCompliant -ne True"
}
}
}
grantControls = @{
operator = "OR"
builtInControls = @("block")
}
}
New-MgIdentityConditionalAccessPolicy -BodyParameter $riskPolicy
步骤 4:配置 Okta 设备信任与 CrowdStrike 集成
使用 CrowdStrike 态势信号设置 Okta 设备信任策略。
curl -X POST "https://company.okta.com/api/v1/device-assurances" \
-H "Authorization: SSWS ${OKTA_API_TOKEN}" \
-H "Content-Type: application/json" \
--data '{
"name": "Corporate Device Assurance",
"platform": "WINDOWS",
"osVersion": {
"minimum": "10.0.19045"
},
"diskEncryptionType": {
"include": ["ALL_INTERNAL_VOLUMES"]
},
"screenLockType": {
"include": ["BIOMETRIC", "PASSCODE"]
},
"secureHardwarePresent": true,
"thirdPartySignalProviders": {
"dtc": {
"browserVersion": {
"minimum": "120.0"
},
"builtInDnsClientEnabled": true,
"chromeRemoteDesktopAppBlocked": true,
"crowdStrikeCustomerId": "CS_CUSTOMER_ID",
"crowdStrikeAgentId": "REQUIRED",
"crowdStrikeVerifiedState": {
"include": ["RUNNING"]
}
}
}
}'
curl -X POST "https://company.okta.com/api/v1/policies" \
-H "Authorization: SSWS ${OKTA_API_TOKEN}" \
-H "Content-Type: application/json" \
--data '{
"name": "Zero Trust Application Policy",
"type": "ACCESS_POLICY",
"conditions": null,
"rules": [
{
"name": "Managed Device Access",
"conditions": {
"device": {
"assurance": {
"include": ["DEVICE_ASSURANCE_POLICY_ID"]
},
"managed": true,
"registered": true
},
"people": {
"groups": {"include": ["EMPLOYEES_GROUP_ID"]}
}
},
"actions": {
"appSignOn": {
"access": "ALLOW",
"verificationMethod": {
"factorMode": "1FA",
"type": "ASSURANCE"
}
}
}
},
{
"name": "Unmanaged Device - Block",
"conditions": {
"device": { "managed": false }
},
"actions": {
"appSignOn": { "access": "DENY" }
}
}
]
}'
步骤 5:实施持续态势监控
设置实时监控设备合规状态变化。
"""实时监控设备态势合规漂移。"""
import requests
import time
import json
from datetime import datetime, timezone
CROWDSTRIKE_BASE = "https://api.crowdstrike.com"
INTUNE_BASE = "https://graph.microsoft.com/v1.0"
def get_cs_token(client_id: str, client_secret: str) -> str:
resp = requests.post(f"{CROWDSTRIKE_BASE}/oauth2/token", data={
"client_id": client_id,
"client_secret": client_secret
})
return resp.json()["access_token"]
def get_low_zta_devices(token: str, threshold: int = 50) -> list:
resp = requests.get(
f"{CROWDSTRIKE_BASE}/zero-trust-assessment/queries/assessments/v1",
headers={"Authorization": f"Bearer {token}"},
params={"filter": f"assessment.overall:<{threshold}", "limit": 100}
)
return resp.json().get("resources", [])
def get_intune_noncompliant(token: str) -> list:
resp = requests.get(
f"{INTUNE_BASE}/deviceManagement/managedDevices",
headers={: },
params={
: ,
:
}
)
resp.json().get(, [])
():
()
( * )
low_zta = get_low_zta_devices(cs_token, threshold=)
()
noncompliant = get_intune_noncompliant(intune_token)
()
device noncompliant[:]:
(
)
{: (low_zta), : (noncompliant)}
核心概念
| 术语 | 定义 |
|---|
| 设备态势(Device Posture) | 在授予访问权限前评估的端点安全属性集合(操作系统版本、加密、EDR 状态、补丁级别) |
| CrowdStrike ZTA 评分 | CrowdStrike Falcon 根据操作系统信号和传感器配置计算端点安全态势的数值评分(1-100) |
| 设备合规策略 | MDM 定义的规则,指定设备必须满足的最低安全要求(加密、PIN、操作系统版本) |
| 条件访问(Conditional Access) | 在允许访问前评估用户身份、设备合规性、位置和风险的策略引擎(Entra ID、Okta) |
| 设备信任(Device Trust) | 验证端点已托管、已注册且满足安全基线,然后将其视为受信任设备 |
| 态势漂移(Posture Drift) | 设备安全态势随时间退化(补丁过期、加密被禁用),应触发访问撤销 |
工具与系统
- CrowdStrike Falcon ZTA:基于操作系统和传感器安全信号的实时端点态势评分
- Microsoft Intune:执行设备合规策略并向 Entra ID 条件访问报告的 MDM 平台
- Jamf Pro:适用于 macOS 和 iOS 端点的 Apple 设备管理,含合规规则
- Microsoft Entra ID 条件访问:使用 Intune 合规性和风险信号进行访问决策的策略引擎
- Okta 设备信任:与 CrowdStrike、Chrome Enterprise 和 MDM 平台集成的设备保障策略
- Cloudflare 设备态势:基于 WARP 客户端的磁盘加密、操作系统版本和第三方 EDR 态势检查
常见场景
场景:为 2000 台 Windows 和 macOS 端点强制执行设备合规
场景背景:一家拥有 2000 台端点(70% Windows、30% macOS)的医疗公司必须在允许访问患者数据系统前强制执行符合 HIPAA 的设备态势。设备由 Intune(Windows)和 Jamf(macOS)管理,所有端点均已部署 CrowdStrike Falcon。
方法:
- 在 Intune 中定义 Windows 合规策略:BitLocker、Secure Boot、TPM、Defender 已启用,操作系统 >= 10.0.19045
- 在 Jamf 中定义 macOS 合规策略:FileVault、Gatekeeper、SIP、防火墙,操作系统 >= 14.0
- 配置 CrowdStrike ZTA 阈值:通用应用 >= 70,患者数据系统 >= 85
- 创建 Entra ID 条件访问策略,要求所有云应用使用合规设备 + MFA
- 为新不合规设备配置 24 小时宽限期,在封锁前提供修复时间
- 为 IT 设置每周合规报告,显示不合规设备和修复措施
- 通过 Intune 实施自动化修复:推送 BitLocker 启用、部署待处理补丁
常见陷阱:宽限期必须足够长以便 IT 修复,但又要足够短以限制风险敞口。CrowdStrike ZTA 评分可能随传感器更新而波动;初始阶段避免设置过于激进的阈值。BYOD 设备可能缺乏 MDM 注册;为未托管设备提供功能受限的单独浏览器访问路径。
输出格式
设备态势评估报告
==================================================
组织:HealthCorp
报告日期:2026-02-23
托管设备总数:2,000
平台合规情况:
Windows(1,400 台设备):
合规: 1,302(93.0%)
不合规: 98(7.0%)
主要问题:缺失补丁(45)、BitLocker 已禁用(23)
macOS(600 台设备):
合规: 567(94.5%)
不合规: 33(5.5%)
主要问题:操作系统过旧(18)、FileVault 已禁用(8)
CROWDSTRIKE ZTA 评分:
平均评分: 78.4
设备 >= 85(关键级): 1,456(72.8%)
设备 >= 70(标准级): 1,812(90.6%)
设备 < 50(已封锁): 34(1.7%)
条件访问影响(过去 7 天):
总登录尝试: 45,678
因态势被封锁: 312(0.7%)
24 小时内已修复: 289(92.6%)
仍不合规: 23
态势漂移告警:
加密已禁用: 5
EDR 传感器已停止: 3
操作系统已降级: 1