叫狼的安全扫描仪

2021-03-13 00:19:44

如果您在Docker Image上运行安全扫描仪,您可能正在震惊:通常您通常会警告数十个安全漏洞,即使是最新的图像。在您获得的第三或第四次此结果,您将开始调整安全扫描仪。

最终,您不会关注所有人的安全扫描仪 - 您可能最终缺少缺少的真正安全漏洞。

这不是您的错:问题是许多安全扫描仪报告其结果的方式。所以让我们看看它们的输出,为什么它是有问题的,以及如何获得更多有用的安全扫描仪结果。

假设我创建了以下Dockerfile,在撰写本文时使用最新稳定的Debian发布:

最后我将它推到一个众所周知的Docker Image Registry Service.i将不提到它的名称,因为这不是任何特定的服务,它是关于一般问题。

图像注册表执行安全扫描,并回到此图像中有62个不同的安全漏洞。它们的严重程度很高!

除了......这个图像具有Debian的每一个安全更新。它是稳定的发布,Debian是一个备受尊敬的Linux发行版,它会出现及时的安全更新 - 发生了什么?

正如我们所见,几乎基于Debian稳定的每一个图像都将是不安全的。如果这是您的默认基础图像(因为它是基于高山不是基于高山的最官方Docker图像),这意味着您的所有图像将被标记为不安全。

这意味着你将开始忽略这些结果;不是一个好的结果!

或者,您可能希望尝试修复这些漏洞 - 但是究竟如何?在此示例中,我务必安装所有更新,您还能做什么?

安全扫描仪结果的问题是它的列表CVES永远不会在此版本的Debian稳定中修复。事实上,其中一些将永远不会修复,在此或任何未来的发布中。这是由于一个数字原因:

它不是可以在稳定的长期支持释放的边界内固定的东西。

幸运的是,许多这些漏洞也与大多数或所有集装箱运行时环境无关。

让您了解我所谈论的内容,让我们看看列表中的一些漏洞。

听起来很糟糕,不是吗?但是注意到它是从2017年开始的 - 为什么它没有关闭?

GNU C库(AKA Glibc或Libc6)中的XDR_Bytes和XDR_String函数2.25缓冲区反序列化的失败,这允许远程攻击者导致拒绝服务(如果未使用过度光彩设置,则虚拟内存分配或内存消耗)通过将UDP数据包制成到Port 111,CVE-2017-8779的相关问题。

首先,除非您在容器内运行NFS服务器或客户端 - 似乎非常不可能 - 这不是您需要担心的。

其次,如果我们按照链接,我们最终会发现维护者争议这是一个Glibc问题,并考虑它的应用程序漏洞。众多人的感觉是,无论谁拨打这些API都需要以适当的方式做到这一点来使其能够实现它。所以似乎这永远不会在glibc中得到修复。

在GNU Coreutils中的Chroot,与-Userspec一起使用时,允许本地用户通过制作的TioCSTI IOCTL呼叫将字符推向终端的输入缓冲区。

首先,您不太可能依赖Chroot命令行工具进行容器内的安全性。

其次,似乎维护者不会解决这个问题; Debian安全跟踪器中有一个说明:

限制内核方面的IOCTL似乎更好的方法,但是通过Linux上游拒绝。通过SetsID()将此问题介绍回归。

看起来它听起来像开发人员添加了一个新的选项,使这个工具更安全,但默认行为不会发生变化。没有太多的debian可以在没有破坏兼容性的情况下做到这一点。

stack_protect_prologue在cfgexpand.c和stack_protect_epileogue中的gnu编译器集合(gcc)4.1到8(在某些情况下)在捕获堆栈保护器警卫地址的ARM目标时生成指令序列,这允许攻击者绕过保护 - 保护器,-fstack-protector-all,-fstack-protector-strong,和-fstack-protector通过控制堆栈金丝雀与堆栈溢出而明确。

基本上,如果您在ARM.UNLES上运行,您的C代码将更容易受到堆栈溢出攻击,即时您正在使用AWS上的Graviton实例,您可以在x86_64上进行机会,而且这个cve是无关紧要的。

从Debian的角度来看,他们不会在稳定的版本中改变为GCC的一个主要的新版本。当他们将在可能的情况下,他们将在可能的情况下,在这种情况下,他们说这是“过于侵入的侵入性”。

如果您确实需要此修复,则无法在Debian Buster稳定发布的范围内获得它;只有新的Debian稳定的船用较新的GCC发布时,它只可用。

让我们基于它们的通用基础映像创建Docker图像,版本匹配RHEL 8,并安装更新:

如果我们通过相同的安全扫描仪运行生成的图像 - 没有安全漏洞!

看着我们考虑的前两个CVES,RedHat与Debian相同的决定:这两个问题都被关闭为WONTFIX(1,2)。

那么为什么基于Debian的图像有这么多列出的安全漏洞,而RedHat没有?它似乎是某种报告或数据问题。对于WontFix类别中的安全问题,用于WONTFIX类别中的漏洞数据库安全扫描仪具有标记为redhat的安全问题,但不是debian.it对我不清楚,在沟通链和解释链中发生这种问题。

但是,虽然这很烦人,但它并没有真正告诉我们Debian与Redhat的安全性。它只是意味着我们为RedHat获得更多有用的安全扫描仪输出。

让我们回来吧,想想为什么我们首先想要一个安全漏洞。

除非您拥有组织资源来为第三方软件创建自定义安全修补程序,这不太可能,您将依赖于Linux发行版的安全更新。安全性的实践包括将这些更新作为Docker的一部分安装这些更新图像构建。

因此,安全扫描仪的点是捕获您忘记执行此操作的情况,或者更新过程失败(例如,由于Docker Build Caching)。

换句话说,你真正想知道的是你是否无法安装安全更新。

幸运的是,许多安全漏洞扫描仪都有一个选项。命令行Trivy Security Scanner具有一个名为--ignore-Unixed的选项。本文中使用的基于注册表的安全扫描程序具有复选标记,以“仅显示可配置”复选标记。

因此,请务必始终使用这些选项,并且您的安全致力扫描仪输出将变得更加有用。

sidenote:如果您碰巧在安全扫描仪上工作,请确保扫描仪具有“仅显示可固定”选项,并确保默认情况下。

安全扫描仪对于检测不仅在您的系统包中的漏洞,而且在您的Python依赖项中,甚至是您自己的代码,甚至是我们正在谈论Docker,确保Docker Build缓存不会破坏安全更新。

看着更大的画面,我们已经学到的一件事是许多安全漏洞永远不会得到修复。以上甚至很不可能,这是真的,但也许其中一个恰好适用于你的特定设置。有机会还有更多尚未发现的严重漏洞。

因此,您应该进一步措施确保您的Docker Image是Secure.two示例:

要降低特权升级攻击的风险,请不要以root身份运行并禁用所有功能。

不要写C和C ++,而是使用像Python这样的内存安全语言,或者如果您正在扩展Python,则会生锈;多达70%的安全漏洞是由于内存不安全。

了解如何快速构建,生产就绪Docker图像 - 阅读Python的其他Docker打包指南。

与十几个不同的交叉技术,以及未知数量的细节,以获得正确的,码头包装ISN' T简单,特别是生产。

但您仍然需要节省您的时间快速构建,以及让您安全的安全最佳实践。

通过在Docker生产手册上使用Python来获取最佳实践的快速路径。

注册我的时事通讯,加入超过2600多个Python开发人员和数据科学家学习实用工具和技术,从Docker包装到测试到Python最佳实践,每周在您的收件箱中有一个免费的新文章。