使用 Falco 监听运行时安全

1. Falco 是什么

Falco 是由 Sysdig 贡献给 CNCF 的云原生运行时安全相关项目。 Falco 实现了一套可扩展的事件规则过滤引擎,通过获取事件、匹配安全规则、产生告警通知系列操作,能够发现系统中的安全问题。其中的事件来自系统调用,同时也支持 ebpf 探针,规则是开源的[1],可以自行定义扩展[2]。下图为其架构图:

Falco 可以检测到的典型事件包括:

  • 在容器中运行 shell
  • 以特权形式运行的容器
  • 读取敏感数据,比如 /etc/shadow
  • 容器挂载主机的敏感路径
  • 出站网络连接

2. 生成证书

Falco 的 gRPC 需要双向的 TLS 认证 [3]。Falco exporter 通过 gRPC 暴露相关事件,自研的系统也可以通过 gRPC 直接集成 Falco。下面的步骤用来生成交互所需的证书,Falco 官方的文档有些陈旧,有些操作会报错。

  • 创建证书目录
1
2
mkdir /root/falco
cd /root/falco
  • 创建 CA 证书
1
2
3
4
5
6
openssl genrsa -out ca.key 4096

openssl req -x509 -new -nodes -sha512 -days 3650 
        -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=dev.chenshaowen.com" 
        -key ca.key 
        -out ca.crt
  • 创建服务端证书
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
openssl genrsa -out server.key 4096

openssl req -sha512 -new                  
              -key server.key       
              -out server.csr       
              -subj  "/C=SP/ST=Italy/L=Ornavasso/O=Test/OU=Server/CN=localhost"

openssl x509 -req -sha512               
               -days 3650            
               -CA ca.crt           
               -CAkey ca.key        
               -in server.csr       
               -out server.crt      
               -set_serial 01
  • 创建客户端证书
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
openssl genrsa -out client.key 4096

openssl req -sha512 -new                  
              -key client.key       
              -out client.csr       
              -subj  "/C=SP/ST=Italy/L=Ornavasso/O=Test/OU=client/CN=localhost"

openssl x509 -req -sha512               
               -days 3650            
               -CA ca.crt           
               -CAkey ca.key        
               -in client.csr       
               -out client.crt      
               -set_serial 01
  • 查看全部生成的证书
1
2
3
ls /root/falco

ca.crt  ca.key  client.crt  client.csr  client.key  server.crt  server.csr  server.key

3. 在 Kubernetes 上安装 Falco

  • 添加 Helm 源
1
2
helm repo add falcosecurity https://falcosecurity.github.io/charts
helm repo update
  • 安装 falco [4]
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
helm install falco falcosecurity/falco 
      --namespace falco --create-namespace 
      --version 3.0.0 
      --set-file certs.ca.crt=/root/falco/ca.crt,certs.server.key=/root/falco/server.key,certs.server.crt=/root/falco/server.crt 
      --set ebpf.enabled=true 
      --set falco.grpc.enabled=true 
      --set falco.grpc_output.enabled=true 
      --set falcosidekick.enabled=true 
      --set falcosidekick.webui.enabled=true 
      --set falcosidekick.webui.user="admin:admin" 
      --set falco.grpc.unixSocketPath=""
  • 安装 falco-exporter
1
2
3
4
5
helm install falco-exporter falcosecurity/falco-exporter 
     --namespace falco --create-namespace 
     --version 0.9.1 
     --set falco.grpcTimeout=3m
     --set-file certs.ca.crt=/root/falco/ca.crt,certs.client.key=/root/falco/client.key,certs.client.crt=/root/falco/client.crt
  • 查看服务