容器安全-运行时控制

人们在享受着容器技术便利性的同时,往往会忽略对容器环境的安全加固。在弹性的容器环境中配置安全监控和防护软件显然是个费时费力且消耗资源的事情。甚至很多人认为对镜像做个漏洞扫描,更新一下镜像版本就安全了,但在黑客眼里,这些容器和裸奔没什么区别。那么在这些容器对外提供服务的同时,我们又该如何保护他们免受0-day等高级攻击呢?其实在这里我们可以利用容器的一个重要的特性,那就是容器的行为都是事先预定且固化的,任何超出预定范围内的行为都代表着异常和攻击。在Aqua Security中,您可以充分利用了这个特性来保护运行着的容器。

运行时保护合规要求

Aqua Security平台中默认包含了满足NIST,PCI,HIPAA和GDPR等要求的运行时保护策略模板

1

命令白名单

容器运行的命令都是固化的,在Aqua Security中,我们可以限定在容器内可以运行的命令。比如在nginx容器中只需给予运行nginx命令的权限,任何其他命令都不允许执行,这样即使黑客利用种种手段进入nginx容器后,他也无法进行任何进一步的渗透和攻击

Aqua Security还可以学习容器的运行命令,帮助用户制定白名单规则

2

阻断镜像外的可执行程序

背景:黑客在进入系统后,往往会注入更多的工具进行攻击,比如渗透工具或挖矿软件等。而如果是开发人员直接在容器中注入镜像外的可执行程序则相当于绕开了镜像安全扫描管控

解决方案:Aqua可以阻止镜像外的可执行程序运行

使用运行时控制避免容器成为矿机

通过“命令行白名单”或“阻断镜像外的可以执行程序”功能,AquaSec可以使您的容器无法运行挖矿等恶意软件

3

文件保护

背景:容器中大部分目录都是静态的,包括如bin, lib,usr等系统目录。关键的应用目录也应该设置只读保护以防止黑客进行篡改和攻击。

解决方案:Aqua可以将这些目录限制为只读目录,从而大大提高了系统和应用的安全性。

4

容器启动参数控制

背景:镜像中的entrypoint, cmd, volumes, env, ports, users, workdir参数限定了容器运行的行为,然而这些参数可以在启动镜像时被启动参数所覆盖,这就导致了容器行为无法受控。比如用户可以以bin/bash启动容器从而进入到容器内部shell,或挂载docker主机上的重要系统文件带来安全隐患和风险。

同时,以下2个参数启动的容器是不安全的:

以privileged参数启动的容器拥有接触docker主机上的所有device的权限

以network:host参数启动的容器拥有充分访问本地系统服务的权限,如D-bus

解决方案:Aqua可以阻止用户启动时覆盖entrypoint,cmd, volumes, env, ports, users, workdir参数。同时也可以阻止以--privileged和--network:host命令启动容器

5

只读控制

只读控制可以使得容器变成只读容器,任何对其的修改都将是不允许的

6

容器运行权限

背景:

Secure computing mode(Seccomp)是Linux kernel功能,用户可以通过Seccomp来控制容器的运行权限。默认Docker仅禁止了300多个Seccomp中的44个,无法达到安全控制要求

Linux Capability控制了特权用户的运行权限。Docker支持添加和删除Capability,对于用户来说,最好的做法是去除所有非必要的Capability,但实际生产中往往会忽略该安全设置

解决方案:Aqua可以设置Seccomp profile并设置去除的LinuxCapability,该设置可以覆盖容器设置确保所有容器满足安全规范

在Linux环境有超过330个可用的系统调用(system call),它们是一个重要的攻击面,可能导致操作系统级内核攻击。实际上应用程序只使用了一小部分系统调用,为了降低这种风险,Linux社区创建了seccomp(secure computing mode)使得开发人员可以禁用不需要的系统调用。Docker在其默认的seccomp配置文件中禁用了50个系统调用来运行Docker容器。但是,这仍然会启用超过250个系统调用,其中大部分都不是容器应用程序所必需的。虽然最佳实践是禁用不需要的系统调用,但为应用程序创建自定义seccomp profile很困难,因为它需要深入了解应用程序会如何使用系统调用,这就是大多数情况下人们只会使用docker默认的系统调用配置的原因。

AquaSec通过动态分析正在运行的容器的系统调用来获得容器应用程序实际需要的seccomp权限,从而使得自定义seccomp权限变得可行。由于典型的容器仅使用40-70个系统调用,因此可以显着减少给定服务的可用系统调用范围,从而将攻击面减少多达90%

7

挂载目录控制

Aqua可以控制容器允许挂载docker主机的目录并设定挂载的权限

8

消耗资源控制

Aqua可以控制容器允许消耗Docker主机的资源及最大允许运行的进程数

9

环境变量加密

背景:容器的环境变量中往往会包含密码和敏感信息,而拥有Inspect权限的用户可以轻易的查看到容器的环境变量从而导致信息的泄露

解决方案:Aqua可以对容器的环境变量进行加密

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180725G0XTHT00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

同媒体快讯

扫码关注云+社区

领取腾讯云代金券