Security安裝 Elastic SIEM 和 EDR的超詳細教程

Elastic Security 為分析人員提供瞭預防,檢測和響應威脅的手段。 該解決方案解決瞭SIEM,endpoint,威脅搜尋等安全用例,使 SecOps 團隊能夠收集各種數據,執行自動化和分析師驅動的分析,並通過嵌入式工作流和自動化來應對安全威脅。在今天的文章中,我將介紹如何安裝 Elastic SIEM 及 EDR。

在我的系統配置中,我們使用如下的結構:

我有兩臺機器,在其中的一臺機器上安裝有 Elasticsearch,Filebeat 及 Kibana,而在另外一臺機器上安裝有 endpoint agent。在今天的練習中,我將詳細地介紹如何一步一步地完成整個安裝。

安裝 Elastic Stack 基礎

盡管我在之前的很多文章中有介紹如何安裝 Elastic Stack,我還是想一步一步地來詳細介紹。就我而言,我使用的是 Elastic Stack 的最新版本7.11.1。對於我的 Elastic Stack 設置,我使用的是一個單臺的 Ubuntu 20.04 機器。 該服務器將運行 Elasticsearch 和 Kibana。

安裝 Elasticsearch

首先安裝 transport-https

sudo apt-get install curl apt-transport-https

接下來,將 Elastic 倉庫添加到你的源列表。

curl -s https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-7.x.list

然後更新。

sudo apt update

現在安裝 Elasticsearch

sudo apt-get install elasticsearch 

對於中國有的開發者來說,上面的安裝步驟可能會很慢,一種辦法就是直接到網址 https://www.elastic.co/downloads/ 直接下載 Elasticsearch 的 deb 安裝包,並按如下的命令來進行安裝:

sudo dpkg -i elasticsearch-7.11.1-amd64.deb

安裝 Elasticsearch 之後,我們需要對其配置文件進行幾處更改。 該文件位於 /etc/elasticsearch/elasticsearch.yml 中。要訪問此文件,你需要 root 特權。

首先,我們需要更改 network.host 值。 其默認設置為localhost。 將其更改為安裝瞭 Elasticsearch 的主機的 IP 地址。

cluster.name: demo-elk
node.name: elk-1
network.host: 0.0.0.0
discovery.type: single-node

現在,你應該準備啟動 Elasticsearch 並檢查它是否已正確啟動。

sudo service elasticsearch start

我們可以使用如下的命令來查看 elasticsearch 服務的狀態:

service elasticsearch status

如上所示,如果我們看到 Elasticsearch 服務的狀態為 active,則表明它的安裝是成功的。

你還可以通過運行以下命令來檢查 Elasticsearch 是否可從其他主機訪問:

curl http://<elasticsearch_ip>:9200

輸出應類似於以下內容:

安裝 Kibana

運行以下命令以安裝 Kibana。

sudo apt install kibana

對於中國有的開發者來說,上面的安裝步驟可能會很慢,一種辦法就是直接到網址 https://www.elastic.co/downloads/ 直接下載 Kibana 的 deb 安裝包,並按如下的命令來進行安裝:

sudo dpkg -i kibana-7.11.1-amd64.deb

一旦安裝完成後,編輯 /etc/kibana/kibana.yml 並指定托管 Kibana 的 IP 地址。

server_port: 5601
server_host: 0.0.0.0
server_name: demo-kibana

在上面,我們可以隻修改 server_host 即可,其它的我們可以使用默認的配置即可。設置 server_host 為 0.0.0.0 為的是我們可以在其它的機器上訪問當前的 Kibana。我們可以使用 Ubuntu 機器的 IP 地址加上端口 5601 就可以訪問瞭。

啟動 Kibana 並檢查其狀態。

sudo service kibana start
sudo service kibana status

如果我們能看到狀態為 active,則表明我們的安裝是成功。我們可以通過另外一個電腦來訪問 Kibana:

你如果能看到上面的畫面,則表明你的安裝是成功的。

安裝 Beats

Filebeat 用於將數據從設備傳送到 Elasticsearch。 對於不同的產品,有許多不同的 Filebeat 模塊,它們以所需的格式將日志和數據發送到 Elasticsearch。 在此示例中,我們將模塊用於 Zeek,但是 Elastic 也擴展瞭其對其他產品的支持,包括 AWS,CrowdStrike,ZScaler 等。

