【技术分享】K8S Runtime入侵检测之Falco

VSole2021-08-19 15:11:12

介绍

Falco 由 Sysdig 于 2016 年创建,是第一个作为孵化级项目加入 CNCF 的运行时安全项目。Falco可以对Linux系统调用行为进行监控,提供了lkm 内核模块驱动和eBPF 驱动。Falco的主要功能如下:从内核运行时采集Linux系统调用,提供了一套强大的规则引擎,用于对Linux系统调用行为进行监控,当系统调用违反规则时,会触发相应的告警。

安装文档地址如下:

https://falco.org/docs/getting-started/installation/

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 -yapt-get -y install linux-headers-$(uname -r)apt-get install -y falco
rpm --import https://falco.org/repo/falcosecurity-3672BA8F.asccurl -s -o /etc/yum.repos.d/falcosecurity.repo https://falco.org/repo/falcosecurity-rpm.repoyum -y install kernel-devel-$(uname -r)yum -y install falco

Falco规则文件是包含三种类型元素的YAML文件:

Rules 、Macros、Lists

Rules就是生成告警的条件以及一下描述性输出字符串。Macros 是可以在规则或者其他宏中重复使用的规则条件片段。Lists 类似Python 列表,定义了一个变量集合。

Falco 使用了Sysdig, 在rule的 condition里面,任何 Sysdig 过滤器都可以在 Falco 中使用。

参考如下:

https://github.com/draios/sysdig/wiki/sysdig-user-guide#filtering

这是一个rule的 condition条件示例,在容器内运行 bash shell 时发出警报:

container.id != host and proc.name = bash

第一个子句检查事件是否发生在容器中(Sysdig 事件有一个container字段,该字段等于”host”事件是否发生在host主机上)。第二个子句检查进程名称是否为bash。

举个完整的列子

- list: my_programs  items: [ls, cat,  bash]
- macro: access_file  condition: evt.type=open
- rule: program_accesses_file  desc: track whenever a set of programs opens a file  condition: proc.name in (my_programs) and (access_file)  output: a tracked program opened a file (user=%user.name command=%proc.cmdline file=%fd.name)  priority: INFO

web应用进程java,php,apache,httpd,tomcat 中运行其他进程falco demo,图片来自,字节沙龙

web应用进程java,php,apache,httpd,tomcat 中读取查看敏感文件falco demo,图片来自,字节沙龙

下面,我们修改falco 的配置,/etc/falco/falco.yaml

json_output: truejson_include_output_property: truehttp_output:  enabled: true  url: "http://localhost:2801"

启动falco

systemctl enable falco  &&  systemctl start falco

https://github.com/falcosecurity/falcosidekick.git

falcosidekick 是一个管道工具,接受 Falco的事件并将它们发送到不同的持久化工具中。我们使用falcosidekick把falco post 过来的数据写入es ,也可以写入kafka。我们也读取kafka里面的东西完成告警, 也可以用 Prometheus 和falco-exporter 完成告警。如下图。

elasticsearch:   hostport: "http://10.10.116.177:9200"   index: "falco"   type: "event"   minimumpriority: ""   suffix: "daily"   mutualtls: false   checkcert: true   username: ""   password: ""
kafka:  hostport: ""  topic: ""  # minimumpriority: "debug"

 

批量部署&更新规则

我们在生产环境中需要批量部署和更新规则需求,所以我们可以使用saltstack 或者 ansible 下发对应shell脚本来完成我们的需求。

批量部署

#!/bin/bash
if [  -n "$(uname -a | grep Ubuntu)" ]; then       # 按实际情况修改        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        apt-get install -y falcoelse        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        yum -y install falcofi
systemctl enable falco && systemctl start falco

批量更新规则

#!/bin/bash
BDATE=`date +%Y%m%d%H%M%S`URL=http://8.8.8.8:8888/falco_update.tar.gz
if [ -d /etc/falco_bak ]then        cp -r /etc/falco  /etc/falco_bak/${BDATE}        rm -rf /etc/falco_bak/falco_update.tar.gzelse        mkdir /etc/falco_bak        cp -r /etc/falco  /etc/falco_bak/${BDATE}fi
curl -o /etc/falco_bak/falco_update.tar.gz ${URL}  && rm -rf /etc/falcotar -xzvf /etc/falco_bak/falco_update.tar.gz -C /etc && systemctl restart falco

把规则falco_update.tar.gz,提前准备好,使用saltstack 推下去即可.saltstack demo 如下:

[root@localhost ~]$ cat /srv/salt/top.slsbase:  '*':    - exec_shell_install
[root@localhost ~]$ cat /srv/salt/exec_shell_install.sls
exec_shell_install:  cmd.script:    - source: salt://falco_install.sh    - user: root
[root@localhost ~]$ salt '*' state.highstate

