透過使用 Azure 網路監看員和開放原始碼工具執行網路入侵偵測

封包擷取是實作網路入侵偵測系統 (IDS) 和執行網路安全性監視的重要元件。 數個開放原始碼 IDS 工具可處理封包擷取並尋找可能的網路入侵和惡意活動的簽章。 透過使用 Azure 網路監看員提供的封包擷取,您可以分析您的網路找出有害的入侵或安全性弱點。

一種開放原始碼工具是 Suricata,這是使用規則集監視網路流量且在可疑事件發生時就會觸發警示的 IDS 引擎。 Suricata 提供多執行緒的引擎,以更高的速度和效率執行網路流量分析。 如需 Suricata 及其功能的詳細資訊,請移至 Suricata 網站

案例

本文說明如何使用網路監看員、Suricata 和彈性堆疊來設定您的環境,以執行網路入侵偵測。

網路監看員為您提供用來執行網路入侵偵測的封包擷取。 Suricata 會根據比對的威脅規則集處理封包擷取和觸發警示。 Suricata 會將這些警示儲存在本機電腦上的記錄檔。

藉由使用彈性堆疊,您可以編製 Suricata 產生的記錄索引,然後使用它們來建立 Kibana 儀表板。 儀表板提供記錄的視覺效果表示法,以及快速取得潛在網路弱點見解的方法。

顯示簡易 Web 應用程式案例的圖表。

您可以在 Azure 虛擬機器 (VM) 上設定這兩個開放原始碼工具,以便可以在自己的 Azure 網路環境中執行這項分析。

安裝 Suricata

  1. 在您 VM 的命令列終端機,執行下列命令:

    sudo add-apt-repository ppa:oisf/suricata-stable
    sudo apt-get update
    sudo apt-get install suricata
    
  2. 若要確認您的安裝,請執行命令 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

  1. 彈性堆疊 5.0 版及更新版本需要 Java 8。 執行命令 java -version 來檢查您的版本。 如果您尚未安裝 Java,請參閱 Azure 支援的 Java 開發套件上的文件。

  2. 針對您的系統下載正確的二進位套件︰

    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

  3. 使用此命令驗證 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 的詳細資訊,請參閱關於安裝的 Elastic 網頁

安裝 Logstash

  1. 執行下列命令安裝 Logstash:

    curl -L -O https://artifacts.elastic.co/downloads/logstash/logstash-5.2.0.deb
    sudo dpkg -i logstash-5.2.0.deb
    
  2. 設定 Logstash 以從 eve.json 檔案的輸出讀取。 使用此命令建立 logstash.conf 檔案:

    sudo touch /etc/logstash/conf.d/logstash.conf
    
  3. 將下列內容新增至該檔案。 請確定 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"
    }
    }
    
  4. 提供正確權限給 eve.json 檔案,以便 Logstash 可內嵌檔案:

    sudo chmod 775 /var/log/suricata/eve.json
    
  5. 執行此指令以啟動 Logstash:

    sudo /etc/init.d/logstash start
    

如需安裝 Logstash 的更多指示,請參閱正式 Elastic 文件

安裝 Kibana

  1. 執行下列命令以安裝 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
    
  2. 使用下列命令執行 Kibana:

    cd kibana-5.2.0-linux-x86_64/
    ./bin/kibana
    
  3. 若要檢視 Kibana Web 介面,請移至 http://localhost:5601

    此案例中,用於 Suricata 記錄的索引模式是 logstash-*

  4. 如果您想要從遠端檢視 Kibana 儀表板,建立允許存取連接埠 5601 的輸入網路安全性群組 (NSG) 規則。

建立 Kibana 儀表板

本文提供範例儀表板,讓您檢視警示中的趨勢和詳細資料。 使用方式:

  1. 下載儀表板檔案視覺效果檔案,以及儲存的搜尋檔案

  2. 在 Kibana 的 [管理] 索引標籤上,移至 [儲存的物件] 並匯入這三個檔案。 然後,在 [儀表板] 索引標籤上,開啟並載入範例儀表板。

您也可以針對自己感興趣的計量,量身製作自己的視覺效果和儀表板。 從 Kibana 的正式文件深入了解如何建立 Kibana 視覺效果。

顯示 Kibana 儀表板的螢幕擷取畫面。

以視覺化方式檢視 IDS 警示記錄

範例儀表板會提供 Suricata 警示記錄的數個視覺效果︰

  • 依 GeoIP 發佈警示:根據地理位置 (由 IP 判斷),依其來源國家/地區顯示警示分布的地圖。

    顯示地理 IP 警示地圖的螢幕擷取畫面。

  • 前 10 個警示:10 個最常見的觸發警示及其描述摘要。 選取個別警示篩選儀表板到該特定警示的相關資訊。

    顯示最常觸發警示的螢幕擷取畫面。

  • 警示數目:依規則集觸發的警示總計數。

    顯示警示數目的螢幕擷取畫面。

  • 前 20 個 ScrIP - 警示前 20 個 DestIP - 警示前 20 個 SrcPort - 警示前 20 個 DestPort - 警示:顯示觸發警示的前 20 個 IP 和連接埠之來源和目標的圓形圖。 您可以在特定的 IP/連接埠篩選,以查看所觸發警示的數目和類型。

    顯示觸發警示的前 20 個 IP 和連接埠之圓形圖的螢幕擷取畫面。

  • 警示摘要:彙總每一個警示的特定詳細資料的資料表。 您可以自訂這個資料表,以顯示每個警示的其他感興趣參數。

    顯示摘要資料表的螢幕擷取畫面,其中包含個別警示的詳細資料。

如需建立自訂視覺效果和儀表板的詳細資訊,請參閱 Kibana 的官方文件

結論

藉由結合來自網路監看員所提供的封包擷取和開放原始碼 IDS 工具 (例如 Suricata),您可以執行各式各樣威脅的網路入侵偵測。

儀表板可協助您快速找出網路內的趨勢和異常狀況。 您也可以使用儀表板來判斷資料,以探索警示的根本原因,例如惡意使用者代理程式或易受攻擊的連接埠。 透過此擷取的資料,您可以依照下列做法做出明智的決策:

  • 回應並保護您的網路免受有害入侵嘗試的影響。
  • 建立規則以防止未來入侵您的網路。

後續步驟

了解如何根據警示觸發封包擷取: