背景
容器和云原生平台使企业能够实现自动化应用部署,从而带来巨大的业务收益。但是,这些新部署的云环境与传统环境一样,容易受到黑客和内部人员的攻击和利用。勒索软件、加密货币挖矿、数据窃取和服务中断的攻击持续发生在针对基于容器的云原生环境之中。由于云平台安全缺陷导致频繁发生的重大网络安全事故,使得云平台下的安全测试显得尤为重要。
网络安全事故相关案例:
-
2017年,网络安全导致美国征信公司 Equifax约 1.48 亿美国公民数据遭泄露。(来源:新华网)
-
2018年,特斯拉云服务器遭黑客劫持,变为加密货币矿机,机密数据遭泄漏。(来源:网易)
-
2022年,汇丰网络银行遭到拒绝服务攻击(DDOS)攻击,在不到一个月内瘫痪了两次。(来源:安全狗)
云时代的安全视角
那么该如何开展云原生环境下的安全测试呢?首先让我们来了解下不同时代安全的视角和安全测试重点的差异。
在单体架构的终端时代,所有的业务场景的表示层、业务逻辑层、数据访问层放在一个工程里面,然后经过编译打包部署到一台服务器上,结构比较简单,防护起来相对也比较容易。
在互联网的时代,使用面向服务的架构。这种架构将应用程序的不同功能单元进行拆分,并且通过服务之间定义良好的接口和契约进行联系。这种架构使得安全防护变得更加复杂,它需要做好应用级的防火墙,要对IDP、SSL、VPN做好相关的防护。
在云的时代,使用微服务的架构。微服务的架构其实是多服务的结合体。这些服务开放不同的端口,开放多个应用程序API,这样就会导致网络的攻击面增加,带来严重的安全挑战。在这种情况下,所有的微服务都需要得到充分的保护,才能克服这种安全的威胁。
云时代安全测试面临的挑战
了解不同时代安全视角差异后,再让我们从这些差异来审视云时代安全测试技术相较传统安全测试所面临的挑战:
- 微服务架构带来了大量的内部网络流量与动态复杂的网络环境,使得云网内部可视化变得相当低,以至于传统的网络安全测试手段无法胜任任务
- 资源的弹性伸缩特性使得传统的安全测试方案难以发挥作用,无法有效测试出系统的最终安全性
- 大量的开源软件漏洞、复杂的内部攻击以及应用的快速迭代,使我们对安全防护的及时性要求更高。
由于云时代所面临的安全测试挑战,传统安全测试手段和工具由于架构和技术上的差异无法有效应对,例如:检测容器漏洞、识别云网络内部流动的信息以及同大规模部署的可扩展性缺乏等,因此,需要采用更加先进的技术和工具来进行更有效地安全测试。
云原生安全测试方案
传统安全测试工具和手段无法适用于云原生环境下的安全测试,因此必须引入云原生环境下一些特殊的安全测试工具和测试方法,针对云原生网络和基础架构的特点,设计全新的安全测试方案,解决这些传统的安全测试工具无法覆盖的盲点。
当我们设计云原生安全测试方案前,首先让我们先了解下云原生安全测试的内容**。**
- 基础架构层面,我们需要开展主机和基础架构安全合规测试、Docker/Kubernetes 标准合规性测试、镜像漏洞、病毒扫描测试、镜像审计测试、云上数据库和存储安全测试
- 镜像安全方面,我们需要开展镜像漏洞、病毒扫描,自动实时扫描,第三方日志工具集成测试
- 云原生网络层面,我们需要开展云原生网络安全测试,Macvaln、Calico、Ovs等云原生cni集成安全测试等。
- 应用和容器安全测试方面,我们需要开展容器病毒扫描测试、应用漏洞扫描测试
- 应用运行时候安全,我们需要开展服务运行时安全测试,恶意进程扫描测试
- 同时,我们也可以结合一些传统的渗透测试手段对云上的存储、数据库,操作系统开展相关渗透测试
开源安全测试工具箱
基于以上云原生安全测试内容,引入一套完全以开源安全工具为基础的测试工具为基础设计的测试方案,就可以开展我们的安全测试了,这套安全测试工具,我们称它为开源安全测试工具箱,开源安全测试工具箱包含以下工具:
- 云原生基础架构总体安全:NeuVector
- 镜像审计和漏洞、病毒扫描测试:Clair、Anchore、Dagda
- 云原生网络安全测试:kubescape
- 容器运行时安全测试:Falco
- 容器病毒扫描测试:ClamAV
- 渗透测试:sqlmap、Metasploit
使用开源安全测试工具箱开展云原生安全测试具有以下优点:
- 经济性:采用开源工具,和动辄上百万、千万级别其他商用方案相比,工具使用零成本。
- 安全性:可以查看和取得全部检测工具源代码,匹配金融、政府、军工等行业特殊安全需求。
- 扩展性和全面性:数以千计社区安全测试工具,可以任意根据客户需求扩展云原生安全测试策略,覆盖客户所有安全测试盲点。
- 灵活性:可以灵活地定制云原生安全解决方案,根据客户需求选择最合适的云原生安全测试策略。
下面我们用Nginx、Nodejs和Redis部署多层应用程序,使用开源安全工具NeuVector演示开展和进行威胁攻击测试:
-
创建测试演示命名空间:kubectl create namespace demo
-
使用yaml 创建 Redis 服务和部署
apiVersion: v1 kind: Service metadata: name: redis namespace: demo spec: ports: - port: 6379 protocol: "TCP" name: "cluster-tcp-6379" clusterIP: None selector: app: redis-pod --- apiVersion: apps/v1 kind: Deployment metadata: name: redis-pod namespace: demo spec: selector: matchLabels: app: redis-pod template: metadata: labels: app: redis-pod spec: containers: - name: redis-pod image: redis
-
使用yaml 创建 Nodejs 服务和部署
apiVersion: v1 kind: Service metadata: name: node namespace: demo spec: ports: - port: 8888 protocol: "TCP" name: "cluster-tcp-8888" clusterIP: None selector: app: node-pod --- apiVersion: apps/v1 kind: Deployment metadata: name: node-pod namespace: demo spec: selector: matchLabels: app: node-pod replicas: 3 template: metadata: labels: app: node-pod spec: containers: - name: node-pod image: nvbeta/node
-
使用此 yaml 创建 Nginx 服务和部署
apiVersion: v1 kind: Service metadata: name: nginx-webui namespace: demo spec: ports: - port: 80 name: webui protocol: TCP type: NodePort selector: app: nginx-pod --- apiVersion: apps/v1 kind: Deployment metadata: name: nginx-pod namespace: demo spec: selector: matchLabels: app: nginx-pod template: metadata: labels: app: nginx-pod spec: containers: - name: nginx-pod image: nvbeta/swarm_nginx ports: - containerPort: 80 protocol: TCP
-
外部访问Nginx服务,找到NodePort分配给它的随机端口(映射到80端口:
kubectl get svc -n demo
-
然后连接到其中一个kubernetes节点的公共IP地址/端口,例如:
http://(public_IP):(NodePort)
-
登录容器,在容器内部安装DDos攻击工具hping3,开始模拟攻击:
kubectl exec -it node-pod-name bash -n demo install hping3 ifconfig 10.1.213.79
-
对另一个容器节点发起攻击:
hping3 -c 100000-d 120-S -p 80-w 64 --flood --rand-source 10.1.213.85
-
打开「通知→安全事件」页面,查看告警信息
- 告警信息有 Ping Death 攻击容器的相关内容,NeuVector 自动记录该违规动作。测试期望结果和实际结果一致,威胁攻击测试用例通过。
云原生DevSecOps
DevSecOps其实是在DevOps基础上增加了Security的一个步骤,DevSecOps概念是在2012年提出来的,它把安全测试理念融入了整个DevOps的概念里面,在整个开发和运维的过程中都会持续地运行安全测试的相关内容。它有几个特性,它会和CI/CD流水线做集成,实现测试左移和右移。它能够对接标准的监控告警体系,对研发和生产环境中运行的应用实现24小时安全监控。
(图片来源:https://www.sohu.com/a/207924559_804262)
DevSecOps强调安全是团队每个人的责任,无论我们是研发测试还是运维,安全的理念要贯穿在产品整个生命周期当中。它解决了安全测试的孤立性、滞后性、随机性,覆盖性、变更一致性等问题。通过固化流程,加强了不同人员的协作。通过工具和技术手段,将可以自动化重复运行的部分安全测试工作融入到整个研发体系内,让产品的安全属性嵌入到整条的研发和运维的流水线之中。
总结
当我们使用开源的云原生安全测试工具结合渗透测试工具、方法和手段,通过设计良好的安全测试策略,就能很好地开展云平台基础架构合规测试、容器网络安全测试、容器运行时安全测试、镜像安全测试等云原生环境下特有的安全测试。从而了解云平台和云上应用存在的安全隐患和风险,通过修复相关的安全隐患和风险,来不断提升我们云平台和云上应用的安全性。
文/Thoughtworks 潘立峰
原文链接:https://insights.thoughtworks.cn/what-is-cloud-native-security-testing/