Auditbeat使用介紹
Auditbeat是一種輕量級的數據收集器,您可以將其安裝在服務器上,以審核系統上用戶和進程的活動。 例如,您可以使用Auditbeat從Linux Audit Framework收集和集中審核事件。 您還可以使用Auditbeat來檢測對關鍵文件(如二進制文件和配置文件)的更改,並確定潛在的安全策略沖突。Auditbeat是一種Elastic Beat。 它基於libbeat框架。
為了能夠使用Auditbeat,必須安裝Elasticsearch及Kibana。
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。
Auditbeat是如何切入呢?它有一下的兩種方法:
- 作為auditd的補充應用
- auditd 管理審計規則
- Auditbeat 發送事件到 Elasticsearch
- 需要內核 3.16 或者更新
完全替代auditd使用 - 不用安裝auditd軟件包
- Auditbeat 管理審計規則
- Auditbeat 發送事件到 Elasticsearch
另外,Auditbeat可以實現文件完整性的監控:
- 實時監控指定文件系統變化
- 報告文件元數據與哈希
- 為文件建立、移動、刪除、更新和屬性修改生成事件
- 這個模塊目前獨立於 Linux 審計框架
- 在Linux、macOS和Windows上均可工作
針對這個,它適用於一下的應用場景:
- 識別可疑篡改
- 軟件更新之外的對於二進制文件或者共享庫的更改
- 文件權限和屬性的非常規更新
- 根據安全情報信息對照相應文件哈希(病毒文件快速識別)
- 滿足企業對審計/合規的需求
Auditbeat安裝
必須注意選擇和自己Elasticsearch想匹配的版本。
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
安裝好Auditbeat后的文件顯示為:
$ 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.yml。還有一個名為auditbeat.reference.yml的完整示例配置文件,其中顯示了所有不推薦使用的選項。
- 定義要啟用的Auditbeat模塊。 Auditbeat使用模塊來收集審核信息。 對於每個模塊,指定要收集的指標集。
以下示例顯示了file_integrity模塊,該模塊配置為在磁盤上指定路徑之一中的文件發生更改時生成事件:
auditbeat.modules:
- module: file_integrity
paths:
- /bin
- /usr/bin
- /sbin
- /usr/sbin
- /etc
- /Users/liuxg/tmp
在上面,我們特意添加了一個自己創建的文件目錄/Users/liuxg/tmp。這樣Auditbeat就可以用來監測我這個目錄里的文件變化。在下面的練習中,我們可以用來展示。
- 配置輸出。
Auditbeat支持多種輸出,但是通常您將事件直接發送到Elasticsearch或Logstash以進行其他處理。
要將輸出直接發送到Elasticsearch(不使用Logstash),請設置Elasticsearch安裝的位置:
output.elasticsearch:
hosts: ["myEShost:9200"]
- 如果您打算使用Auditbeat隨附的示例Kibana儀表板,請配置Kibana端點。 如果Kibana與Elasticsearch在同一主機上運行,則可以跳過此步驟。
setup.kibana:
host: "mykibanahost:5601"
如果Elasticsearch和Kibana受保護,請在運行設置和啟動Auditbeat的命令之前在auditbeat.yml配置文件中設置憑據。
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所提供的默認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:
chown root auditbeat.yml
./auditbeat -e
在這里特別注意的是:要監視系統文件,您將以root用戶身份運行Auditbeat,因此您需要更改配置文件的所有權,或者在指定--strict.perms = false
的情況下運行Auditbeat
在Kabana中查看數據
數據的名字是以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.