Sysdig Falco:你不可不知的Docker安全监控利器

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介:

入侵检测和漏洞扫描可谓是主动发现安全问题的“内功外功”,在容器技术应用越来越广泛的今天,也需要被给予同样的重视。本文将探讨Docker入侵检测工具Sysdig Falco的基础知识以及如何检测容器的异常行为等问题。

Sysdig Falco是一种旨在检测异常活动开源的系统行为监控程序。作为Linux主机入侵检测系统,对Docker依旧特别有用,因为它支持容器上下文,如container.id、container.image或其规则的命名空间。

虽然说Sysdig Falco是一种审计工具,却与Seccomp或AppArmor等内核态的审计工具全然不同。Sysdig Falco在用户空间中运行,使用内核模块拦截系统调用,而其他类似工具在内核级别运行系统调用过滤或监控。用户空间实现的一个好处是能够与Docker编排工具等外部系统集成。

本文将从以下4个安全威胁场景展示如何使用Sysdig Falco进行异常行为监控:

 ●  运行交互式Shell的容器;
 ●  运行未经授权的进程;
 ●  写入非用户数据目录;
 ●  容器异常挂载。

读者将同时扮演攻击者和防御者(系统管理员)角色,验证Sysdig Falco是否已检测到入侵企图。

一、部署Sysdig Falco

首先,把构建Sysdig Falco所需要的配置文件放在/etc/falco下:

1、展示和输出相关的配置

89f8c6350d43676c4d2f5890136db7f65cc8c9b2

2、检测规则的配
ae0e904022de0fc4ea8e7e843e99e6a6c20b0556
3、log文件创建

touch /var/log/falco_events.log

总而言之,falco.yaml配置Falco服务,falco_rules.yaml配置威胁检测模式,falco_events.log将用作事件日志文件。

然后,我们可以从Docker Hub拉取镜像并启动Sysdig Falco容器,安装我们之前定义的配置文件:

c079891a1312f4a43a8539e41111ee3a7745c200

注意:如果不小心终止了容器或想要重新加载配置文件,随时可以重新启动Falco。

f0249781a5264bd6b7abb0b851122fafb74a788d

二、4个威胁场景的检测演示

下面开始进行4个威胁场景的检测演示。

1、运行交互式Shell的容器

我们第一个例子很简单:

检测攻击者在任意容器中运行交互式Shell。此警报包含在默认规则集中。让我们先触发它看看,然后再查看规则定义。

在Docker主机上运行容器,例如Nginx:

docker run -d -P --name example1 nginxdocker ps

现在生成一个交互式Shell:

docker exec -it example1 bash

如果需要,你可以玩一下,然后运行exit离开容器Shell。

如果用>tail/var/log/falco_events.log来打开日志文件,我们应该能够看到类似下面的log:

1a0e24a0900b7c8c76b4cf349bb7f3450d5c9eb1

这是/etc/falco/falco_rules.yaml中触发事件的规则:

4409739b148ee7792c96c7e37fdd751764939f5e

这是一个相当复杂的规则,可能你现在还没有完全理解每个部分,但看到识别规则名称、描述、一些触发条件、事件输出以及Falco提供的一些上下文感知变量,如proc.name或%container.info,优先级和一些标签。这是Sysdig Falco的特有语法和配置导致的。

2、运行未经授权的进程

Docker最佳实践建议每个容器只运行一个进程,这在安全上也是非常有意义,因为你可以轻而易举的发现异常启动的进程。比如说你知道你的Nginx容器应该只运行Nginx进程,其他的任意进程都是异常的指标。让我们为此示例下载配置文件的新版本:

4c58669e69dabe5ac1150a447fe70829174a8831

现在,请注意文件中的以下规则:

fbfae75ff753945fa18049335159fdc188836bfa

让我们剖析这条规则的触发条件,每个条件都是缺一不可的:

 ●  spawned_process
(宏:成功运行新进程);
 ●  container
(宏:运行它的命名空间属于容器而非主机);
 ●  以Nginx开头的container.image
(容器属性:拥有每个授权进程列表的镜像名称);
 ●  不属于Nginx的proc.name

(Nginx:允许的进程名称列表)。

要应用新配置文件,我们将重新启动Sysdig Falco容器:

docker restart falco

现在我们需要运行一个新的Nginx容器:

docker run -d -P --name example2 nginx

并运行example2容器中的任意内容,例如ls:

d6ce1a4f083c3552a29cd8684d773f3985c55f2c

如果用tail/var/log/falco_events.log查看日志,可以看到类似下面的记录:

733483f633e81b71af4952595d29a31e002220e1

看吧,这个异常捕获得非常漂亮!Sysdig Falco通知显示了一个异常的进程。

3、写入非用户数据目录

容器不变性意味着运行的容器完全相同,它们不会对从镜像运行的软件进行任意更改,并且任意用户数据都位于外部安装的卷中。当任意进程尝试写入非数据目录时,就让触发警报。 让我们为此示例下载配置文件的新版本:

dab7b1338295f6d6933c39a95a5af27a2eea20f7

注意定义我们为Nginx定制的允许写入目录的宏:

eefb383d9b8c06a8bf249c00a174ec0f436e0d34

我们来看看上面使用的open_write宏:

51b4ef8d465dd26b4dfd722367718a88342f4f75

这些条件基于Sysdig系统调用过滤器,在这种情况下,我们过滤打开或OpenAT系统调用,打开模式写入和文件描述符。 要应用新配置文件,我们将重新启动Sysdig Falco容器:

docker restart falco

现在,可以生成一个新容器并尝试以下规则:

docker run -d -P --name example3 nginx

docker exec -it example3 bash

mkdir /userdata

touch /userdata/foo

touch /usr/foo

退出容器并接着查看日志文件tail/var/log/falco_events.log,你会发现两个异常事件:

920202c00bbb49698500aae93d3a93caed2ef4d6

第一个事件是因为运行交互式Shell写入/dev/tty,这是正常的和符合预期的。第二个事件是Falco检测到写入/usr的异常文件。

4、通过容器进行敏感挂载

容器通常具有已定义且不经常更改的挂载点集合。如果容器尝试在允许的目录集之外安装主机目录或文件,则可能是某人试图突破容器,或者是团队成员为容器开放了太大的权限。 让我们为此示例下载配置文件的新版本:

eefc8e5f33a0c6d634e961f915259788a2b06c0f

这是监视容器敏感挂载的规则:

017145a96af5ba32f5767b827af3a35c10ea03ec

宏sensitive_mount包含禁用目录。

默认情况下,它只是监视/proc,但在我们的配置文件中,我们已经修改为包含/mnt了。

afe6b99b5732596bc8a6c4e7f6c9b7328ea44d1c

要应用新配置文件,我们将重新启动Sysdig Falco容器:

docker restart falco

现在,可以生成一个新容器并尝试mount /mnt:

docker run -d -P --name example4 -v/mnt:/tmp/mnt alpine

如果用tail/var/log/falco_events.log查看日志,可能会看到:

69b93624a976cfc796485d95ef82b65c6dc566ca

Sysdig Falco通知显示它检测到敏感的挂载。

事件发生器

Falco有一个合成事件生成器,可以显示默认规则集的所有功能。这非常适合全面了解Sysdig Falco的所有功能。

让我们拉取镜像并启动事件生成器:

798094012dba0144b8ad843385e5c70493083431

如果用tail-f/var/log/falco_events.log查看日志,将看到检测到许多可疑行为,因为该容器模拟了各种典型的容器入侵和突破尝试:

7840d215a0cbc436f734c188c2ab31b03b70681a

本文介绍了Sysdig Falco的基础知识及其基于Docker部署上的操作。从内核系统调用和事件,Linux命名空间和特定于容器的元数据开始,可以配置安全警报,而无需修改或检测Docker镜像。

这次我们只是使用简单的文件输出来关注规则语法,但你也可以配置Sysdig Falco的自定义编程输出以向企业中的事件和报警系统发送通知。


原文发布时间为:2018-11-6

本文作者:林伟壕

本文来自云栖社区合作伙伴“DBAplus社群”,了解相关信息可以关注“DBAplus社群”。

