您好,登錄后才能下訂單哦!
這篇文章主要介紹了如何使用Elasticsearch與TheHive構建開源安全應急響應平臺,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
通過開源軟件可以構建一個安全應急響應平臺,該平臺可以進行日志整合、告警生成、IoC 豐富與事件管理。
在上面的流程圖中,作為 HIDS 的 Wazuh 將數據發送回 Wazuh Manager 與 Elasticsearch。ElastAlert 觀測到新事件并在 TheHive 中相應生成告警。然后通過 Cortex 與 MISP 查詢額外信息豐富該事件,之后自動關閉該事件或提交給分析師。
請注意,系統中的任何端點服務或者可以生成日志傳送給 Elasticsearch 的 Agent 都可以被替代。該套系統的好處在于絕大多數的組件都可以替換。
Wazuh 是一個開源安全監控解決方案,用于收集、分析主機安全數據。Wazuh 是 OSSEC 項目的分支。Wazuh 組件與 Elasticsearch 和 Kibana 的整合度很高,可以用來執行許多與安全相關的任務,如日志分析、Rootkit 檢測、監聽端口檢測、文件完整性檢測等。
Elasticsearch 將充當整個系統的日志存儲庫。Elasticsearch 非常強大,具備很多功能。常與 Logstash(日志收集)和 Kibana(可視化)結合使用。Elasticsearch 為所有類型的數據存儲都提供了一個強大的平臺。
ElastAlert 是由 Yelp 發起的項目,為 Elasticsearch 提供告警機制。ElastAlert 通過 REST API 查詢 Elasticsearch 并有多個輸出來匹配告警。
TheHive 是一個可擴展的、開源、免費安全應急響應平臺,旨在讓任何安全從業人員能夠輕松地處理安全事件,并快速地采取行動。本質上講 TheHive 是一個告警管理平臺,用于管理全部事件告警。
Cortex 與 TheHive 是一個團隊開發的產品。Cortex 使用分析器獲取日志中有關指標信息的其他數據。允許在第三方服務中查詢 IP、URL 與文件哈希等指標,并將第三方返回的結果作為附加信息豐富告警事件。
MISP 是 CIRCL 維護的開源威脅情報共享平臺,其 Feed 可以是某個組織提供的付費訂閱,也可以是社區維護的開源訂閱,這也是數據豐富的主要來源。
首先部署 Elasticsearch 集群,系統使用 Ubuntu 16.04(文章使用虛擬機安裝,DHCP 為該虛擬機預留了地址,確保其始終使用相同的 IP 地址)。
作者提供了 Vagrantfile 幫助配置構建 Elasticsearch 虛擬機。
注意:TheHive 正在進行一些后端重構,這會導致設置復雜化。TheHive 背后的開發團隊認為 Elasticsearch 已經不再滿足它們的需求了,4.0 版本后將在后端使用 GraphDB。當前穩定版本 3.2.1 版本以及我們在此使用的 beta 版本 3.3.0 都是用 Elasticsearch 5.6 作為后端。因此,在虛擬機中需要部署 Elasticsearch、Logstash 和 Kibana 6.6.1 作為日志存儲倉庫,另一個 Elasticsearch 5.6.15 部署在 TheHive 虛擬機中作為后端。
雖然我總結了安裝步驟,但是如果需要進一步了解細節可以查看安裝指南。
# 首先安裝 Java,選擇使用 OpenJDK 安裝 sudo apt-get install openjdk-8-jre # 添加密鑰與倉庫 wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add - echo "deb https://artifacts.elastic.co/packages/6.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-6.x.list sudo apt-get update # 為了防止更新破壞 SearchGuard,選擇安裝固定版本的 Elasticsearch apt-cache policy elasticsearch sudo apt-get install elasticsearch=6.6.1 logstash=1:6.6.1-1 kibana=6.6.1 # 阻止軟件更新 sudo apt-mark hold elasticsearch logstash kibana # 將 Elasticsearch、Logstash 和 Kibana 設置為自啟動 sudo systemctl daemon-reload sudo systemctl enable elasticsearch.service sudo systemctl enable logstash.service sudo systemctl enable kibana.service # 未來確定好兼容性,可以進行升級 sudo apt-mark unhold elasticsearch
默認情況下,Elasticsearch 依賴的 Java 堆的大小為 1 GB。可以通過修改 /etc/elasticsearch/jvm.options
中的 Xms1g 與 Xmx1g 參數,將其增加到總內存的 50-80%。我的虛擬機只有 4GB 內存,所以我保留了默認值。
編輯配置文件 /etc/elasticsearch/elasticsearch.yml
:
取消 cluster.name 和 node.name 的注釋,并設置為不同的名字
設置 bootstrap.memory_lock 為 True
設置 network.host 為 0.0.0.0
設置 discovery.type 為 single-node
編輯服務 sudo systemctl edit elasticsearch.service
:
[Service] LimitMEMLOCK=infinity
然后繼續執行:
# 重新加載 sudo systemctl daemon-reload # 重新啟動 sudo systemctl start elasticsearch.service # 檢查確保 Elasticsearch 可用 curl http://localhost:9200/_cat/health
應該可以看到類似的響應:
1551641374 19:29:34 demo-cluster green 1 1 0 0 0 0 0 0 - 100.0%
編輯 Kibana 的配置文件:sudo nano /etc/kibana/kibana.yml
設置 Kibana 來響應外部接口:server.host: 0.0.0.0
啟動服務:sudo systemctl start kibana.service
打開瀏覽器:http://<IP-OF-VM>:5601
應該可以看到 Kibana 控制臺
按照如下命令執行:
sudo apt install logstash sudo systemctl enable logstash.service sudo systemctl daemon-reload
注意:此時 Logstash 沒有運行。
這部分將講述如何安裝 Wazuh Manager,并將 Wazuh 與 Elasticsearch 進行集成。
使用 Wazuh 的 Agent 及其規則集來識別端點的行為并生成告警。這些告警從 Wazuh 的 Agent 轉發到 Wazuh Manager 寫入 /var/ossec/logs/alerts/alerts.json
。Filebeat 的服務不斷監視該文件的更改,然后轉發給 Elasticsearch。
# 為 Wazuh 倉庫安裝 GPG 密鑰 curl -s https://packages.wazuh.com/key/GPG-KEY-WAZUH | apt-key add - # 添加倉庫 echo "deb https://packages.wazuh.com/3.x/apt/ stable main" | tee -a /etc/apt/sources.list.d/wazuh.list # 升級 sudo apt update # 安裝 sudo apt install wazuh-manager
詳情請參見官方文檔
Wazuh API 是連接 Kibana 所必需的。Wazuh API 的默認賬戶密碼是 foo/bar,如果想要變更可以查閱文檔。
# 安裝 NodeJS sudo curl -sL https://deb.nodesource.com/setup_8.x | bash - sudo apt install nodejs # 安裝 Wazuh API sudo apt install wazuh-api # 取消自動更新 sudo apt-mark hold wazuh-manager sudo apt-mark hold wazuh-api
curl -s https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add - sudo echo "deb https://artifacts.elastic.co/packages/6.x/apt stable main" | tee /etc/apt/sources.list.d/elastic-6.x.list sudo apt update sudo apt install filebeat=6.6.1
首先安裝 Filebeat:
# 取消自動更新 sudo apt-mark hold filebeat # 下載 Filebeat 配置文件 sudo curl -so /etc/filebeat/filebeat.yml https://raw.githubusercontent.com/wazuh/wazuh/3.8/extensions/filebeat/filebeat.yml # 編輯配置文件 sudo nano /etc/filebeat/filebeat.yml
在末尾的 YOUR_ELASTIC_SERVER_IP
部分替換為 Elasticsearch 6.6.1 服務器的真實 IP。
啟動 Filebeat 服務:
sudo systemctl daemon-reload sudo systemctl enable filebeat.service sudo systemctl start filebeat.service
為 Elasticsearch 加載 Wazuh 模板。在 Elasticsearch 主機上運行此命令:curl https://raw.githubusercontent.com/wazuh/wazuh/3.8/extensions/elasticsearch/wazuh-elastic6-template-alerts.json | curl -X PUT "http://localhost:9200/_template/wazuh" -H 'Content-Type: application/json' -d @-
下載用于 Wazuh 遠程安裝的 Logstash 配置文件,在 Elasticsearch 主機上運行此命令:curl -so /etc/logstash/conf.d/01-wazuh.conf https://raw.githubusercontent.com/wazuh/wazuh/3.8/extensions/logstash/01-wazuh-remote.conf
確保使用新配置文件運行 Logstash 服務:sudo systemctl restart logstash.service
首先嘗試運行 Wazuh 文檔中提供的命令:sudo -u kibana NODE_OPTIONS="--max-old-space-size=3072" /usr/share/kibana/bin/kibana-plugin install https://packages.wazuh.com/wazuhapp/wazuhapp-3.8.2_6.6.1.zip
如果發現錯誤:
Plugin installation was unsuccessful due to error "Command failed: /usr/share/kibana/node/bin/node /usr/share/kibana/src/cli --env.name=production --optimize.useBundleCache=false --server.autoListen=false --plugins.initialize=false Browserslist: caniuse-lite is outdated. Please run next command `npm update caniuse-lite browserslist`
之所以運行命令 npm update caniuse-lite browserslist
產生錯誤,是因為本機尚未安裝 Node。
卸載了插件并在沒有 NODE 選項的情況下運行命令:sudo -u kibana /usr/share/kibana/bin/kibana-plugin install https://packages.wazuh.com/wazuhapp/wazuhapp-3.8.2_6.6.1.zip
。此時安裝將會成功,然后重新啟動。
根據你自己的系統情況按照說明進行安裝,本文在 Linux 上進行安裝。
安裝后,需要在 ossec.conf 中編輯 Wazuh Manager 的 IP 地址。Debian 的 Agent 安裝在 /var/ossec,編輯 sudo nano /var/ossec/etc/ossec.conf
改變 MANAGER_IP 即可。
我們使用簡單的,不安全的方法注冊 Agent:
在 Manager 上,運行以下命令啟動注冊服務:/var/ossec/bin/ossec-authd
在 Agent 上,使用 Manager 的 IP 地址運行 agent-auth 程序
對于 Linux 來說:
/var/ossec/bin/agent-auth -m <MANAGER_IP_ADDRESS>
對于 Windows 來說:
C:\Program Files (x86)\ossec-agent\agent-auth.exe -m <MANAGER_IP_ADDRESS>
應該可以看到如下輸出:
INFO: No authentication password provided. INFO: Connected to xxx.xxx.xxx.xxx:1515 INFO: Using agent name as: xxxxxxx INFO: Send request to manager. Waiting for reply. INFO: Received response with agent key INFO: Valid key created. Finished. INFO: Connection closed.
此時連接到 Kibana,就會在左側工具欄中發現 Wazuh 的圖標,點擊此按鈕跳轉到配置 API 的頁面:
Username: foo Password: bar Server: http://<WAZUH_Server_IP> API Port: 55000
保存 API 配置,然后點擊跳轉到 Overview 頁面。點擊頁面頂端的 Agent 即可查看 ID 為 001 的 Agent,即之前注冊好的主機。它顯示為 Active 狀態即視為正常,否則可能需要在 Agent 上確保更改 MANAGER_IP 成功并重啟 Agent 的服務。
在 Kibana 中,深入到 Management > Elasticsearch > Index Management 應該可以看到名為 wazuh-monitoring-3.x
的索引。然后轉到 Management > Kibana > Index Patterns,如果還沒有定義默認索引模式,點擊 wazuh-monitoring,然后點擊右上角的星號將其設為默認值。
點擊 Discover 查看已創建的事件,可能暫時還沒有。返回 Elasticsearch Index Management 頁面,等待名為 wazuh-alerts 的索引出現。我們試圖通過生成告警讓其出現。
作為測試,轉到另一個主機并嘗試使用虛假的用戶通過 SSH 登錄主機:ssh fakeuser@<wazuh_agent_IP>
。這將會觸發主機的 auth.log 出現無效的登錄嘗試,這將被 Wazuh Agent 獲取,在新創建的 wazuh-alerts 索引中生成新條目。現在,我們就得到了一個存儲告警的倉庫。
部署 MISP 可以允許 Cortex 或者任何能夠發起簡單 REST 請求的程序查詢威脅指標,如 IP 地址、URL 與文件哈希。MISP 可以自主添加訂閱與查詢的源,返回的信息取決于訂閱源提供的數據,而且訂閱源之間的差異很大。有些只是提供了數據列表,有些提供了大量額外的信息。
將 MISP 通過 Docker 進行部署相比通過源碼安裝容易得多,哈佛安全小組提供了一個示例。請注意:如果將其部署到生產環境中,應該使用 build.sh,這樣就可以在構建之前更改默認的 MySQL 密碼與 MISP_FQDN。
初始化 MISP 數據庫:docker run -it --rm -v /docker/misp-db:/var/lib/mysql harvarditsecurity/misp /init-db
。這可以啟動容器,運行腳本使用必要的數據庫文件填充 misp-db 目錄,最后刪除容器。如果查看 misp-db 目錄,可以發現已經新增了文件。
如果不生成 SSL 證書,Cortex 就不能請求 MISP,按照如下命令生成證書:sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /docker/certs/misp.key -out /docker/certs/misp.crt
,如果沒有特殊要求,可以接受所有默認選項。
docker run -it -d \ -p 443:443 \ -p 80:80 \ -p 3306:3306 \ -v /docker/certs:/etc/ssl/private \ -v /docker/misp-db:/var/lib/mysql \ harvarditsecurity/misp
打開瀏覽器訪問 https://localhost
,使用 admin@admin.test
和 admin
作為用戶名與密碼。系統會要求更改密碼,新的密碼至少包含 12 個字符,其中包含大寫字母和特殊字符。
在 Administration > Server Settings 與 Maintenance > MISP Settings 中設置 MISP.live
為 TRUE、MISP.disable_emailing
為 TRUE。
在 Sync Actions > List Feeds 的列表中選擇訂閱源進行訂閱。我選了 malwaredomainlist,選中復選框然后點擊頂部的 Enable Feed 就可以了。在列表中可以看到該訂閱源,點擊向下箭頭就可以拉取所有事件,可以在 Administration > Jobs 處查看正在執行的任務。
點擊放大鏡圖標,可以顯示 IP 的列表,復制其中任意一個,之后會用到。
我們使用 Postman 來測試 API,在 File > Settings 中將 SSL certificate verification
設為 OFF。
在 MISP 中,在 Administration > List Users 中拷貝用戶的身份密鑰。在 Postman 中設置 Header 中的三個字段:
Accept application/json Contect-Type application/json Authorization <API_Key>
將用戶的身份密鑰粘貼到 Authorization 字段中。
在頂部將 REST 命令從 GET 改為 POST,API 設置為: https://localhost/attributes/restSearch
。
換到 Body 選項卡,點擊 Raw 按鈕并粘貼以下 JSON,將值替換為之前復制的 IP 地址:
{ "returnFormat": "json", "value": "8.8.8.8" }
應該會接收到以下響應:
{ "response": { "Attribute": [ { "id": "15", "event_id": "1", "object_id": "0", "object_relation": null, "category": "Network activity", "type": "ip-dst", "to_ids": false, "uuid": "5c8550db-5314-4538-a0d8-0146ac110002", "timestamp": "1552240859", "distribution": "0", "sharing_group_id": "0", "comment": "", "deleted": false, "disable_correlation": false, "value": "23.253.130.80", "Event": { "org_id": "1", "distribution": "0", "id": "1", "info": "malwaredomainlist feed", "orgc_id": "1", "uuid": "5c8550db-2d90-425f-9bc5-0146ac110002" } } ] } }
此時,MISP 現在已經可以響應查詢請求,為 Cortex 的加入做好了準備。返回訂閱列表可以添加更多訂閱源,在 Administration > Scheduled Tasks 中可以將 fetch_feeds 設置為 24 并點擊 Update All 就可以配置好定時拉取任務。
這篇文章部署的 TheHive 3.3.0 RC5 與 Cortex stable v2.1.2,而 TheHive 4.1 版本(預計在 2019 年第二季度發布)后將取消 Elasticsearch 作為后端,轉而使用 GraphDB。
注:后續使用 3.3.0 穩定版安裝也可以正常使用。
# 添加倉庫與密鑰 echo 'deb https://dl.bintray.com/thehive-project/debian-beta any main' | sudo tee -a /etc/apt/sources.list.d/thehive-project.list echo "deb https://artifacts.elastic.co/packages/5.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-5.x.list wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add - curl https://raw.githubusercontent.com/TheHive-Project/TheHive/master/PGP-PUBLIC-KEY | sudo apt-key add - # 更新并安裝需要的 Java sudo apt-get update sudo apt-get install openjdk-8-jre # 安裝 Elasticsearch 5.6.15,這是倉庫中最新的版本 sudo apt-get install elasticsearch # 修改配置文件 sudo nano /etc/elasticsearch/elasticsearch.yml cluster.name: hive bootstrap.memory_lock: true discovery.type: single-node # 設置服務自啟動 sudo systemctl daemon-reload sudo systemctl enable elasticsearch sudo systemctl start elasticsearch # 檢查響應 curl http://localhost:9200 # 如果安裝成功繼續安裝 TheHive sudo apt-get install thehive=3.3.0-0.1RC5 # 阻止版本更新 apt-mark hold elasticsearch thehive # 編輯配置文件 sudo nano /etc/thehive/application.conf # 取消注釋,并更改密碼 #play.http.secret.key # 設置服務自啟動 sudo systemctl daemon-reload sudo systemctl enable thehive sudo systemctl start thehive
打開瀏覽器,查看網站:http://<TheHiveIP>:9000
,應該可以看到數據庫更新消息:
點擊 Update Database,如果沒有看到上面的消息而是看到了登錄框,意味著與 Elasticsearch 的連接中斷了,請檢測日志 \var\log\thehive
。
更新完成后,仍然有機會為管理員賬戶更改用戶名與密碼。還可以檢查 Elasticsearch 名為 the_hive_14
的索引:curl http://127.0.0.1:9200/_cat/indices?v
。
如果忘記了管理員的賬戶與密碼,請刪除此索引重新開始。
注:安裝 Cortex 3.0.0-RC1 會遇到一些問題,安裝 Cortex 2.1.3 則不會遇到。
在 TheHive 主機上安裝 Cortex:
sudo apt-get install cortex=2.1.3-1 sudo apt-mark hold cortex
安裝 Cortex 有一些依賴需要先安裝:
sudo apt-get install -y --no-install-recommends python-pip python2.7-dev python3-pip python3-dev ssdeep libfuzzy-dev libfuzzy2 libimage-exiftool-perl libmagic1 build-essential git libssl-dev sudo pip install -U pip setuptools && sudo pip3 install -U pip setuptools
從 GitHub 拉取源代碼,為每個 Analyzer 單獨安裝 requirements.txt 的依賴:
cd /etc/cortex git clone https://github.com/TheHive-Project/Cortex-Analyzers
本文的下載位置在:/etc/cortex
:
# 更改文件夾權限 chown -R root:cortex Cortex-Analyzers # 為所有 Analyzer 安裝依賴(兩行作為一條命令執行) for I in $(find Cortex-Analyzers -name 'requirements.txt'); do sudo -H pip2 install -r $I; done && \ for I in $(find Cortex-Analyzers -name 'requirements.txt'); do sudo -H pip3 install -r $I || true; done
安裝依賴不可避免地會出現一些錯誤,解決此類辦法的好方法是挑選要安裝哪些 Analyzer 防止依賴沖突。修改 Cortex 的配置文件 application.conf 指向 Cortex-Analyzers 目錄:sudo nano /etc/cortex/application.conf
。取消注釋 #play.http.secret.key
,并更改密碼。找到 ## ANALYZERS
的位置,將其改為 /etc/cortex/Cortex-Analyzers/analyzers
。
啟動 Cortex:
sudo systemctl enable cortex sudo systemctl start cortex
打開瀏覽器檢查安裝是否成功:http://<TheHiveIP>:9001
。更新數據庫并創建管理員用戶登錄,就像安裝 TheHive 時做的那樣。
Cortex 中規定必須在組織賬戶下登錄才能啟用、管理 Analyzer,否則只能創建組織與用戶。
點擊 +Add Organization
創建一個新組織,切換到 Users 標簽頁點擊 +Add User
創建一個新用戶,并且將新用戶分配給創建的組織并分配 OrgAdmin
角色。保存后,點擊 New Password
為剛創建的用戶設置密碼,按回車鍵保存。然后注銷賬戶,用新用戶登錄。點擊頂部的 Organization 標簽頁,點擊 Analyzers 子選項卡,而不是頂部藍色的 Analyzers 選項卡。如果 Cortex 配置正確,應該可以看到 Analyzers,按照我的配置安裝了 113 個可用的 Analyzer。
可以啟用以下幾個 Analyzer,接受默認配置:
Abuse_Finder_2_0 CyberCrime-Tracker_1_0 Cyberprotect_ThreatScore_1_0 DShield_lookup_1_0 MISP_2_0 URLhaus_2_0 Urlscan_io_Search_0_1_0
除了 MISP 之外,這些都不需要 API 密鑰或者進行進一步的配置。 點擊 Users 子選項卡并創建一個新用戶和 TheHive 集成。該用戶應該分配 read & analyze
角色,這次可以不用為其設置密碼,點擊 Create API Key
并且拷貝該密鑰。
點擊頁面頂端的 +New Analysis
:
不用管 TLP 與 PAP
更改數據類型為 IP
添加 8.8.8.8
選中你啟用的 Analyzer 旁邊的框
點擊開始
修改 TheHive 的 application.conf 來指向 Cortex:sudo nano /etc/thehive/application.conf
。滾動到底部,找到 #Cortex
部分,取消注釋 play.modules.enabled += connectors.cortex.CortexConnector
。
添加 API 密鑰與 URL:
play.modules.enabled += connectors.cortex.CortexConnector cortex { "CORTEX-SERVER-ID" { url = "http://127.0.0.1:9001" key = "wrXichGSPy4xvjpWVdeQoNmoKn9Yxnsn" # # HTTP client configuration (SSL and proxy) # ws {} } }
重啟服務器,兩個服務再次啟動的時候就可以使用了。在 TheHive 點擊 +New Case
測試 Cortex:
給事件一個名稱與描述,然后打開這個事件,點擊 Observables 選項卡,點擊 +Add Observable
設置 Type = IP、Value = 1.1.1.1、Tag 為 test。只需要提供 tag 或者 description,不必二者都填。
在 Observable 列表中點擊該 IP 地址,這將打開一個新選項卡,包含相關數據,也可以在底部看到 Analyzer:
點擊 Run All
,如果返回 Cortex 將會看到 Analyzer 在 Job History 標簽頁中運行。回到 TheHive,現在 Analyzer 應該有了最后分析的時間與日期。返回 Observables 選項卡并刷新頁面,應該可以在 Observables 下看到一個標簽列表:
在 https://dl.bintray.com/thehive-project/binary/report-templates.zip 下載報告模版包。使用管理員帳號登錄 TheHive,點擊 Admin > Report templates 選擇 Import templates
,在其中選擇下載的包。
現在,在 Observables 中點擊最后分析時間時將會獲得包含分析結果的報告:
在 MISP 的頁面上點擊 Administration > Add User:
給用戶分配一個電子郵件,cortex@admin.test
將用戶添加到 ORGNAME 組織
分配角色 user
取消底部所有復選框
拷貝用戶 API 密鑰
在 Cortex 的頁面上點擊 Organization > Analyzers,在搜索框中輸入 misp,然后啟用 MISP_2_0
:
為 MISP 服務器提供描述
URL = https://
key = AuthKey from MISP user you created
cert_check: False
現在回到 MISP 頁面,點擊 Sync Actions > List Feeds。找到其中一個訂閱源,然后點擊右側放大鏡,從列表中選擇一個 IP 并復制。
在 Cortex 中點擊 +New Analysis
,添加 IP 的數據類型,然后粘貼復制的 IP 地址。選擇 MISP_2_0
的 Analyzer 運行。在 Job History 頁面點擊 View 將會看到復制的 IP 列表名與其他信息。可以在 TheHive 中添加此 IP 為 Observables 進行測試。現在已經將 TheHive、MISP 與 Coretx 集成在了一起。
最后一步是安裝 ElastAlert 從 Elasticsearch 中的事件中生成警報。ElastAlert 當前版本要求 Python 2.7,本文安裝在了 Elasticsearch 主機上:
sudo apt install python-pip pip install elastalert
安裝位置在:/home/username/.local/bin/elastalert
,注:ElastAlert 也有 Docker 鏡像提供。
創建一個目錄來存儲配置和規則:mkdir -p ~/elastalert/rules
。可以拉取公開配置文件或者制作自己的配置文件,復制如下必要的設置,保存為 ~/elastalert/config.yaml
:
rules_folder: /home/username/elastalert/rules run_every: minutes: 1 buffer_time: minutes: 15 es_host: x.x.x.x es_port: 9200 use_ssl: False writeback_index: elastalert_status alert_time_limit: days: 2
運行 elastalert-create-index
在 Elasticsearch 中創建必要的索引。可以得到以下結果:
Elastic Version:6 Mapping used for string:{'type': 'keyword'} New index elastalert_status created Done!
在 TheHive 頁面中點擊 Admin > Users,創建一個名為 elastalert 的用戶,但不為其分配角色,并選中 elastalert
。點擊 Create API Key
并拷貝 API 密鑰。TheHive 的管理指南指出:“為了更好地審計,一旦創建了用戶,就無法刪除該用戶,只能鎖定該賬戶”。
每條規則定義要執行的查詢,觸發匹配的參數與每個匹配觸發的告警列表。本文中創建一個規則來識別失敗的 SSH 登錄,編輯規則文件 nano ~/elastalert/rules/failed_ssh_login.yaml
:
es_host: x.x.x.x es_port: 9200 name: SSH Failed Login type: frequency index: wazuh-alerts-3.x-* num_events: 2 timeframe: hours: 1 filter: - term: rule.id: "5710" alert: hivealerter hive_connection: hive_host: http://x.x.x.x hive_port: 9000 hive_apikey: <Paste API key for elastalert user here> hive_alert_config: type: 'external' source: 'elastalert' description: '{rule[name]}' severity: 2 tags: ['{rule[name]}', '{match[agent][ip]}', '{match[predecoder][program_name]}'] tlp: 3 status: 'New' follow: True hive_observable_data_mapping: - ip: "{match[src_ip]}"
注意最后將 Observables 映射為 Types 的部分。盡管可以在標簽字段使用嵌套的字段名({match[data][srcip]}
),但對于 hive_observable_data_mapping 好像并不起作用。只能使用單個字段名('{match[srcip]}'
)。
我們需要修改 Logstash 主機上的 01-wazuh.conf 配置文件來解決這個問題。在 Logstash 主機上修改 01-wazuh.conf 文件 [data][srcip]
過濾器的部分,將 add_field => [ "@src_ip", "%{[data][srcip]}" ]
改為 add_field => [ "src_ip", "%{[data][srcip]}" ]
。geoip 過濾器的部分,將 source => "@src_ip"
改為 source => "src_ip"
。
現在日志中應該已經有了 src_ip
字段,可以通過 Kibana 進行驗證。在 Kibana 頁面中選擇 Management > Kibana > Index Patterns,選擇 wazuh-alerts 索引模式,點擊 Refresh 啟用新字段:
# 測試規則 elastalert-test-rule ~/elastalert/rules/failed_ssh_login.yaml # 運行 ElastAlert elastalert --verbose --config ~/elastalert/config.yaml
針對運行著 Wazuh Agent 的主機生成一些告警:連續運行三次以下命令:ssh invaliduser@serverip
。
此時應該可以看到 Kibana 中顯示了告警,ElastAlert 可以在下次運行時接收這些告警:
INFO:elastalert:Ran SSH Failed Login from 2019-03-31 18:21 UTC to 2019-04-02 15:01 UTC: 3 query hits (0 already seen), 1 matches, 1 alerts sent
在 TheHive 的 Alerts 下生成新告警:
點擊右側 Page 圖標預覽告警,可以為其分配一個模版,然后導入它:
這時已經完成了全部任務,Wazuh 生成的告警已經能在 TheHive 中顯示為事件了。
感謝你能夠認真閱讀完這篇文章,希望小編分享的“如何使用Elasticsearch與TheHive構建開源安全應急響應平臺”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。