分享方式:


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

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

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

案例

本文說明如何使用 網路監看員、Suricata 和 Elastic Stack 設定環境,以執行網路入侵檢測。

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

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

Diagram that shows a simple web application scenario.

您可以在 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 的詳細資訊,請參閱 關於安裝的彈性網頁。

安裝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. 移至 以 http://localhost:5601檢視您的Kibana Web 介面。

    在這裡案例中,用於 Suricata 記錄的索引模式為 logstash-*

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

建立 Kibana 儀錶板

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

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

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

您也可以建立自己的視覺效果和儀錶板,專為您感興趣的計量量身打造。 深入瞭解如何從 Kibana的官方檔建立Kibana視覺效果。

Screenshot that shows a Kibana dashboard.

可視化 IDS 警示記錄

範例儀錶板提供 Suricata 警示記錄的數個視覺效果:

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

    Screenshot shows a map for geographic IP alerts.

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

    Screenshot that shows the most frequently triggered alerts.

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

    Screenshot shows the number of alerts.

  • 前 20 名 ScrIP - 警示前 20 名 DestIP - 警示前 20 名 SrcPort - 警示、 前 20 名 DestPort - 警示:餅圖,顯示觸發警示前 20 個 IP 的來源和目的地。 您可以篩選特定IP或埠,以查看觸發的警示數目和種類。

    Screenshot that shows pie charts of the top 20 IPs and ports that alerts were triggered on.

  • 警示摘要:匯總每個警示的特定詳細數據的數據表。 您可以自定義此資料表,以顯示每個警示感興趣的其他參數。

    Screenshot shows a summary table with details about individual alerts.

如需建立自定義視覺效果和儀錶板的詳細資訊,請參閱 Kibana的官方檔

推論

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

儀錶板可協助您快速找出網路內的趨勢和異常狀況。 您也可以使用儀錶板來檢查數據,以探索警示的根本原因,例如惡意使用者代理程式或易受攻擊的埠。 透過此擷取的數據,您可以做出關於如何:

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

後續步驟

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