相关实践学习
日志服务之数据清洗与入湖
本教程介绍如何使用日志服务接入NGINX模拟数据,通过数据加工对数据进行清洗并归档至OSS中进行存储。
相关文章
|
2月前
|
Prometheus 监控 Cloud Native
构建高效稳定的Docker容器监控体系
【5月更文挑战第20天】 在微服务架构日益普及的今天,Docker作为其重要的实现技术之一,承载着大量应用的运行。然而,随之而来的是对于容器健康状态、资源使用情况以及性能指标的监控需求急剧增加。本文旨在探讨构建一个高效且稳定的Docker容器监控体系,不仅涵盖了监控工具的选择与配置,还详细阐述了监控数据的分析与处理流程。通过精心设计的监控策略和实时响应机制,我们能够确保系统的稳定性,并及时发现及处理潜在的问题。
|
24天前
|
Cloud Native 安全 Docker
云上攻防-云原生篇&Docker安全&系统内核&版本&CDK自动利用&容器逃逸
云上攻防-云原生篇&Docker安全&系统内核&版本&CDK自动利用&容器逃逸
|
27天前
|
监控 Java 数据安全/隐私保护
性能监控之 JMX 监控 Docker 容器中的 Java 应用
【6月更文挑战9天】性能监控之 JMX 监控 Docker 容器中的 Java 应用
417 1
|
1月前
|
监控 JavaScript 测试技术
【Docker项目实战】使用Docker部署kener监控面板
【6月更文挑战第8天】使用Docker部署kener监控面板
43 10
|
1月前
|
安全 持续交付 Docker
精通 Docker:简化开发、部署与安全保障
精通 Docker:简化开发、部署与安全保障
|
2月前
|
存储 运维 监控
【Docker专栏】Docker日志管理与监控的最佳方法
【5月更文挑战第7天】本文探讨了Docker容器的日志管理与监控,强调其在运维中的重要性。Docker默认使用`json-file`日志驱动,可通过`docker logs`命令查看。建议选择合适日志驱动,配置日志选项,并集成ELK Stack等工具进行高级分析。实时监控、设置警报、分析数据和审计日志是实践关键。最佳实践包括日志数据与容器数据分离、使用日志代理、保护敏感信息及遵守法规。关注新技术以提升系统稳定性和安全性。
【Docker专栏】Docker日志管理与监控的最佳方法
|
2月前
|
监控 安全 数据安全/隐私保护
【Docker专栏】Docker容器安全:防御与加固策略
【5月更文挑战第7天】本文探讨了Docker容器安全,指出容器化技术虽带来便利,但也存在安全隐患,如不安全的镜像、容器逃逸、网络配置不当等。建议采取使用官方镜像、镜像扫描、最小权限原则等防御措施,并通过安全的Dockerfile编写、运行时安全策略、定期更新和访问控制等加固容器安全。保持警惕并持续学习安全实践至关重要。
【Docker专栏】Docker容器安全:防御与加固策略
|
2月前
|
运维 安全 Docker
【Docker 专栏】Docker 镜像安全扫描与漏洞修复
【5月更文挑战第9天】Docker技术在软件开发和部署中带来便利,但其镜像安全问题不容忽视。本文探讨了Docker镜像安全扫描与漏洞修复,强调了镜像安全对应用和系统的重要性。文中介绍了静态和动态扫描方法,列举了软件漏洞、配置漏洞和恶意软件等常见安全问题,并提到了Clair和Trivy等扫描工具。修复策略包括更新软件、调整配置和重建镜像。此外,加强安全意识、规范镜像制作流程和定期扫描是管理建议。未来,将持续面对新的安全挑战,需持续研究和完善安全技术。
【Docker 专栏】Docker 镜像安全扫描与漏洞修复
|
2月前
|
Prometheus 监控 Cloud Native
构建高效稳定的Docker容器监控体系
【5月更文挑战第13天】在微服务架构和容器化部署日益普及的背景下,对Docker容器的监控变得尤为重要。本文将探讨一种构建高效稳定Docker容器监控体系的方法,通过集成Prometheus和cAdvisor工具,实现对容器资源使用情况、性能指标和运行状态的实时监控。同时,结合Grafana进行数据可视化,为运维人员提供直观的分析界面,以便及时发现和解决潜在问题,保障系统的高可用性和稳定性。
248 6
|
1月前
|
安全 数据安全/隐私保护 Docker
Docker 容器连接:构建安全高效的容器化网络生态
Docker 容器连接:构建安全高效的容器化网络生态