> 文章列表 > kubernetes--监控容器运行时:Falco

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

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

目录

Falco介绍

Falco架构

 Falco的安装

告警规则示列

威胁场景测试:

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

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

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 containerdesc: An event will trigger every time you run sudo in a containercondition: evt.type = execve and evt.dir=< and container.id != host and proc.name = sudooutput: "Sudo run in container (user=%user.name %container.info parent=%proc.pname 
cmdline=%proc.cmdline)"priority: ERRORtags: [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 containerscondition: spawned_process and container and container.image 
startswith nginx and not proc.name in (nginx)
#运行新镜像,必须是容器,并且容器镜像开头是nginx 并设置白名单desc: testoutput: "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: truekeep_alive: false#改为true是持续写入保持打开状态,false是有事件再打开写入	 filename: /var/log/falco_events.log

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

Falco告警集中化展示:

 

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

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

  1. 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: trueurl: "http://192.168.31.71:2801/"

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