目前,我們隻打算在運行 Zeek 的主機上安裝 Filebeat,我們稍後會對其進行配置。

sudo apt-get install filebeat

對於中國有的開發者來說,上面的安裝步驟可能會很慢,一種辦法就是直接到網址 https://www.elastic.co/downloads/ 直接下載 Filebeat 的 deb 安裝包,並按如下的命令來進行安裝:

sudo dpkg -i filebeat-7.11.1-amd64.deb

安裝 Zeek

現在,我們準備著手安裝 Zeek。 首先,我們需要安裝所有必備組件。 通過運行以下命令來執行此操作。

sudo apt-get install cmake make gcc g++ flex bison libpcap-dev libssl-dev python-dev swig zlib1g-dev

接下來,我們需要為 Zeek 創建工作目錄,由於某些原因,Zeek 在安裝時默認不執行此操作。

sudo mkdir /opt/zeek
sudo chown -R root:root /opt/zeek
sudo chmod 740 /opt/zeek

接下來下載帶有 GIT 的 Zeek

git clone --recursive https://github.com/zeek/zeek

等下載完文件,進入 zeek 下載目錄。 然後將我們先前創建的 /opt/zeek 目錄設置為安裝目錄。

cd /home/$USER/zeek
./configure --prefix=/opt/zeek

在上面,我們假設你把 zeek 的文件 clone 到 home 目錄下的 zeek 目錄。現在,我們準備安裝 Zeek,運行以下 make 命令,然後將其保留安裝(這可能需要一些時間)

make
sudo make install

接下來,我們需要添加 PATH 環境變量

export PATH=/opt/zeek/bin:$PATH

我們可以在 /opt/zeek/etc 找到一個叫做 node.cfg 的配置文件。

# pwd
/opt/zeek/etc
root@liuxgu:/opt/zeek/etc# ls
networks.cfg node.cfg zeekctl.cfg zkg

這個文件包含對 zeek 的節點配置。我們需要配置我們的 interface:

node.cfg

上面的 interface, 我們可以通過 ifconfig 命令來獲得本機的接口。另外,我們需要安裝 sendmail,否則在運行 zeek 時會發生無法找到 sendmail 的錯誤。

sudo apt-get install sendmail

現在,我們準備運行下面的命令來部署 Zeek。我們需要在 root 賬號下運行:

zeekctl deploy

我們可以在 /opt/zeek/logs 目錄裡發現日志。“current” 目錄保存當天的日志,而前幾天的日志則存檔到其自己的目錄中。 還有一個針對不同數據類型的日志文件,例如 DNS 連接,HTTP 連接等。

讓我們檢查DNS日志

# pwd
/opt/zeek/logs
root@liuxgu:/opt/zeek/logs# ls
2021-02-24 current

配置安全

就目前而言,我們在 ELK 部署中擁有的唯一功能是日志提取和可視化。 我們可以將日志提取到 Elastisearch 中,並通過 Kibana 可視化來處理數據,但是缺少 SIEM 的核心功能。 我們無法建立檢測或用例。 此功能不是“開箱即用”的,要使用它,我們必須首先在所有不同節點之間配置安全性。 X-Pack 是 Elastic 軟件包,它基本上負責所有 Elastic Security 功能。

所需的一個關鍵組件是配置每個節點之間的 SSL 連接,可以通過多種方法進行。 我們也將使用 X-Pack 來執行此操作。

首先,在安裝瞭 Elasticsearch 的主機上,我們需要創建一個 YAML 文件 /usr/share/elasticsearch/instances.yml,它將包含我們要使用 SSL 保護的不同節點/實例。 就我而言,我隻有 Elasticsearch,Kibana 和 Zeek。

/usr/share/elasticsearch/instances.yml

instances:
 - name: "elasticsearch"
  ip:
  - "192.168.0.4"
 - name: "kibana"
  ip:
  - "192.168.0.4"
 - name: "zeek"
  ip:
  - "192.168.0.4"

接下來,我們將使用 Elastic 的 certutil 工具為我們的實例生成證書。 這也將生成一個證書頒發機構(Certificate Authority)。

