背景
云原生技术在各大公司的落地如火如荼,研发模式和基础设施都发生了很大的变化,新的 Kubernetes 和容器技术正逐步取代传统的物理机和虚拟机。在云原生架构的演变过程中我们发现也带来了一些新的风险和挑战,包括容器网络安全、容器逃逸、镜像安全等多个方面。
为保障业务上云安全,一方面是要分析解决新的安全风险,另一方面需要加快相应的安全基础建设。本文将介绍针对一些已知的风险点,如何使用 HIDS 来保障云原生环境的安全。
容器威胁来源
- Linux 内核提权:收集对写 exploit 有帮助的信息,比如内核版本及安全漏洞,然后通过触发该漏洞去执行特权代码,使得低权限用户提升到 root 用户权限,最终控制整个系统。
- 容器逃逸:通过突破 Namespace 的限制,将高权限的 Namespace 赋到 exploit 进程的 task_struct 中,这往往是由于 Docker 安全漏洞或配置不当导致的。
Docker 其他 CVE:比如通过恶意镜像利用 Docker runc 在使用文件系统描述符时存在的漏洞。
攻击过程:
docker run
启动了被恶意修改的镜像
宿主机 runc 被替换为恶意程序
宿主机运行docker run/exec
命令是触发执行恶意程序- 特权容器或 Capability 权限过大:配置不当导致容器内的进程实现 Linux 系统权限提升。
检测手段
基线检测
用于检测部分非预期环境。
云原生重点关注 Kubernetes 和 docker 的安全漏洞以及错误配置两方面,原理就是检查软件版本是否被爆出过 CVE 漏洞,并检测配置文件内的配置项是否有风险,包含风险的检查项及时让业务或运维知晓并修复。
云原生相关检查项:
除此之外,还会检查容器及宿主机内其他的软件配置(Redis、MySQL、Tomcat 等)、弱口令、等保基线等。
入侵检测
用于检测部分非预期逻辑。
入侵检测的第一步就是采集足够详细的数据
其中包括:
- 文件的创建、读写、link、重命名等操作;
- 网络的连接、bind 等状态;
- 进程关于 execve、setsid、prctl、ptrace、call_usermode 的调用;
- 登录日志、SSH 日志;
- 系统已安装组件,RPM、PYPI 包等;
- crontab、port 详细信息。
关于进程监控的方案主要有以下几种:
方案 | Docker 兼容性 | 开发难度 | 数据准确性数据 | 系统侵入性 |
---|---|---|---|---|
connector | 定制 Docker | 一般 | 存在内核拿到的 pid,在 /proc/ 下丢失的情况 | 无 |
Audit | 定制 Docker | 一般 | 同 connector | 弱,但依赖 Auditd |
EBPF | 定制 Docker | 中等 | 精确 | 中等,依赖内核版本 3.18 以上 |
Hook(kernel module) | 定制 | 高 | 精确 | 强 |
Hook 的方案,对系统侵入性太高了,尤其是这种最底层做 Hook syscall 的做法,如果测试不充分将可能导致灾难级的故障,主机大面积瘫痪。
综合稳定性考虑,HIDS 进程创建监控采用 cn_proc 的方案,相比较 Audit,对系统无侵入。但这种方式存在内核拿到的 pid,在 /proc/
下丢失的情况,因为很多进程启动后就立刻消失了,去读取 /proc/
时就存在找不到的可能,但为了系统稳定性,可以牺牲一些数据的准确性。
通过 Netlink Connector 在用户态即可获得内核提供的信息:
文件监控的主要逻辑:docker inspect
命令通过 container id 找到对应的容器目录,通过映射目录获取 docker 内文件并进行监控。
Docker 容器文件系统:
监控网络连接:
Docker 内网络隔离是通过 Network Namespace 来实现的,每个 Network Namespace 都有独立的网络设备、IP 地址、路由表、/proc/net/
目录。
先获取所有 docker init1 进程在宿主机的 pid,然后通过 /proc/pid/net
获取 docker 网络连接信息。
识别威胁的下一步就是通过策略发现
通过内置的规则引擎对上报数据关联分类,并判断黑、灰行为,支持动态白名单,将检测结果写入 ES 中。
此处仅做科普,策略包括但不限于:
- 比如子进程执行异常命令(访问注册表、添加用户、删除高危目录等);
- 网络外连未知 IP,需要通过 IP 匹配威胁情报;
- 比对文件 MD5 和病毒特征库,发现 rootkit 等;
- 通过
tcpdump
发现网络代理攻击; - ……
未来展望
结合 ATT&CK 框架,从行为的视角来看待攻击者和防御措施,构建容器化应用安全体系,通过模拟红蓝对抗,评估企业目前的安全能力,对提升企业安全防护能力是很好的参考。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。