falco 入门
tags: 安全
文章目录
falco 入门
1. 简介
2. 特点
3. 检测
4. 规则
5. 警报
6. 组件
7. 架构
8. 下载
9. 安装
9.1 Debian/Ubuntu
9.2 CentOS/RHEL/Fedora/Amazon Linux
9.3 openSUSE
9.4 Linux 通用(二进制包)
9.5 minikube 安装 falco
9.6 kind 安装 falco
10. 升级
10.1 Debian/Ubuntu
10.2 CentOS/RHEL/Fedora/Amazon Linux
10.3 openSUSE
11. 部署
11.1 Kubernetes
11.2 helm
11.3 DaemonSet
12. 运行
12.1 将 Falco 作为 service 运行
12.2 Docker 中运行
12.2.1 最低特权(推荐)
12.2.2 完全特权
12.3 Hot Reload
1. 简介
Falco 项目是最初由Sysdig, Inc构建的开源运行时安全工具。Falco 被捐赠给 CNCF,现在是 CNCF 孵化项目。
Falco 是一个 Linux 安全工具,它使用系统调用来保护和监控系统。Falco 可用于 Kubernetes 运行时安全性。运行 Falco 最安全的方法是将 Falco 直接安装在主机系统上,这样 Falco 与 Kubernetes 隔离,以防万一。然后可以通过在 Kubernetes 中运行的只读代理来使用 Falco 警报。
您还可以使用 Helm 在 Kubernetes 中将 Falco 作为守护程序集直接运行。
Falco 通过以下方式使用系统调用来保护和监控系统:
在运行时从内核解析 Linux 系统调用
针对强大的规则引擎断言流
违反规则时发出警报
{% youtube %}
https://www.youtube.com/watch?v=u409G5PsO1w
{% endyoutube %}
2. 特点
Falco 的主要特点:
- 加强安全性——创建由上下文丰富且灵活的引擎驱动的安全规则,以定义意外的应用程序行为。
- 降低风险 – 通过将 Falco 插入您当前的安全响应工作流程和流程,立即响应违反政策的警报。
- 利用最新规则 - 使用来自社区的恶意活动和 CVE 漏洞检测发出警报。
3. 检测
Falco 附带了一组默认规则,用于检查内核是否存在异常行为,例如:
使用特权容器提权
使用诸如setns
读取/写入知名目录,例如/etc, /usr/bin,/usr/sbin等
创建符号链接
所有权和模式更改
意外的网络连接或套接字突变
产生的进程使用execve
执行 shell 二进制文件,例如sh, bash, csh,zsh等
执行 SSH 二进制文件,例如ssh, scp,sftp等
变异 Linux coreutils可执行文件
变异登录二进制文件
变异shadowutil或passwd可执行文件,例如shadowconfig, pwck, chpasswd, getpasswd, change, useradd, etc, 等。
4. 规则
规则是 Falco 反对的项目。它们在 Falco 配置文件中定义,代表您可以在系统上检查的事件。请参阅 Falco规则。
5. 警报
警报是可配置的下游操作,可以像日志记录一样简单,也可以像STDOUT向客户端传递 gRPC 调用一样复杂。有关配置、理解和开发警报的更多信息,请参阅Falco 警报。Falco 可以将警报发送到:
- 标准输出
- 一份文件
- 系统日志
- 一个衍生的程序
- HTTP[s] 端点
- 通过 gRPC API 的客户端
6. 组件
Falco 由四个主要组件组成:
Userspace program - 是falco可用于与 Falco 交互的 CLI 工具。用户空间程序处理信号,解析来自 Falco驱动程序的信息,并发送警报。
Configuration - 定义 Falco 的运行方式、断言的规则以及如何执行警报。有关详细信息,请参阅配置。
Driver - 是一种遵循 Falco 驱动程序规范并发送系统调用信息流的软件。不安装驱动程序就无法运行 Falco。目前,Falco 支持以下驱动程序:
(默认)基于C++ 库构建libscap的内核模块libsinsp
从相同模块构建的 BPF 探针
用户空间检测
有关详细信息,请参阅Falco 驱动程序。
Plugins - 允许用户通过添加新的事件源和可以从事件中提取信息的新字段来扩展 falco 库/falco 可执行文件的功能。有关更多信息,请参阅插件。
7. 架构
Falco 可以检测任何涉及进行 Linux 系统调用的行为并发出警报。Falco 警报是根据调用进程的特定系统调用、参数和属性触发的。Falco 在用户空间和内核空间运行。系统调用由 Falco 内核模块解释。然后使用用户空间中的库分析系统调用。然后使用配置了 Falco 规则的规则引擎过滤事件。然后向配置为 Syslog、文件、标准输出等的输出警告可疑事件。
8. 下载
两种下载和运行 Falco 的方式:
- 直接在 Linux 主机上运行 Falco
- 在容器中运行 Falco 用户空间程序,并在底层主机上安装驱动程序。
下载容器镜像
9. 安装
9.1 Debian/Ubuntu
配置信任 falcosecurity GPG 密钥,配置 apt 存储库,并更新软件包列表:
curl -s https://falco.org/repo/falcosecurity-3672BA8F.asc | apt-key add - echo "deb https://download.falco.org/packages/deb stable main" | tee -a /etc/apt/sources.list.d/falcosecurity.list apt-get update -y
Install kernel headers:
apt-get -y install linux-headers-$(uname -r)
安装 Falco:
apt-get install -y falco
现在安装了 Falco、内核模块驱动程序和默认配置。Falco 作为一个系统单元运行。
有关如何使用 Falco 管理、运行和调试的信息,请参阅运行。
9.2 CentOS/RHEL/Fedora/Amazon Linux
配置信任 falcosecurity GPG 密钥并配置 yum 存储库:
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
Install kernel headers:
yum -y install kernel-devel-$(uname -r)
安装 Falco:
yum -y install falco
卸载 Falco:
yum erase falco
9.3 openSUSE
配置信任 falcosecurity GPG 密钥并配置 zypper 存储库:
rpm --import https://falco.org/repo/falcosecurity-3672BA8F.asc curl -s -o /etc/zypp/repos.d/falcosecurity.repo https://falco.org/repo/falcosecurity-rpm.repo
Install kernel headers:
zypper -n install kernel-default-devel-$(uname -r | sed s/\-default//g)
注意— 如果上述命令未找到该包,您可能需要运行zypper -n dist-upgrade以修复它。可能需要重新启动系统。
安装 Falco:
zypper -n install falco
现在安装了 Falco、内核模块驱动程序和默认配置。Falco 作为一个系统单元运行。
有关如何使用 Falco 管理、运行和调试的信息,请参阅运行。
有关如何使用 Falco 管理、运行和调试的信息,请参阅运行。
卸载 Falco:
zypper rm falco
9.4 Linux 通用(二进制包)
下载最新的二进制文件:
curl -L -O https://download.falco.org/packages/bin/x86_64/falco-0.32.1-x86_64.tar.gz
安装 Falco:
tar -xvf falco-0.32.1-x86_64.tar.gz cp -R falco-0.32.1-x86_64/* /
安装以下依赖项:
您的发行版的内核头文件
安装驱动程序后,您可以手动运行falco.
安装驱动程序
安装驱动程序的最简单方法是使用falco-driver-loader脚本。
默认情况下,它首先尝试使用dkms. 如果不可能,那么它会尝试将预建的下载到~/.falco/. 如果找到内核模块,则将其插入。
如果要安装 eBPF 探针驱动程序,请运行falco-driver-loader bpf. 它首先尝试在本地构建 eBPF 探针,否则将预构建下载到~/.falco/.
如果您使用的是 eBPF 探针,为了确保性能不会下降,请确保
您的内核已CONFIG_BPF_JIT启用
net.core.bpf_jit_enable设置为 1(启用 BPF JIT 编译器)
这可以通过验证sysctl -n net.core.bpf_jit_enable
可配置选项:
DRIVERS_REPO- 设置此环境变量以覆盖预构建内核模块和 eBPF 探针的默认存储库 URL,不带斜杠。
即,https://myhost.mydomain.com或者如果服务器具有子目录结构https://myhost.mydomain.com/drivers。
驱动程序需要使用以下结构托管: /${driver_version}/falco_${target}_${kernelrelease}_${kernelversion}.[ko|o]whereko和分别o代表内核模块和eBPF探针。
例如,/a259b4bf49c3330d9ad6c3eed9eb1a31954259a6/falco_amazonlinux2_4.14.128-112.105.amzn2.x86_64_1.ko.
该falco-driver-loader脚本使用上述格式获取驱动程序。
9.5 minikube 安装 falco
在本地环境中在 Kubernetes 上使用 Falco 的最简单方法是在Minikube上。
当minikube使用默认--driver参数运行时,Minikube 会创建一个运行各种 Kubernetes 服务的 VM 和一个运行 Pod 等的容器框架。通常,不可能直接在 minikube VM 上构建 Falco 内核模块,因为 VM 没有包括正在运行的内核的内核头文件。
为了解决这个问题,从 Falco 0.13.1 开始,可以在https://s3.amazonaws.com/download.draios.com获得最后 10 个 minikube 版本的预构建内核模块。这允许下载后备步骤通过可加载的内核模块成功。Falco 现在在每个新的 Falco 版本中都支持 10 个最新版本的 minikube。Falco 目前保留以前构建的内核模块供下载,并继续提供有限的历史支持。
- 使用 VM 驱动程序使用 Minikube 创建集群,在本例中为 Virtualbox:
minikube start --driver=virtualbox
- 检查所有 pod 是否正在运行:
kubectl get pods --all-namespaces
- 将稳定图表添加到 Helm 存储库:
helm repo add falcosecurity https://falcosecurity.github.io/charts helm repo update
- 使用 Helm 安装 Falco:
helm install falco falcosecurity/falco
输出:
AME: falco LAST DEPLOYED: Wed Jan 20 18:24:08 2021 NAMESPACE: default STATUS: deployed REVISION: 1 TEST SUITE: None NOTES: Falco agents are spinning up on each node in your cluster. After a few seconds, they are going to start monitoring your containers looking for security issues. No further action should be required. Tip: You can easily forward Falco events to Slack, Kafka, AWS Lambda and more with falcosidekick. Full list of outputs: https://github.com/falcosecurity/charts/falcosidekick. You can enable its deployment with `--set falcosidekick.enabled=true` or in your values.yaml. See: https://github.com/falcosecurity/charts/blob/master/falcosidekick/values.yaml for configuration values.
- 检查日志以确保 Falco 正在运行:
kubectl logs -l app=falco -f
输出:
* Trying to dkms install falco module with GCC /usr/bin/gcc-5 DIRECTIVE: MAKE="'/tmp/falco-dkms-make'" * Running dkms build failed, couldn't find /var/lib/dkms/falco/5c0b863ddade7a45568c0ac97d037422c9efb750/build/make.log (with GCC /usr/bin/gcc-5) * Trying to load a system falco driver, if present * Success: falco module found and loaded with modprobe Wed Jan 20 12:55:47 2021: Falco version 0.27.0 (driver version 5c0b863ddade7a45568c0ac97d037422c9efb750) Wed Jan 20 12:55:47 2021: Falco initialized with configuration file /etc/falco/falco.yaml Wed Jan 20 12:55:47 2021: Loading rules from file /etc/falco/falco_rules.yaml: Wed Jan 20 12:55:48 2021: Loading rules from file /etc/falco/falco_rules.local.yaml: Wed Jan 20 12:55:49 2021: Starting internal webserver, listening on port 8765
9.6 kind 安装 falco
kind允许您在本地计算机上运行 Kubernetes。此工具要求您 安装和配置Docker 。目前不能直接在带有 Linuxkit 的 Mac 上运行,但这些说明适用于运行kind.
在kind集群上运行 Falco 如下:
创建一个配置文件。例如:kind-config.yaml
将以下内容添加到文件中:
kind: Cluster apiVersion: kind.x-k8s.io/v1alpha4 nodes: - role: control-plane extraMounts: # allow Falco to use devices provided by the kernel module - hostPath: /dev containerPath: /dev # allow Falco to use the Docker unix socket - hostPath: /var/run/docker.sock containerPath: /var/run/docker.sock
- 通过指定配置文件创建集群:
kind create cluster --config=./kind-config.yaml
- 在 kind 集群中的一个节点上安装Falco。要将 Falco 安装为 Kubernetes 集群上的
daemonset
,请使用 Helm,方法同上。请参阅https://github.com/falcosecurity/charts/tree/master/falco。