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

2018 年 11 月 5 日 DBAplus社群


作者介绍

林伟壕,SecDevOpsor,先后在中国电信和网易游戏从事数据网络、网络安全和游戏运维工作。对Linux运维、虚拟化和网络安全防护等研究颇多,目前专注于网络安全自动化检测、防御系统构建。


入侵检测和漏洞扫描可谓是主动发现安全问题的“内功外功”,在容器技术应用越来越广泛的今天,也需要被给予同样的重视。本文将探讨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、展示和输出相关的配置



2、检测规则的配置


3、log文件创建

touch /var/log/falco_events.log


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


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



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



二、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:



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



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


2、运行未经授权的进程


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



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



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


  • 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:



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



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


3、写入非用户数据目录


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



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



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



这些条件基于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,你会发现两个异常事件:



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


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


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



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



宏sensitive_mount包含禁用目录。


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



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


docker restart falco


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


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


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



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


事件发生器


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


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



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



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


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


参考


  • 《Sysdig Falco文档》:

    https://github.com/draios/falco/wiki/

  • SELinux,Seccomp,Sysdig Falco的技术讨论》:

    https://sysdig.com/blog/selinux-seccomp-falco-technical-discussion/


- 近期活动 -


11月30日在广州,一场盛大的技术大会等着你——2018 Gdevops全球敏捷运维峰会-广州站!


  • 聚焦AIOps:BAT、360、美图等名企大佬齐聚,携最新智能运维实践亮相;

  • 运维多面观:覆盖银行、证券等传统行业的DevOps、可视化、安全建设等;

  • 数据库专场:腾讯、蚂蚁金服、美团点评、PingCAP等一线专家畅谈数据库管理、优化与改造;

  • 沉浸式学习:深度课程系统教学,玩转DevOps工具栈;

  • 年度颁奖礼:共同见证2018年度十大MVP、最佳产品奖的隆重揭晓!


扫描下图可了解峰会更多详情及报名↓↓↓

登录查看更多
1

相关内容

Docker - An open platform for distributed applications for developers and sysadmins.
【2020新书】实战R语言4,323页pdf
专知会员服务
100+阅读 · 2020年7月1日
【干货书】现代数据平台架构,636页pdf
专知会员服务
253+阅读 · 2020年6月15日
Python导论,476页pdf,现代Python计算
专知会员服务
259+阅读 · 2020年5月17日
【实用书】Python爬虫Web抓取数据,第二版,306页pdf
专知会员服务
117+阅读 · 2020年5月10日
【实用书】流数据处理,Streaming Data,219页pdf
专知会员服务
76+阅读 · 2020年4月24日
【2020新书】Kafka实战:Kafka in Action,209页pdf
专知会员服务
67+阅读 · 2020年3月9日
【新书】Java企业微服务,Enterprise Java Microservices,272页pdf
【干货】大数据入门指南:Hadoop、Hive、Spark、 Storm等
专知会员服务
95+阅读 · 2019年12月4日
浅谈 Kubernetes 在生产环境中的架构
DevOps时代
11+阅读 · 2019年5月8日
支持多标签页的Windows终端:Fluent 终端
Python程序员
7+阅读 · 2019年4月15日
被动DNS,一个被忽视的安全利器
运维帮
11+阅读 · 2019年3月8日
I2P - 适用于黑客的Android应用程序
黑白之道
30+阅读 · 2019年3月6日
去哪儿网开源DNS管理系统OpenDnsdb
运维帮
21+阅读 · 2019年1月22日
Spark App自动化分析和故障诊断
CSDN大数据
7+阅读 · 2017年6月22日
Seeing What a GAN Cannot Generate
Arxiv
8+阅读 · 2019年10月24日
Rapid Customization for Event Extraction
Arxiv
7+阅读 · 2018年9月20日
Bidirectional Attention for SQL Generation
Arxiv
4+阅读 · 2018年6月21日
Arxiv
7+阅读 · 2018年4月11日
VIP会员
相关VIP内容
相关资讯
浅谈 Kubernetes 在生产环境中的架构
DevOps时代
11+阅读 · 2019年5月8日
支持多标签页的Windows终端:Fluent 终端
Python程序员
7+阅读 · 2019年4月15日
被动DNS,一个被忽视的安全利器
运维帮
11+阅读 · 2019年3月8日
I2P - 适用于黑客的Android应用程序
黑白之道
30+阅读 · 2019年3月6日
去哪儿网开源DNS管理系统OpenDnsdb
运维帮
21+阅读 · 2019年1月22日
Spark App自动化分析和故障诊断
CSDN大数据
7+阅读 · 2017年6月22日
Top
微信扫码咨询专知VIP会员