Runtime安全

Runtime安全为运行中的容器提供主动防护,主要实现方法是检测并阻止容器内发生恶意活动,减少应用程序的攻击面。

通过Seccomp等手段限制容器应用对内核进行系统调用

  • 配置容器或Pod以使用Seccomp配置文件

    Linux操作系统有几百个系统调用,但其中大部分不是运行容器所必需的。要开始使用Seccomp,请使用Strace生成堆栈跟踪以查看您的应用程序正在进行哪些系统调用,然后使用诸如Syscall2seccomp之类的工具根据从Strace收集的数据创建Seccomp配置文件。更多信息,请参见stracesyscall2Seccomp

    与SELinux不同,Seccomp并非旨在将容器彼此隔离,而是保护主机内核免受未经授权的系统调用。工作原理是拦截系统调用并只对列入白名单的系统调用放行。Docker有一个默认的Seccomp配置文件,适用于大多数通用工作负载。containerd运行时也包含默认的Seccomp配置文件。更多信息,请参见默认的Seccomp配置文件

    您可以通过向容器或PodSpec添加以下内容来配置容器或Pod以使用此配置文件。

    • Kubernetes 1.19之前版本:

      annotations:
        seccomp.security.alpha.kubernetes.io/pod: "runtime/default"
    • Kubernetes 1.19及之后版本:

      securityContext:
        seccompProfile:
          type: RuntimeDefault
  • 使用RuntimeDefault特性

    只适用于v1.22以上集群。SeccompDefault于社区1.22版本进入Alpha阶段,并在1.27版本正式GA。请您参考集群版本在生产环境中谨慎开启使用。开启的方式为:

    1. SeccompDefault特性在1.22至1.24版本间默认不开启,需要在节点kubelet配置中添加--feature-gates参数,指定SeccompDefault=true开启特性门控。

    2. 在节点kubelet配置中添加--seccomp-default启动参数,开启RuntimeDefault特性。

    3. 重启kubelet服务完成开启。

    开启后在节点上部署的Pod会自动使用节点运行时默认提供的Seccomp配置文件,在应用中将无法使用默认配置白名单外的系统调用。对于生产集群,请您在充分测试后开启使用。

  • 使用第三方解决方案进行Seccomp和AppArmor配置的维护

    当使用运行时默认提供的Seccomp配置文件无法满足业务需要时,您可以使用自定义的Seccomp配置文件。如果您对Linux安全不熟悉,那么创建和管理Seccomp和AppArmor配置文件将会很困难。如果您没有资源自行维护这些配置文件,请考虑使用商业解决方案。有许多比AppArmor和Seccomp等静态配置防护更加优越的第三方解决方案,已经开始使用机器学习来对异常活动进行阻断或告警。

  • 编写Seccomp策略之前考虑添加或删除Linux Capabilities

    Capabilities涉及对系统调用可访问的内核函数的各种检查。如果检查失败,系统调用通常会返回错误。检查可以在特定系统调用开始时进行,也可以在内核中多个不同系统调用(例如写入特定特权文件)可访问的区域中进行。另一方面,Seccomp是一个系统调用过滤器,在运行之前应用于所有系统调用。一个进程可以设置一个过滤器,这允许Seccomp撤销运行某些系统调用或某些系统调用的特定参数的权限。

    在使用Seccomp之前,请考虑添加或删除Linux capabilities来检验是否能按预期控制应用程序的行为。更多信息,请参见Set capabilities for a Container

使用配置巡检动态检查应用负载中的安全隐患

通过使用ACK提供的安全配置巡检功能,可以实时检测集群工作负载中不安全的配置项,并通过直观的报表展现给安全运维人员。当巡检完成时,您可以通过阅读巡检报告中的检查项和对应的修复建议加固工作负载的配置安全。

使用阿里云云安全中心

在云原生应用运行阶段,实现基于云安全中心的应用运行时威胁检测与阻断,实时保障每个应用Pod的安全运行。云安全中心基于云原生的部署能力,实现威胁的数据自动化采集、识别、分析、响应、处置和统一的安全管控。利用多日志关联和上下文分析方案,实时检测命令执行、代码执行、SQL注入、数据泄露等风险,覆盖业务漏洞入侵场景。结合K8s日志和云平台操作日志实时进行行为审计和风险识别,实现容器服务和编排平台存在的容器逃逸、AccessKey泄露、未授权访问风险。更多信息,请参见什么是云安全中心