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
|
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
1
2
|
helm repo add falcosecurity https://falcosecurity.github.io/charts
helm repo update
|
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=""
|
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
|