容器世界中的漏洞研究
2023-4-17 11:24:0 Author: xz.aliyun.com(查看原文) 阅读量:13 收藏

国内关于云原生安全的书籍讲解得都不是很深入,在偶然的一次机会找到了Liz Rice的《Container Security》的这本书,从书籍的目录来看,对于容器安全、云原生安全的知识讲解较为全面,我大致看了几章内容,讲得较为深入且娓娓道来。

因此为了让更多人了解容器安全,也为了记录自己的一个学习过程,本文从第2部分开始翻译自《Container Security》的第7.1 章节内容,主要介绍了漏洞行业的相关基础研究,主要为后期镜像漏洞扫描技术的讲解奠定基础。本文结构如下所示:

给软件中漏洞打补丁一直以来都是维护已经部署的代码的安全的一个重要的方向。在容器世界中,这任然一个具有相关性的问题。但是在这一章中,你会认识到打补丁的过程完全被重塑了。不过,首先我们来介绍一下,什么是软件中的漏洞以及他们是怎么被发布和跟踪的。

1.1 package、software和library

  • Software软件):是指能够实现某种特定功能的计算机程序或程序集合。软件包括各种不同的程序类型,如应用程序、操作系统、驱动程序、游戏等。它们通常由多个模块组成,这些模块可能来自不同的软件包或库。
  • Package软件包):软件包是指一组相关联的文件或模块,通常包括源代码、可执行文件、配置文件、文档和依赖项等。软件包可以包含一个或多个程序或库,它们可以在不同的操作系统和平台上进行安装和使用。软件包的设计旨在方便安装、升级和卸载软件。
  • Library):库是指一组可重用的代码和函数,通常提供了一组API(应用程序接口)来执行某些特定的任务。库可以用于多个应用程序中,从而避免在每个应用程序中都编写相同的代码。库可以是静态库或动态库,它们可以在编译时或运行时链接到应用程序中。

软件是一个能够实现某种特定功能的计算机程序或程序集合;软件包是一组文件和依赖项的集合,可以包含一个或多个程序或库;库是一组可重用的代码和函数,可以用于多个应用程序中。在软件开发过程中,包、软件和库都起着重要的作用,可以帮助开发人员提高开发效率和代码质量。

1.2 issue、flaw和vulnerability

  • Issue问题):问题是指任何可能导致系统或产品不完美的情况,问题不一定是安全漏洞。
  • flaw缺陷):缺陷是指设计或实现过程中的错误或不足,可能导致系统或产品无法正常工作或者存在安全漏洞。
  • Vulnerability漏洞):漏洞是指系统或产品中的弱点或缺陷,使攻击者能够利用它来获取未授权的访问、数据或执行其他危害性行为。

一个问题或缺陷不一定会导致漏洞,但漏洞一定源于问题或缺陷。例如,一个网络应用程序的漏洞可能源于开发人员没有考虑到某些用户的输入数据可能包含恶意代码,这就是一个缺陷,它使攻击者可以利用该缺陷进行攻击,这就是漏洞。

1.3 Expose和Exploit

  • Expose揭露指的是发现和揭露网络系统或应用程序中存在的漏洞和安全问题。这可能是通过渗透测试或其他安全审计方法实现的,目的是发现潜在的漏洞并提供解决方案以确保系统的安全性和完整性。
  • Exploit利用揭露指的是利用已知的漏洞或弱点来攻击或入侵网络系统或应用程序,以获取未经授权的访问或执行恶意操作。黑客或攻击者通常使用漏洞来获得未经授权的访问或控制系统或应用程序,从而获取敏感信息或执行有害操作。

Expose旨在识别和解决漏洞以保护系统的安全性和完整性,而Exploit则是利用这些漏洞来获取未经授权的访问或执行恶意操作。

1.4 patch和fix

  • Patch补丁):补丁是指为了修复软件中已知的问题而发布的临时性更新程序。补丁通常是在软件的旧版本基础上进行更新,通过修改已有的代码或添加新的代码来修复软件中的漏洞或错误。补丁通常是针对特定的问题或漏洞,因此补丁通常比完整的软件更新更小,只修复软件中的特定问题。
  • Fix修复):修复是指为了解决软件中已知的问题而进行的永久性更改。修复通常是在软件的新版本或补丁的基础上进行,通过修改软件中的代码或者设计来消除软件中的问题。修复通常不仅限于解决一个特定的问题,而是针对软件中的整体性能、稳定性和安全性进行优化。

因此,补丁和修复都是为了解决软件中的问题而进行的操作。补丁通常是一个临时性的解决方案,仅仅针对软件中的特定问题进行修复,而修复则是一个永久性的更改,针对软件中的整体性能和安全性进行优化。在软件开发过程中,补丁和修复都是非常重要的操作,可以帮助软件开发人员及时修复问题并提高软件的稳定性和可靠性。

漏洞是软件的一种已知的缺陷flaw),攻击者可以利用这个缺陷来进行一些恶意的活动。通常,你可以认为一个软件越复杂,有这种已知的缺陷的可能性就越大,甚至有些缺陷可以被利用的exploitable)。

当一个通用的软件存在漏洞时,无论漏洞在哪里,攻击者也许都就可以进行利用。因此,整个漏洞研究行业都致力于发现并报送公开可用的软件中的新的漏洞。特别是一些操作系统的软件包package)和语言的library)。

你可能听说过一些最具破坏性的漏洞,像是shellshock、Meltdown和Heartbleed。这些漏洞不仅仅是一个名字,有时甚至是一个标识。这些漏洞是漏洞世界中的摇滚明星,但他们仅是每年报送的成千上万个问题issue)中的一个小小的碎片。

一旦一个问题被认为是一个漏洞,一场用户与攻击者的竞赛就开始了,在这场竞赛中,用户需要在攻击者利用问题之前,获取并部署好一个可以修复问题的发布程序来修复问题。

如果立即公布新问题,这将为攻击者创造一个完全免费的利用问题的条件。为了避免这件事情的发生,一个负责任的安全纰漏responsible security disclosures)的概念诞生了:发现漏洞的安全研究人员会与相关软件的开发人员或供应商联系。双方可以约定一个时间,在这个时间之后,安全研究员就可以公布他的发现了。

这样做也给供应商施加了一些积极的压力,这会要求供应商努力及时提供修复程序,因为对于供应商及其用户来说,在安全研究员公布其发现之前都可以提供修复程序。

然后,这个新的问题将会获得一个以CVE(Common Vulnerabilities and Exposures常见漏洞和暴露)开头的唯一标识符。CVE标识符后面紧接着是年份。例如,Shell-Shock漏洞于2014年被发现,正式称为CVE-2014-6271。

管理CVE编号的组织叫做MITRE,并且他还会监督许多CVE编号机构CVE Numbering Authorities,CNA)。所谓CVE编号机构指的是一些可以在特定范围内签发CVE编号的机构,这通常是一些大型的软件供应商。例如微软、Redhat和Oracle,他们都可以为自己产品中的漏洞分配编号。GitHub在2019年底成为CNA。

这些CVE编号被美国国家漏洞数据库National Vulnerability Database,NVD)用来跟踪受漏洞影响的软件包和版本。

乍一看,你可能会认为这就是故事的结局:有一个受影响的所有软件包版本的列表,所以如果你有一个在受影响的软件包版本列表的软件,漏洞就会被揭露expose),但不幸的是,它并没有那么简单,因为根据您使用的Linux发行版本,不同的Linux发行版本可能会有不同的软件包补丁版本。


文章来源: https://xz.aliyun.com/t/12437
如有侵权请联系:admin#unsafe.sh