falco 【1】入门(1)

简介: falco 【1】入门(1)

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、文件、标准输出等的输出警告可疑事件。

1035234-20181020215539574-213176954.png

8. 下载

两种下载和运行 Falco 的方式:

  • 直接在 Linux 主机上运行 Falco
  • 在容器中运行 Falco 用户空间程序,并在底层主机上安装驱动程序。

1670996573424.png

下载容器镜像

1670996589411.png

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 目前保留以前构建的内核模块供下载,并继续提供有限的历史支持。

  1. 使用 VM 驱动程序使用 Minikube 创建集群,在本例中为 Virtualbox:
minikube start --driver=virtualbox
  1. 检查所有 pod 是否正在运行:
kubectl get pods --all-namespaces
  1. 将稳定图表添加到 Helm 存储库:
helm repo add falcosecurity https://falcosecurity.github.io/charts
helm repo update
  1. 使用 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.
  1. 检查日志以确保 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
  1. 通过指定配置文件创建集群:
kind create cluster --config=./kind-config.yaml
  1. 在 kind 集群中的一个节点上安装Falco。要将 Falco 安装为 Kubernetes 集群上的daemonset,请使用 Helm,方法同上。请参阅https://github.com/falcosecurity/charts/tree/master/falco


相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
机器学习/深度学习 自然语言处理 算法
Transformer 模型:入门详解(1)
动动发财的小手,点个赞吧!
14285 1
Transformer 模型:入门详解(1)
|
3月前
|
运维 安全 API
当安全事件不再“靠人吼”:一文带你搞懂 SOAR 自动化响应实战
当安全事件不再“靠人吼”:一文带你搞懂 SOAR 自动化响应实战
314 10
|
Cloud Native 安全 Linux
基于eBPF的云原生可观测性开源项目Kindling之eBPF基础设施库技术选型
eBPF技术正以令人难以置信的速度发展,作为一项新兴技术,它具备改变容器网络、安全、可观测性生态的潜力。本文主要探讨Kindling的eBPF基础设施库的选型考量。
1382 0
基于eBPF的云原生可观测性开源项目Kindling之eBPF基础设施库技术选型
|
3月前
|
Kubernetes 监控 网络协议
【k8s-1.34.2安装部署】六.企业级部署cilium-1.18.4网络插件
本章详解K8s集群中CNI网络插件Cilium 1.18.4的安装配置,涵盖Helm部署、核心参数解析及状态验证。支持eBPF、Hubble可视化、带宽管理等功能,并提供镜像加速地址与常见问题处理方案。
1691 7
|
存储 Kubernetes 开发工具
使用ArgoCD管理Kubernetes部署指南
ArgoCD 是一款基于 Kubernetes 的声明式 GitOps 持续交付工具,通过自动同步 Git 存储库中的配置与 Kubernetes 集群状态,确保一致性与可靠性。它支持实时同步、声明式设置、自动修复和丰富的用户界面,极大简化了复杂应用的部署管理。结合 Helm Charts,ArgoCD 提供模块化、可重用的部署流程,显著减少人工开销和配置错误。对于云原生企业,ArgoCD 能优化部署策略,提升效率与安全性,是实现自动化与一致性的理想选择。
797 0
|
7月前
|
人工智能 JavaScript 前端开发
用 Go 语言轻松构建 MCP 服务器
本文介绍了使用 Go 语言构建 MCP 服务器的完整过程,涵盖创建服务器实例、注册工具、资源和提示词,以及通过 stdio 和 sse 模式启动服务的方法,帮助开发者快速集成 LLM 应用与外部系统。
|
Kubernetes Ubuntu 网络安全
ubuntu使用kubeadm搭建k8s集群
通过以上步骤,您可以在 Ubuntu 系统上使用 kubeadm 成功搭建一个 Kubernetes 集群。本文详细介绍了从环境准备、安装 Kubernetes 组件、初始化集群到管理和使用集群的完整过程,希望对您有所帮助。在实际应用中,您可以根据具体需求调整配置,进一步优化集群性能和安全性。
1422 13
ELK 圣经:Elasticsearch、Logstash、Kibana 从入门到精通
ELK是一套强大的日志管理和分析工具,广泛应用于日志监控、故障排查、业务分析等场景。本文档将详细介绍ELK的各个组件及其配置方法,帮助读者从零开始掌握ELK的使用。
|
JSON Kubernetes 数据格式
crictl 常见的命令大全
crictl(Container Runtime Interface Command Line Interface)是一个命令行工具,用于与符合Kubernetes容器运行时接口(CRI)规范的容器运行时进行交互。它提供了一系列命令来查看和管理容器、镜像、Pod等资源。以下是crictl的一些常见命令及其功能概述: ### 1. 镜像管理 * **查看镜像**: - `crictl images`:列出所有镜像。 - `crictl images | grep <image-name>`:查看特定镜像。 * **拉取镜像**: - `crictl pull <image_na
6417 9
|
存储 Linux 开发者
虚拟机centos7.9一键部署docker
本文介绍了如何在 CentOS 7.9 虚拟机上安装 Docker 社区版 (Docker-ce-20.10.20)。通过使用阿里云镜像源,利用 `wget` 下载并配置 Docker-ce 的 YUM 仓库文件,然后通过 `yum` 命令完成安装。安装后,通过 `systemctl` 设置 Docker 开机自启并启动 Docker 服务。最后,使用 `docker version` 验证安装成功,并展示了客户端与服务器的版本信息。文中还提供了列出所有可用 Docker-ce 版本的命令。
3022 0
虚拟机centos7.9一键部署docker

热门文章

最新文章