1.5.4 运行时安全关注度上升,但依然很难
在前文中我们已经分析过,在安全左移的理念下,开发侧安全的重要性很高,也相对容易做,而运营侧的运行时安全防护因为容器的生命周期短、业务复杂,难度会比较高。
Falco[1]是首个加入CNCF的运行时安全项目,可以认为是面向容器环境的主机入侵检测系统。Falco通过监控内核调用等宿主机、容器的各类行为,并检查内置的安全策略,可及时发现潜在的威胁并发出告警。
Falco的源码是由Sysdig公司贡献给CNCF社区的,Sysdig也会通过商业化版本的日常运营收集到客户侧的告警,进而进行分析和策略调优。在这个过程中,Sysdig总结出十大违反规则的行为类型,包括写/etc目录(Write below etc)、写/root目录(Write below root)、创建特权容器(Launch privileged container)、更改线程命名空间(Change thread namespace)、启动挂载敏感目录的容器(Launch sensitive mount container)、尝试通过setuid更改用户(Non sudo setuid)、尝试在二进制目录下写文件(Write below binary dir)、运行不可信的shell(Run shell untrusted)、某些系统程序处理网络收发包行为(System procs network activity)、通过shell登入容器(Terminal shell in container)。
虽然这些行为大多是不寻常的,但不代表它们就是恶意的,如创建特权容器本身就是很多容器安全机制部署的行为。要想找到攻击者的真正恶意行为,仅仅依靠Falco是远远不够的。在笔者的一些攻击场景验证中,如容器逃逸,虽然Falco能产生若干异常告警,但这些告警还不能明确地指示发生了容器逃逸,往往还需要安全运营者在告警基础上再实现一层告警关联。如果没有异常告警到逃逸事件的映射,那么逃逸攻击所触发的告警往往就会淹没在日常大量平凡无奇的各类告警中。可见,在主机侧的容器行为异常检测目前应该说是初具能力,但离好用还有相当长的路要走。
尽管如此,运行时安全还是日益引起了业界的关注。Sysdig在前面报告中提到,2018年Falco在Docker Hub上的下载量超过670万次,比2017年增加了2.5倍。笔者观察到,截止到2020年9月,Falco的镜像[2]已经超过1000万次下载。无论从哪个数据看,容器运行时安全的关注度都在不断上升。当安全团队将安全控制左移后,若基本解决开发端安全,则必然会将注意力右移,因而运行时安全依然很重要。
[1] https://github.com/falcosecurity/falco。
[2] https://hub.docker.com/r/falcosecurity/falco。