如果说云安全的未来等价于纯安全,而云计算的下半场是云原生,那不妨也做个推论:云原生的未来也会等价于原生安全。那么,什么样的安全才是原生安全呢?在云计算行业中,云原生安全有两个特点:基于云原生,无处不在。也就是说,使用了云原生的技术,能适用于各类场景。
原生安全的发展一般有三个阶段:
1. 安全赋能于云原生体系,构建云原生的安全能力。当前云原生技术发展迅速,但相应的安全防护匮乏,就连最基础的镜像安全、安全基线都不尽如人意。因而应该研究如何将现有成熟的安全能力(如隔离、访问控制、入侵检测、应用安全)应用于云原生环境,构建安全的云原生系统。
2. 云原生的新特性具有诸多优点,例如轻快不变的基础设施、弹性的服务编排、开发运营一体化等。因而,安全厂商会开始研究如何将这些能力赋能于传统安全产品,通过软件定义安全的架构,构建原生安全架构,从而提供弹性、按需、云原生的安全能力,提高“防护-检测-响应”闭环的效率。
3. 当安全设备或平台云原生化后,就能提供(云)原生的安全能力,不仅适用于通用云原生场景、5G、边缘计算等场景,甚至可以独立部署在大型电商等需要轻量级、高弹性的传统场景,最终实现无处不在的安全。

打开网易新闻 查看精彩图片

安全左移与右移
如果考虑云原生应用的生命周期,则应关注DevOps的整个闭环,即从开发、编译、持续集成/持续部署(CI/CD),到运行时运营。由于容器的生命周期极其短暂,对于攻守双方来说,在短期内都无法应用现有的武器库或安全机制。所以在云原生安全的初期,攻击者会关注代码、第三方库和镜像这些生命周期长的资产,而防守者也应该关注安全编码、开源软件脆弱性管理、镜像和仓库脆弱性评估,以及安全基线核查。这些安全机制基本上处于DevOps的左边的闭环,因而我们将这些安全举措称为安全左移,以区别于传统在运行时做的安全运营工作。事实上,过去两年,国内外很大一部分容器安全解决方案都聚焦在这部分内容。
当然,攻防永远是成本和收益之间的平衡,如果防守方能做好对长生命周期资产的持续风险评估和脆弱性缓解,那么攻击者的成本显然会升高,他们下一步就会借助自动化的攻击手段,尝试在运行时攻击微服务、无服务和容器,进而借助短暂存在的容器横向移动寻找其他可持久化的资源。此时,容器工作载荷的行为分析、容器网络的入侵检测、服务网格的API安全和业务安全,则又会成为防守者的新重点,这种重点放在运行时的安全思路称为安全右移。
无论是安全左移还是安全右移,其实都是考虑到 云原生环境中的脆弱性、面临的威胁和风险,在有限的安全投入前提下,做出当前最有利的安全方案。总体而言,云原生的安全不只是独立的容器、编排或微服务,而应该完整地考虑整个云计算系统的所有组件及其安全功能需求。
云系统运行时的安全
1. 异常行为检测
攻击者对云原生系统的攻击,可以分为已知威胁和未知威胁。对容器而言,最危险的已知威胁莫过于容器逃逸。对于这类攻击,从内核层面捕获进程、网络等各种行为,通过规则即可及时发现潜在的逃逸行为。
而对未知的攻击而言,最好的办法就是为容器的正常行为建立基线。通常运行微服务的容器只运行少数进程,且行为可预测,所以建立的基线能够很好地刻画相关容器的行为,进而可以在运行时及时发现偏离基线的可疑行为。
2. 安全防护
运行时安全防护可分为面向容器的安全防护和 面向微服务/服务网格的安全防护。在容器层面,需要重点关注的是容器组建的网络中是否存在入侵行为,例如针对容器及其打开服务的侦查、横向移动,此时通常可使用特权容器的方式,部署网络入侵检测组件,即可实现微隔离、访问控制、网络流量监控、入侵检测和防护等功能。
在微服务和服务网格层面,则需要考虑将安全能力部署到服务网格中的每个微服务最近侧,因而使用边车(Sidecar)的方式,将安全微网关部署在应用容器旁,这样可以实现应用的认证授权、通信加密等应用层面的安全防护等功能。
3. API和业务安全
业务安全是离客户最近且价值最大的安全功能,然而云原生场景非常复杂,很难有统一的业务安全模型;此外,在微服务和服务网格的场景下,服务之间大部分是通过API调用实现,这与当前Web应用存在大量人机交互的情况完全不同,因而API安全在云原生场景下也存在很大的差异。
从技术上看,要实现API和业务安全,首先是获得API调用的可观察能力,当前有很多开源项目具有这样的能力,但其在开发、构建过程中的侵入性各有不同。一般而言,侵入性越强,其最后获得的API请求信息越多,但在既有开发流程和项目中的部署也越难。
其中,Jaeger 通过在代码中插桩的方式,能够获得所有调用顺序和参数,因而从理论上就能建立非常精准的API调用参数和序列的基线;而Sidecar使用反向代理的方式,无法获得调用序列,只能通过分析,启发式地获得近似基线,其上限可以逼近 Jaeger所得到的基线。至于具体采用哪种观测方法,则取决于客户侧的部署情况。