ELK實戰--利用auditbeat採集系統審計日誌並生成圖表

1、背景

Auditbeat是輕量型的審計日誌採集器,能夠收集linux審計框架的數據、監控文件完整性。可以組合相關消息到一個事件裏,生成標準的結構化數據,方便分析,並且可以與Logstash、Elasticsearch和Kibana無縫集成。html

2、安裝

wget https://artifacts.elastic.co/downloads/beats/auditbeat/auditbeat-6.5.4-linux-x86_64.tar.gz
tar zxf auditbeat-6.5.4-linux-x86_64.tar.gz
# 或者直接安裝auditbeat的rpm包文件

3、配置auditbeat

默認的配置文件是auditbeat.yml,Linux平臺下,該文件位於解壓目錄下。
還有一個auditbeat.reference.yml文件,該文件顯示了全部的選項,能夠根據需求將其拷貝到auditbeat.yml文件中。
auditbeat.yml主要的兩部分,一部分模塊,另外一部分是輸出。
一、模塊
目前有兩種模塊:
(1)auditd:auditd模塊接收來自Linux審計框架的審計事件,該框架是Linux內核的一部分。這個模塊創建對內核的訂閱,以便在事件發生時接收它們。注意使用Auditd模塊,有的系統須要先關閉auditd服務,執行」 service auditd stop」。
模塊相關配置項以下:linux

- module: auditd
  audit_rule_files: [ '${path.config}/audit.rules.d/*.conf' ]
  audit_rules: |
#-a always,exit -F arch=b64 -S execve,execveat -k exec
……

auditrulefiles:從單獨的文件加載審計規則,注意默認提供了36和位64位兩種,根據本地系統選擇其一。
auditrules:定義審計規則。

執行./auditbeat show auditd-rules能夠查看當前的規則,默認的審計規則以下,通常默認規則就能夠知足審計需求,若是須要自定義可修改audit.rules.d目錄下的審計規則文件。json

#不記錄pid爲19714的全部系統調用事件,備註:自動根據auditbeat PID定義此規則
-a never,exit -S all -F pid=19714
#記錄CPU爲32位全部系統調用事件
-a always,exit -F arch=b32 -S all -F key=32bit-abi
#記錄CPU爲64位"程序執行"相關係統調用事件
-a always,exit -F arch=b64 -S execve,execveat -F key=exec
#記錄CPU爲64位"遠程鏈接"相關係統調用事件
-a always,exit -F arch=b64 -S connect,accept,bind -F key=external-access
#對/etc/group、/etc/passwd、/etc/gshadow文件作審計,記錄用戶身份驗證的變化
-w /etc/group -p wa -k identity
-w /etc/passwd -p wa -k identity
-w /etc/gshadow -p wa -k identity
#記錄文件打開、修改等因沒有權限或不被容許的事件
-a always,exit -F arch=b64 -S open,truncate,ftruncate,creat,openat,open_by_handle_at -F exit=-EACCES -F key=access
-a always,exit -F arch=b64 -S open,truncate,ftruncate,creat,openat,open_by_handle_at -F exit=-EPERM -F key=access

(2)file_integrity:file_integrity模塊實時監控指定目錄下的文件更改。注意在linux系統中,須要使用inotify,所以內核必須支持inotify,2.6.13以上內核均已安裝inotify。
模塊相關配置項以下:bootstrap

- module: file_integrity
  paths:
  - /bin
  - /usr/bin
  - /sbin
  - /usr/sbin
  - /etc

paths:指定被監控文件路徑緩存

想了解兩個模塊更豐富的配置項,參考官方文檔:
https://www.elastic.co/guide/en/beats/auditbeat/6.5/auditbeat-modules.htmlapp

二、輸出
內容能夠輸出到Elasticsearch、Logstash、Kafka、Redis、File、Console、Cloud,注意只能配置一種輸出方式。
輸出到Elasticsearch:框架

output.elasticsearch:
  hosts: ["ES1:9200,ES2:9200,ES3:9200"]
index: "auditbeat-%{[beat.version]}-%{+yyyy.MM.dd}"
  protocol: "https"
  username: "elastic"
  password: "changeme"

輸出到Logstashcurl

output.logstash:
  hosts: ["172.16.1.25:5044"]

輸出到Kafkaelasticsearch

output.kafka:
  hosts: ["kafka1:9092", "kafka2:9092", "kafka3:9092"]
  topic: '%{[fields.log_topic]}'
  partition.round_robin:
    reachable_only: false
  required_acks: 1
  compression: gzip
  max_message_bytes: 1000000

