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


相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
5月前
|
运维 Ubuntu Linux
k8s-CKS真题-故障排查Sysdig & falco
k8s-CKS真题-故障排查Sysdig & falco
102 0
|
9月前
|
开发工具 git Perl
|
10月前
|
存储
KubeSphere 基础知识,KubeSphere 入门了解
KubeSphere 基础知识,KubeSphere 入门了解
264 0
|
NoSQL 调度 数据中心
|
3月前
|
Kubernetes NoSQL 数据库
Nomad 系列 - 快速上手
Nomad 系列 - 快速上手
|
7月前
|
运维 Kubernetes Cloud Native
Kubernetes(K8s)常用命令大全:熟练编排更完美
Kubernetes(K8s)常用命令大全:熟练编排更完美
551 0
|
9月前
|
Kubernetes 持续交付 开发工具
|
存储 Kubernetes 监控
falco 【1】入门(2)
falco 【1】入门(2)
|
存储 监控 安全
kubernets 【安全】-sysdig
kubernets 【安全】-sysdig
kubernets 【安全】-sysdig
|
Kubernetes Shell 容器
Linkerd CLI 常用命令简介
Linkerd CLI 常用命令简介
127 0

热门文章

最新文章