Beats:  Elastic 中的 Auditbeat 使用介绍

Auditbeat 是一种轻量级的数据收集器,你可以将其安装在服务器上,以审核系统上用户和进程的活动。 例如,你可以使用 Auditbeat 从 Linux Audit Framework 收集和集中审核事件。 你还可以使用 Auditbeat 来检测对关键文件(如二进制文件和配置文件)的更改,并确定潜在的安全策略冲突。Auditbeat 是一种 Elastic Beat。 它基于 libbeat 框架。

为了能够使用 Auditbeat,你必须安装 Elasticsearch 及 Kibana。你可以有选择地安装 Logstash 来丰富自己的数据。关于如何安装 Elasticsaearch 及 Kibana,请参阅我的文章 “Elastic:菜鸟上手指南”。

 

Auditbeat 工作原理

 

首先我们来了解一下 Linux 的审计框架:

  • Linux 的审计框架提供了对 System call 及文件变化的可观测性
  • 促进对一些关键系统应用的监控 (pam, openssh, passwd)
  • 分发事件到用户空间的守护程序(daemon)(auditd, journald)

那么在 Elastic 中的 Auditbeat 到底是来做什么的呢?Auditbeat 直接通过 netlink sockets 从内核获取事件。它的作用可以分为一下的几个方面:

  • 收集整理消息
  • 组合相关信息
  • 解析
  • 丰富数据(例如 host 等等)
  • 发送到 Elasticsearch

假如有一下的几条信息:
 

type=SYSCALL msg=audit(1501619655.636:32796540): arch=c000003e syscall=2 success=no exit=-13 a0=7fffdd0a98e2 a1=0 a2=7fffdd0a8210 a3=7fffdd0a7c60 items=1 ppid=6637 pid=6654 auid=700 uid=700 gid=700 euid=700 suid=700 fsuid=700 egid=700 sgid=700 fsgid=700 tty=pts0 ses=15663 comm=”cat” exe=”/bin/cat” key=”open”

type=CWD msg=audit(1501619655.636:32796540): cwd=”/home/admin”

type=PATH msg=audit(1501619655.636:32796540): item=0 name=”/etc/gshadow” inode=138686 dev=fc:00 mode=0100000 ouid=0 ogid=0 rdev=00:00 nametype=NORMAL

那么解析出来的信息就是:

从上面,我们可以看出来事件发生的时间,结果是失败。导致结果失败的用户名是 admin,所发生的操作的使用 /bin/cat 命令来打开文件 /etc/gshadow。

Auditbea t是如何切入呢?它有一下的两种方法:

  • 作为 auditd 的补充应用

        - auditd 管理审计规则
        - Auditbeat 发送事件到 Elasticsearch
        - 需要内核 3.16 或者更新

  • 完全替代 auditd 使用

        - 不用安装 auditd 软件包
        - Auditbeat 管理审计规则
        - Auditbeat 发送事件到 Elasticsearch

另外,Auditbeat 可以实现文件完整性的监控:

  • 实时监控指定文件系统变化
  • 报告文件元数据与哈希
  • 为文件建立、移动、删除、更新和属性修改生成事件
  • 这个模块目前独立于 Linux 审计框架
  • 在 Linux、macOS 和 Windows 上均可工作

针对这个,它适用于一下的应用场景:

  • 识别可疑篡改

        - 软件更新之外的对于二进制文件或者共享库的更改
        - 文件权限和属性的非常规更新

  • 根据安全情报信息对照相应文件哈希(病毒文件快速识别)
  • 满足企业对审计/合规的需求

Auditbeat 安装

对于有经验的开发者来说,我们可以直接进入到 Elastic 公司的官网直接下载,并安装。下载地址为 https://www.elastic.co/downloads/beats。当我们下载时,必须注意选择和自己 Elasticsearch 想匹配的版本。我们可以可以在自己的电脑上直接使用命令来进行安装。你可以根据自己的版本替换下面命令行中的 7.4.2 版本号码。

deb:

curl -L -O https://artifacts.elastic.co/downloads/beats/auditbeat/auditbeat-7.4.2-amd64.deb
sudo dpkg -i auditbeat-7.4.2-amd64.deb

rpm:

curl -L -O https://artifacts.elastic.co/downloads/beats/auditbeat/auditbeat-7.4.2-x86_64.rpm
sudo rpm -vi auditbeat-7.4.2-x86_64.rpm

mac:

curl -L -O https://artifacts.elastic.co/downloads/beats/auditbeat/auditbeat-7.4.2-darwin-x86_64.tar.gz
tar xzvf auditbeat-7.4.2-darwin-x86_64.tar.gz

