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!
推薦閱讀:
- Docker Compose一鍵ELK部署的方法實現
- 基於Docker搭建ELK 日志系統的方法
- docker安裝elastic search的詳細過程
- ELK收集Nginx日志的項目實戰
- logstash將mysql數據同步到elasticsearch方法詳解