使用 Azure 網路監看員 和開放原始碼工具執行網路入侵檢測
封包擷取是實作網路入侵檢測系統(IDS)並執行網路安全性監視的重要元件。 數個開放原始碼 IDS 工具會處理封包擷取,並尋找可能網路入侵和惡意活動的簽章。 藉由使用 Azure 網路監看員 提供的封包擷取,您可以分析網路是否有有害入侵或弱點。
其中一個這類開放原始碼工具是 Suricata,這是一種 IDS 引擎,會使用規則集來監視網路流量,並在發生可疑事件時觸發警示。 Suricata 提供多線程引擎,以提升速度和效率來執行網路流量分析。 如需 Suricata 及其功能的詳細資訊,請移至 Suricata 網站。
案例
本文說明如何使用 網路監看員、Suricata 和 Elastic Stack 設定環境,以執行網路入侵檢測。
網路監看員 提供您執行網路入侵偵測的封包擷取。 Suricata 會根據符合其威脅規則集的封包來處理封包擷取並觸發警示。 Suricata 會將這些警示儲存在本機電腦上的記錄檔中。
藉由使用彈性堆疊,您可以編製 Suricata 產生的記錄索引,然後使用它們來建立 Kibana 儀錶板。 儀錶板提供記錄的可視化表示法,以及快速取得潛在網路弱點見解的方法。
您可以在 Azure 虛擬機器 (VM) 上設定這兩個開放原始碼工具,以便在自己的 Azure 網路環境中執行此分析。
安裝 Suricata
在 VM 的命令行終端機上,執行下列命令:
sudo add-apt-repository ppa:oisf/suricata-stable sudo apt-get update sudo apt-get install suricata
若要確認您的安裝,請執行 命令
suricata -h
以查看命令的完整清單。
如需其他安裝方法,請參閱 Suricata 安裝快速入門指南。
下載新興威脅規則集
在這個階段,您沒有任何規則可供 Suricata 執行。 如果您想要偵測網路的特定威脅,可以建立自己的規則。 您也可以使用來自各種提供者的已開發規則集,例如來自Snort的新興威脅或 Talos 規則。 在本文中,您會使用免費可用的新興威脅規則集。
下載規則集,並將複製到目錄:
wget https://rules.emergingthreats.net/open/suricata/emerging.rules.tar.gz
tar zxf emerging.rules.tar.gz
sudo cp -r rules /etc/suricata/
使用 Suricata 處理封包擷取
若要使用 Suricata 處理封包擷取,請執行下列命令:
sudo suricata -c /etc/suricata/suricata.yaml -r <location_of_pcapfile>
若要檢查產生的警示,請閱讀 fast.log 檔案:
tail -f /var/log/suricata/fast.log
設定彈性堆疊
Suricata 產生的記錄包含網路上所發生狀況的寶貴資訊,但這些記錄檔並不是最容易讀取和了解的記錄檔。 藉由將 Suricata 與彈性堆疊連線,您可以建立 Kibana 儀錶板,以搜尋、圖表、分析及從記錄衍生見解。
安裝 Elasticsearch
彈性堆疊 5.0 版和更新版本需要 Java 8。 執行 命令
java -version
來檢查您的版本。 如果您沒有安裝 Java,請參閱 Azure 支援的 Java 開發工具套件檔。為您的系統下載正確的二進位套件:
curl -L -O https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.2.0.deb sudo dpkg -i elasticsearch-5.2.0.deb sudo /etc/init.d/elasticsearch start
您可以在 Elastic 網頁上找到安裝 Elasticsearch 的其他安裝方法。
使用此指令確認 Elasticsearch 正在執行:
curl http://127.0.0.1:9200
您應該會收到類似此範例的回應:
{ "name" : "Angela Del Toro", "cluster_name" : "elasticsearch", "version" : { "number" : "5.2.0", "build_hash" : "8ff36d139e16f8720f2947ef62c8167a888992fe", "build_timestamp" : "2016-01-27T13:32:39Z", "build_snapshot" : false, "lucene_version" : "6.1.0" }, "tagline" : "You Know, for Search" }
如需有關安裝 Elasticsearch 的詳細資訊,請參閱 關於安裝的彈性網頁。
安裝Logstash
執行下列命令來安裝 Logstash:
curl -L -O https://artifacts.elastic.co/downloads/logstash/logstash-5.2.0.deb sudo dpkg -i logstash-5.2.0.deb
將 Logstash 設定為從eve.json檔案的輸出讀取。 使用此命令建立 logstash.conf 檔案:
sudo touch /etc/logstash/conf.d/logstash.conf
將下列內容新增至該檔案。 請確定eve.json檔案的路徑正確。
input { file { path => ["/var/log/suricata/eve.json"] codec => "json" type => "SuricataIDPS" } } filter { if [type] == "SuricataIDPS" { date { match => [ "timestamp", "ISO8601" ] } ruby { code => " if event.get('[event_type]') == 'fileinfo' event.set('[fileinfo][type]', event.get('[fileinfo][magic]').to_s.split(',')[0]) end " } ruby{ code => " if event.get('[event_type]') == 'alert' sp = event.get('[alert][signature]').to_s.split(' group ') if (sp.length == 2) and /\A\d+\z/.match(sp[1]) event.set('[alert][signature]', sp[0]) end end " } } if [src_ip] { geoip { source => "src_ip" target => "geoip" #database => "/opt/logstash/vendor/geoip/GeoLiteCity.dat" add_field => [ "[geoip][coordinates]", "%{[geoip][longitude]}" ] add_field => [ "[geoip][coordinates]", "%{[geoip][latitude]}" ] } mutate { convert => [ "[geoip][coordinates]", "float" ] } if ![geoip.ip] { if [dest_ip] { geoip { source => "dest_ip" target => "geoip" #database => "/opt/logstash/vendor/geoip/GeoLiteCity.dat" add_field => [ "[geoip][coordinates]", "%{[geoip][longitude]}" ] add_field => [ "[geoip][coordinates]", "%{[geoip][latitude]}" ] } mutate { convert => [ "[geoip][coordinates]", "float" ] } } } } } output { elasticsearch { hosts => "localhost" } }
為eve.json檔案提供正確的許可權,讓 Logstash 可以內嵌檔案:
sudo chmod 775 /var/log/suricata/eve.json
執行此指令以啟動 Logstash:
sudo /etc/init.d/logstash start
如需安裝 Logstash 的詳細資訊,請參閱 官方的 Elastic 檔。
安裝 Kibana
執行下列命令以安裝 Kibana:
curl -L -O https://artifacts.elastic.co/downloads/kibana/kibana-5.2.0-linux-x86_64.tar.gz tar xzvf kibana-5.2.0-linux-x86_64.tar.gz
使用下列命令執行 Kibana:
cd kibana-5.2.0-linux-x86_64/ ./bin/kibana
移至 以
http://localhost:5601
檢視您的Kibana Web 介面。在這裡案例中,用於 Suricata 記錄的索引模式為
logstash-*
。如果您想要從遠端檢視 Kibana 儀錶板,請建立允許存取埠 5601 的輸入網路安全組 (NSG) 規則。
建立 Kibana 儀錶板
本文提供範例儀錶板,讓您檢視警示中的趨勢和詳細數據。 使用方式:
在 Kibana 的 [ 管理 ] 索引標籤上,移至 [ 已儲存的物件 ] 並匯入這三個檔案。 然後,在 [ 儀錶板] 索引標籤上,您可以開啟並載入範例儀錶板。
您也可以建立自己的視覺效果和儀錶板,專為您感興趣的計量量身打造。 深入瞭解如何從 Kibana的官方檔建立Kibana視覺效果。
可視化 IDS 警示記錄
範例儀錶板提供 Suricata 警示記錄的數個視覺效果:
依 GeoIP 發出警示:地圖,根據地理位置(由 IP 決定)顯示其國家/地區來源的警示分佈。
前10個警示:10個最常觸發的警示及其描述的摘要。 選取個別警示會將儀錶板篩選為與該特定警示相關的資訊。
警示數目:規則集觸發的警示總數。
前 20 名 ScrIP - 警示、 前 20 名 DestIP - 警示、 前 20 名 SrcPort - 警示、 前 20 名 DestPort - 警示:餅圖,顯示觸發警示前 20 個 IP 的來源和目的地。 您可以篩選特定IP或埠,以查看觸發的警示數目和種類。
警示摘要:匯總每個警示的特定詳細數據的數據表。 您可以自定義此資料表,以顯示每個警示感興趣的其他參數。
如需建立自定義視覺效果和儀錶板的詳細資訊,請參閱 Kibana的官方檔。
推論
藉由結合來自 網路監看員 和開放原始碼 IDS 工具的封包擷取,例如 Suricata,您可以針對各種威脅執行網路入侵偵測。
儀錶板可協助您快速找出網路內的趨勢和異常狀況。 您也可以使用儀錶板來檢查數據,以探索警示的根本原因,例如惡意使用者代理程式或易受攻擊的埠。 透過此擷取的數據,您可以做出關於如何:
- 回應並保護您的網路免受有害入侵嘗試的影響。
- 建立規則以防止未來入侵您的網路。
後續步驟
瞭解如何根據警示觸發封包擷取: