這篇文章主要介紹了如何使用Elasticsearch與TheHive構(gòu)建開源安全應(yīng)急響應(yīng)平臺,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
我們擁有十余年網(wǎng)頁設(shè)計(jì)和網(wǎng)站建設(shè)經(jīng)驗(yàn),從網(wǎng)站策劃到網(wǎng)站制作,我們的網(wǎng)頁設(shè)計(jì)師為您提供的解決方案。為企業(yè)提供網(wǎng)站制作、做網(wǎng)站、微信開發(fā)、成都微信小程序、手機(jī)網(wǎng)站開發(fā)、成都h5網(wǎng)站建設(shè)、等業(yè)務(wù)。無論您有什么樣的網(wǎng)站設(shè)計(jì)或者設(shè)計(jì)方案要求,我們都將富于創(chuàng)造性的提供專業(yè)設(shè)計(jì)服務(wù)并滿足您的需求。
通過開源軟件可以構(gòu)建一個(gè)安全應(yīng)急響應(yīng)平臺,該平臺可以進(jìn)行日志整合、告警生成、IoC 豐富與事件管理。
在上面的流程圖中,作為 HIDS 的 Wazuh 將數(shù)據(jù)發(fā)送回 Wazuh Manager 與 Elasticsearch。ElastAlert 觀測到新事件并在 TheHive 中相應(yīng)生成告警。然后通過 Cortex 與 MISP 查詢額外信息豐富該事件,之后自動關(guān)閉該事件或提交給分析師。
請注意,系統(tǒng)中的任何端點(diǎn)服務(wù)或者可以生成日志傳送給 Elasticsearch 的 Agent 都可以被替代。該套系統(tǒng)的好處在于絕大多數(shù)的組件都可以替換。
Wazuh 是一個(gè)開源安全監(jiān)控解決方案,用于收集、分析主機(jī)安全數(shù)據(jù)。Wazuh 是 OSSEC 項(xiàng)目的分支。Wazuh 組件與 Elasticsearch 和 Kibana 的整合度很高,可以用來執(zhí)行許多與安全相關(guān)的任務(wù),如日志分析、Rootkit 檢測、監(jiān)聽端口檢測、文件完整性檢測等。
Elasticsearch 將充當(dāng)整個(gè)系統(tǒng)的日志存儲庫。Elasticsearch 非常強(qiáng)大,具備很多功能。常與 Logstash(日志收集)和 Kibana(可視化)結(jié)合使用。Elasticsearch 為所有類型的數(shù)據(jù)存儲都提供了一個(gè)強(qiáng)大的平臺。
ElastAlert 是由 Yelp 發(fā)起的項(xiàng)目,為 Elasticsearch 提供告警機(jī)制。ElastAlert 通過 REST API 查詢 Elasticsearch 并有多個(gè)輸出來匹配告警。
TheHive 是一個(gè)可擴(kuò)展的、開源、免費(fèi)安全應(yīng)急響應(yīng)平臺,旨在讓任何安全從業(yè)人員能夠輕松地處理安全事件,并快速地采取行動。本質(zhì)上講 TheHive 是一個(gè)告警管理平臺,用于管理全部事件告警。
Cortex 與 TheHive 是一個(gè)團(tuán)隊(duì)開發(fā)的產(chǎn)品。Cortex 使用分析器獲取日志中有關(guān)指標(biāo)信息的其他數(shù)據(jù)。允許在第三方服務(wù)中查詢 IP、URL 與文件哈希等指標(biāo),并將第三方返回的結(jié)果作為附加信息豐富告警事件。
MISP 是 CIRCL 維護(hù)的開源威脅情報(bào)共享平臺,其 Feed 可以是某個(gè)組織提供的付費(fèi)訂閱,也可以是社區(qū)維護(hù)的開源訂閱,這也是數(shù)據(jù)豐富的主要來源。
首先部署 Elasticsearch 集群,系統(tǒng)使用 Ubuntu 16.04(文章使用虛擬機(jī)安裝,DHCP 為該虛擬機(jī)預(yù)留了地址,確保其始終使用相同的 IP 地址)。
作者提供了 Vagrantfile 幫助配置構(gòu)建 Elasticsearch 虛擬機(jī)。
注意:TheHive 正在進(jìn)行一些后端重構(gòu),這會導(dǎo)致設(shè)置復(fù)雜化。TheHive 背后的開發(fā)團(tuán)隊(duì)認(rèn)為 Elasticsearch 已經(jīng)不再滿足它們的需求了,4.0 版本后將在后端使用 GraphDB。當(dāng)前穩(wěn)定版本 3.2.1 版本以及我們在此使用的 beta 版本 3.3.0 都是用 Elasticsearch 5.6 作為后端。因此,在虛擬機(jī)中需要部署 Elasticsearch、Logstash 和 Kibana 6.6.1 作為日志存儲倉庫,另一個(gè) Elasticsearch 5.6.15 部署在 TheHive 虛擬機(jī)中作為后端。
雖然我總結(jié)了安裝步驟,但是如果需要進(jìn)一步了解細(xì)節(jié)可以查看安裝指南。
# 首先安裝 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 設(shè)置為自啟動 sudo systemctl daemon-reload sudo systemctl enable elasticsearch.service sudo systemctl enable logstash.service sudo systemctl enable kibana.service # 未來確定好兼容性,可以進(jìn)行升級 sudo apt-mark unhold elasticsearch
默認(rèn)情況下,Elasticsearch 依賴的 Java 堆的大小為 1 GB??梢酝ㄟ^修改 /etc/elasticsearch/jvm.options
中的 Xms1g 與 Xmx1g 參數(shù),將其增加到總內(nèi)存的 50-80%。我的虛擬機(jī)只有 4GB 內(nèi)存,所以我保留了默認(rèn)值。
編輯配置文件 /etc/elasticsearch/elasticsearch.yml
:
取消 cluster.name 和 node.name 的注釋,并設(shè)置為不同的名字
設(shè)置 bootstrap.memory_lock 為 True
設(shè)置 network.host 為 0.0.0.0
設(shè)置 discovery.type 為 single-node
編輯服務(wù) sudo systemctl edit elasticsearch.service
:
[Service] LimitMEMLOCK=infinity
然后繼續(xù)執(zhí)行:
# 重新加載 sudo systemctl daemon-reload # 重新啟動 sudo systemctl start elasticsearch.service # 檢查確保 Elasticsearch 可用 curl http://localhost:9200/_cat/health
應(yīng)該可以看到類似的響應(yīng):
1551641374 19:29:34 demo-cluster green 1 1 0 0 0 0 0 0 - 100.0%
編輯 Kibana 的配置文件:sudo nano /etc/kibana/kibana.yml
設(shè)置 Kibana 來響應(yīng)外部接口:server.host: 0.0.0.0
啟動服務(wù):sudo systemctl start kibana.service
打開瀏覽器:http://
應(yīng)該可以看到 Kibana 控制臺
按照如下命令執(zhí)行:
sudo apt install logstash sudo systemctl enable logstash.service sudo systemctl daemon-reload
注意:此時(shí) Logstash 沒有運(yùn)行。
這部分將講述如何安裝 Wazuh Manager,并將 Wazuh 與 Elasticsearch 進(jìn)行集成。
使用 Wazuh 的 Agent 及其規(guī)則集來識別端點(diǎn)的行為并生成告警。這些告警從 Wazuh 的 Agent 轉(zhuǎn)發(fā)到 Wazuh Manager 寫入 /var/ossec/logs/alerts/alerts.json
。Filebeat 的服務(wù)不斷監(jiān)視該文件的更改,然后轉(zhuǎn)發(fā)給 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 的默認(rèn)賬戶密碼是 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 服務(wù)器的真實(shí) IP。
啟動 Filebeat 服務(wù):
sudo systemctl daemon-reload sudo systemctl enable filebeat.service sudo systemctl start filebeat.service
為 Elasticsearch 加載 Wazuh 模板。在 Elasticsearch 主機(jī)上運(yùn)行此命令: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 遠(yuǎn)程安裝的 Logstash 配置文件,在 Elasticsearch 主機(jī)上運(yùn)行此命令:curl -so /etc/logstash/conf.d/01-wazuh.conf https://raw.githubusercontent.com/wazuh/wazuh/3.8/extensions/logstash/01-wazuh-remote.conf
確保使用新配置文件運(yùn)行 Logstash 服務(wù):sudo systemctl restart logstash.service
首先嘗試運(yùn)行 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
如果發(fā)現(xiàn)錯(cuò)誤:
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`
之所以運(yùn)行命令 npm update caniuse-lite browserslist
產(chǎn)生錯(cuò)誤,是因?yàn)楸緳C(jī)尚未安裝 Node。
卸載了插件并在沒有 NODE 選項(xiàng)的情況下運(yùn)行命令:sudo -u kibana /usr/share/kibana/bin/kibana-plugin install https://packages.wazuh.com/wazuhapp/wazuhapp-3.8.2_6.6.1.zip
。此時(shí)安裝將會成功,然后重新啟動。
根據(jù)你自己的系統(tǒng)情況按照說明進(jìn)行安裝,本文在 Linux 上進(jìn)行安裝。
安裝后,需要在 ossec.conf 中編輯 Wazuh Manager 的 IP 地址。Debian 的 Agent 安裝在 /var/ossec,編輯 sudo nano /var/ossec/etc/ossec.conf
改變 MANAGER_IP 即可。
我們使用簡單的,不安全的方法注冊 Agent:
在 Manager 上,運(yùn)行以下命令啟動注冊服務(wù):/var/ossec/bin/ossec-authd
在 Agent 上,使用 Manager 的 IP 地址運(yùn)行 agent-auth 程序
對于 Linux 來說:
/var/ossec/bin/agent-auth -m
對于 Windows 來說:
C:\Program Files (x86)\ossec-agent\agent-auth.exe -m
應(yīng)該可以看到如下輸出:
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.
此時(shí)連接到 Kibana,就會在左側(cè)工具欄中發(fā)現(xiàn) Wazuh 的圖標(biāo),點(diǎn)擊此按鈕跳轉(zhuǎn)到配置 API 的頁面:
Username: foo Password: bar Server: http://API Port: 55000
保存 API 配置,然后點(diǎn)擊跳轉(zhuǎn)到 Overview 頁面。點(diǎn)擊頁面頂端的 Agent 即可查看 ID 為 001 的 Agent,即之前注冊好的主機(jī)。它顯示為 Active 狀態(tài)即視為正常,否則可能需要在 Agent 上確保更改 MANAGER_IP 成功并重啟 Agent 的服務(wù)。
在 Kibana 中,深入到 Management > Elasticsearch > Index Management 應(yīng)該可以看到名為 wazuh-monitoring-3.x
的索引。然后轉(zhuǎn)到 Management > Kibana > Index Patterns,如果還沒有定義默認(rèn)索引模式,點(diǎn)擊 wazuh-monitoring,然后點(diǎn)擊右上角的星號將其設(shè)為默認(rèn)值。
點(diǎn)擊 Discover 查看已創(chuàng)建的事件,可能暫時(shí)還沒有。返回 Elasticsearch Index Management 頁面,等待名為 wazuh-alerts 的索引出現(xiàn)。我們試圖通過生成告警讓其出現(xiàn)。
作為測試,轉(zhuǎn)到另一個(gè)主機(jī)并嘗試使用虛假的用戶通過 SSH 登錄主機(jī):ssh fakeuser@
。這將會觸發(fā)主機(jī)的 auth.log 出現(xiàn)無效的登錄嘗試,這將被 Wazuh Agent 獲取,在新創(chuàng)建的 wazuh-alerts 索引中生成新條目。現(xiàn)在,我們就得到了一個(gè)存儲告警的倉庫。
部署 MISP 可以允許 Cortex 或者任何能夠發(fā)起簡單 REST 請求的程序查詢威脅指標(biāo),如 IP 地址、URL 與文件哈希。MISP 可以自主添加訂閱與查詢的源,返回的信息取決于訂閱源提供的數(shù)據(jù),而且訂閱源之間的差異很大。有些只是提供了數(shù)據(jù)列表,有些提供了大量額外的信息。
將 MISP 通過 Docker 進(jìn)行部署相比通過源碼安裝容易得多,哈佛安全小組提供了一個(gè)示例。請注意:如果將其部署到生產(chǎn)環(huán)境中,應(yīng)該使用 build.sh,這樣就可以在構(gòu)建之前更改默認(rèn)的 MySQL 密碼與 MISP_FQDN。
初始化 MISP 數(shù)據(jù)庫:docker run -it --rm -v /docker/misp-db:/var/lib/mysql harvarditsecurity/misp /init-db
。這可以啟動容器,運(yùn)行腳本使用必要的數(shù)據(jù)庫文件填充 misp-db 目錄,最后刪除容器。如果查看 misp-db 目錄,可以發(fā)現(xiàn)已經(jīng)新增了文件。
如果不生成 SSL 證書,Cortex 就不能請求 MISP,按照如下命令生成證書:sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /docker/certs/misp.key -out /docker/certs/misp.crt
,如果沒有特殊要求,可以接受所有默認(rèn)選項(xiàng)。
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
作為用戶名與密碼。系統(tǒng)會要求更改密碼,新的密碼至少包含 12 個(gè)字符,其中包含大寫字母和特殊字符。
在 Administration > Server Settings 與 Maintenance > MISP Settings 中設(shè)置 MISP.live
為 TRUE、MISP.disable_emailing
為 TRUE。
在 Sync Actions > List Feeds 的列表中選擇訂閱源進(jìn)行訂閱。我選了 malwaredomainlist,選中復(fù)選框然后點(diǎn)擊頂部的 Enable Feed 就可以了。在列表中可以看到該訂閱源,點(diǎn)擊向下箭頭就可以拉取所有事件,可以在 Administration > Jobs 處查看正在執(zhí)行的任務(wù)。
點(diǎn)擊放大鏡圖標(biāo),可以顯示 IP 的列表,復(fù)制其中任意一個(gè),之后會用到。
我們使用 Postman 來測試 API,在 File > Settings 中將 SSL certificate verification
設(shè)為 OFF。
在 MISP 中,在 Administration > List Users 中拷貝用戶的身份密鑰。在 Postman 中設(shè)置 Header 中的三個(gè)字段:
Accept application/json Contect-Type application/json Authorization
將用戶的身份密鑰粘貼到 Authorization 字段中。
在頂部將 REST 命令從 GET 改為 POST,API 設(shè)置為: https://localhost/attributes/restSearch
。
換到 Body 選項(xiàng)卡,點(diǎn)擊 Raw 按鈕并粘貼以下 JSON,將值替換為之前復(fù)制的 IP 地址:
{ "returnFormat": "json", "value": "8.8.8.8" }
應(yīng)該會接收到以下響應(yīng):
{ "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" } } ] } }
此時(shí),MISP 現(xiàn)在已經(jīng)可以響應(yīng)查詢請求,為 Cortex 的加入做好了準(zhǔn)備。返回訂閱列表可以添加更多訂閱源,在 Administration > Scheduled Tasks 中可以將 fetch_feeds 設(shè)置為 24 并點(diǎn)擊 Update All 就可以配置好定時(shí)拉取任務(wù)。
這篇文章部署的 TheHive 3.3.0 RC5 與 Cortex stable v2.1.2,而 TheHive 4.1 版本(預(yù)計(jì)在 2019 年第二季度發(fā)布)后將取消 Elasticsearch 作為后端,轉(zhuǎn)而使用 GraphDB。
注:后續(xù)使用 3.3.0 穩(wěn)定版安裝也可以正常使用。
# 添加倉庫與密鑰 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 # 設(shè)置服務(wù)自啟動 sudo systemctl daemon-reload sudo systemctl enable elasticsearch sudo systemctl start elasticsearch # 檢查響應(yīng) curl http://localhost:9200 # 如果安裝成功繼續(xù)安裝 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 # 設(shè)置服務(wù)自啟動 sudo systemctl daemon-reload sudo systemctl enable thehive sudo systemctl start thehive
打開瀏覽器,查看網(wǎng)站:http://
,應(yīng)該可以看到數(shù)據(jù)庫更新消息:
點(diǎn)擊 Update Database,如果沒有看到上面的消息而是看到了登錄框,意味著與 Elasticsearch 的連接中斷了,請檢測日志 \var\log\thehive
。
更新完成后,仍然有機(jī)會為管理員賬戶更改用戶名與密碼。還可以檢查 Elasticsearch 名為 the_hive_14
的索引:curl http://127.0.0.1:9200/_cat/indices?v
。
如果忘記了管理員的賬戶與密碼,請刪除此索引重新開始。
注:安裝 Cortex 3.0.0-RC1 會遇到一些問題,安裝 Cortex 2.1.3 則不會遇到。
在 TheHive 主機(jī)上安裝 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 拉取源代碼,為每個(gè) Analyzer 單獨(dú)安裝 requirements.txt 的依賴:
cd /etc/cortex git clone https://github.com/TheHive-Project/Cortex-Analyzers
本文的下載位置在:/etc/cortex
:
# 更改文件夾權(quán)限 chown -R root:cortex Cortex-Analyzers # 為所有 Analyzer 安裝依賴(兩行作為一條命令執(zhí)行) 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
安裝依賴不可避免地會出現(xiàn)一些錯(cuò)誤,解決此類辦法的好方法是挑選要安裝哪些 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://
。更新數(shù)據(jù)庫并創(chuàng)建管理員用戶登錄,就像安裝 TheHive 時(shí)做的那樣。
Cortex 中規(guī)定必須在組織賬戶下登錄才能啟用、管理 Analyzer,否則只能創(chuàng)建組織與用戶。
點(diǎn)擊 +Add Organization
創(chuàng)建一個(gè)新組織,切換到 Users 標(biāo)簽頁點(diǎn)擊 +Add User
創(chuàng)建一個(gè)新用戶,并且將新用戶分配給創(chuàng)建的組織并分配 OrgAdmin
角色。保存后,點(diǎn)擊 New Password
為剛創(chuàng)建的用戶設(shè)置密碼,按回車鍵保存。然后注銷賬戶,用新用戶登錄。點(diǎn)擊頂部的 Organization 標(biāo)簽頁,點(diǎn)擊 Analyzers 子選項(xiàng)卡,而不是頂部藍(lán)色的 Analyzers 選項(xiàng)卡。如果 Cortex 配置正確,應(yīng)該可以看到 Analyzers,按照我的配置安裝了 113 個(gè)可用的 Analyzer。
可以啟用以下幾個(gè) Analyzer,接受默認(rèn)配置:
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 密鑰或者進(jìn)行進(jìn)一步的配置。 點(diǎn)擊 Users 子選項(xiàng)卡并創(chuàng)建一個(gè)新用戶和 TheHive 集成。該用戶應(yīng)該分配 read & analyze
角色,這次可以不用為其設(shè)置密碼,點(diǎn)擊 Create API Key
并且拷貝該密鑰。
點(diǎn)擊頁面頂端的 +New Analysis
:
不用管 TLP 與 PAP
更改數(shù)據(jù)類型為 IP
添加 8.8.8.8
選中你啟用的 Analyzer 旁邊的框
點(diǎn)擊開始
修改 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 {} } }
重啟服務(wù)器,兩個(gè)服務(wù)再次啟動的時(shí)候就可以使用了。在 TheHive 點(diǎn)擊 +New Case
測試 Cortex:
給事件一個(gè)名稱與描述,然后打開這個(gè)事件,點(diǎn)擊 Observables 選項(xiàng)卡,點(diǎn)擊 +Add Observable
設(shè)置 Type = IP、Value = 1.1.1.1、Tag 為 test。只需要提供 tag 或者 description,不必二者都填。
在 Observable 列表中點(diǎn)擊該 IP 地址,這將打開一個(gè)新選項(xiàng)卡,包含相關(guān)數(shù)據(jù),也可以在底部看到 Analyzer:
點(diǎn)擊 Run All
,如果返回 Cortex 將會看到 Analyzer 在 Job History 標(biāo)簽頁中運(yùn)行。回到 TheHive,現(xiàn)在 Analyzer 應(yīng)該有了最后分析的時(shí)間與日期。返回 Observables 選項(xiàng)卡并刷新頁面,應(yīng)該可以在 Observables 下看到一個(gè)標(biāo)簽列表:
在 https://dl.bintray.com/thehive-project/binary/report-templates.zip 下載報(bào)告模版包。使用管理員帳號登錄 TheHive,點(diǎn)擊 Admin > Report templates 選擇 Import templates
,在其中選擇下載的包。
現(xiàn)在,在 Observables 中點(diǎn)擊最后分析時(shí)間時(shí)將會獲得包含分析結(jié)果的報(bào)告:
在 MISP 的頁面上點(diǎn)擊 Administration > Add User:
給用戶分配一個(gè)電子郵件,cortex@admin.test
將用戶添加到 ORGNAME 組織
分配角色 user
取消底部所有復(fù)選框
拷貝用戶 API 密鑰
在 Cortex 的頁面上點(diǎn)擊 Organization > Analyzers,在搜索框中輸入 misp,然后啟用 MISP_2_0
:
為 MISP 服務(wù)器提供描述
URL = https://
key = AuthKey from MISP user you created
cert_check: False
現(xiàn)在回到 MISP 頁面,點(diǎn)擊 Sync Actions > List Feeds。找到其中一個(gè)訂閱源,然后點(diǎn)擊右側(cè)放大鏡,從列表中選擇一個(gè) IP 并復(fù)制。
在 Cortex 中點(diǎn)擊 +New Analysis
,添加 IP 的數(shù)據(jù)類型,然后粘貼復(fù)制的 IP 地址。選擇 MISP_2_0
的 Analyzer 運(yùn)行。在 Job History 頁面點(diǎn)擊 View 將會看到復(fù)制的 IP 列表名與其他信息??梢栽?TheHive 中添加此 IP 為 Observables 進(jìn)行測試?,F(xiàn)在已經(jīng)將 TheHive、MISP 與 Coretx 集成在了一起。
最后一步是安裝 ElastAlert 從 Elasticsearch 中的事件中生成警報(bào)。ElastAlert 當(dāng)前版本要求 Python 2.7,本文安裝在了 Elasticsearch 主機(jī)上:
sudo apt install python-pip pip install elastalert
安裝位置在:/home/username/.local/bin/elastalert
,注:ElastAlert 也有 Docker 鏡像提供。
創(chuàng)建一個(gè)目錄來存儲配置和規(guī)則:mkdir -p ~/elastalert/rules
??梢岳」_配置文件或者制作自己的配置文件,復(fù)制如下必要的設(shè)置,保存為 ~/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
運(yùn)行 elastalert-create-index
在 Elasticsearch 中創(chuàng)建必要的索引。可以得到以下結(jié)果:
Elastic Version:6 Mapping used for string:{'type': 'keyword'} New index elastalert_status created Done!
在 TheHive 頁面中點(diǎn)擊 Admin > Users,創(chuàng)建一個(gè)名為 elastalert 的用戶,但不為其分配角色,并選中 elastalert
。點(diǎn)擊 Create API Key
并拷貝 API 密鑰。TheHive 的管理指南指出:“為了更好地審計(jì),一旦創(chuàng)建了用戶,就無法刪除該用戶,只能鎖定該賬戶”。
每條規(guī)則定義要執(zhí)行的查詢,觸發(fā)匹配的參數(shù)與每個(gè)匹配觸發(fā)的告警列表。本文中創(chuàng)建一個(gè)規(guī)則來識別失敗的 SSH 登錄,編輯規(guī)則文件 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: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 的部分。盡管可以在標(biāo)簽字段使用嵌套的字段名({match[data][srcip]}
),但對于 hive_observable_data_mapping 好像并不起作用。只能使用單個(gè)字段名('{match[srcip]}'
)。
我們需要修改 Logstash 主機(jī)上的 01-wazuh.conf 配置文件來解決這個(gè)問題。在 Logstash 主機(jī)上修改 01-wazuh.conf 文件 [data][srcip]
過濾器的部分,將 add_field => [ "@src_ip", "%{[data][srcip]}" ]
改為 add_field => [ "src_ip", "%{[data][srcip]}" ]
。geoip 過濾器的部分,將 source => "@src_ip"
改為 source => "src_ip"
。
現(xiàn)在日志中應(yīng)該已經(jīng)有了 src_ip
字段,可以通過 Kibana 進(jìn)行驗(yàn)證。在 Kibana 頁面中選擇 Management > Kibana > Index Patterns,選擇 wazuh-alerts 索引模式,點(diǎn)擊 Refresh 啟用新字段:
# 測試規(guī)則 elastalert-test-rule ~/elastalert/rules/failed_ssh_login.yaml # 運(yùn)行 ElastAlert elastalert --verbose --config ~/elastalert/config.yaml
針對運(yùn)行著 Wazuh Agent 的主機(jī)生成一些告警:連續(xù)運(yùn)行三次以下命令:ssh invaliduser@serverip
。
此時(shí)應(yīng)該可以看到 Kibana 中顯示了告警,ElastAlert 可以在下次運(yùn)行時(shí)接收這些告警:
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 下生成新告警:
點(diǎn)擊右側(cè) Page 圖標(biāo)預(yù)覽告警,可以為其分配一個(gè)模版,然后導(dǎo)入它:
這時(shí)已經(jīng)完成了全部任務(wù),Wazuh 生成的告警已經(jīng)能在 TheHive 中顯示為事件了。
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“如何使用Elasticsearch與TheHive構(gòu)建開源安全應(yīng)急響應(yīng)平臺”這篇文章對大家有幫助,同時(shí)也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關(guān)知識等著你來學(xué)習(xí)!