K8s日志审计以一种事件溯源的方式完整记录了所有API Server的交互请求。当K8s集群遭受入侵时,安全管理员可以通过审计日志进行攻击溯源,通过分析攻击痕迹,找到攻击者的入侵行为并还原攻击者的攻击路径,修复安全问题。
在本篇文章中,我们将介绍如何配置K8s审计日志,并利用这些审计日志作为数据源,实现对攻击行为的检测。
01、配置K8s审计日志
K8配置审计日志仅需要三步:1、准备审计策略文件;2、修改APIServer配置; 3、验证审计日志。
(1)准备一个审计策略文件,这里使用官网审计策略文件示例。
wget https://raw.githubusercontent.com/kubernetes/website/main/content/zh-cn/examples/audit/audit-policy.yaml -o /etc/kubernetes/audit-policy.yaml
(2)修改APIServer配置,保存yaml文件,kube-apiserver 会重新启动。
#vi /etc/kubernetes/manifests/kube-apiserver.yaml
spec:
containers:
- command:
- kube-apiserver
- --audit-policy-file=/etc/kubernetes/audit-policy.yaml
- --audit-log-path=/var/log/k8s/audit.log
- --audit-log-format=json
- --audit-log-maxsize=50
- --audit-log-maxage=7
- --audit-log-maxbackup=2
volumeMounts:
- mountPath: /etc/kubernetes
name: audit-config
readOnly: true
- mountPath: /var/log/k8s
name: audit-log
volumes:
- hostPath:
path: /etc/kubernetes
type: Directory
name: audit-config
- hostPath:
path: /var/log/k8s
type: DirectoryOrCreate
name: audit-log
(3)验证审计日志
tail -f /var/log/k8s/audit.log
02、攻击行为检测
Falco提供了k8saudit插件,可以将K8s审计日志作为数据源,通过监测K8s审计日志,我们可以了解集群中的异常情况,及时发现潜在的入侵行为。
(1)Falco启用k8saudit插件,修改falco.yaml文件
falco.yaml配置示例:
rules_files:
- /etc/falco/falco_rules.yaml
- /etc/falco/falco_rules.local.yaml
- /etc/falco/k8s_audit_rules.yaml
load_plugins: [k8saudit, json]
plugins:
- name: k8saudit
library_path: libk8saudit.so
init_config: ""
open_params: "http://:9765/k8s-audit"
- name: json
library_path: libjson.so
falcoctl artifact install k8saudit
falcoctl artifact install k8saudit-rules

wget https://raw.githubusercontent.com/falcosecurity/plugins/refs/heads/main/plugins/k8saudit/configs/audit-policy.yaml -o /etc/kubernetes/audit-policy.yaml
# vi /etc/kubernetes/audit-webhook.yaml
apiVersion: v1
kind: Config
clusters:
- cluster:
server: http://<ip_of_falco>:9765/k8s_audit
name: falco
contexts:
- context:
cluster: falco
user: ""
name: default-context
current-context: default-context
preferences: {}
users: []
# vi /etc/kubernetes/manifests/kube-apiserver.yaml
spec:
containers:
- command:
- kube-apiserver
- --audit-policy-file=/etc/kubernetes/audit/audit-policy.yaml
- --audit-webhook-config-file=/etc/kubernetes/audit-webhook.yaml
- --audit-webhook-batch-max-wait=5s
- --audit-webhook-mode=batch
kubectl run my-pod --image=nginx --privileged=true
08:47:57.783746000: Warning Pod started with privileged container (user=kubernetes-admin pod=my-pod resource=pods ns=default images=(nginx))

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论