brew:

brew tap elastic/tap
brew install elastic/tap/auditbeat-full

linux:

curl -L -O https://artifacts.elastic.co/downloads/beats/auditbeat/auditbeat-7.4.2-linux-x86_64.tar.gz
tar xzvf auditbeat-7.4.2-linux-x86_64.tar.gz

win:

  1. 从下载页面下载 Auditbeat Windows zip 文件。
  2. 将 zip 文件的内容提取到 C:\Program Files。
  3. 将 auditbeat- <版本> -windows 目录重命名为 Auditbeat。
  4. 以管理员身份打开 PowerShell 提示符(右键单击 PowerShell 图标,然后选择“以管理员身份运行”)。
  5. 在 PowerShell 提示符下,运行以下命令以将 Auditbeat 安装为 Windows 服务:
PS> cd'C\Program Files\Auditbeat'
PS C:\Program Files\Auditbeat>.\install-service-auditbeat.ps1

注意:如果在系统上禁用了脚本执行,则需要为当前会话设置执行策略以允许脚本运行。 例如:PowerShell.exe -ExecutionPolicy UnRestricted -File
.\install-service-auditbeat.ps1。

在启动 Auditbeat 之前,你应该查看配置文件中的配置选项,例如 C:\Program Files\Auditbeat\auditbeat.yml。

针对我的情况,在我的 Mac 上安装好 Auditbeat 后的文件显示为:

$ pwd
/Users/liuxg/elastic1/auditbeat-7.4.2-darwin-x86_64
localhost:auditbeat-7.4.2-darwin-x86_64 liuxg$ ls
LICENSE.txt             auditbeat               fields.yml
NOTICE.txt              auditbeat.reference.yml kibana
README.md               auditbeat.yml

请注意上面的一个配置文件 autidbeat.ym。这个将是要使用到的配置文件。

如果你是在你自己的机器上安装 Auditbeat,并且上面有运行 Kibana,那么你也可以在 Kibana 里找到相应的安装步骤:

其中左边的是一个叫做 Infrastructure 的应用。点 Auditbeat,那么你可以看到:

 

Audibeat Demo

在这里,我们先来做使用 Auditbeat 来做一个练习,让大家感受一下 auditbeat 是如何工作的。

配置 Auditbeat

要配置 Auditbeat,请编辑配置文件。 默认配置文件称为 auditbeat.yml。还有一个名为 auditbeat.reference.yml 的完整示例配置文件,其中显示了所有不推荐使用的选项。

为了配置 Auditbeat:

1)定义要启用的 Auditbeat 模块。 Auditbeat 使用模块来收集审核信息。 对于每个模块,指定要收集的指标集。

以下示例显示了 file_integrity 模块,该模块配置为在磁盘上指定路径之一中的文件发生更改时生成事件:

auditbeat.modules:

- module: file_integrity
  paths:
  - /bin
  - /usr/bin
  - /sbin
  - /usr/sbin
  - /etc
  - /Users/liuxg/tmp

在上面,我们特意添加了一个自己创建的文件目录 /Users/liuxg/tmp。这样 Auditbeat 就可以用来监测我这个目录里的文件变化。在下面的练习中,我们可以用来展示。

2)配置输出。 Auditbeat 支持多种输出,但是通常你将事件直接发送到 Elasticsearch 或 Logstash 以进行其他处理。

要将输出直接发送到 Elasticsearch(不使用 Logstash),请设置 Elasticsearch 安装的位置:

cloud.id: "staging:dXMtZWFzdC0xLmF3cy5mb3VuZC5pbyRjZWM2ZjI2MWE3NGJmMjRjZTMzYmI4ODExYjg0Mjk0ZiRjNmMyY2E2ZDA0MjI0OWFmMGNjN2Q3YTllOTYyNTc0Mw=="
  • 如果你在自己的硬件上运行 Elasticsearch,请设置主机和端口,Auditbeat 可以在其中找到 Elasticsearch 安装。 例如:
output.elasticsearch:
  hosts: ["myEShost:9200"]

3)如果你打算使用 Auditbeat 随附的示例 Kibana 仪表板,请配置 Kibana 端点。 如果 Kibana 与 Elasticsearch 在同一主机上运行,则可以跳过此步骤。

setup.kibana:
  host: "mykibanahost:5601"

如果 Elasticsearch 和 Kibana 受保护,请在运行设置和启动 Auditbeat 的命令之前在 auditbeat.yml 配置文件中设置凭据。

cloud.auth: "elastic:YOUR_PASSWORD"
  • 如果你你在自己的硬件上运行 Elasticsearch,请指定你的 Elasticsearch 和 Kibana 凭据:
