加入收藏 | 设为首页 | 会员中心 | 我要投稿 银川站长网 (https://www.0951zz.com/)- 云通信、基础存储、云上网络、机器学习、视觉智能!
当前位置: 首页 > 服务器 > 安全 > 正文

利用 Falco 监听运行时安全

发布时间:2023-09-07 11:20:49 所属栏目:安全 来源:
导读:Falco 是由 Sysdig 贡献给 CNCF 的云原生运行时安全相关项目。Falco 实现了一套可扩展的事件规则过滤引擎,通过获取事件、匹配安全规则、产生告警通知系列操作,能够发现系统中的安全问题。其中的事件来自系统调用,

Falco 是由 Sysdig 贡献给 CNCF 的云原生运行时安全相关项目。

Falco 实现了一套可扩展的事件规则过滤引擎,通过获取事件、匹配安全规则、产生告警通知系列操作,能够发现系统中的安全问题。其中的事件来自系统调用,同时也支持 ebpf 探针,规则是开源的[1],可以自行定义扩展[2]。

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

在容器中运行 shell

以特权形式运行的容器

读取敏感数据,比如 /etc/shadow

容器挂载主机的敏感路径

出站网络连接

2. 生成证书

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

创建证书目录

mkdir /root/falco

cd /root/falco

创建 CA 证书

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

创建服务端证书

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

创建客户端证书

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

查看全部生成的证书

ls /root/falco

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

3. 在 Kubernetes 上安装 Falco

添加 Helm 源

helm repo add falcosecurity https://falcosecurity.github.io/charts

helm repo update

安装 falco [4]

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

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

查看服务

在运行过程中会请求 ghcr.io 下载默认规则 falco_rules.yaml.tar.gz,在网络受限环境下,可能会下载失败。

kubectl -n falco get pod -w

NAME READY STATUS RESTARTS AGE

falco-5bbl6 2/2 Running 0 152s

falco-exporter-26gfz 1/1 Running 0 124s

falco-falcosidekick-5c8bf5d7fb-kx778 1/1 Running 0 111s

falco-falcosidekick-ui-5b56bbd7cb-5wdwl 1/1 Running 3 111s

...

[可选]卸载 Falco

helm uninstall falco --namespace falco

helm uninstall falco-exporter --namespace falco

4. 使用 Grafana 面板查看 Falco 事件数据

通过查看 falco-exporter svc 可以看到其已经将 metrics 暴露给了 Prometheus。

kubectl -n falco get svc falco-exporter -o yaml

apiVersion: v1

kind: Service

metadata:

annotations:

prometheus.io/port: "9376"

prometheus.io/scrape: "true"

name: falco-exporter

namespace: falco

spec:

ports:

- name: metrics

port: 9376

protocol: TCP

targetPort: 9376

selector:

app.kubernetes.io/instance: falco-exporter

app.kubernetes.io/name: falco-exporter

接下来,只需要添加 Grafana 面板即可。导入 11914,即 https://grafana.com/grafana/dashboards/11914-falco-dashboard/。

但 Metrics 中暴露的信息比较有限,在 Prometheus 中查询 falco_events{rule="Read sensitive file untrusted"}​,得到结果 falco_events{app_kubernetes_io_instance="falco-exporter", app_kubernetes_io_managed_by="Helm", app_kubernetes_io_name="falco-exporter", app_kubernetes_io_versinotallow="0.8.0", helm_sh_chart="falco-exporter-0.9.1", hostname="falco-h57xg", instance="1.1.1.1:9376", job="kubernetes-service-endpoints", k8s_ns_name="<NA>", k8s_pod_name="<NA>", namespace="falco", node="node1", priority="4", rule="Read sensitive file untrusted", service="falco-exporter", source="syscall", tags=",T1020,T1083,T1212,T1552,T1555,container,filesystem,host,mitre_credential_access,mitre_discovery,"} ,并不会展示执行的用户、执行的命令等详情信息,只能看到事件的优先级、触发的规则等有限的信息。

(编辑:银川站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章