洞若观火 - 运行时安全检测
第一部分:运行时安全 - 为何需要“事中”检测?
我们之前的所有努力,都是在预防 (Prevention)。但深度防御策略告诉我们,仅有预防是不够的,我们必须具备检测 (Detection) 和 响应 (Response) 的能力。运行时安全,就是“检测”环节的核心。
它回答了这样一个问题:在容器成功运行之后,它的行为是否符合我们的预期?
我们在寻找什么样的异常行为?
- 一个 Web 服务器的 Pod,突然在内部启动了一个
bash
或sh
进程。 - 一个应用程序进程,尝试向
/bin
,/etc
,/sbin
等系统关键目录写入文件。 - 一个容器,向一个已知的恶意 IP 地址或一个非预期的外部地址发起了网络连接。
- 一个进程,尝试读取敏感文件,如
/etc/shadow
, 或者挂载进来的 Kubernetes Secret 文件。 - 一个普通的业务 Pod,突然尝试连接 Kubernetes API Server。
- 一个已安装的二进制文件(如
nginx
)的内容在运行时被修改。
这些行为都是非常强烈的入侵指标 (Indicators of Compromise - IoCs),它们是静态镜像扫描无法发现的,只有在运行时才能被捕获。
第二部分:底层技术揭秘 - Falco 与 eBPF
我们如何才能“看到”容器内部发生的这些行为?答案是:所有这些行为,最终都必须通过向 Linux 内核发起系统调用 (syscalls) 来实现。例如,启动一个新进程需要 execve
系统调用,打开一个文件需要 openat
,建立网络连接需要 connect
。
因此,如果我们能监控系统调用,我们就能监控一切。
Falco:
Falco 是一个由云原生计算基金会 (CNCF) 毕业的开源项目,是事实上的云原生运行时安全标准。它是一个行为活动监视器,能够实时检测并告警可疑的系统行为。
eBPF (扩展的伯克利数据包过滤器):
Falco 是如何获得这种深度洞察力的呢?它正是利用了我们之前在网络系列中提到过的革命性技术——eBPF。
- 深入内核: eBPF 允许 Falco 将一个经过验证的、安全的、小型的程序直接加载到 Linux 内核中运行。
- 挂载钩子: Falco 将这个 eBPF 程序挂载到内核中所有系统调用的入口和出口点上。
- 实时捕获: 当系统中的任何进程(包括容器内的进程)发起系统调用时,Falco 的 eBPF 探针都会被触发,它可以在内核空间内,以极低的性能开销,实时地检查这个系统调用的所有参数(例如,
execve
执行的是什么命令?openat
打开的是哪个文件?)。 - 上报分析: eBPF 探针将这些系统调用事件发送到用户空间的 Falco 守护进程,由守护进程与预定义的规则集进行匹配,一旦匹配成功,就生成告警。
通过 eBPF,Falco 获得了对系统行为的全面、底层、且高性能的可见性,而无需在每个应用中进行任何代码插桩。