output.elasticsearch:
  hosts: ["myEShost:9200"]
  username: "filebeat_internal"
  password: "YOUR_PASSWORD" 
setup.kibana:
  host: "mykibanahost:5601"
  username: "my_kibana_user"  
  password: "YOUR_PASSWORD"

请注意在上面我们使用了假设的用户名及密码。在实际的使用中请根据自己的情况进行适当地修改。

 

测试 Auditbeat

在我们真正地在 Kibana 使用之前,我们先来测试一下我们的 Auditbeat 安装是否成功。我们可以在 Auditbeat 的安装目录进行如下的尝试:

./auditbeat test config -e
$ ./auditbeat test config -e
2019-11-20T10:41:42.920+0800	INFO	instance/beat.go:607	Home path: [/Users/liuxg/elastic1/auditbeat-7.4.2-darwin-x86_64] Config path: [/Users/liuxg/elastic1/auditbeat-7.4.2-darwin-x86_64] Data path: [/Users/liuxg/elastic1/auditbeat-7.4.2-darwin-x86_64/data] Logs path: [/Users/liuxg/elastic1/auditbeat-7.4.2-darwin-x86_64/logs]
2019-11-20T10:41:42.942+0800	INFO	instance/beat.go:615	Beat ID: 594d560c-72a0-4150-833b-36eb84110404
2019-11-20T10:41:42.946+0800	INFO	[beat]	instance/beat.go:903	Beat info	{"system_info": {"beat": {"path": {"config": "/Users/liuxg/elastic1/auditbeat-7.4.2-darwin-x86_64", "data": "/Users/liuxg/elastic1/auditbeat-7.4.2-darwin-x86_64/data", "home": "/Users/liuxg/elastic1/auditbeat-7.4.2-darwin-x86_64", "logs": "/Users/liuxg/elastic1/auditbeat-7.4.2-darwin-x86_64/logs"}, "type": "auditbeat", "uuid": "594d560c-72a0-4150-833b-36eb84110404"}}}
2019-11-20T10:41:42.947+0800	INFO	[beat]	instance/beat.go:912	Build info	{"system_info": {"build": {"commit": "15075156388b44390301f070960fd8aeac1c9712", "libbeat": "7.4.2", "time": "2019-10-28T19:43:09.000Z", "version": "7.4.2"}}}
2019-11-20T10:41:42.947+0800	INFO	[beat]	instance/beat.go:915	Go runtime info	{"system_info": {"go": {"os":"darwin","arch":"amd64","max_procs":16,"version":"go1.12.9"}}}
2019-11-20T10:41:42.950+0800	INFO	[beat]	instance/beat.go:919	Host info	{"system_info": {"host": {"architecture":"x86_64","boot_time":"2019-11-19T21:59:49.56243+08:00","name":"localhost","ip":["127.0.0.1/8","::1/128","fe80::1/64","fe80::aede:48ff:fe00:1122/64","fe80::14f1:d192:691:db99/64","169.254.101.151/16","fe80::4c5:e058:2e93:f7d4/64","192.168.0.100/24","fe80::c51f:4010:9bb0:5bf6/64","fe80::6b47:ca1b:644:8cbc/64"],"kernel_version":"19.0.0","mac":["ac:de:48:00:11:22","a6:83:e7:69:f5:24","a4:83:e7:69:f5:24","06:83:e7:69:f5:24","ea:12:7d:7a:0d:b7","ea:12:7d:7a:0d:b7","a0:ce:c8:d0:90:be","82:51:61:05:3c:01","82:51:61:05:3c:00","82:51:61:05:3c:05","82:51:61:05:3c:04","82:51:61:05:3c:01"],"os":{"family":"darwin","platform":"darwin","name":"Mac OS X","version":"10.15.1","major":10,"minor":15,"patch":1,"build":"19B88"},"timezone":"CST","timezone_offset_sec":28800,"id":"E51545F1-4BDC-5890-B194-83D23620325A"}}}
2019-11-20T10:41:42.951+0800	INFO	[beat]	instance/beat.go:948	Process info	{"system_info": {"process": {"cwd": "/Users/liuxg/elastic1/auditbeat-7.4.2-darwin-x86_64", "exe": "./auditbeat", "name": "auditbeat", "pid": 5862, "ppid": 562, "start_time": "2019-11-20T10:41:41.898+0800"}}}
2019-11-20T10:41:42.951+0800	INFO	instance/beat.go:292	Setup Beat: auditbeat; Version: 7.4.2
2019-11-20T10:41:42.951+0800	INFO	[index-management]	idxmgmt/std.go:178	Set output.elasticsearch.index to 'auditbeat-7.4.2' as ILM is enabled.
2019-11-20T10:41:42.951+0800	INFO	elasticsearch/client.go:170	Elasticsearch url: http://localhost:9200
2019-11-20T10:41:42.952+0800	INFO	[publisher]	pipeline/module.go:97	Beat name: localhost
2019-11-20T10:41:42.953+0800	WARN	[cfgwarn]	host/host.go:167	BETA: The system/host dataset is beta
2019-11-20T10:41:42.994+0800	WARN	[cfgwarn]	package/package.go:170	BETA: The system/package dataset is beta
2019-11-20T10:41:43.015+0800	WARN	[cfgwarn]	process/process.go:131	BETA: The system/process dataset is beta
2019-11-20T10:41:43.036+0800	WARN	[process]	process/process.go:174	Running as non-root user, will likely not report all processes.
Config OK