也可以使用ansible 推下去即可.ansible demo 如下:

[root@server81 work]# ansible servers -m shell -a "mkdir -p /var/falco_sh"
[root@server81 ansible]# ansible servers -m copy -a "src=/root/ansible/falco_install.sh  dest=/var/falco_sh/falco_install.sh mode=0755"172.16.5.193 | CHANGED => {
[root@server81 ansible]# ansible servers -m shell -a "/var/falco_sh/falco_install.sh"172.16.5.193 | CHANGED | rc=0 >>

可视化

Kibana是一个开源的分析与可视化平台,设计出来用于和Elasticsearch一起使用的。你可以用kibana搜索、查看存放在Elasticsearch中的数据。Kibana与Elasticsearch的交互方式是各种不同的图表、表格、地图等,直观的展示数据,从而达到高级的数据分析与可视化的目的。

Elasticsearch、Logstash和Kibana这三个技术就是我们常说的ELK技术栈,可以说这三个技术的组合是大数据领域中一个很巧妙的设计。一种很典型的MVC思想,模型持久层,视图层和控制层。Logstash担任控制层的角色,负责搜集和过滤数据。Elasticsearch担任数据持久层的角色,负责储存数据。而我们这章的主题Kibana担任视图层角色,拥有各种维度的查询和分析,并使用图形化的界面展示存放在Elasticsearch中的数据。

因为我们使用了, es 推荐使用kibana 做一下可视化, 也可以使用grafana 做可视化。demo 如下图:
入侵检测技术runtime
本作品采用《CC 协议》,转载必须注明作者和本文链接
随着容器、微服务等新技术日新月异,开源软件成为业界主流形态,软件行业快速发展。但同时,软件供应链也越来越趋于复杂化和多样化,软件供应链安全风险不断加剧,针对软件供应链薄弱环节的网络攻击随之增加,软件供应链成为影响软件安全的关键因素之一。近年来,全球针对软件供应链的安全事件频发,影响巨大,软件供应链安全已然成为一个全球性问题。全面、高效地保障软件供应链的安全对于我国软件行业发展、数字化进程推进具有重
由中国信通院指导、悬镜安全主办的中国首届DevSecOps敏捷安全大会(DSO 2021)现场,《软件供应链安全白皮书(2021)》正式发布。
Falco 由 Sysdig 于 2016 年创建,是第一个作为孵化级项目加入 CNCF 的运行时安全项目。
Lodash 是一个 JavaScript 库,包含简化字符串、数字、数组、函数和对象编程的工具,可以帮助程序员更有效地编写和维护 JavaScript 代码。并且是一个流行的 npm 库,仅在GitHub 上就有超过 400 万个项目使用,Lodash的普及率非常高,每月的下载量超过 8000 万次。但是这个库中有几个严重的原型污染漏洞。
最近测容器安全,才发现部署的容器云平台和容器应用几乎在裸奔,每个镜像和容器都有各种各样的漏洞,平台本身也不少问题,真是不测不知道,一测吓一跳。容器本身就是弱安全的,容易带来越权逃逸等问题,同时容器应用研发人员对容器技术又缺乏了解,缺乏相应的安全意识和安全知识,这就带来了比较严重的潜在的安全问题。
WebShell基础详解
2022-01-07 06:47:08
顾名思义,“web”的含义是显然需要服务器开放web服务,“shell”的含义是取得对服务器某种程度上操作权限。webshell常常被称为入侵者通过网站端口对网站服务器的某种程度上操作的权限。由于webshell其大多是以动态脚本的形式出现,也有人称之为网站的后门工具。
顾名思义,“web”的含义是显然需要服务器开放web服务,“shell”的含义是取得对服务器某种程度上操作权限。webshell常常被称为入侵者通过网站端口对网站服务器的某种程度上操作的权限。由于webshell其大多是以动态脚本的形式出现,也有人称之为网站的后门工具。
AI安全论文第17篇介绍Overview撰写方式及顶会精句摘抄
7月25日,2021安全创客汇首场明星赛(上半场)在北京举行,共有16家网络安全初创项目带着具有创新性以及特
关于漏洞的基础知识
2022-07-20 09:44:23
黑客可以通过修改事件完成的顺序来改变应用的行为。所以,进行有效的验证是安全处理文件的重要保证。这种类型的漏洞有可能是编程人员在编写程序时,因为程序的逻辑设计不合理或者错误而造成的程序逻辑漏洞。这种类型的漏洞最典型的是缓冲区溢出漏洞,它也是被黑客利用得最多的一种类型的漏洞。
VSole
网络安全专家