验证安全控制措施和配置
本指南适用于希望通过在 Google Cloud 环境中模拟攻击来主动测试安全性的安全工程师。本文介绍了如何实施持续安全验证流程。
安全验证使用模仿攻击者技术的行动和脚本,在您的 Google Cloud 项目中触发检测提醒。持续运营可识别漏洞,安全团队可确保配置和控制措施能够按预期应对最新威胁,从而降低风险。
成功完成此流程可提供可衡量的证据,证明安全性态势有所改善,并确保新实施的检测规则或集成无需人工干预即可正常运行。
常见使用场景
本部分列出了 Security Validation 的常见使用场景。
检测安全状况回归
目标:确定之前被阻止的攻击者行为何时在环境中成功执行。
价值:提醒安全团队和运维团队注意意外的配置漂移,以便他们能够在漏洞被利用之前进行修复。
验证安全控制调整
目标:确认新实现的检测规则或产品集成是否按预期运行。
价值:提供可衡量的证据,证明规则更新或环境变更已成功改善安全状况,从而使团队能够放心地建立新的基准。
主要术语
安全验证上下文:安全验证上下文用于为安全测试设置环境。它指定了要使用的项目、要运行测试的账号,以及您的操作所需的任何其他详细信息。
安全验证操作:一种旨在模拟真实攻击者技术的脚本,用于触发检测规则以验证您的安全状况。
基准执行:已完成的特定安全验证运行,用作比较未来执行的标准参考。
监控:一种预定作业(在 API 中为
SecurityValidationJob),用于执行安全验证操作并根据定义的基准评估结果。漂移状态:一种基于近期执行情况是否与基准匹配(健康)或显示偏差(检测到漂移)的监控器健康状况指示器。
关联窗口:执行操作后的 12 小时时间段,在此期间,系统会根据所执行操作的元数据中的事件过滤模板,搜索并关联相关事件和检测结果。
监控超时时间:系统在执行后等待事件和检测结果相关联的最长时长,之后才会评估最终的漂移状态。 此超时时间在 12 小时的相关性窗口期内有效。必须在达到此监控超时时间之前观察到预期结果,才能认为监控成功。如果检查未在此超时时间之前通过,系统会将监控器标记为
failed。此时长默认为 8 小时,但可配置为介于 15 分钟到 10 小时之间。
准备工作
确保已完成以下设置并拥有相应权限。
所需设置
请确保您已完成以下设置:
您的租户必须启用安全验证。
Security Validation 仅适用于自行管理的项目。
您需要一个或两个 Google Cloud 项目。虽然您可以为执行和定位使用同一项目,但我们建议您使用单独的项目,以提高安全性、保持测试的干净程度,并更轻松地管理设置。
执行项目:Security Validation 在执行项目中运行安全测试。 它使用 Cloud Run 和 Cloud Storage 来实现此目的。这些作业和存储分区仅供验证服务使用。不应向其他用户授予对这些文件的访问权限。
您必须在此项目中启用 Cloud Run API、Resource Manager API 和 IAM API,并且必须拥有
resourcemanager.projects.SetIamPolicy、storage.buckets.SetIamPolicy、storage.buckets.create和storage.buckets.delete权限,才能为其创建安全验证上下文。如需查看提供此权限的角色列表,请参阅 IAM 权限参考文档。目标项目:安全验证操作脚本所进行的 API 调用在此项目中运行。操作的成功与否取决于以下因素:相应操作所使用的必需 API 是否已在此项目中启用,以及安全验证上下文中的服务账号是否拥有对这些 API 的必要权限。
服务账号:需要在执行项目中添加一个或多个服务账号。这些账号会执行操作脚本。任何需要以特定上下文运行操作的用户,都必须对该上下文中的服务账号拥有
iam.serviceAccounts.actAs权限。
所需权限
在 SecOps 实例项目中分配以下某个预定义角色。
chronicle.viewer:对安全验证操作、上下文、作业和执行资源的只读权限。chronicle.editor:包含所有viewer权限,以及创建、更新、运行和删除安全验证上下文和作业的权限。chronicle.admin:包括所有editor权限,以及创建、更新和删除自定义安全验证操作(仅限 API)的权限。
如果您未使用上述预定义角色,则可以使用自定义角色或通过分配 chronicle.securityValidationAdmin 角色来授予对等权限,该角色包含与 chronicle.admin 相同的权限。
如需了解详情,请参阅必需的角色。
实施持续安全验证
验证安全状况需要按以下结构化流程进行:
定义环境
执行模拟以建立基准
自动执行模拟以检测漂移。
此工作流程可确保您的安全控制措施在环境不断变化的情况下仍能保持有效。
创建安全验证上下文
安全验证上下文会为安全测试设置环境。 它指定了要使用的项目、要运行测试的账号,以及操作所需的任何其他详细信息。您可以针对不同的操作重复使用同一上下文。
如需创建安全验证上下文,请执行以下操作:
前往安全验证,然后前往执行上下文标签页。
点击 Add Execution Context。
在添加执行上下文对话框中,执行以下操作:
在基本属性中,输入上下文名称和说明,然后点击下一步。
在环境设置中,输入 Google Cloud 项目 ID、执行服务账号和清理服务账号。点击下一步。
我们建议为
action profile(用于执行操作脚本)和setup/cleanup profile(用于执行某些操作中包含的设置和清理脚本)使用单独的服务账号。可以在目标项目中为这些服务账号授予不同的权限。在运行时变量中,添加一个或多个变量以动态替换默认参数。添加键值对,其中
key是参数名称,value是其替换值。点击创建。
运行安全验证操作
如需针对安全验证上下文运行安全验证操作,请执行以下操作:
前往安全验证,然后前往内容库标签页。
选择一项操作,然后点击运行。
在该对话框中,选择您创建的执行上下文,然后点击立即运行。
系统会创建新的执行,并显示在执行历史记录标签页中。
管理安全验证监控器
您可以使用监控功能,定期自动重新运行成功执行的操作。它可实现持续的安全状况监控,无需人工干预。
创建监控器
您只能根据成功完成的执行作业创建监控器。 如需根据执行情况创建监控工具,请执行以下操作:
前往安全验证,然后前往执行历史记录标签页。
点击执行的执行 ID,然后点击创建监控器。
可选:在创建监控工具窗口中,为监控工具命名。
如果您未输入监控器名称,则系统会通过监控器 ID 引用该监控器。
查看此窗口中显示的基准执行详情。
点击下一步。
配置监控器设置。
您可以选择在特定时间运行监控,也可以选择每小时运行一次。
如需在特定时间运行监控工具,请执行以下操作:
在时间下拉菜单中,选择在特定时间运行。
在旁边的文本框中指定时间。
在天数选项中,选择以下选项之一:
每天:每天在指定时间运行。
周几:仅在所选日期(例如周一、周三、周五)的指定时间运行。
每月中的某一天:每月在指定日期(例如 15 日)的指定时间运行一次。
在月份下拉菜单中,选择每月(每月运行一次)或特定月份,以指定监控器应运行的确切月份(例如 1 月、4 月、7 月)。
在时区下拉菜单中,选择所需的时区。 此字段默认采用用户偏好设置中设置的时区(可能与浏览器设置不同)。如需查找或更改此默认设置,请依次前往个人资料 > 用户偏好设置 > 本地化 > 时区。
点击下一步。
如需每小时运行一次监控,请执行以下操作:
在时间下拉菜单中,选择每小时重复一次。
在小时字段中设置监测周期重复频率,并在分钟字段中设置具体分钟标记。例如,如果设置为 1 小时 30 分钟,则表示监控工具每小时在第 30 分钟运行一次(而不是每 90 分钟运行一次)。
在小时数选项中,选择以下选项之一:
一天中的所有时段:监控器将根据指定的频率全天候运行。
开始和结束小时:监控器仅在指定的开始和结束小时范围内运行(例如,上午 8:00 到下午 5:00 之间)。
在天数选项中,选择以下选项之一:
每天:每天在指定时间运行。
周几:仅在所选日期(例如周一、周三、周五)的指定时间运行。
每月中的某一天:每月在指定日期(例如 15 日)的指定时间运行一次。
在月份下拉菜单中,选择每月(每月运行一次)或特定月份,以指定监控器应运行的确切月份(例如 1 月、4 月、7 月)。
在时区下拉菜单中,选择所需的时区。 此字段默认采用用户偏好设置中设置的时区(可能与浏览器设置不同)。如需查找或更改此默认设置,请依次前往个人资料 > 用户偏好设置 > 本地化 > 时区。
点击下一步。
在预期结果中,根据需要选中或取消选中相应条件。您需要至少选择一个条件。
操作结果与基准一致:评估执行状态、结果和结果原因是否与基准一致。所有这三个参数都必须匹配,检查结果才会为 true。
关联事件产品与基准匹配:
按产品对相关事件进行分组。
验证当前执行是否针对基准中列出的每个产品至少有一个事件。
该检查会忽略基准中没有任何事件的产品的事件。
如果与基准匹配的事件在超时之前未到达,则计算结果为
false。
发出提醒的关联检测规则与基准匹配:
按规则和提醒状态对检测结果进行分组。
验证当前执行是否至少检测到一条规则,该规则在基准执行中也有检测结果。
忽略基准执行中未生成检测结果的规则的检测结果。
如果与基准匹配的检测结果在超时之前未到达,则计算结果为
false。
点击创建以创建监控器。
查看和运行监控器
如需查看已创建的监控工具,请执行以下操作:
前往安全验证,然后前往监控器标签页。某些列默认处于隐藏状态;点击 列管理器可管理列的显示状态。
在列表中找到您的特定监控工具。
点击相应监控的链接,打开“监控详情”页面。
点击立即运行以运行监控。
“监控工具详情”页面集中简要介绍了监控工具。它有助于您一眼评估监控器的整体状态和健康状况。 它提供有关监控器的以下重要信息:
健康摘要
以下指标卡简要介绍了监视器的稳定性:
监控健康状况:根据上次执行的最终监控结果(例如
Healthy)显示当前状态,以及该状态已持续多长时间。最新的健康或不健康结果:提供指向最新一次偏离基准的执行的指针。
结果新鲜度:显示自上次执行以来经过的时间,且监控器状态为“已完成”。
预期结果
本部分定义了从基准执行中得出的成功标准。
操作结果和原因:与基准执行相符的操作结果和原因(例如,
NOT_BLOCKED以及随附的原因)。生成事件的产品:与基准执行相匹配的相关事件的产品列表。
发出提醒的检测规则:与基准执行相匹配的发出提醒的关联检测规则列表。
监控结果表会显示监控的所有执行情况。该表格支持文本搜索、过滤和列配置。
启用或停用监控器
如需启用或停用监控器,请执行以下操作:
前往安全验证,然后前往监控器标签页。
点击状态切换开关,以启用或停用监控器。或者,您也可以在监控详细信息页面上点击暂停监控或重新开始监控来更改其状态。
修改或删除监控器
如需修改或删除监控,请执行以下操作:
前往安全验证,然后前往监控器标签页。
点击要修改的监控器的 菜单。
点击修改监控可修改监控,点击删除监控可删除监控。您还可以点击监控详情页面上的修改监控来修改监控。
点击更新或确认以应用更改。
查看监控作业结果
如需查看监控工具的所有执行情况,请执行以下操作:
前往安全验证,然后前往监控器标签页。
在显示器上点击 菜单。
点击查看所有结果。系统会显示执行历史记录页面。
系统会过滤执行情况,以显示与该特定监控器关联的所有执行情况。
查看上次运行结果
如需查看监控工具的上次运行结果,请执行以下操作:
前往安全验证,然后前往监控器标签页。
在显示器上点击 菜单。
点击查看上次运行结果,打开执行详情。
系统会显示相应监控器最近一次执行的详细信息。
查看执行结果
您可以在执行历史记录标签页中查看执行的 Security Validation 操作。如需查看执行结果,请执行以下操作:
前往安全验证,然后前往执行历史记录标签页,监控执行状态。
运行状态列用于指明执行是成功还是遇到错误。如果成功,您可以在 Google SecOps 中查看由安全验证操作触发的生成事件和检测结果。
点击执行 ID 以查看执行详情。
操作执行详情页面提供验证操作的状态、结果和深入分析。您可以在本页面中了解操作的活动触发了哪些检测规则,从而验证您的安全态势。
关联进度会显示执行的实时关联工作流进度。在相关性分析运行期间,事件总数可能会增加,直到任务完成。
分析“关联规则”表
关联规则表格列出了在执行操作期间触发的检测规则,包括自定义规则和精选规则。
该表格会同时显示自定义规则和精选规则。它包含两个组: * 在操作的元数据中明确定义的规则 * 由相关事件触发的其他规则
这有助于您确定哪些规则按预期执行,哪些规则可能需要进一步调查。
该表格包含以下各列:
规则名称:检测规则的名称。点击规则名称可查看规则定义及其检测历史记录。
检测次数:规则触发的检测次数。值
0表示未找到匹配的事件。检测结果:指向检测结果页面的链接,该页面会显示本次运行中触发的检测结果。
与操作相关联:表示规则是否属于操作的元数据:
是:操作的元数据包含相应规则。系统预计它会在操作执行时触发。
否:此操作的元数据不包含相应规则,但其逻辑与生成的事件匹配并触发了该操作。
下表可帮助您确定结果:
| “与操作相关”列 | 检测次数列 | 具体含义 |
|---|---|---|
YES
|
1 或更多
|
成功:预期规则成功触发了一项或多项检测结果。 |
NO
|
1 或更多
|
相应活动触发了意外规则。 |
YES
|
0
|
预期规则未能触发任何检测结果。 |
分析关联事件
运行 Security Validation 操作后,您可以使用相关事件来评估您的环境和安全控制措施对模拟威胁的响应情况。
分析包含两个部分:关联工作流程的实时状态和所有已生成事件的详细表格。
事件关联状态显示当前工作流状态,可以是以下状态之一:
正在运行:系统正在积极搜索相关事件。
已完成:所有事件相关活动均已成功完成。
出错:关联工作流遇到了错误,无法完成。
关联工作流完成时间表示关联预计完成或已完成的时间估计值。
“Events”表格列出了该操作生成的所有事件。您可以使用这些数据来分析环境和安全控制措施中的各个回答。
该表格包含以下各列:
活动:活动 ID。点击可在 UDM 搜索中查看事件详情。
事件时间戳:事件在源系统(例如服务器或防火墙)上发生的时间。
观测到的时间戳:安全验证服务发现事件并将其与执行相关联的时间。
产品:生成事件的产品。
安全结果操作:事件的结果(
Blocked或Not blocked),基于 UDM 事件的security_result.action字段。
操作对象可能包括运行操作的 Google SecOps 实例以外的区域。执行结果会显示从执行项目中检索到的日志。
访问高级素材资源和参考文件
请查看以下资源,了解配置示例和参考数据映射。
实现示例:使用 signJWT 生成访问令牌
不妨考虑一下使用 signJWT 权限操作生成访问令牌的示例。此示例假定您已设置安全验证上下文,并且正在该上下文中运行操作。该操作预计会生成 Cloud Audit Logs,并触发 signJWT 威胁检测规则来生成访问令牌。
需要进行以下设置:
已启用的 API:必须在目标项目和执行项目中都启用 Identity and Access Management (IAM) 服务账号 Credentials API。
服务账号权限:安全验证上下文的
profile字段中指定的服务账号必须在目标项目中拥有iam.serviceAccounts.signJwt权限。可以通过 Service Account Token Creator 角色 (roles/iam.serviceAccountTokenCreator) 授予此权限。此角色可以授予给项目或目标服务账号(对于此操作,目标服务账号是目标项目的默认 Compute Engine 服务账号)。IAM 审核日志记录:必须在目标项目中启用 IAM 审核日志记录 (
ADMIN_READ),才能捕获此操作生成的事件。自定义导出过滤条件:如需通过 SecOps Google Cloud 注入来注入此操作生成的事件,必须设置包含
log_id("cloudaudit.googleapis.com/data_access")的自定义导出过滤条件。规则集:必须启用“Cloud 威胁”> [Google Cloud]“IAM 滥用”规则集,并将其设置为提醒,才能在搜索和调查视图中看到检测结果。
监控时间安排示例
在为持续监控配置周期性安排时,请参考以下示例。
| 配置 | 运行时间 |
|---|---|
| 时间:在特定时间(晚上 10:00)运行 天数:星期几(星期一) 月份:每月 时区:美国东部标准时间 |
每周一晚上 10 点(美国东部标准时间)运行。 |
| 时间:在特定时间 (01:00) 运行 天数:每月第 1 天 月份:指定(1 月、4 月、7 月、10 月) 时区:太平洋标准时间 |
在 1 月、4 月、7 月和 10 月第一天的凌晨 1:00(太平洋标准时间)运行。 |
| 时间:在特定时间(14:00)运行 天数:每天 月份:每月 时区:世界协调时间 (UTC) |
每天下午 02:00(世界协调时间)运行。 |
| 时间:在特定时间 (09:30) 运行 天数:每月中的某一天 (15) 月份:指定月份(2 月、4 月、6 月、8 月、10 月、12 月) 时区:美国东部标准时间 |
在每隔一个月的 15 日(2 月、4 月、6 月、8 月、10 月、12 月)美国东部标准时间上午 9:30 运行。 |
|
时间:每小时重复一次 间隔:每 1 小时 小时:所有小时 |
不间断运行。每天 24 小时,在每个小时开始时精确执行一次(例如,1:00、2:00、3:00 等)。 |
|
时间:每小时重复一次 间隔:每 4 小时一次 小时:开始和结束小时(22:00 至 6:00) |
仅在夜间运行。在晚上 10:00、凌晨 2:00 和早上 6:00 执行,以捕获低流量期间的服务器状态。 |
问题排查
延迟和限制
由于存在相关性窗口,新触发的监控器运行的结果不会立即填充检测和事件数据。
错误修复
| 错误 | 问题说明 | 修复 |
|---|---|---|
| IAM 权限错误 | 服务账号的权限遭拒 (iam.serviceaccounts.actAs)。
|
如果您在运行操作之前刚刚创建或更新了上下文,请等待几分钟,然后重试。IAM 更改是一致的,但角色分配可能需要一段时间才能在整个系统中传播。 验证执行操作的身份是否对指定的服务账号拥有 `iam.serviceaccounts.actAs` 权限。 |
验证和测试
如需验证您的监控器是否已正确配置,而无需等待下一个预定间隔,请使用监控器详情页面上的立即运行按钮。 在相关性窗口期结束后刷新页面,以验证运行状态。