探索云原生安全测试

2023-04-06  本文已影响0人  ThoughtWorks

背景

容器和云原生平台使企业能够实现自动化应用部署,从而带来巨大的业务收益。但是,这些新部署的云环境与传统环境一样,容易受到黑客和内部人员的攻击和利用。勒索软件、加密货币挖矿、数据窃取和服务中断的攻击持续发生在针对基于容器的云原生环境之中。由于云平台安全缺陷导致频繁发生的重大网络安全事故,使得云平台下的安全测试显得尤为重要。

网络安全事故相关案例:

云时代的安全视角

那么该如何开展云原生环境下的安全测试呢?首先让我们来了解下不同时代安全的视角和安全测试重点的差异。

在单体架构的终端时代,所有的业务场景的表示层、业务逻辑层、数据访问层放在一个工程里面,然后经过编译打包部署到一台服务器上,结构比较简单,防护起来相对也比较容易。

在互联网的时代,使用面向服务的架构。这种架构将应用程序的不同功能单元进行拆分,并且通过服务之间定义良好的接口和契约进行联系。这种架构使得安全防护变得更加复杂,它需要做好应用级的防火墙,要对IDP、SSL、VPN做好相关的防护。

在云的时代,使用微服务的架构。微服务的架构其实是多服务的结合体。这些服务开放不同的端口,开放多个应用程序API,这样就会导致网络的攻击面增加,带来严重的安全挑战。在这种情况下,所有的微服务都需要得到充分的保护,才能克服这种安全的威胁。

云时代安全测试面临的挑战

了解不同时代安全视角差异后,再让我们从这些差异来审视云时代安全测试技术相较传统安全测试所面临的挑战

由于云时代所面临的安全测试挑战,传统安全测试手段和工具由于架构和技术上的差异无法有效应对,例如:检测容器漏洞、识别云网络内部流动的信息以及同大规模部署的可扩展性缺乏等,因此,需要采用更加先进的技术和工具来进行更有效地安全测试。

云原生安全测试方案

传统安全测试工具和手段无法适用于云原生环境下的安全测试,因此必须引入云原生环境下一些特殊的安全测试工具和测试方法,针对云原生网络和基础架构的特点,设计全新的安全测试方案,解决这些传统的安全测试工具无法覆盖的盲点。

当我们设计云原生安全测试方案前,首先让我们先了解下云原生安全测试的内容

开源安全测试工具箱

基于以上云原生安全测试内容,引入一套完全以开源安全工具为基础的测试工具为基础设计的测试方案,就可以开展我们的安全测试了,这套安全测试工具,我们称它为开源安全测试工具箱,开源安全测试工具箱包含以下工具:

使用开源安全测试工具箱开展云原生安全测试具有以下优点:

下面我们用Nginx、Nodejs和Redis部署多层应用程序,使用开源安全工具NeuVector演示开展和进行威胁攻击测试:

  1. 创建测试演示命名空间:kubectl create namespace demo

  2. 使用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
    
  3. 使用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
    
  4. 使用此 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
    
  5. 外部访问Nginx服务,找到NodePort分配给它的随机端口(映射到80端口:

    kubectl get svc -n demo
    
  6. 然后连接到其中一个kubernetes节点的公共IP地址/端口,例如:[http://(public_IP):(NodePort)](http://%28public_ip%29:(NodePort)/)

  7. 登录容器,在容器内部安装DDos攻击工具hping3,开始模拟攻击:

    kubectl exec -it node-pod-name bash -n demo
    install hping3
    ifconfig
    10.1.213.79
    
  8. 对另一个容器节点发起攻击:

    hping3 -c 100000-d 120-S -p 80-w 64 --flood --rand-source 10.1.213.85
    
  9. 打开「通知→安全事件」页面,查看告警信息

(来源:自行部署的开源安全测试环境截图)

  1. 告警信息有 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/

上一篇 下一篇

猜你喜欢

热点阅读