/usr/share/elasticsearch/bin/elasticsearch-certutil cert ca --pem --in instances.yml --out certs.zip

這將為我們的每個實例創建一個 .crt 和 .key 文件,以及一個 ca.crt 文件。你可以使用 unzip 來解壓縮不同的證書。

unzip /usr/share/elasticsearch/certs.zip -d /usr/share/elasticsearch/

現在我們有瞭我們的證書,我們可以配置每個實例。

配置 Elasticsearch SSL

首先,我們需要創建一個文件夾將你的證書存儲在我們的 Elasticsearch 主機上。

mkdir /etc/elasticsearch/certs/ca -p

接下來,我們需要將解壓縮的證書復制到其相關文件夾中並設置正確的權限。

cp ca/ca.crt /etc/elasticsearch/certs/ca
cp elasticsearch/elasticsearch.crt /etc/elasticsearch/certs
cp elasticsearch/elasticsearch.key /etc/elasticsearch/certs
chown -R elasticsearch: /etc/elasticsearch/certs
chmod -R 770 /etc/elasticsearch/cert

接下來,我們需要將 SSL 配置添加到我們的 /etc/elasticsearch/elasticsearch.yml 文件中。

/etc/elasticsearch/elasticsearch.yml

# Transport layer
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.key: /etc/elasticsearch/certs/elasticsearch.key
xpack.security.transport.ssl.certificate: /etc/elasticsearch/certs/elasticsearch.crt
xpack.security.transport.ssl.certificate_authorities: [ "/etc/elasticsearch/certs/ca/ca.crt" ]
 
# HTTP layer
xpack.security.http.ssl.enabled: true
xpack.security.http.ssl.verification_mode: certificate
xpack.security.http.ssl.key: /etc/elasticsearch/certs/elasticsearch.key
xpack.security.http.ssl.certificate: /etc/elasticsearch/certs/elasticsearch.crt
xpack.security.http.ssl.certificate_authorities: [ "/etc/elasticsearch/certs/ca/ca.crt" ]

現在重新啟動 Elasticsearch。

service elasticsearch restart 

配置 Kibana SSL

現在,我們將重復此過程,但這一次是 Kibana。 Kibana 的配置略有不同。同樣,將你的證書移動到正確的文件夾並設置正確的權限。

註意:以下步驟假定你正在運行獨立的 ELK 配置。 如果你正在運行分佈式部署,則需要將證書移至適當的主機。

mkdir /etc/kibana/certs/ca -p
cp ca/ca.crt /etc/kibana/certs/ca
cp kibana/kibana.crt /etc/kibana/certs
cp kibana/kibana.key /etc/kibana/certs
chown -R kibana: /etc/kibana/certs
chmod -R 770 /etc/kibana/certs

接下來,在文件 /etc/kibana/kibana.yml 中,在 Elasticsearch 和 Kibana 之間添加SSL設置。

/etc/kibana/kibana.yml

# The URLs of the Elasticsearch instances to use for all your queries.
elasticsearch.hosts: ["https://192.168.0.4:9200"]
elasticsearch.ssl.certificateAuthorities: ["/etc/kibana/certs/ca/ca.crt"]
elasticsearch.ssl.certificate: "/etc/kibana/certs/kibana.crt"
elasticsearch.ssl.key: "/etc/kibana/certs/kibana.key"

然後在同一文件中,在 Kibana 和瀏覽器之間添加配置。

# These settings enable SSL for outgoing requests from the Kibana server to the browser.
server.ssl.enabled: true
server.ssl.certificate: "/etc/kibana/certs/kibana.crt"
server.ssl.key: "/etc/kibana/certs/kibana.key"

然後,重新啟動 Kibana。

service kibana restart

配置 Beats (Zeek) SSL

下一步,我們需要為運行 Zeek 和 Beats 的主機配置 SSL。 如果你沒有運行 Zeek 或其他使用 Filebeats 模塊的產品,例如 Suricata,Windows Event Log 等,則可以跳過此步驟。

首先將證書復制到運行 Zeek 的主機上,然後使用正確的權限創建證書目錄。 您需要同時復制 Zeek 證書和 CA 證書。