hosts:指定Kafka節點。
topic:指定topic名稱。
partition.roundrobin:採用輪詢的方式依次寫到不一樣的分區中。
reachable_only:設置爲true表示只分發到可用的分區,會增長緩存資源使用,可是能夠避免輸出阻塞。
requiredacks:Kafka節點返回ACK可靠性級別,0表示不返回、1表示等待本地提交、-1表示等待全部副本同步完成。
compression:是否啓用壓縮傳輸,能夠爲none, snappy, lz4和gzip。
max_message_bytes:容許的json編碼消息的最大值,單位是bytes。
ide

輸出到File

output.file:
  path: "/tmp/auditbeat"
  filename: auditbeat

想了解更詳細的配置項及含義,請參考官方文檔:
https://www.elastic.co/guide/en/beats/auditbeat/6.5/configuring-output.html

本案例是將內容輸出到了Kafka

#----------------------------- Kafka output--------------------------------
output.kafka:
  hosts: ["kafka1:9092", "kafka2:9092", "kafka3:9092"]
  topic: 'audit_log'
  partition.round_robin:
    reachable_only: false
  required_acks: 1
  compression: gzip
  max_message_bytes: 1000000

到Kafka消費的Logstash配置以下:
input部分

input {
kafka {
    type => "audit_log"
    codec => "json"
    topics => "audit_log"
    bootstrap_servers => ["kafka1:9092", "kafka2:9092", "kafka3:9092"]
  }
}

output部分

output {
  if [type] == "audit_log" {
      elasticsearch {
      hosts => ["ES1","ES2","ES3"]
      index => 'logstash-audit_log-%{+YYYY-MM-dd}'
    }
  }
}

3、運行auditbeat

在解壓目錄下,使用root用戶執行以下命令,固然若是你是rpm方式安裝的,auditbeat已添加爲系統服務。
nohup ./auditbeat -e &

4、kibana圖形化展現

在ES節點查看索引

#curl -XGET 'http://127.0.0.1:9200/_cat/indices/?v'
green  open   logstash-audit_log-2019.01.17  mnkCA-QTSVS2wPkwykd_jw   3   1        468            0      2.8mb          1.5mb

kibana上建立logstash-audit_log-*索引後,在Discover有數據輸出
ELK實戰--利用auditbeat採集系統審計日誌並生成圖表

一、建立視圖
建立視圖,須要瞭解各個字段含義,能夠參考官方文檔:
https://www.elastic.co/guide/en/beats/auditbeat/6.5/exported-fields.html

(1) 命令審計
ELK實戰--利用auditbeat採集系統審計日誌並生成圖表
視圖類型:Data Table
字段:
host.name 主機名稱
process.name 命令名稱,這裏咱們重點記錄幾個命令,因此要將Advanced中Include設置爲mkfs|dd|rm|mv|wget
porcess.args 命令參數,有些命令審計中可能不會記錄參數,因此勾選"Show missing values"
user.name_map.uid 執行命令的賬號名稱
@timestamp 時間戳
ELK實戰--利用auditbeat採集系統審計日誌並生成圖表
視圖類型:Data Table
字段:
process.exe 程序名稱
(2)用戶賬戶審計
ELK實戰--利用auditbeat採集系統審計日誌並生成圖表
視圖類型:Data Table
字段:
event.action 事件動做,咱們統計賬戶密碼修改,因此要將Advanced中Include設置爲changed-password
ELK實戰--利用auditbeat採集系統審計日誌並生成圖表
視圖類型:Data Table
字段:
這裏的event.action字段對應的Include設置爲modified-user-account,會包括用的添加、刪除、屬性修改審計事件
(3)用戶登陸審計
ELK實戰--利用auditbeat採集系統審計日誌並生成圖表
視圖類型:Data Table
字段:
event.type 事件類型,咱們統計用戶登陸事件,因此要將Advanced中Include設置爲user_login
auditd.resuld 結果,咱們統計失敗的登陸,因此要將Advanced中Include設置爲fail
auditd.data.acct 賬號名,對端嘗試登陸的賬號名
source.ip 源IP
(4)重要目錄文件審計
ELK實戰--利用auditbeat採集系統審計日誌並生成圖表
視圖類型:Data Table
字段:
event.action 事件動做,咱們統計文件的增刪改,因此要將Advanced中Include設置爲created|deleted|moved|updated
ELK實戰--利用auditbeat採集系統審計日誌並生成圖表
一樣,event.action對應的Include設置爲created|deleted|moved|updated

最後建立儀表盤

相關文章
相關標籤/搜索