威脅狩獵:基於ELK的日誌監控

本文首發於“合天智匯”公衆號

實驗推薦-本文涉及實操知識點練習

狙劍軟件使用實驗  

實驗:狙劍軟件使用實驗(合天網安實驗室) 

通過本實驗的學習,你能夠了解主機安全軟件監控原理,學會如何利用主機安全軟件狙劍監控可疑進程,學會如何利用狙劍軟件對本機進行註冊表和文件的管理。

0x0、概述!

ELK Stack即以前的Elastic Stack,Elk Stack是Elastic公司專門爲集中化日誌管理設計的免費開源軟件組合。它允許搜索、分析和可視化來自不同來源的日誌。

如在ubuntu上安裝配置ELK Stack,需要如下先決條件:

0x1 內容目錄

0x2 ELK Stack 組成

1、Elasticsearch:Elasticsearch是一個基於Apache Lucene(TM)的開源搜索引擎,使用RESTful API,可以存儲、檢索數據。

2、Logstash:Logstash是一個開源的數據收集引擎,可以採集不同數據源的數據發送給Elasticsearch

3、Kibana:用於分析和可視化日誌的 Web可視化平臺

4、Filebeat:輕量級的日誌收集和轉發器,可以把數據收集後轉發到Logstash或Elasticsearch

0x3 安裝 Java 和所有依賴項

Elasticsearch是Java編寫的程序,所以需要安裝JDK,可以使用如下命令安裝OpenJDK和其他一些所需的軟件包。

sudo apt install -y openjdk-14-jdk wget apt-transport-https curl

然後導入Elasticsearch的公鑰,添加apt軟件源

wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -

添加軟件源

0x4 安裝和配置Elasticsearch

更新軟件源

sudo apt update

 

 

然後安裝(國內安裝比較慢,請耐心等待)

sudo apt-get install elasticsearch

安裝完後,開始配置Elasticsearch

Elasticsearh默認監聽9200端口。爲了安全,需要設置一下限制外網訪問。使外部網絡無法通過REST API訪問數據和elastic集羣。Elasticsearch的配置文件是elasticsearch.yml。修改它就行。

打開配置文件

sudo gedit  /etc/elasticsearch/elasticsearch.yml

找到監聽接口和端口進行修改

刪掉前面的註釋符號#改成如下的樣子:

保存,然後啓動Elasticsearch服務

sudo systemctl start elasticsearch

查看服務狀態和驗證是否已經啓動

sudo systemctl status elasticsearch
curl -X GET localhost:9200

看到這個,就說明Elasticsearch啓動成功了。

你也可以在瀏覽器裏面訪問https://localhost:9200查看

0x5 安裝和配置Logstash

首先確保系統裏面有openssl,然後安裝Logstash

openssl version -a
sudo apt install logstash -y

創建一個SSL證書用於保證Rsyslog 和Filebeat傳輸數據給Logstash時的安全性。

在Logstash的配置文件目錄下創建一個ssl的目錄,然後生成證書

sudo mkdir -p /etc/logstash/ssl
cd /etc/logstash
sudo openssl req -subj '/CN=elkmaster/' -x509 -days 3650 -batch -nodes -newkey rsa:2048 -keyout ssl/logstash-forwarder.key -out ssl/logstash-forwarder.crt

爲了方便後續配置,我們可以修改一下/etc/hosts文件。把主機的ip配置一個主機名

然後我們需要配置三個文件,分別是用於從filebeat接收數據的filebeat-input.conf,用於過濾系統日誌的過濾器配置文件syslog-filter.conf,以及用於輸出數據到elasticsearch的output-elasticsearch.conf。

在logstash配置目錄創建filebeat-input.conf文件

cd /etc/logstash/
sudo gedit conf.d/filebeat-input.conf

添加如下內容:

input {
  beats {
    port => 5443
    type => syslog
    ssl => true
    ssl_certificate => "/etc/logstash/ssl/logstash-forwarder.crt"
    ssl_key => "/etc/logstash/ssl/logstash-forwarder.key"
  }
}

