第30关 Falco安全监控
大约 5 分钟
k8s容器运行时安全监控 - Falco
前面讲到prometheus监控、K8S集群事件监控kube-eventer,这些都只是资源使用层面上的监控,对于集群的安全层面监控,我们也需要做好监控手段,避免类似黑客木马入侵事件发生。
这节课博哥给大家带来Falco
- Falco是什么:一个容器和Kubernetes的运行时安全监控工具
- Falco的主要功能:实时检测异常活动和配置问题,输出警报
安全事件秒级监控
https://633f5eb931944f288cbd0c74--falcosecurity.netlify.app/zh-cn/docs/
关于 Falco
Falco 是一款旨在检测应用中反常活动的行为监视器,由Sysdig的系统调用捕获基础设施驱动。您仅需为 Falco 撰写一套规则,即可在一处持续监测并监控容器、应用、主机及网络的异常活动。
Falco 可检测哪些行为?
Falco 可以监测调用 Linux 系统调用的行为,并根据其不同的调用、参数及调用进程的属性发出警告。例如,Falco 可轻松检测:
- 容器内运行的 Shell
- 服务器进程产生意外类型的子进程
- 敏感文件读取(如
/etc/shadow)密码文件 - 非设备文件写入至
/dev - 系统的标准二进制文件(如
ls)产生出站流量
通过某漏洞,进入了服务Pod,查看系统账号密码,放置东西,网络流量异常行为操作
部署
# helm3 install(可选项)
helm repo add falcosecurity https://falcosecurity.github.io/charts
helm repo update# 创建namespace
kubectl create ns falco
# 下载好离线 helm chart包
wget https://github.com/falcosecurity/charts/releases/download/falco-3.8.7/falco-3.8.7.tgz
Dec 19, 2023
@github-actions github-actions
falco-3.8.7
275433a
falco-3.8.7
wget https://github.com/falcosecurity/charts/releases/download/falco-4.5.2/falco-4.5.2.tgz替换镜像
docker.io
grep -r registry: .
grep -r docker.io .
grep -r 0.36.2 .# 一键式helm命令安装Falco
# 不用解压,传递环境变量 正式安装需要去掉 --dry-run --debug
helm -n falco install falco ./falco-3.8.7.tgz --set falco.jsonOutput=true --set falco.json_output=true --set falco.http_output.enabled=true --set falco.http_output.url=http://falco-falcosidekick:2801/ --set falcosidekick.enabled=true --set falcoctl.artifact.install.enabled=false --set falcoctl.artifact.follow.enabled=false --dry-run --debug -o yaml
helm -n falco install falco ./falco-3.8.7-change.tgz --set falco.jsonOutput=true --set falco.json_output=true --set falco.http_output.enabled=true --set falco.http_output.url=http://falco-falcosidekick:2801/ --set falcosidekick.enabled=true --set falcoctl.artifact.install.enabled=false --set falcoctl.artifact.follow.enabled=false --dry-run --debug -o yaml
helm -n falco install falco ./falco-3.8.7-change.tgz --set falco.jsonOutput=true --set falco.json_output=true --set falco.http_output.enabled=true --set falco.http_output.url=http://falco-falcosidekick:2801/ --set driver.kind=modern_ebpf --set falcosidekick.enabled=true --set falcoctl.artifact.install.enabled=false --set falcoctl.artifact.follow.enabled=false
falco-4.5.2-change.tgz
falco.jsonOutput=true: 启用 Falco 的 JSON 格式输出,这对于日志分析和集成到其他系统特别有用。falco.json_output=true: 这个选项看起来和上面的重复了,可能是笔误或是为了兼容旧版本的配置。正确做法是只设置一个。falco.http_output.enabled=true: 启用 HTTP 输出,使得 Falco 可以将事件发送到指定的 HTTP 端点。falco.http_output.url=http://falco-falcosidekick:2801/: 设置 HTTP 输出的目标 URL,这里是发送到名为falco-falcosidekick(本身的)服务的 2801 端口,通常这是 Falco Sidekick 服务,用于进一步处理 Falco 事件。falcosidekick.enabled=true: 启用 Falco Sidekick,这是一个常用于扩展 Falco 功能的辅助服务,如发送通知、日志记录等。falcoctl.artifact.install.enabled=false: 禁用 Falcoctl 的自动安装功能,Falcoctl 是一个用于管理 Falco 规则和配置的工具。falcoctl.artifact.follow.enabled=false: (源在海外)禁止 Falcoctl 跟随规则更新,意味着不会自动拉取和应用规则集的最新更改。安装时有基础的规则
falco用的daemonSet,每一个node节点起一个falco服务 ,关注节点上的所有容器
测试资源不够可以缩小falco-falcosidekick
kubectl -n falco edit deployments.apps falco-falcosidekick
spec:
replicas: 1spec: failed to generate spec: failed to mkdir "/sys/module/falco": mkdir /sys/module/falco: operation not permitted消息推送
这是一个海外的工具,针对的是海外的聊天软件,要做一些二次开发一些后端服务,工具来适配
知道他的消息体结构去做一些开发,提取字段,整理、适配消息平台进行发送
# 用nc启动一个webhook模拟服务端(可选项)
apt install netcat
nc -l 6666
弊端:接受一次请求就退出来了
# 配置 falcosidekick 报警输出的 webhook 地址:
kubectl -n falco edit secrets falco-falcosidekick
#在下面配置(内容是base64编码 http://10.0.1.201:6666)
WEBHOOK_ADDRESS: aHR0cDovLzEwLjAuMS4yMDE6NjY2Ng==
重启falcosidekick
进入一个pod测试(一般不会进)
|base64 -d
|jq
# nc -l 6666
POST / HTTP/1.1
Host: 10.0.1.201:6666
User-Agent: Falcosidekick
Content-Length: 1083
Content-Type: application/json; charset=utf-8
Accept-Encoding: gzip
{"uuid":"3e569be1-e869-4f1f-9d3f-a6d9d18c3d6c","output":"04:10:38.038135735: Notice A shell was spawned in a container with an attached terminal (evt_type=execve user=root user_uid=0 user_loginuid=-1 process=sh proc_exepath=/bin/sh parent=runc command=sh terminal=34816 exe_flags=EXE_WRITABLE container_id=cab41f28efae container_image=\u003cNA\u003e container_image_tag=\u003cNA\u003e container_name=\u003cNA\u003e k8s_ns=\u003cNA\u003e k8s_pod_name=\u003cNA\u003e)","priority":"Notice","rule":"Terminal shell in container","time":"2024-07-02T04:10:38.038135735Z","output_fields":{"container.id":"cab41f28efae","container.image.repository":null,"container.image.tag":null,"container.name":null,"evt.arg.flags":"EXE_WRITABLE","evt.time":1719893438038135735,"evt.type":"execve","k8s.ns.name":null,"k8s.pod.name":null,"proc.cmdline":"sh","proc.exepath":"/bin/sh","proc.name":"sh","proc.pname":"runc","proc.tty":34816,"user.loginuid":-1,"user.name":"root","user.uid":0},"source":"syscall","tags":["T1059","container","maturity_stable","mitre_execution","shell"],"hostname":"10.0.1.204"}
# 卸载
helm -n falco uninstall falco