mkdir /etc/filebeat/certs/ca -p
cp ca/ca.crt /etc/filebeat/certs/ca
cp zeek/zeek.crt /etc/filebeat/certs
cp zeek/zeek.key /etc/filebeat/certs
chmod 770 -R /etc/filebeat/certs

接下來,我們需要將更改添加到 /etc/filebeat/filebeat.yml。

首先,我們的 Elasticsearch 配置設置。

# Elastic Output
output.elasticsearch.hosts: ['192.168.0.4:9200']
output.elasticsearch.protocol: https
output.elasticsearch.ssl.certificate: "/etc/filebeat/certs/zeek.crt"
output.elasticsearch.ssl.key: "/etc/filebeat/certs/zeek.key"
output.elasticsearch.ssl.certificate_authorities: ["/etc/filebeat/certs/ca/ca.crt"]

然後是我們的 Kibana 配置設置。

setup.kibana:
 host: "https://192.168.0.4:5601"
 ssl.enabled: true
 ssl.certificate_authorities: ["/etc/filebeat/certs/ca/ca.crt"]
 ssl.certificate: "/etc/filebeat/certs/zeek.crt"
 ssl.key: "/etc/filebeat/certs/zeek.key"

然後重新啟動 Filebeat。

service filebeat restart

現在,你可以通過運行以下命令來檢查 FileBeats 是否可以連接到 Elasticsearch。 一切都應該返回“OK”。

filebeat test output

添加身份驗證

我們還需要向 Elasticsearch 添加身份驗證。 這很容易做到。 首先通過編輯 /etc/elasticsearch/elasticsearch.yml 啟用安全

/etc/elasticsearch/elasticsearch.yml

# X-Pack Setting
xpack.security.enabled: true

設置完上面,我們必須重新啟動 Elasticsearch:

service elasticsearch restart

接下來,我們需要為所有內置的 Elasticsearch 角色和用戶生成密碼。 Elasticsearch 附帶瞭一個工具來執行此操作。 運行以下命令以生成這些密碼並將其保存在安全的地方(密碼管理器)。

/usr/share/elasticsearch/bin/elasticsearch-setup-passwords interactive

為瞭方便,我將把所有的賬號的密碼都設置為 password。

我們可以通過另外一個機器來訪問 ubuntu 機器 https://ubuntu.9200。當 Chrome 瀏覽器上出現如下的畫面時:

我們在當前的頁面打入如下的字符串:

thissisunsafe

我們就可以看到:

我們把用戶名及密碼 elastic/password 輸入進去即可:

針對 Kibana,我們需要修改 /etc/kibana/kibana.yml 文件,並把相應的用戶名及密碼填入:

/etc/kibana/kibana.yml

elasticsearch.username: "kibana_system"
elasticsearch.password: "password"

修改完後,我們必須重新啟動 Kibana:

service kibana restart

我們也可以按照同樣的方法來啟動 Kibana https://ubuntu:5601。

接下來,將新創建的 Elasticsearch 憑證添加到我們的 Filebeat 配置文件中:

/etc/filebeat/filebeat.yml
# Elastic Credentials
output.elasticsearch.username: "elastic"
output.elasticsearch.password: "Your_Elastic_Pass_Here"

我們需要重新啟動 Filebeat:

service filebeat restart

添加 Zeek 數據到 Elasticsearch

我們可以通過 Filebeat 把 Zeek 的日志信息導入到 Elasticsearch 中去。首先,我們必須啟動 zeek 模塊。我們打開 Kibana 的界面:

裡面有詳細的步驟介紹如何配置 Filebeat。首先,我們需要使用如下的命令來啟動 zeek 模塊:

sudo filebeat modules enable zeek
$ sudo filebeat modules enable zeek
Enabled zeek

完成後,我們需要配置 Zeek 將 Zeek 日志轉換為 JSON 格式。 首先,停止 Zeek 的運行。然後將 @load policy / tuning / json-logs.zeek 行編輯到文件 /opt/zeek/share/zeek/site/local.zeek

保存好文件,並重新啟動 zeek:

zeekctl deploy

現在檢查日志是否為 JSON 格式。 即使你不熟悉 JSON,日志的格式也應該與以前明顯不同。

tail -f /opt/zeek/logs/current/dns.log