然後創建過濾器配置文件syslog-filter.conf並採用grok過濾器,這個的作用就是讓Logstash根據給出的規則提取數據。

sudo gedit conf.d/syslog-filter.conf

輸入如下內容:

filter {
  if [type] == "syslog" {
    grok {
      match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}" }
      add_field => [ "received_at", "%{@timestamp}" ]
      add_field => [ "received_from", "%{host}" ]
    }
    date {
      match => [ "syslog_timestamp", "MMM  d HH:mm:ss", "MMM dd HH:mm:ss" ]
    }
  }
}

然後創建一個output-elasticsearch.conf配置文件用於將數據傳輸給elasticsearch。

sudo gedit conf.d/output-elasticsearch.conf

內容如下:

output {
  elasticsearch { hosts => ["localhost:9200"]
    hosts => "localhost:9200"
    manage_template => false
    index => "%{[@metadata][beat]}-%{+YYYY.MM.dd}"
    document_type => "%{[@metadata][type]}"
  }
}

配置文件弄好之後,啓動logstash服務看是否正常。

sudo systemctl start logstash
sudo systemctl status logstash

沒有報錯,說明服務正常啓動了。

0x6 安裝和配置Kibana

安裝Kibana也是通過apt即可完成

sudo apt install kibana

安裝完成之後,我們設置一下kibana的配置文件

sudo gedit /etc/kibana/kibana.yml

主要是修改監聽端口和地址,以及elasticsearch的地址

保存,然後啓動kibana服務

然後你可以直接在瀏覽器中訪問它

0x7 安裝和配置Nginx

安裝這個主要是給Kibana做反向代理的。

首先安裝Nginx和Apache2-utlis

sudo apt install nginx apache2-utils -y

安裝完成之後,創建kibana虛擬主機配置文件

sudo gedit /etc/nginx/sites-available/kibana

內容如下:

