当前位置: 首页 > 科技观察

微服务和容器安全应用的十个最佳实践

时间:2023-03-16 02:20:35 科技观察

undefined恶意软件攻击带来的安全风险主要包括:黑客可以访问容器并向其中注入恶意代码,恶意代码可以通过该容器攻击容器、其他容器或宿主操作系统中的微服务;恶意攻击者会危害企业的CI/CD环境,将恶意软件注入用于构建容器镜像的源代码库;攻击者破坏容器注册表并替换包含恶意软件的图像;攻击者诱骗开发人员从外部来源下载恶意容器镜像。3、代码访问相关风险访问和修改代码的人越多,安全风险就越大,最常见的情况是:访问权限过高。许多开发公司选择DevOps方法来使用微服务和容器构建应用程序,这可能会导致访问权限过于广泛,从而增加分布式工作环境中恶意代码修改的风险。保密管理薄弱。由于安全措施不佳或违反安全规则,许多人可以获得对容器的访问权限。例如,开发人员可能会将在脚本中编码的凭据放入容器中,或者将凭据存储在配置不安全的密钥管理系统中。4.容器之间的无限制通信通常情况下,容器不能访问任何外部资源,这被称为非特权模式。工程师应该只允许应用程序正常运行所必需的容器间通信。每当容器的通信权限超过严格要求时,都会导致额外的安全风险。由于缺乏经验或管理不善而导致的错误配置可能会使容器获得过多的特权。5.不安全的数据管理微服务系统的分布式架构使得数据安全管理更具挑战性,因为很难控制对单个服务的访问和安全授权。因此,工程师必须更加关注如何确保每个服务内数据的机密性、隐私性和完整性。另一个问题是,微服务中的数据在不同的服务中不断地移动、变化、使用,这就为攻击者创造了更多的数据窃取攻击点。6.错误配置的工具在开发和维护微服务架构时,DevOps团队需要使用大量的工具,包括开源和第三方工具。虽然此类工具可帮助工程师实现DevOps管道所需的效率,但他们难以确保所需的安全性。如果不对开源工具的安全功能进行准确评估,组织就有可能在微服务和容器中产生漏洞。即使工具本身是安全的,如果设置不当,也会出现许多安全问题。微服务和容器安全的最佳实践如何选择合适的安全措施来应对上述风险可能是一个挑战。原因是容器和微服务都因其应用程序的简单性和速度而对开发人员极具吸引力。如果安全措施减慢并使开发过程复杂化,它们很可能会被开发人员抵制或故意忽略。为了帮助企业在安全的情况下高效使用容器和微服务进行应用系统开发,本文收集了10个有用的最佳实践。1.创建不可变容器开发人员通常会保留对图像的shell访问权限,以便在生产中修复图像。但是,攻击者经常使用此路由来注入恶意代码。为避免这种情况,您可以创建不可变容器。不可变容器无法更改。如果用户需要更新应用程序代码、应用补丁或更改配置,他们可以重建镜像并重新部署容器。如果用户需要回滚他们的更改,他们可以简单地重新部署旧映像。需要注意的是,容器的不可变特性会影响数据的持久化。开发人员应将数据存储在容器外部,以便在更换容器时,所有数据仍可用于新版本。2.将自动化安全测试集成到CI/CD过程中有多种工具可以在CI/CD过程中自动测试容器。例如,HPFortify和IBMAppScan提供动态和静态应用程序安全测试。JFrogXray和BlackDuck等扫描仪也可用于实时检查容器中是否存在已知漏洞。一旦此类工具发现漏洞,它们将标记检测到的问题部分以供检查和修复。3.避免使用特权容器如果容器以特权模式运行,它可以访问主机上的所有组件。如果此类容器遭到破坏,攻击者可以获得对服务器的完全访问权限。因此,您应该考虑尽可能避免使用特权容器。例如,在Kubernetes中,可以使用策略控制器(PolicyController)来禁止特权容器。如果出于某种原因您需要使用特权容器,GoogleCloudArchitectureCenter提供了几种替代方案:通过Kubernetes的securityContext选项为容器提供特定功能在sidecar容器或init容器中修改应用程序设置在Kubernetes中使用私有注释sysctls接口4.建立一个可信图像库开源社区会为开发者提供很多带有容器的开源软件包。但出于安全考虑,开发者需要了解容器的来源、更新时间以及是否包含漏洞和恶意代码。最好建立一个可信图像的存储库,并且只运行来自这个可信来源的图像。如果您想使用其他来源的图片,建议您先用扫描工具扫描图片。此外,开发人员应在将容器部署到生产环境之前检查脚本中的应用程序签名。如果您在多个云中运行容器,则需要有多个安全图像存储库。5.使用注册中心管理镜像DockerHub、AmazonEC2ContainerRegistry和QuayContainerRegistry等注册中心可以帮助开发人员存储和管理他们创建的镜像。这些注册表可用于执行以下操作:提供基于角色的访问控制指定容器的可信来源创建和更新已知漏洞列表标记易受攻击的图像基于角色的访问控制很重要,因为需要控制谁可以更改容器。最好将访问权限分配给不同的管理帐户:一个用于系统管理,另一个用于操作和编排容器。另一点要记住的是,您应该确保注册表验证每个容器的签名,并且只接受来自可信来源的容器。此外,利用有助于持续检查图像内容是否存在已知漏洞并报告安全问题的功能。6.加固宿主操作系统要保证微服务和容器的应用安全,就必须保证宿主操作系统的安全。首先,建议组织使用特定于容器的主机操作系统(明确设计为仅运行容器的精简主机操作系统),因为它们没有不必要的功能,因此攻击面比通用主机小得多系统。其次,CISDockerBenchmark提供了一个加固系统的清单。主要建议如下:建立用户身份验证设置访问角色指定二进制文件访问权限收集详细的审计日志为避免数据泄露,容器应限制对底层操作系统资源的访问,并将容器彼此隔离。一个好的做法是在内核模式下运行容器引擎,同时在用户模式下运行容器。例如,Linux提供了Linux命名空间、seccomp、cgroups和SELinux等技术来安全地构建和运行容器。7.用纵深防御方法保护微服务纵深防御可以结合多种安全机制和控制,例如防病毒软件、防火墙和补丁管理,以保护网络和数据的机密性、完整性和可用性。纵深防御方法的三个层次是:物理控制-用于物理限制用户访问IT系统,例如安全系统和闭路电视系统技术控制-旨在保护系统和资源的软件和硬件管理控制-通过各种确保组织关键基础设施网络安全的策略和程序。深度防御方法是保护微服务的最重要原则之一,因为它创建了多层安全性来防止攻击。它包括以下安全措施:过滤传输的数据流、对微服务的访问进行认证和授权、使用加密技术等。确保内部环境不受任何外部连接的影响,这是安全的基础。8、严格控制API访问API是微服务应用的关键,很多软件都会有多个独立的API服务。因此,确保安全认证和授权的API访问控制对于微服务安全至关重要。当API服务访问敏感数据时,应该要求它提供身份验证令牌,该令牌必须经过权威来源的数字签名或验证。开发人员和管理员可以使用OAuth/OAuth2服务器获取令牌,以便通过API访问应用程序。出于安全原因,还应使用传输层安全(TLS)加密来保护所有客户端/服务器通信。9.原生容器检测工具有必要持续监控容器的运行,因为它可以帮助用户:了解容器指标和日志,了解集群、主机和容器内部发生的情况,从而做出更明智的安全操作决策然而为确保有效监控,最好使用容器原生的监控工具。例如,在使用Docker时,开发人员通常使用DockerSecurityScanner或其他专门设计的工具来检测任何潜在威胁。监控工具首先会收集事件,然后与设定的安全策略进行比对、分析和检查。10.使用ServiceOrchestrationManager服务编排是一个复杂的过程,可以自动执行微服务和容器的部署、管理、扩展和连接。编排器负责从注册表中拉取镜像,将这些镜像部署到容器中,并管理容器操作。编排器提供的抽象允许用户指定运行一个镜像需要多少个容器,以及需要为它们分配哪些主机资源。如果使用编排管理器,不仅可以实现微服务部署的自动化,还可以保证一定的安全性。例如,编排器有助于管理容器集群、隔离工作负载、限制对元数据的访问以及收集日志。许多编排管理器还具有内置的机密数据管理工具,允许开发人员安全地存储和共享机密数据,例如API和SSL证书、加密密钥、身份令牌和密码。参考链接:https://www.apriorit.com/dev-blog/558-microservice-container-security-best-practices