falco 【1】入门
falco 【1】入门
falco 入门
tags: 安全
文章目录
falco 入门
1. 简介2. 特点3. 检测4. 规则5. 警报6. 组件7. 架构8. -9. 安装
9.1 Debian/Ubuntu9.2 CentOS/RHEL/Fedora/Amazon Linux9.3 openSUSE9.4 Linux 通用(二进制包)9.5 minikube 安装 falco9.6 kind 安装 falco
10. 升级
10.1 Debian/Ubuntu10.2 CentOS/RHEL/Fedora/Amazon Linux10.3 openSUSE
11. 部署
11.1 Kubernetes11.2 helm11.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 %} {% 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 用户空间程序,并在底层主机上安装驱动程序。
-容器镜像
标签 | 拉命令 | 描述 |
最新的 | docker pull falcosecurity/falco-no-driver:latest | 最新版本 |
版本 | docker pull falcosecurity/falco-no-driver: | 特定版本的 Falco,例如0.32.1 |
最新的 | docker pull falcosecurity/falco-driver-loader:latest | falco-driver-loader带有构建工具链的最新版本 |
版本 | docker pull falcosecurity/falco-driver-loader: | 特定版本,falco-driver-loader例如0.32.1带有构建工具链的 |
最新的 | docker pull falcosecurity/falco:latest | falco-driver-loader包含的最新版本 |
版本 | docker pull falcosecurity/falco: | 特定版本的 Falco,例如0.32.1包含falco-driver-loader |
9. 安装
9.1 Debian/Ubuntu
配置信任 falcosecurity GPG 密钥,配置 apt 存储库,并更新软件包列表:
curl -s | apt-key add -echo "deb stable main" | tee -a /etc/apt/sources.list.d/falcosecurity.listapt-get
Install kernel headers:
apt-get -y install linux-headers-$(uname -r)
安装 Falco:
apt-get install
现在安装了 Falco、内核模块驱动程序和默认配置。Falco 作为一个系统单元运行。
有关如何使用 Falco 管理、运行和调试的信息,请参阅运行。
9.2 CentOS/RHEL/Fedora/Amazon Linux
配置信任 falcosecurity GPG 密钥并配置 yum 存储库:
rpm --import kernel headers:
yum -y install kernel-devel-$(uname -r)
安装 Falco:
yum -y install
卸载 Falco:
yum erase falco
9.3 openSUSE
配置信任 falcosecurity GPG 密钥并配置 zypper 存储库:
rpm --import 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:
zypper rm
9.4 Linux 通用(二进制包)
-最新的二进制文件:
curl
安装 Falco:
tar -xvf falco-0.32.1-x86_64.tar.gzcp
安装以下依赖项:
您的发行版的内核头文件 安装驱动程序后,您可以手动运行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,不带斜杠。 即,驱动程序需要使用以下结构托管: /${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获得最后 10 个 minikube 版本的预构建内核模块。这允许-后备步骤通过可加载的内核模块成功。Falco 现在在每个新的 Falco 版本中都支持 10 个最新版本的 minikube。Falco 目前保留以前构建的内核模块供-,并继续提供有限的历史支持。
使用 VM 驱动程序使用 Minikube 创建集群,在本例中为 Virtualbox:
minikube start --driver=virtualbox
检查所有 pod 是否正在运行:
kubectl get pods --all-namespaces
将稳定图表添加到 Helm 存储库:
helm repo add
使用 Helm 安装 Falco:
helm install
输出:
AME: falcoLAST DEPLOYED: Wed Jan 20 18:24:08 2021NAMESPACE: defaultSTATUS: deployedREVISION: 1TEST SUITE: NoneNOTES:Falco agents are spinning up on each node in your cluster. After a fewseconds, they are going to start monitoring your containers looking forsecurity 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: can enable its deployment with `--set falcosidekick.enabled=true` or in your values.yaml.See: for
检查日志以确保 Falco 正在运行:
kubectl logs -l app=falco -f
输出:
* Trying to dkms install falco module with GCC /usr/bin/gcc-5DIRECTIVE: 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 modprobeWed 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.yamlWed 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: ClusterapiVersion: kind.x-k8s.io/v1alpha4nodes:- 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
通过指定配置文件创建集群:
kind create cluster --config=./kind-config.yaml
在 kind 集群中的一个节点上安装Falco。要将 Falco 安装为 Kubernetes 集群上的daemonset,请使用 Helm,方法同上。请参阅升级
根据您选择的安装方法,在将 Falco 升级到最新版本之前,您首先必须删除活动内核模块:
rmmod falco
10.1 Debian/Ubuntu
如果您apt按照 Falco 0.27.0 或更早版本的说明配置了存储库,则可能需要更新存储库 URL:
sed -i 's,/etc/apt/sources.list.d/falcosecurity.listapt-get cleanapt-get
检查存在的apt-get update日志Falco :
apt-get --only-upgrade install
10.2 CentOS/RHEL/Fedora/Amazon Linux
如果您yum按照 Falco 0.27.0 或更早版本的说明配置了存储库,则可能需要更新存储库 URL
sed -i 's,repolist -v falcosecurity-rpm
如果您按照提供的说明安装了 Falco :
检查更新:
yum check-update
如果有更新的 Falco 版本可用
yum update falco
10.3 openSUSE
如果您zypper按照 Falco 0.27.0 或更早版本的说明配置了存储库,则可能需要更新存储库 URL:
sed -i 's,/etc/zypp/repos.d/falcosecurity.repozypper
然后检查falcosecurity-rpm存储库是否指向Falco :
zypper
11. 部署
11.1 Kubernetes
Falco 可以作为DaemonSet部署在 Kubernetes 中,以监控集群每个节点中的系统事件。
11.2 helm
在 Kubernetes 中安装 Falco 的最简单方法之一是使用Helm。Falco 社区支持官方 helm chart。
11.3 DaemonSet
Falco 也可以手动安装在 Kubernetes 中。在这种情况下,您负责提供 DaemonSet 对象 YAML 定义并将其部署到您的集群中。有关更多详细信息,您可以在此处找到示例。
12. 运行
12.1 将 Falco 作为 service 运行
systemctl enable
您还可以使用 . 查看 Falco 日志journalctl。
journalctl -fu falco
12.2 Docker 中运行
即使使用容器镜像,Falco 也需要在主机上安装内核头文件作为正确构建驱动程序(内核模块或eBPF 探针)的先决条件。当预建驱动程序已经可用时,不需要此步骤。
Falco 提供了一组官方docker 镜像。图像可以通过以下两种方式使用:
最低特权(推荐)完全特权
12.2.1 最低特权(推荐)
a. 安装内核模块:
可以直接在主机上使用官方的安装方式或者,您可以临时使用特权容器在主机上安装驱动程序:
docker pull falcosecurity/falco-driver-loader:latestdocker run --rm -i -t \ --privileged \ -v /root/.falco:/root/.falco \ -v /proc:/host/proc:ro \ -v /boot:/host/boot:ro \ -v /lib/modules:/host/lib/modules \ -v /usr:/host/usr:ro \ -v /etc:/host/etc:ro \
falcosecurity/falco-driver-loader图像只是包装了脚本falco-driver-loader。
b. 使用 Docker 以最小权限原则在容器中运行 Falco :
docker pull falcosecurity/falco-no-driver:latestdocker run --rm -i -t \ -e HOST_ROOT=/ \ --cap-add SYS_PTRACE --pid=host $(ls /dev/falco* | xargs -I {} echo --device {}) \ -v /var/run/docker.sock:/var/run/docker.sock \
如果您在启用了 AppArmor LSM 的系统(例如 Ubuntu)上运行 Falco,您还需要传递–security-opt apparmor:unconfined给docker run上面的命令。
您可以使用以下命令验证您是否启用了 AppArmor:
docker info | grep
请注意,每个 CPU s /dev/falco* | xargs -I {} echo --device {}输出一个--device /dev/falcoX选项(即,仅由 Falco 的内核模块创建的设备)。此外,-e HOST_ROOT=/这是必要的,因为--device无法将设备重新映射到/host/dev/.
要使用 eBPF 驱动程序以最低权限模式运行 Falco,我们列出了所有必需的功能:
在小于 5.8 的内核上,Falco 需要CAP_SYS_ADMIN,CAP_SYS_RESOURCE、CAP_SYS_PTRACE在kernels >=5.8 上,CAP_BPF并且CAP_PERFMON被分离出来CAP_SYS_ADMIN,因此所需的功能是CAP_BPF,CAP_PERFMON,CAP_SYS_RESOURCE,CAP_SYS_PTRACE. 不幸的是,Docker 还不支持通过该--cap-add选项添加两个新引入的功能。出于这个原因,我们继续使用CAP_SYS_ADMIN,因为它仍然允许执行CAP_BPF和授予的相同操作CAP_PERFMON。在不久的将来,Docker 将支持添加这两个功能,我们将能够替换CAP_SYS_ADMIN.
安装 eBPF 探针
docker pull falcosecurity/falco-driver-loader:latestdocker run --rm -i -t \ --privileged \ -v /root/.falco:/root/.falco \ -v /proc:/host/proc:ro \ -v /boot:/host/boot:ro \ -v /lib/modules:/host/lib/modules:ro \ -v /usr:/host/usr:ro \ -v /etc:/host/etc:ro \
然后,运行 Falco
docker pull falcosecurity/falco-no-driver:latestdocker run --rm -i -t \ --cap-drop all \ --cap-add sys_admin \ --cap-add sys_resource \ --cap-add sys_ptrace \ -v /var/run/docker.sock:/host/var/run/docker.sock \ -e FALCO_BPF_PROBE="" \ -v /root/.falco:/root/.falco \ -v /etc:/host/etc \ -v /proc:/host/proc:ro \
同样,如果您的系统启用了 AppArmor LSM,您将需要添加--security-opt apparmor:unconfined到最后一个命令。
12.2.2 完全特权
要使用具有完全权限的 Docker 在容器中运行 Falco,请使用以下命令。
如果您想将 Falco 与内核模块驱动程序一起使用:
docker pull falcosecurity/falco:latestdocker run --rm -i -t \ --privileged \ -v /var/run/docker.sock:/host/var/run/docker.sock \ -v /dev:/host/dev \ -v /proc:/host/proc:ro \ -v /boot:/host/boot:ro \ -v /lib/modules:/host/lib/modules:ro \ -v /usr:/host/usr:ro \ -v /etc:/host/etc:ro \
或者,您可以使用 eBPF 探针驱动程序:
docker pull falcosecurity/falco:latestdocker run --rm -i -t \ --privileged \ -e FALCO_BPF_PROBE="" \ -v /var/run/docker.sock:/host/var/run/docker.sock \ -v /proc:/host/proc:ro \ -v /boot:/host/boot:ro \ -v /lib/modules:/host/lib/modules:ro \ -v /usr:/host/usr:ro \ -v /etc:/host/etc:ro \
也可以在完全特权模式下使用falco-no-driver镜像。falco-driver-loader这在由于空间、资源、安全或策略限制而不允许完整 Falco 映像的环境中可能是可取的。您可以将 eBPF 探针或内核模块加载到其自己的临时容器中,如下所示:
docker pull falcosecurity/falco-driver-loader:latestdocker run --rm -i -t \ --privileged \ -v /var/run/docker.sock:/host/var/run/docker.sock \ -v /dev:/host/dev \ -v /proc:/host/proc:ro \ -v /boot:/host/boot:ro \ -v /lib/modules:/host/lib/modules:ro \ -v /usr:/host/usr:ro \ -v /etc:/host/etc:ro \
完成此操作后,或者如果您通过falco-driver-loader脚本而不是 Docker 映像在主机上永久安装了驱动程序,那么您可以简单地falco-no-driver以特权模式加载映像:
docker pull falcosecurity/falco-no-driver:latestdocker run --rm -i -t \ --privileged \ -v /var/run/docker.sock:/host/var/run/docker.sock \ -v /dev:/host/dev \ -v /proc:/host/proc:ro \
要使用eBPF 探针falco-no-driver,falco-driver-loader您必须删除-v /dev:/host/dev(仅内核模块需要)并添加:
FALCO_BPF_PROBE="" -v /root/.falco:/root/.falco \
其他可配置选项:
DRIVER_REPO- 请参阅安装驱动程序部分。SKIP_DRIVER_LOADER-设置此环境变量以避免镜像启动falco-driver-loader时运行。falcosecurity/falco当驱动程序已经通过其他方式安装在主机上时很有用
12.3 Hot Reload
这将重新加载 Falco 配置并重新启动引擎,而不会终止 pid。这对于在不杀死守护进程的情况下传播新的配置更改很有用。
kill -1 $(cat /var/run/falco.pid)
参考:
falco getting startedsysdig falcoFalco case studies
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~