server {
    listen 80;
    server_name localhost;
    auth_basic "Restricted Access";
    auth_basic_user_file /etc/nginx/.kibana-user;
    location / {
        proxy_pass https://localhost:5601;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}

給配置文件創建一個連接

sudo ln -s /etc/nginx/sites-available/kibana /etc/nginx/sites-enabled/

然後給訪問Kibana Dashboard配置一個基礎身份認證

sudo htpasswd -c /etc/nginx/.kibana-user elastic

然後測試Nginx配置文件並啓動服務

sudo nginx -t
sudo systemctl restart nginx

 

 

0x8 安裝和配置Filebeat

下載filebeat然後安裝

下載地址:https://www.elastic.co/cn/downloads/beats/filebeat

可以按照自己的需求進行下載

我們這裏是安裝在Ubuntu上,所以選擇DEB版本下載。當然也可以直接用apt安裝,前提是你在之前添加了Elastic的軟件源。可以看官方指南進行添加軟件源:https://www.elastic.co/guide/en/beats/filebeat/7.10/setup-repositories.html#_apt

sudo apt install filebeat -y

 

 

然後編輯filebeat的配置,配置文件的路徑:

/etc/filebeat/filebeat.yml

首先把input部分改爲true

然後修改Elasticsearch output部分

修改成如下配置:(根據你的實際情況進行設置)

修改Kibana配置部分:

修改完後保存。

然後初始化filebeat

sudo filebeat setup

複製之前生成的logstash-forwarder.crt證書到/etc/filebeat目錄中

sudo cp /etc/logstash/ssl/logstash-forwarder.crt /etc/filebeat/

然後啓動filebeat服務

sudo systemctl start filebeat

0x9 配置 Linux 日誌到 Elasticsearch

配置rsyslog到Logstash,然後這些日誌會自動傳輸到Elasticsearch

在配置日誌到Logstash之前,我們首先需要配置Logstash到Elasticsearch之間的日誌轉發。

在/etc/logstash/conf.d目錄下創建一個配置文件來設置到Elasticsearch之間的日誌轉發。

cd /etc/logstash/conf.d/
sudo gedit logstash.conf

配置文件的內容如下:

input {
  udp {
    host => "127.0.0.1"
    port => 10514
    codec => "json"
    type => "rsyslog"
  }
}
                                                                                          
# The Filter pipeline stays empty here, no formatting is done.
filter { } 

                      
# Every single log will be forwarded to ElasticSearch. If you are using another port, you should specify it here.                              
output {
  if [type] == "rsyslog" {
    elasticsearch {
      hosts => [ "localhost:9200" ]
    }
  }
  }

配置文件主要由三部分組成,input部分:定義日誌從哪兒來,filter部分:日誌過濾器,output部分:日誌傳輸到什麼地址。

然後我們重啓一下logstash服務

sudo systemctl restart logstash

然後配置從rsyslog到Logstash日誌轉發,rsyslog可以使用模板轉換日誌然後進行轉發。

爲了讓 rsyslog 轉發日誌,需要在/etc/rsylog.d目錄中創建一個70-output.conf的配置文件。

cd /etc/rsyslog.d/
sudo gedit 70-output.conf

添加如下內容:

*.*                         @127.0.0.1:10514;json-template

意思是所有日誌發送到127.0.0.1:10514並使用json格式的模板進行轉換

我們需要創建一個json格式的模板文件

sudo gedit 01-json-template.conf

內容如下:

template(name="json-template"
  type="list") {
    constant(value="{")
      constant(value="\"@timestamp\":\"")     property(name="timereported" dateFormat="rfc3339")
      constant(value="\",\"@version\":\"1")
      constant(value="\",\"message\":\"")     property(name="msg" format="json")
      constant(value="\",\"sysloghost\":\"")  property(name="hostname")
      constant(value="\",\"severity\":\"")    property(name="syslogseverity-text")
      constant(value="\",\"facility\":\"")    property(name="syslogfacility-text")
      constant(value="\",\"programname\":\"") property(name="programname")
      constant(value="\",\"procid\":\"")      property(name="procid")
    constant(value="\"}\n")
}

然後啓動rsyslog服務

sudo systemctl start rsyslog

檢查logstash監聽端口是否正常:

ss -na | grep 10514

如果監聽沒成功,並且在日誌中看到以下報錯信息:

 

 

是因爲配置文件裏面存在語法錯誤,ELK軟件對配置文件的語法要求比較嚴格,請仔細檢查。

0x10 在Kibana中創建日誌儀表板

在瀏覽器中打開Kibana界面

首先需要創建一個索引模式

然後找到Stack Management---Kibana中的Index Patterns

 

 

然後點擊Create index pattern

輸入logstash-*,然後點擊Next step

然後時間過濾器我們選擇@timestamp

然後點擊Create index pattern

添加成功後是這樣的:

點擊回到Kibana的Discover中,在這裏可以查詢搜索你的數據

0x11 監控 SSH 事件

在過濾條件中,我們設置過濾條件爲programename:sshd*

這樣就可以看到sshd程序相關事件了。

0x12 更多參考資料

配置 SSL、TLS 以及 HTTPS 來確保 Elasticsearch、Kibana、Beats 和 Logstash 的安全 | Elastic Blog

https://www.elastic.co/cn/blog/configuring-ssl-tls-and-https-to-secure-elasticsearch-kibana-beats-and-logstash

如何使用 Elastic Stack 監測 Nginx Web 服務器 | Elastic Bloghttps://www.elastic.co/cn/blog/how-to-monitor-nginx-web-servers-with-the-elastic-stack

 

  • Ubuntu 20.04
  • 最好使用Root 權限進行配置
  • ELK Stack 組成部分
  • 安裝 Java 和所有依賴項
  • 安裝和配置 Elasticsearch
  • 安裝和配置 Logstash
  • 安裝和配置 Kibana
  • 安裝和配置 Nginx
  • 安裝和配置 Filebeat
  • 配置 Linux 日誌到 Elasticsearch
  • 在Kibana中創建日誌儀表板
  • 監控 SSH 事件
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章