然後編輯配置文件 /etc/filebeat/modules.d/zeek.yml。 我們需要指定 Zeek 創建的每個單獨的日志文件,或者至少指定我們希望 Elasticsearch 提取的日志文件。 對於 /opt/zeek/logs/ 文件夾中的每個日志文件,必須定義 “current” 日志的路徑以及以前的任何日志,如下所示。

dns:
  enabled: true
  var.paths: [ "/opt/zeek/logs/current/dns.log", "/opt/zeek/logs/*.dns.json" ]

如果 opt 文件夾中有一些默認日志文件(例如 capture_loss.log),你不希望 Elasticsearch 提取這些文件,則隻需將 “enabled” 字段設置為 false。 重要的是,將在 /opt/zeek/logs中沒有日志文件的所有日志源設置為 enabled: false,否則會收到錯誤消息。 此外,請務必註意間距,因為 YML 文件對空格敏感。在我的 current 目錄中我們可以看到如下的文件:

root@liuxgu:/opt/zeek/logs/current# ls
capture_loss.log http.log      ntp.log      ssh.log   weird.log
conn.log     known_services.log packet_filter.log stats.log
dhcp.log     loaded_scripts.log reporter.log    stderr.log
dns.log      notice.log     software.log    stdout.log

那麼我們的 /etc/filebeat/modules.d/zeek.yml 最終格式為:

json

完成後,你應該可以很好地啟動 Filebeat 並啟動該服務。

sudo filebeat setup
sudo service filebeat restart

我們將在 Kibana 中看到如下的信息:

點擊上面的 Zeek Overview 按鈕, 我們將看到 Zeek 的信息:

如果你轉到 SIEM 應用程序中的網絡儀表板,則應該看到使用 Zeek!數據填充的不同儀表板! 這裡的儀表板很好地概述瞭從網絡中收集的一些數據。

啟動檢測

一旦完成上述所有步驟,並將數據提取到 Elasticsearch 中,你可能會註意到仍然無法創建檢測。

點擊上面的 View document。這是我們最後要完成的步驟。 編輯你的 Kibana 配置件 /etc/kibana/kibana.yml,然後添加 xpack.encryptedSavedObjects.encryptionKey。 我相信這可以是任何32個字符串。

xpack.security.enabled: true
# xpack.fleet.agents.tlsCheckDisabled: true
xpack.encryptedSavedObjects.encryptionKey: "something_at_least_32_characters"

重新啟動 Kibana:

service kibana restart

經過上面的設置後,我們終於可以創建檢測規則瞭:

安裝 Endpoint agent

現在,我們準備安裝 Elastic endpoint。首先,通過單擊側面菜單上管理標簽下的鏈接,導航到 “Fleet” 儀表板。

如果我們現在將代理安裝到 Windows 主機上,則會收到一個錯誤消息,即我們的自簽名證書來自不受信任的來源,並且代理安裝將失敗。因此,我們需要做的是將我們的 CA 證書添加為 Windows 主機上的受信任證書。

安裝證書

首先在 Windows 搜索欄中搜索 “本地安全策略”。 然後轉到 安全設置 > 公鑰策略 > 證書路徑驗證設置

然後,選中“定義這些策略設置”,然後選中 “允許使用用戶信任的根CA來驗證證書” 和 “允許用戶信任對等信任證書” 選項(如果尚未選中)。

最後,選中 “第三方根CA 和企業根CA”。單擊 “應用”,然後單擊 “確定”。

接下來在 Windows 搜索欄中搜索 certmgr.msc。

然後轉到 “受信任的根證書頒發機構” > “證書”,右鍵單擊空白處的任意位置,然後選擇 “所有任務” > “導入

然後簡單地按照向導操作,並選擇我們之前創建的 ca.crt。

安裝 endpoint agent

現在,我們準備安 Elastic agent。 從 Fleet Dashboard 復制安裝命令,並在該代理所在的 Windows 主機上使用 PowerShell 運行它。由於 Elastic Stack 是運行於另外一個機器上的,我們需要對它做一些配置。我們可以參考文章 “Elastic:Elastic Security 入門”。這裡就不再詳述瞭。

到此這篇關於Security安裝 Elastic SIEM 和 EDR的超詳細教程的文章就介紹到這瞭,更多相關Security安裝 Elastic SIEM 和 EDR內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: