0


kubernetes--监控容器运行时:Falco

Falco介绍

Falco是一个Linux安全工具,它使用系统调用来保护和监控系统。

   Falco最初是由Sysdig开发的,后来加入CNCF孵化器,成为首个加入CNCF的运行时安全项目。

   Falco提供了一组默认规则,可以监控内核态的异常行为,例如
  1. 对于系统目录/etc、/usr/bin、/usr/sbin的读写行为
  2. 文件所有权、访问权限的变更
  3. 从容器打开shell会话
  4. 容器生成新进程
  5. 特权容器启动

项目地址: https://github.com/falcosecurity/falco

Falco架构

rule engine:角色引擎,需要配置文件

通过内核中的模块检测系统调用,满足则输出到目标或者设备,手机和存储。支持对k8s审计日志的收集。

Falco的安装

【】rpm --import https://falco.org/repo/falcosecurity-3672BA8F.asc

【】curl -s -o /etc/yum.repos.d/falcosecurity.repo https://falco.org/repo/falcosecurity-rpm.repo

【】yum install epel-release -y

#【】yum update  #更新系统,不更新系统会起不来。falco是一个守护进程

【】yum install falco -y

【】systemctl start falco

【】systemctl enable falco

【】lsmod|grep falco

报此错可以考虑升级内核3.10.0-1160.el7.x86_64

falco配置文件目录:/etc/falco

  1. falco.yaml falco配置于输出告警通知方式
  2. falco_rules.yaml 规则文件,默认已经定义很多威胁场景
  3. falco_rules.loacl.yaml 自定义扩展规则文件
  4. k8s_audit_rules.yaml K8s审计日志规则

安装文档:https://falco.org/zh/docs/installation

告警规则示列

(falco_rules.local.yaml):

- rule: The program "sudo" is run in a container
  desc: An event will trigger every time you run sudo in a container
  condition: evt.type = execve and evt.dir=< and container.id != host and proc.name = sudo
  output: "Sudo run in container (user=%user.name %container.info parent=%proc.pname 
cmdline=%proc.cmdline)"
  priority: ERROR
  tags: [users, container]

参数说明:

  1. rule:规则名称,唯一
  2. desc:规则的描述
  3. condition:条件表达式
  4. output:符合条件事件的输出格式
  5. priority:告警的优先级
  6. tags:本条规则的tags分类

威胁场景测试:

   falco_rules.yaml(默认规则),里面的写法和标准写法不太一样,好多是类似于变量的重复引用所以可以简写

1、监控系统二进制文件目录读写(默认规则) $PATH目录

2、监控根目录或者/root目录写入文件(默认规则)

3、监控运行交互式Shell的容器(默认规则)进入容器会被监控

4、监控容器创建的不可信任进程(自定义规则)

验证:tail -f /var/log/message

监控容器创建的不可信任进程(自定义规则)

监控容器创建的不可信任进程规则,在falco_rules.local.yaml文件添加:以nginx为例

- rule: Unauthorized process on nginx containers
  condition: spawned_process and container and container.image 
startswith nginx and not proc.name in (nginx)
#运行新镜像,必须是容器,并且容器镜像开头是nginx 并设置白名单
  desc: test
  output: "Unauthorized process on nginx containers (user=%user.name container_name=%container.name container_id=%container.id image=%container.image.repository shell=%proc.name parent=%proc.pname cmdline=%proc.cmdline terminal=%proc.tty)"
  priority: WARNING

condition表达式解读:

• spawned_process 运行新进程

• container 容器

• container.image startswith nginx 以nginx开头的容器镜像

• not proc.name in (nginx) 不属于nginx的进程名称(允许进程名称列表)

重启falco应用新配置文件:

systemctl restart falco

测试

Falco支持五种输出告警方式falco.yaml:

  1. 输出到标准输出(默认启用)
  2. 输出到文件
  3. 输出到Syslog(默认启用)
  4. 输出到HTTP服务
  5. 输出到其他程序(命令行管道方式)

告警配置文件:/etc/falco/falco.yaml

例如输出到指定文件:将上面的json_output: false改为true json方便后面的分析

file_output:
  enabled: true
  keep_alive: false#改为true是持续写入保持打开状态,false是有事件再打开写入     
  filename: /var/log/falco_events.log

上下两个也可以关了,没必要重复收集影响性能

Falco告警集中化展示:

  1. FalcoSideKick:一个集中收集并指定输出,支持大量方式输出,例如influxdb、Elasticsearch等

    项目地址:https://github.com/falcosecurity/falcosidekick
    
  2. FalcoSideKick-UI:告警通知集中图形展示系统

    项目地址 https://github.com/falcosecurity/falcosidekick-ui
    

部署Falco UI:

#输出给ui  falcosidekick收集数据,ui的容器端口为2802  数据接口是2801
docker run -d \
-p 2801:2801 \
--name falcosidekick \
-e WEBUI_URL=http://11.0.1.21:2802 \
falcosecurity/falcosidekick

【】docker run -d -p 6379:6379 redislabs/redisearch:2.2.4


docker run -d \
-p 2802:2802 \
-e FALCOSIDEKICK_UI_REDIS_URL=11.0.1.21:6379 \
--name falcosidekick-ui \
falcosecurity/falcosidekick-ui

修改falco配置文件指定http方式输出:

json_output: true
json_include_output_property: true
http_output:
  enabled: true
  url: "http://192.168.31.71:2801/"

UI访问地址:http://192.168.31.71:2802/ui/

标签: kubernetes linux docker

本文转载自: https://blog.csdn.net/m0_57911290/article/details/129404547
版权归原作者 弓长丿 所有, 如有侵权,请联系我们删除。

“kubernetes--监控容器运行时:Falco”的评论:

还没有评论