上面的显示结果我们的配置是成功的。

 

装载 index template 到 Elasticsearch 中

建议的 Auditbeat 索引模板文件由 Auditbeat 软件包安装。 如果你在 auditbeat.yml 配置文件中接受默认配置,则 Auditbeat 在成功连接到 Elasticsearch 之后会自动加载模板。 如果模板已经存在,除非你配置 Auditbeat 这样做,否则它不会被覆盖。

默认情况下,如果启用了 Elasticsearch 输出,则 Auditbeat 会自动加载建议的模板文件 fields.yml。 如果要使用默认索引模板,则不需要其他配置。 否则,你可以在 auditbeat.yml 中更改默认值。

setup.template.name: "your_template_name"
setup.template.fields: "path/to/fields.yml"

具体关于如何配置,请参阅 Elastic 的官方文档。在这里就不一一描述了。

在今天的练习中,我们将使用 Elastic 所提供的默认 template。

 

设置 Kibana dashboard

Auditbeat 随附了示例 Kibana 仪表板,可视化文件以及用于在 Kibana 中可视化 Auditbeat 数据的搜索。 在使用仪表盘之前,你需要创建索引模式,auditbeat- *,并将仪表盘加载到 Kibana 中。为了做这个,我们可以采用两种方法:

  • 直接在 auditbeat.yml 文件中加入如下的句子:
setup.dashboards.enabled: true
  • 使用如下的命令(在 audibeat 的安装目录中,请确信 Kibana 在运行后,在打入如下的命令):
./auditbeat setup --dashboards
$ ./auditbeat setup --dashboards
Loading dashboards (Kibana must be running and reachable)
Loaded dashboards

启动 Audibeat

终于到了我们最后的一步了。通过为你的平台发出适当的命令来运行 Auditbeat:

deb and rpm:

sudo service auditbeat start

mac and linux:

sudo chown root auditbeat.yml 
sudo ./auditbeat -e

在这里特别注意的是:要监视系统文件,你将以 root 用户身份运行 Auditbeat,因此你需要更改配置文件的所有权,或者在指定 --strict.perms = false 的情况下运行 Auditbeat

针对我的情况,我在 Mac 下运行:

这样我们的 Auditbeat 已经被成功运行了。

 

在 Kabana 中查看数据

在上面的一步,Auditbeat 已经成功地帮我们把数据收集到 Elasticsearch 之中了。我们接下来可以在 Kibana 中进行查看。我们安装如下的步骤:

 

显然我们已经收集到一些数据。这个数据的名字是以 auditbeat 为开始的索引。如果由于一些原因你没有看到这些数据,你可以点击右上角的时间设置来查找更大范围里的数据。通常 Kibana 在默认的情况下显示最近15分钟的数据。

由于在之前我们已经设置了 Dashboard,我们现在直接点击 Dashboard 来进行展示:

从上面的显示中,我们可以看到有许多以 Auditbeat 为开始的 Dashboard 列出来了。我们来选择其中的一个 File Integrity 来做展示:

在上面我们可以一个关于我们文件的一个统计。

 

还记得我之前在 auditbeat.yml,我加入了如下的一句 - /Users/liuxg/tmp:

- module: file_integrity
  paths:
  - /bin
  - /usr/bin
  - /usr/local/bin
  - /sbin
  - /usr/sbin
  - /usr/local/sbin
  - /Users/liuxg/tmp

下面我们在目录 /Users/liuxg/tmp 里创建一个文件,然后,我们再看看在 Kibana 中有什么变化:

 

我们再次查看一下Kibana:

 

我们可以看到许多的关于文件 a 的变化信息。

同样地,我们也可以选择其它的关于 auditbeat 的 dashboard,比如:

 

这个留给大家去探索了。

已标记关键词 清除标记