关于 Security-Guard¶
Security-Guard 通过监控用户容器和事件的行为,提供对已部署 Knative 服务的安全性状况的可见性。Security-Guard 还支持根据行为对事件进行可选的阻止以及终止用户容器实例。
Security-Guard 配置文件和标准¶
Security-Guard 创建每个用户容器行为和每个事件行为的配置文件。然后将这些行为与预定义的标准进行比较。如果配置文件不符合标准,Security-Guard 可以记录警报、阻止行为不当的事件或停止行为不当的服务实例,具体取决于用户配置。
与配置文件进行比较的标准由一组微规则组成。这些规则描述了事件和用户容器的预期行为,包括预期响应。您可以选择手动设置微规则,或使用 Security-Guard 的机器学习功能来自动创建微规则。
守护程序¶
每个服务的微规则集存储在 Kubernetes 系统中,作为 Guardian
对象。在 Knative 中,Security-Guard 使用 guardians.guard.security.knative.dev
CRD 存储守护程序。
要列出所有 CRD 守护程序,请使用
kubectl get guardians.guard.security.knative.dev
示例输出
NAME AGE
helloworld-go 10h
使用 Security-Guard¶
Security-Guard 通过将其警报写入服务队列代理日志来提供情景意识。您可以观察队列代理以查看警报。
安全警报出现在队列代理日志文件中,并以字符串 SECURITY ALERT!
开头。Security-Guard 的默认设置是在报告新模式后学习任何新模式。默认情况下,Security-Guard 永远不会阻止事件,也不会停止服务实例。
当部署新的服务并正在积极地服务请求时,Security-Guard 通常需要大约 30 分钟才能学习服务请求和响应的模式并构建相应的微规则。在初始学习阶段之后,Security-Guard 会更新服务守护程序中的微规则,之后,它只会在检测到行为变化时发送警报。
请注意,在默认设置中,Security-Guard 会继续学习任何新行为,因此当新行为再次发生时,它会避免重复报告警报。正确的安全程序应包括审查 Security-Guard 检测到的任何新行为。
Security-Guard 也可以配置为以其他操作模式运行,例如
- 在初始学习阶段之后,从自动学习转向手动微规则管理
- 当请求/响应不符合微规则时,阻止请求/响应
有关更多信息或故障排除帮助,请参阅 Knative Slack 中的 #knative-security 频道。
Security-Guard 用例¶
Security-Guard 从安全角度支持 Knative 服务生命周期中的四个不同阶段。
- 零日漏洞
- 易受攻击
- 可利用
- 滥用
接下来,我们将详细介绍每个阶段以及 Security-Guard 如何在该阶段用于管理服务的安全性。
零日¶
在正常情况下,拥有服务的 Knative 用户不知道服务中存在任何已知漏洞。但是,可以合理地假设服务存在弱点。
Security-Guard 为 Knative 用户提供检测/阻止作为传入事件的一部分发送的模式的能力,这些模式可能被用于利用未知的零日服务漏洞。
易受攻击的¶
一旦发布描述服务漏洞的 CVE,拥有服务的 Knative 用户需要启动一个过程来通过引入服务的新修订版来消除漏洞。此删除已知漏洞的过程可能需要数周才能完成。
Security-Guard 使 Knative 用户能够设置微规则来检测/阻止包含模式的传入事件,这些模式可能被用作针对已发现漏洞的未来某些攻击的一部分。这样,用户就可以继续提供服务,即使服务存在已知漏洞。
可利用的¶
当发现已知漏洞有效地损害服务时,拥有服务的 Knative 用户需要一种方法来过滤包含特定漏洞的传入事件。这通常是在成功攻击期间发生的,其中有效的漏洞能够损害用户容器。
Security-Guard 使 Knative 用户能够设置微规则来检测/阻止包含特定漏洞的传入事件,同时允许其他事件被服务。
误用¶
当攻击者建立能够接管服务实例的攻击模式时,首先利用一个或多个漏洞,然后开始误用服务实例,停止服务实例需要攻击者重复攻击模式。在任何给定时间,一些服务实例可能被入侵和误用,而其他实例则按设计运行。
Security-Guard 使 Knative 用户能够检测/删除误用服务实例,同时允许其他实例继续服务事件。
其他资源¶
请参阅 Security-Guard Github 仓库 中的 Readme 文件。