Snort-IPS-入侵防御系統安裝及部署小記


安裝環境為Ubuntu,使用源碼編譯方式安裝並導入社區Snort規則;通過Splunk做GUI展示,聯合防火牆做防御,依據Snort官網文檔操作。

Ubuntu 18和20上的Snort 3.0.1

用Splunk當SIEM

諾亞·迪特里希

內容

介紹

安裝Snort

配置網卡

安裝OpenApplD

安裝Snort規則集

啟用內置規則

將PCAP文件傳遞到Snort並將警報輸出到.csv

JSON警告輸出插件

snort啟動腳本

Splunk

使用Splunk

清理您的安裝

結論

附錄A:安裝示例插件

附錄B:更改安裝位置

附錄C:構建開發人員指南

附錄D:安裝BATS: Bash自動化測試系統

本作品根據知識共享屬性-非商業性- sharealike 4.0國際許可(CC BY-NC-SA 4.0)進行授權。

介紹

本指南向您展示了如何在Ubuntu上使用Splunk將Snort 3設置為網絡入侵檢測系統(NIDS)和安全信息和事件管理(SIEM)系統。本指南的目的是向您介紹組成基於Snort和Splunk的NIDS和SIEM的組件和選項,以便您可以修改Snort和Splunk以滿足您的特定需求。您可以通過復制和粘貼本指南中的各個步驟來安裝Snort和Splunk,而不需要花時間了解自己在做什么,這樣可以很好地工作。但是,如果您花時間理解為什么要執行每個步驟,那么您應該對Snort和Splunk的工作方式有更深入的理解。

關於Snort 3: Snort 3是基於規則的網絡入侵檢測和預防軟件(NIDS/NIPS)。它具有高度的靈活性和可配置性,可適應多種不同的情況,並且具有新的插件體系結構,允許開發人員創建自己的插件,以便在Snort的處理管道中使用。本指南將重點介紹Snort最常見的用法:作為一個獨立服務器,將網絡流量與一組規則(稱為規則集)進行比較,以檢測可疑和可能的惡意流量,並對可疑流量生成警報。

關於Splunk: Splunk是一個收集安全信息和事件管理(SIEM)的系統。存儲並允許您輕松地分析和可視化計算機生成的數據,包括由Snort創建的警報。本指南將使用Splunk以圖形方式顯示Snort警報,提供過濾和搜索功能,並幫助您基本了解Splunk是如何成為理解機器生成數據的強大工具的。

OpenApplD:OpenAppID允許Snort識別、控制和度量網絡上使用的應用程序。OpenApplD由一組匹配特定類型網絡數據的包(簽名)組成,包括第7層應用程序,如Facebook, DNS, netflix, discus,谷歌,以及使用這些服務的應用程序(chrome, http, https等)。您可以基於這些OpenApplD簽名創建規則,從而允許您阻止與某些應用程序相匹配的流量(例如,阻止所有Facebook流量)。

Snort 2 vs Snort 3: Snort 3是對Snort產品的完全重新設計,以解決Snort 2.9.x的一些限制。一些主要的要點是多線程、可擴展的插件架構、基於lua的配置文件、命令行shell和許多其他特性。更多信息可以在這里找到。

軟件要求:本指南已經在64位版本的Ubuntu server 18和20上進行了測試。這個指南還沒有在32位版本的Ubuntu服務器上測試過,因為Splunk服務器不能安裝在32位平台上。要啟動Splunk,在安裝它的驅動器上至少需要5gb的可用空間(通常是/opt/ Splunk)。

我還沒有在其他基於debian的系統(包括Raspberry Pi)上測試過本指南,盡管我收到報告說,在安裝和編譯先決條件時,只需做很少的修改就可以使其工作。

如果你必須安裝Snort在32位系統上,你有幾個選擇:安裝32位輕量級Splunk通用貨代(超濾),服務器通過日志回到你Splunk服務器,Snort json日志復制到另一個服務器進行索引,或者使用NFS共享日志目錄(安全地)Splunk服務器可以看到和索引方法。

對於尚未可用的全棧Snort 3.0 NIDS/NIPS,唯一需要的軟件是PulledPork,它執行規則集管理(自動下載最新的規則集以及其他管理工作)。一旦PulledPork被更新為適用於Snort 3.0,我將更新這個指南。

對於舊版本的Ubuntu,Snort 3不能方便地安裝在早期版本的Ubuntu上,因為默認存儲庫中沒有所需的支持軟件版本,所以當遇到錯誤時,您需要手動編譯所需的庫(比如GCC)。

警告:Snort 3是測試版軟件。不應該在生產系統中使用它。由於Snort 3目前正在開發中:自編寫本指南以來,您下載的Snort 3版本可能經歷了修改,從而導致編譯或配置方面的問題。

支持:請在Snort分發列表中尋求幫助:

大多數請求都應該發送到Snort用戶列表,除非與OpenApplD相關或與代碼基有關的問題。請閱讀如何問一個好問題了解郵寄名單禮儀

安裝Snort

首先,確保您的系統是最新的,並有最新的包列表:

sudo apt-get update && sudo apt-get dist-upgrade -y

確保你的系統有正確的時間和時區。這在稍后我們開始使用Splunk處理警報時非常重要。下面的命令將允許您選擇您的時區。在選擇您的地區和時區后,它將顯示當前時間。請確保這些都是正確的:

sudo dpkg-reconfigure tzdata

我們將下載大量的源文件壓縮包和其他源文件,我們希望將它們存儲在一個文件夾中:

mkdir ~/snort_src
cd ~/snort_src

安裝Snort 3先決條件。這些包的詳細信息可以在Snort3手冊的需求部分找到:

sudo apt-get install -y build-essential autotools-dev libdumbnet-dev \ libluajit-5.1-dev libpcap-dev zlib1g-dev pkg-config libhwloc-dev \ cmake

接下來安裝可選(但強烈推薦的軟件):

sudo apt-get install -y liblzma-dev openssl libssl-dev cpputest \ libsqlite3-dev uuid-dev

如果希望從包含Snort++開發人員指南的源樹構建最新的文檔,請安裝以下軟件包(純屬可選)。這些包的大小接近800mb可以跳過,除非你特別想要開發指南:

sudo apt-get install -y asciidoc dblatex source-highlight w3m

因為我們將從github庫中安裝Snort,所以我們需要一些工具(這一步在Ubuntu 20中是不必要的,因為這些庫已經安裝好了):

sudo apt-get install -y libtool git autoconf

需要安裝Snort DAQ(數據獲取庫)的幾個先決條件:

sudo apt-get install -y bison flex libcmocka-dev

如果您希望使用NFQ (IPS模式)以內聯模式運行Snort,請安裝所需的包;(如下所列的包是不需要的IDS模式或內聯模式使用afpacket)。如果你不確定,你應該安裝這些包:

sudo apt-get install -y libnetfilter-queue-dev libmnl-dev

下載和安裝safec用於對某些遺留C-library調用的運行時邊界檢查(這是可選的,但推薦):

cd ~/snort_src #直接從github下載較慢,已轉存至gitee wget https://gitee.com/deng_wenyi/snort3-ubuntu-install-source-code/repository/archive/master.zip
apt install unzip
unzip master.zip
mv snort3-ubuntu-install-source-code/libsafec-08112019.0-gad76c7.tar.gz ./
tar -xzvf libsafec-08112019.0-gad76c7.tar.gz cd libsafec-08112019.0-gad76c7/ ./configure make
sudo make install

 安裝PCRE:Perl兼容正則表達式。我們不使用Ubuntu庫,因為Ubuntu庫的版本更老。我們沒有使用pcre2,因為hyperscan無法與那個版本兼容。

cd ~/snort_src/
mv snort3-ubuntu-install-source-code/pcre-8.43.tar.gz ./
tar -xzvf pcre-8.43.tar.gz cd pcre-8.43 ./configure make
sudo make install

下載並安裝gperftools 2.7,谷歌的線程緩存malloc(用於chrome)。Tcmalloc是一個內存分配器,它針對高並發情況進行了優化,將提供更好的速度來平衡較高的內存使用。我們不希望從Ubuntu存儲庫中獲得tcmalloc版本(2.5版本),因為它與Snort不兼容。Tcmalloc是可選的,但建議:

sudo apt-get install -y libunwind-dev cd ~/snort_src mv snort3-ubuntu-install-source-code/gperftools-2.7.90.tar.gz ./
tar xzvf gperftools-2.7.90.tar.gz cd gperftools-2.7.90 ./configure make
sudo make install

Snort 3使用Hyperscan實現快速模式匹配。Hyperscan需要Ragel和Boost頭:

cd ~/snort_src mv snort3-ubuntu-install-source-code/ragel-6.10.tar.gz ./
tar -xzvf ragel-6.10.tar.gz cd ragel-6.10 ./configure make
sudo make install

Hyperscan需要Boost c++庫。請注意,我們沒有使用boost頭文件的Ubuntu存儲庫版本(libboost-all-dev),因為Hyperscan需要1.58或更高版本的boost庫,而且Ubuntu存儲庫版本太老了。下載Boost 1.72.0庫,但不安裝:

cd ~/snort_src #boost庫比較大(約120M),見百度網盤下載;或使用原鏈接下載 #鏈接: https://pan.baidu.com/s/1GOM1KXJDjBMsElGw7q3fRg 密碼: e4av
#--來自百度網盤超級會員V4的分享 wget https://dl.bintray.com/boostorg/release/1.72.0/source/boost_1_72_0.tar.gz
tar -xvzf boost_1_72_0.tar.gz

從源文件安裝hyperscan5.2.1,引用Boost頭文件源目錄的位置:

cd ~/snort_src mv snort3-ubuntu-install-source-code/hyperscan-5.2.1.tar.gz ./ tar -xvzf hyperscan-5.2.1.tar.gz mkdir ~/snort_src/hyperscan-5.2.1-build cd hyperscan-5.2.1-build/ cmake -DCMAKE_INSTALL_PREFIX=/usr/local -DBOOST_ROOT=~/snort_src/boost_1_72_0/ ../hyperscan-5.2.1 make sudo make install

如果你想測試Hyperscan工作,從構建目錄,運行:

cd ~/snort_src/hyperscan-5.2.1-build/ ./bin/unit-hyperscan

Snort對flatbuffers有一個可選的要求,這是一個內存高效的序列化庫(您可以在cmake過程中忽略“不是git庫”的錯誤):

cd ~/snort_src mv snort3-ubuntu-install-source-code/flatbuffers-v1.12.0.tar.gz ./
tar -xzvf flatbuffers-v1.12.0.tar.gz mkdir flatbuffers-build cd flatbuffers-build cmake ../flatbuffers-1.12.0
make
sudo make install

接下來,從Snort網站下載並安裝數據采集庫(DAQ)。注意,Snort 3使用的DAQ與Snort 2.9.x.x系列不同:

cd ~/snort_src git clone https://gitee.com/deng_wenyi/snort3-libdaq.git
cd snort3-libdaq ./bootstrap ./configure make
sudo make install

更新共享庫:

sudo ldconfig

現在,我們准備從github存儲庫下載、編譯和安裝Snort 3。如果您對啟用額外的編譯時功能感興趣,比如能夠處理大的(超過2 GB) PCAP文件,或者新的命令行shell,那么您應該運行./configure cmake.sh --help列出所有可能的選項。如果您想安裝到其他位置,請參閱附錄B。下載和安裝,默認設置:

cd ~/snort_src git clone https://gitee.com/deng_wenyi/snortadmin-snort3.git
cd snortadmin-snort3/ ./configure_cmake.sh --prefix=/usr/local --enable-tcmalloc cd build make
sudo make install

安裝的最后一步是驗證Snort是否安裝並可以運行。為此,我們向snort可執行文件傳遞-V這個標志:

/usr/local/bin/snort -V

您應該會看到類似如下的輸出:

root@UbuntuServer:~/snort_src/snortadmin-snort3/build# /usr/local/bin/snort -V ,,_ -*> Snort++ <*- o" )~ Version 3.0.3 (Build 5)
   ''''    By Martin Roesch & The Snort Team http://snort.org/contact#team
           Copyright (C) 2014-2020 Cisco and/or its affiliates. All rights reserved. Copyright (C) 1998-2013 Sourcefire, Inc., et al. Using DAQ version 3.0.0 Using LuaJIT version 2.0.4 Using OpenSSL 1.0.2g  1 Mar 2016 Using libpcap version 1.7.4 Using PCRE version 8.43 2019-02-23 Using ZLIB version 1.2.8 Using FlatBuffers 1.12.0 Using Hyperscan version 5.2.1 2020-12-13 Using LZMA version 5.1.0alpha

 如果您的輸出與上面的類似,那么恭喜您!Snort已安裝並正常工作。現在讓我們使用默認配置文件測試Snort:

snort -c /usr/local/etc/snort/snort.lua

您應該會看到以以下內容結束的輸出:

Snort successfully validated the configuration (with 0 warnings). o")~ Snort exiting

配置網卡

現代網卡使用卸載(例如LRO)來處理硬件中的網絡包重新組裝,而不是在軟件中重新組裝。對於大多數情況,這是首選的,因為它減少了系統上的負載。對於NIDS,我們希望禁用LRO和GRO,因為這會截斷較長的數據包(更多信息請參見Snort 2手冊)。

我們需要創建一個systemD服務來更改這些設置。首先確定使用ifconfig查看讓snort偵聽的接口的名稱。

注意:如果你使用的是Ubuntu 20: ifconfig已經被ip命令所取代(運行ip address show查看接口和ip地址)。

一旦知道了網絡接口的名稱,請檢查這些接口的大接收(LRO)和通用接收(GRO)的卸載狀態。在下面的示例中,我的接口名稱是ens3(根據系統類型,您通常也會看到ethoens160作為接口名稱)。

我們使用ethtool來檢查LRO/GRO的狀態

sudo ethtool -k ens3 | grep receive-offload

輸出:

generic-receive-offload: on large-receive-offload: off [fixed]

從這個輸出中,您可以看到啟用了GRO,LRO被禁用(“固定”意味着它不能被改變)。我們需要確保兩者都被設置為"off"(或off [fixed])。我們可以使用ethtool命令禁用LRO和GRO,但該設置不會在重新啟動時持久存在。解決方案是創建一個systemD腳本,在每次引導時自動設置這個值。

創建systemD腳本:

sudo vi /lib/systemd/system/ethtool.service

輸入以下信息,將ens3替換為您的接口名稱:

[Unit] Description=Ethtool Configration for Network Interface [Service] Requires=network.target Type=oneshot ExecStart=/sbin/ethtool -K ens3 gro off ExecStart=/sbin/ethtool -K ens3 lro off [Install] WantedBy=multi-user.target

文件創建完成后,啟用服務:

sudo systemctl enable ethtool sudo service ethtool start

這些設置現在將在重新引導時持久存在。您可以使用ethtool驗證設置,將顯示(off或offixed]是您想要看到的設置):

sudo ethtool -k ens3 | grep receive-offload

輸出:

generic-receive-offload: off large-receive-offload: off [fixed]

安裝OpenApplD

OpenApplD允許識別應用層(第7層)的流量。您可以創建操作應用程序層流量的規則(比如阻止facebook),並記錄檢測到的每種類型的流量統計數據

在社區的幫助下,Snort團隊創建了一個檢測器包,稱為應用程序檢測器包,可以下載和安裝。首先下載OpenAppID檢測器包並解壓縮文件

cd ~/snort_src/
wget https://snort.org/downloads/openappid/15607
mv 15607 15607.tar.gz tar -xzvf 15607.tar.gz
sudo cp -R odp /usr/local/lib/

如果您得到的錯誤是該文件不存在,那么可能是Snort團隊更新了規則集。瀏覽到https://snort.org/downloads#openappid,並下載snort-openappid.tar.gz

按照上面的方法下載和提取規則后,我們需要編輯Snort配置文件以指向這個odp目錄:

sudo vi /usr/local/etc/snort/snort.lua

在第89行(您的行號可能略有不同),您將看到"appid ="條目。您將需要在這里添加app_detector_dir選項,它指向我們上面解壓縮的odp文件夾的父文件夾。它應該是這樣的:

appid = { −− appid requires this to use appids in rules app_detector_dir = '/usr/local/lib', }

注意,縮進行必須有四個空格(而不是制表符)。現在我們想測試配置文件正確加載:

snort -c /usr/local/etc/snort/snort.lua --warn-all

此命令將驗證Snort是否可以正確讀取snort.lua文件,它不包含任何錯誤。運行此命令后,您應該看到以以下內容結束的輸出:

注:(Snort的異常等級,警告、錯誤、致命錯誤)(我產生了5個警告,但這無傷大雅)

... Finished /usr/local/etc/snort/snort.lua: WARNING: appid: no lua detectors found in directory '/usr/local/lib/custom/lua/*' -------------------------------------------------- pcap DAQ configured to passive. Snort successfully validated the configuration (with 1 warnings). o")~ Snort exiting

您可能會看到一個警告(非致命):WARNING: appid:在目錄"/usr/local/lib/custom/lua/"中找不到lua檢測器。

只要輸出以“Snort成功驗證了配置”結束,就可以忽略此警告。這個警告只是意味着您沒有任何本地開發的openAppld獲取腳本。

接下來,我們將創建一個簡單的規則來測試OpenAppID是否正常工作

sudo mkdir /usr/local/etc/rules sudo touch /usr/local/etc/rules/local.rules sudo vi /usr/local/etc/rules/local.rules

我們將在local.rules文件中生成兩個規則。第一個規則使用OpenApplID來檢查Facebook流量,第二個規則將檢測ICMP流量,這對於測試警報是否正確生成非常有用。這兩條規則很適合測試您的設置。將以下兩行粘貼到上面創建的local.rules文件中:

alert tcp any any -> any any ( msg:"Facebook Detected"; appids:"Facebook";sid:10000001; ) alert icmp any any -> any any (msg:"ICMP Traffic Detected";sid:10000002;)

現在運行Snort並加載local.rules文件,以確保正確加載這些規則(驗證規則的格式正確):

snort -c /usr/local/etc/snort/snort.lua \ -R /usr/local/etc/rules/local.rules

輸出應該以“Snort成功驗證了匹配”結束。你不應該有任何警告或錯誤.

如果您向上滾動輸出,您應該會看到這兩個文本規則已成功加載(在rule counts部分)。現在,讓我們在一個接口(更改下面的etho以匹配您的接口名稱)上以檢測模式運行snort,並將所有警報打印到控制台:

sudo snort -c /usr/local/etc/snort/snort.lua -R /usr/local/etc/rules/local.rules \ -i eth0 -A alert_fast -s 65535 -k none

"-k none"標志告訴Snort忽略錯誤的校驗和,而"-s 65535"標志則防止Snort處理過大的包。Stream和Frag解碼器會丟棄校驗和錯誤的數據包,而OpenApplD檢測器也不會處理這些數據包。通過包含這些標志,我們可以確保具有錯誤校驗和的數據包仍然被處理為警報。snort將加載配置,然后顯示:

Commencing packet processing ++ [0] eth0

這意味着snort目前正在監聽該接口上的所有流量,並將其與它加載的兩個規則進行比較。當流量與規則匹配時,snort將向控制台寫入警告。現在,從該計算機上的另一個窗口(打開一個新的終端窗口或第二個ssh會話),使用wget連接到facebook。這將觸發第一個規則:

wget facebook.com

在第一個控制台窗口中,您將看到類似於以下的警報輸出:

05/3021:26:48.482231 [**] [1:10000001:0] "Facebook Detected" [**] [Priority: 0] [AppID: Facebook] {TCP} 10.10.10.170:59632 −>
    185.60.216.35:80
05/3021:26:48.506197 [**] [1:10000001:0] "Facebook Detected" [**] [Priority: 0] [AppID: Facebook] {TCP} 185.60.216.35:80 −>
    10.10.10.170:59632 ...

使用ctrl-c停止Snort。您還可以在snort偵聽時(觸發local.rules文件中的第二條規則)與這台機器進行ping或從該機器發出ping以生成警報。這是測試Snort的好規則,但在實際生產使用過程中可能會產生一些干擾。

如果沒有看到生成的警報,請確保在此測試中,您正在運行snort的計算機上運行wget facebook.com,並且請求將從snort偵聽的接口發出。您可以從另一台計算機ping到snort(到讓snort偵聽的接口的ip地址)。

注:(如果無法使用ctrl-c停止Snort,可以嘗試ctrl-z)

如果希望收集OpenAppID統計信息(每個檢測器檢測到多少流量),則需要在snort.lua文件中啟用它,並使用"-l"標志,在標志后接"日志目錄"運行Snort。

首先創建一個日志目錄

sudo mkdir /var/log/snort

現在修改/usr/local/etc/snort/snort.lua使appid檢測器能夠記錄統計信息(第89行):

appid = { app_detector_dir = '/usr/local/lib', log_stats = true, }

現在運行snort,監聽接口,將數據記錄到/var/log/snort文件夾

(與之前的命令相同,我們只是添加了日志文件夾路徑"-l"標志)

sudo snort -c /usr/local/etc/snort/snort.lua -R /usr/local/etc/rules/local.rules \ -i eth0 -A alert_fast -s 65535 -k none -l /var/log/snort

在收集一些數據並停止Snort(像以前一樣使用ping和wget facebook.com生成數據,然后使用Ctrl-C停止)之后,您將在/var/log/snort看到appid_stats.log該文件為root用戶所有,因此讓所有人都可讀(我們將在后面一節中更改Snort自動編寫的文件的權限):

sudo chmod a+r /var/log/snort/appid_stats.log

現在可以查看snort收集的協議統計信息:

noah@snort3:~/snort_src$ cat /var/log/snort/appid_stats.log 1549218716,DNS,1576,1778
1549218716,Facebook,8727,630912
1549218716,OpenSSH,19523,2344
1549218716,SSH,19523,23445
1549218716,HTTPS,8727,630912
1549218716,SSL client,8727,630912
1549218716,ICMP,392,392
1549218716,__unknown,11028,139100

這是一個逗號分隔的文件,按照這個順序顯示時間(unixtime)、檢測器、發送字節(tx)和接收字節(rx)。如果不希望收集此數據,可以在snort.lua配置文件appid模塊中禁用log開啟選項。請注意,此數據與local.rules文件中由規則生成的警報不同。有關檢測器的更多信息,請參見OpenApplD檢測器指南

安裝Snort規則集

與Snort 2規則相比,Snort 3規則有更多的選項,盡管手動下載的v2規則或使用PulledPork(一個自動下載更新規則集的腳本)可以在Snort 3中使用,但應該使用專門為Snort 3創建的規則

目前PulledPork還不能與Snort 3一起工作,因此無法自動更新規則集。我期望在不久的將來改變,一旦有了,我將發布一個更新的指南。

有三組不同的Snort規則可供選擇(稱為規則集)。社區規則集是免費的,不需要登錄;注冊的規則集包含社區規則集和其他規則,需要在snort.org上擁有一個免費帳戶。訂閱者規則集是付費服務。訂閱方規則集的規則將在30天后添加到注冊的規則集。更多的信息在這里

本指南將假設您正在使用注冊的規則集。您需要在Snort.org上創建一個帳戶,還可以選擇在其中注冊各種snort郵件列表(電子郵件數量適中,通常有一些有趣的問題)。注冊並簽到之后,導航到規則下載頁面,下載最新的3.0規則(稱為snortrales-snapshot3xxx.tar.gz或類似的內容,取決於是否發布了新的版本)。將規則集保存到snort-src文件夾中。

我們需要創建一些文件夾來存儲規則集中的規則。這里我們在usr/local/etc/snort中創建了四個文件夾(如果您在上面為local.rules文件創建了第一個文件夾,那么它可能已經存在);

文件夾名稱 目的
rules  注冊規則集中的所有基本規則文件
builtin_rules 包含內置規則的引用和信息的規則文件
so_rules  這些是編譯后的規則。Snort 3還沒有這些功能,但很快就會實現
lists 白名單和黑名單。我們在本指南中沒有設置這些

創建這些文件夾:

sudo mkdir /usr/local/etc/rules sudo mkdir /usr/local/etc/builtin_rules sudo mkdir /usr/local/etc/so_rules sudo mkdir /usr/local/etc/lists

Snort的規則集包含三個文件夾:一個規則文件夾包含所有單獨的規則文件,一個內建文件夾包含關於構建到snort的規則的信息,以及一個etc文件夾,其中包含規則集生成的更新后的snort配置文件。從Snort的規則集中提取文件,將所有規則文件復制到snort規則文件夾中,將內置規則復制到內置文件夾中,並將snort配置文件復制到snort的程序文件夾中:

注:(此時應該去snort官網下載注冊規則集,並儲存在~/snort_src/目錄;因為下一步即將用到)

cd ~/snort_src/ #在此提供了注冊規則集的下載地址,但仍希望您去官方下載,因為它有可能會失效 wget https://www.snort.org/rules/snortrules-snapshot-3034.tar.gz?oinkcode=0e0795beeba6b8bd7c1d5b2727e48ad7a9202eb6 -O snortrules-snapshot-3034.tar.gz 

mkdir snortrules-3034
tar -xvzf snortrules-snapshot-3034.tar.gz -C ./snortrules-3034 cd snortrules-3034 #復制單個規則文件 sudo cp ./rules/*.rules /usr/local/etc/rules/ #復制內建規則文件 sudo cp ./builtins/builtins.rules /usr/local/etc/builtin_rules/ #復制新的配置文件(我們將覆蓋當前的配置)。 sudo cp ./etc/* /usr/local/etc/snort/

我們從etc文件夾復制了三個文件。file_magic.lua它告訴snort如何識別文件類型;snort_defaults.lua表示(配置snort的全局設置(系統范圍);snort.lua它是snort特定實例的配置文件。

每次運行Snort時,您將向Snort傳遞一個snort.lua文件,該文件描述您希望snort如何運行。這個文件會加載默認文件,它描述的系統配置,適用於每個different不同方式運行snort。

可以有多個different版本的snort.lua,但通常只有一個默認的配置。

我們現在將編輯這些文件。我們不需要對/usr/local/etc/snort/snort_defaults.lua進行任何更改。但是如果您查看從第23行開始的部分,您會注意到我們在上面創建的文件夾。這就是snort如何在這些文件夾中查找規則文件的方法。

注:(這兩段話及其繞口,勞資也沒聽懂,但是沒關系)

接下來,編輯snort.lua文件。這個文件是我們在啟動時傳遞給snort的配置文件,它還加載snort_defaults.lua文件。

sudo vi /usr/local/etc/snort/snort.lua

首先,讓我們配置我們的HOME_NET變量。這指的是我們正在保護的本地子網(規則使用此信息來確定警報是否匹配)。在這里設置您的本地子網信息以匹配您的子網。我的子網配置是10.0.0.0網絡與24位子網掩碼:

HOME_NET = '10.0.0.0/24'

設置EXTERNAL_NET“any”(一些指南希望你設置這個為除了所有子網的主網。但這會讓你錯過許多重要的警告)。

在第91行,您將看到appid插件沒有任何選項(意味着檢測器已加載,但未配置)。如果願意,可以像上一節那樣配置它。

注:(官方修改了配置文件,以前可能是在91行,但現在它在116行;像之前一樣配置appid的路徑並啟用日志文件即可)

在第169行,您將看到ips檢測器。如果你查看IPS設置,你會看到我們復制的所有規則文件,從第180行開始:

注:(ips檢測器在195行,“我們復制的所有規則文件”是從206行開始)

rules = [[ include $RULE_PATH/snort3-app-detect.rules include $RULE_PATH/snort3-browser-chrome.rules include $RULE_PATH/snort3-browser-firefox.rules include $RULE_PATH/snort3-browser-ie.rules ...

$RULE_PATH路徑在snort_defaults.lua中定義,引用/usr/local/etc/rules.您可以在第172行看到內置ips選項;稍后我們將啟用這些規則。現在,讓我們測試一下snort是否可以成功加載這些規則。讓我們通過運行snort來測試配置文件,並將路徑傳遞給這個修改后的snort.lua文件,就像我們之前做的:

snort -c /usr/local/etc/snort/snort.lua

 如果你出現了類似以下報錯:

Finished /usr/local/etc/snort/snort.lua: Loading ips.rules: FATAL: ips.rules:3 undefined variable name: RULE_PATH. Fatal Error, Quitting..

請移步我的另一篇文章:https://www.cnblogs.com/Deng-Xian-Sheng/p/14170498.html


如果你沒有任何錯誤,如果你向上滾動輸出,你可以看到規則被加載:

... -------------------------------------------------- rule counts total rules loaded: 12581 text rules: 12581 option chains: 12581 chain headers: 458
-------------------------------------------------- (lines ommited from output)... Snort successfully validated the configuration (with 0 warnings). o")~ Snort exiting

注意:規則集中的許多規則都被注釋掉了。本文對此進行了解釋,但主要原因是有些規則可能會產生誤報,所以Snort團隊已經注釋掉了這些規則,因為如果您在NIPS模式下運行Snort,它們可能會淹沒您的日志,或導致過多的流量中斷。

您可能希望使用以下標志來運行Snort,以便在測試和設置期間檢測問題:warn-allpedantic標志。從Snort 3手冊:

除非指定了–warn-*,否則不會發出警告。-warn-all 啟用所有警告,而 – pedantic會使這些警告致命

在運行Snort時,您不會希望使用–pedantic標志,因為簡單的flowbit警告(設置了flowbits,但沒有在規則中使用,這是一個常見問題)將生成警告並導致Snort出錯。不過,對於測試配置來說,這是一個很好的標志。

啟用內置規則

要啟用“啟用解碼器”和“檢查器”警報(這些警報檢測無法通過常規規則輕松檢測到的惡意流量),我們需要在snort配置文件中啟用這個選項:snort.lua,位於/usr/local/etc/snort/目錄中。另外,我們需要加載builtins.rules規則,這些規則包含每個警告的詳細信息,並將這些信息寫入控制台,編輯snort.lua:

sudo vi /usr/local/etc/snort/snort.lua

在第172行,通過刪除行首的兩個連字符,將enable_builtin_rules設置為true。以兩個連字符開頭的行是注釋(禁用的命令通常注釋,並且在加載時不會被snort解析)。刪除enable_builtin_rules前的兩個連字符來啟用這個選項。

在第181行,我們希望包含內置規則文件,因此我們將其作為一個include添加到規則數組中。我們需要在內置文件夾中引用這個文件如下:

include $BUILTIN_RULE_PATH/builtins.rules

請記住snort中的每個縮進snort.lua必須是四個空格(不是制表符),否則配置將無法加載。snort中的ips模塊snort.lua應該是這樣的:

ips = { -- use this to enable decoder and inspector alerts enable_builtin_rules = true, -- use include for rules files; be sure to set your path -- note that rules files can include other rules files --include = 'snort3-community.rules', -- The following include syntax is only valid for ... -- RULE_PATH is typically set in snort_defaults.lua rules = [[ include $BUILTIN_RULE_PATH/builtins.rules include $RULE_PATH/snort3-app-detect.rules include $RULE_PATH/snort3-browser-chrome.rules }

現在測試您對snort所做的更改snort.lua配置文件沒有錯誤:

snort -c /usr/local/etc/snort/snort.lua

向上滾動前面命令的輸出,您應該看到除了加載其他規則外,還加載了內置規則。也可以向上滾動,查看IPS 模塊已加載的所有規則文件。這里你可以看到一些已加載的規則文件,以及525條未加載的bultin規則:

Loading ips.rules: Loading ../builtin_rules/builtins.rules: Finished ../builtin_rules/builtins.rules: Loading ../rules/snort3-app-detect.rules: ... -------------------------------------------------- rule counts total rules loaded: 13106 duplicate rules: 448 text rules: 12581 builtin rules: 525 option chains: 13106 chain headers: 458
--------------------------------------------------

現在,讓我們加載前面用facebook和icmp規則創建的local.rules文件。我們將使用-R標志從命令行加載這個規則文件,而不是在配置文件中加載。加載規則文件並測試配置:

snort -c /usr/local/etc/snort/snort.lua \ -R /usr/local/etc/rules/local.rules

滾動回輸出,你會看到加載了local.rules文件,並在計數中添加了另外兩條規則:

Finished ips.rules: Loading rule args: Loading /usr/local/etc/rules/local.rules: Finished /usr/local/etc/rules/local.rules: Finished rule args: -------------------------------------------------- rule counts total rules loaded: 13108

請記住,由於復制了snort規則集的配置文件, facebook規則將不起作用。規則集中的snort.lua文件,默認情況下沒有啟用OpenApplD。我們可以通過編輯/usr/local/etc/snort/snort.lua簡單地重新啟用該文件,從第92行開始:

appid = { app_detector_dir = '/usr/local/lib', log_stats = true, }

像以前一樣進行測試,您可能會看到更多的警報記錄到您的控制台

sudo snort -c /usr/local/etc/snort/snort.lua \ -R /usr/local/etc/rules/local.rules \ -i eth0 -A alert_fast -s 65535 -k none -l /var/log/snort

注意:當前有一個bug,當注冊的規則集加載,Facebook規則將不會觸發。Snort開發團隊意識到了這一點,並正在努力解決它。

將PCAP文件傳遞到Snort,並將警報輸出到.csv

本節對您的設置不是必需的,但是它將介紹我們稍后需要的許多標志,它將提供一些pcap文件,可以為測試生成警報,並幫助您更好地理解Snort 3。

如果您正在尋找PCAP文件,可以用於從您的內置規則和社區規則生成警報測試的目的,我發現macdc 2012數據集是好的。開始下載兩個pcap文件:

 

cd ~
mkdir pcaps
cd pcaps

wget https://download.netresec.com/pcap/maccdc-2012/maccdc2012_00000.pcap.gz
gunzip maccdc2012_00000.pcap.gz

wget https://download.netresec.com/pcap/maccdc-2012/maccdc2012_00001.pcap.gz
gunzip maccdc2012_00001.pcap.gz

 

現在我們運行snort,告訴它加載我們下載的第一個pcap文件,加載所有規則(從snort.lua中),並將警告打印到控制台(如果向下滾動,我將分解這里使用的所有標志)。我不會加載我們的local.rules文件,因為它實際上只對測試snort是否正確工作有用。請注意,這可能需要一些時間來運行,大量的提醒將在屏幕上滾動。如果你沒有耐心,你可以使用ctrl-c來停止它(這在我的系統上運行大約3.5分鍾,產生42,392個警報):

snort -c /usr/local/etc/snort/snort.lua \
-r ~/pcaps/maccdc2012_00000.pcap -A alert_fast -s 65535 -k none

這些標志的作用如下:

標志 解釋
sudo snort  這是我們正在調用的snort二進制文件。
-c /usr/local/etc/snort/snort.lua 這是snort.lua配置文件。
r ~/pcaps/maccdc2012_00000.pcap pcap文件的路徑。
-A alert_fast 使用alert_fast插件輸出到控制台。
-s 65535 設置snaplen,使Snort不會截斷或丟棄過大的包。
-k none

忽略錯誤的校驗和,否則snort將丟棄帶有錯誤校驗和的包,它們不會被計算。

如果要同時處理多個pcap文件,修改最后一條命令,掃描同一目錄下的所有pcap文件,如下所示:

snort -c /usr/local/etc/snort/snort.lua --pcap-filter \*.pcap \
--pcap-dir ~/pcaps -A alert_fast -s 65535 -k none

我們在這里做了很多,讓我們分解這個命令:

標志 解釋
sudo snort  這是snort二進制程序
-c /usr/local/etc/snort/snort.lua 這是snort.lua配置文件
–pcap-filter *.pcap  這告訴snort如何識別位於pcap-dir中的pcap文件。
–pcap-dir ~/pcaps 這將告訴Snort pcap文件所在的目錄。
-A alert_fast 使用alert_fast輸出插件輸出到控制台。
-s 65535 設置snaplen,使Snort不會截斷或丟棄過大的包。
-k none  忽略錯誤的校驗和,否則snort將丟棄帶有錯誤校驗和的包,它們將不會被計算。

當我運行這個命令時,snort生成了137538個警報(請在末尾的輸出中查看模塊Statistics: Detection: total alerts)在2分30秒內(在輸出中查看摘要統計:時間:秒)。

1 --------------------------------------------------
2 Module Statistics
3 --------------------------------------------------
4 detection
5 analyzed: 8635943
6 hard_evals: 554185
7 raw_searches: 177185
8 cooked_searches: 306618
9 pkt_searches: 483803
10 alt_searches: 39
11 key_searches: 77449
12 header_searches: 221406
13 body_searches: 768
14 file_searches: 71801
15 total_alerts: 42392
16 logged: 42392
17 --------------------------------------------------
18
19 ...
20
21 --------------------------------------------------
22 Summary Statistics
23 --------------------------------------------------
24 timing
25 runtime: 00:03:41
26 seconds: 221.654928
27 pkts/sec: 39076
28 Mbits/sec: 32

您可以修改最后一個命令,以使用任何輸出插件(我們一直在使用alert_fast插件將事件打印到控制台),可以在命令行中指定它,就像上面使用-A標志所做的那樣,也可以在snort中啟用該插件snort.lua文件(第320行)。例如,要使用alert csv插件將警報數據保存到csv文件中,你需要修改snort.lua看起來像這樣(行232).

alert_csv =
{
file = true,
}

然后運行snort,如下所示:

sudo snort -c /usr/local/etc/snort/snort.lua -r ~/pcaps/maccdc2012_00000.pcap \
-s 65535 -k none -l /var/log/snort -q -m 0x1b

首先,您將注意到,在Snort處理PCAP文件時,屏幕上沒有輸出任何內容。當您運行上述命令時,您不會看到任何輸出打印到控制台,因為我們正在向csv文件寫入警報,並使用q標志抑制所有其他輸出。您可能會注意到一些與lua檢測器odp服務相關的錯誤,這些可以忽略。

您將注意到,我們沒有像以前那樣在命令行中指定輸出插件,這是因為我們在snort.lua中啟用了alert_csv插件。並在命令行中指定一個,將優先於在snort.lua中配置的任何輸出插件。我們正在使用的新標志如下所示:

新標志 解釋
-l /var/log/snort 應該保存輸出文件(本例中為csv文件)的文件夾。
-q 安靜模式,不顯示橫幅和狀態報告
-m 0x1b 這將寫入文件的umask設置為033。

umask:默認情況下,Snort使用的umask值為077,這將阻止所有者的任何人讀取。日志文件。當試圖使用其他工具攝取日志時,除非它們正在運行,否則會導致問題。在同一個用戶帳戶下(這是一個安全風險)。為了解決這個問題,我們使用-m標志傳遞一個新的umask 033(二進制為000 011 011,十六進制為oxb),這意味着您的日志文件將具有權限:rwxr-r-,允許每個人都能夠讀取這些文件。如果您有特定的安全需求,請將此設置更改為更具限制性。在Snort時,這些文件將由根用戶擁有

如上面所述運行(在本指南的后面部分,我們將使用非根用戶來運行Snort)。

當返回到命令提示符時,這意味着Snort已經完成了對pcap文件的處理。您應該在/var/log/snort/目錄中看到警報csv.txt。

使用wc-1(單詞計數)命令,我們可以看到從這些pcap文件中生成了多少警報。在這里,您可以看到文件中有42299行,因為每一行都是一個單獨的警報。您知道Snort生成了這么多事件:

noah@snort3:~$ wc -l /var/log/snort/alert_csv.txt
42299 /var/log/snort/alert_csv.txt

這個插件(和其他插件)有更多的選項。所有這些信息和更多信息都可以在Snort 3手冊中獲得。

JSON警報輸出插件

為了方便地將Snort 3警報日志文件導入所選的SIEM(如Splunk),需要使用alert json輸出插件將所有警報寫入json格式的文本文件。啟用json輸出插件很簡單,只需修改snort.lua文件即可(約262行):

sudo vi /usr/local/etc/snort/snort.lua

首先,通過在插件中的每行前面放置兩個破折號來禁用alert _csv插件,並啟用alert json插件,如下所示。您可以同時啟用這兩個插件,這樣就可以同時獲得表示相同警告的csv和json文件,但您可能不希望這樣。還要記住縮進使用4個空格代替制表符:

--alert_csv =
--{ --file = true, --} alert_json = { file = true, limit = 10, fields = 'seconds action class b64_data dir dst_addr \
dst_ap dst_port eth_dst eth_len eth_src eth_type gid icmp_code \ icmp_id icmp_seq icmp_type iface ip_id ip_len msg mpls pkt_gen \ pkt_len pkt_num priority proto rev rule service sid src_addr \ src_ap src_port target tcp_ack tcp_flags tcp_len tcp_seq \ tcp_win tos ttl udp_len vlan timestamp',
}

在alert json插件中,我們指定了三個選項:

1. 首先,我們使用file選項來允許將警報輸出到json格式的文件(而不是輸出到控制台)。

2. 接下來,我們指定limit選項來告訴Snort何時轉到新文件。當輸出文件達到10 MB時,將使用文件名中的當前unixtime創建一個新文件。為了進行測試,我們將這個值設置為10 MB,但是在生產系統上,您可能希望將這個值增加到100 MB或更大。

3.最后,我們指定fields選項,該選項標識警報的哪些特定字段應該包含在json輸出中。在本例中,我們選擇了每個可能的輸出字段。

注意:經過測試后,可以選擇刪除其中的一些字段(vlanmpls字段通常是不需要的,b64_data包含整個包的有效載荷,為了節省空間,可以刪除這些字段)。不要刪除seconds字段,並確保它始終是列出的第一個字段。這將允許Splunk正確地處理事件。

如果你像之前一樣運行Snort掃描pcap文件並輸出到csv文件(但現在啟用了alert json輸出插件,你會再次看到沒有輸出到控制台:

sudo snort -c /usr/local/etc/snort/snort.lua --pcap-filter \*.pcap \ --pcap-dir ~/pcaps -l /var/log/snort -s 65535 -k none -m 0x1b

一旦Snort完成了pcap文件的處理,就可以查看日志文件夾(上面用-l /var/log/snort指定),您將看到包含所有警報的json文件:

您將注意到有許多警報alert_json.txt.nnnnnnnnnn文件。這些數字表示創建文件的unixtime,每個文件都是我們在snort.lua中指定的10 MB

noah@snort3:~$ ls -lh /var/log/snort total 59M -rw-r--r-- 1 root root 4.4M Apr 26 17:26 alert_csv.txt -rw-r--r-- 1 root root 4.1M Apr 26 17:38 alert_json.txt -rw-r--r-- 1 root root 10M Apr 26 17:33 alert_json.txt.1587915232
-rw-r--r-- 1 root root 10M Apr 26 17:34 alert_json.txt.1587915252
-rw-r--r-- 1 root root 10M Apr 26 17:35 alert_json.txt.1587915314
-rw-r--r-- 1 root root 10M Apr 26 17:36 alert_json.txt.1587915397
-rw-r--r-- 1 root root 10M Apr 26 17:37 alert_json.txt.1587915473
-rw-r--r-- 1 root root 37K Apr 26 17:38 appid_stats.log

Snort啟動腳本

我們創建一個systemD腳本,以便在啟動時自動運行snort。出於安全原因,我們還將在啟動后以普通(非root)用戶的身份運行snort。首先創建snort用戶和組

sudo groupadd snort sudo useradd snort -r -s /sbin/nologin -c SNORT_IDS -g snort

刪除舊的日志文件(如果你想保留它們,可以移動它們):

sudo rm /var/log/snort/*

我們需要將‘snort’用戶權限授予日志目錄:

sudo chmod -R 5775 /var/log/snort sudo chown -R snort:snort /var/log/snort

創建systemD服務文件:

 sudo vi /lib/systemd/system/snort3.service

與以下內容(更改以太網適配器etho以匹配您的適配器):

[Unit] Description=Snort3 NIDS Daemon After=syslog.target network.target [Service] Type=simple ExecStart=/usr/local/bin/snort -c /usr/local/etc/snort/snort.lua -s 65535 \ -k none -l /var/log/snort -D -u snort -g snort -i eth0 -m 0x1b [Install] WantedBy=multi-user.target

您應該熟悉我們傳遞給Snort的所有標志,因為它們與我們在前面的示例中使用的標志相同。我們添加了-D標志,它允許Snort作為守護進程運行。如果您想運行不同的選項,可以在這里添加它們。下面是我們使用的所有標志的分類:

標志 解釋
/usr/local/bin/snort 這是到snort二進制文件的路徑。這里我們不使用sudo,因為腳本將以提升(root)權限啟動。
-c /usr/local/etc/snort/snort.lua 這是snort.lua的配置文件。
-s 65535 設置snaplen,使Snort不會截斷和刪除超大的包。
-k none 忽略錯誤的校驗和,否則snort將丟棄帶有錯誤校驗和的包,它們不會被計算。
-l /var/log/snort 文件夾的路徑,Snort將存儲它輸出的所有日志文件。
-D 作為守護進程運行
-u snort 在啟動之后(以及在執行任何需要提升特權的操作之后),切換到以“snort”用戶的身份運行。
-g snort 啟動之后,作為“snort”組運行。
-i eth0 要監聽的接口。
-m 0x1b 文件權限的Umask為033。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

啟用並啟動Snort systemD服務:

sudo systemctl enable snort3 sudo service snort3 start

檢查服務狀態:

service snort3 status

你的輸出應該類似於下面,顯示'active (running)':

noah@snort3:~/pcaps$ service snort3 status * snort3.service - Snort3 NIDS Daemon Loaded: loaded (/lib/systemd/system/snort3.service; enabled; vendor preset: enabled) Active: active (running) since Tue 2018-12-11 16:48:44 EST; 2min 57s ago

如果有任何問題,可以使用以下命令查看服務的完整輸出:

sudo journalctl -u snort3.service

Splunk

Splunk與我們的軟件,我們將使用SIEM(安全信息和事件管理)解決方案,將顯示圖形(通過web接口)的所有警報Snort已經生成,並會給我們一些強大的工具來搜索和理解這些警報,以及畫出更深層次的信息。Splunk是我們使用它的方式的免費(在成本上)軟件(盡管你可以購買與管理大型Splunk安裝相關的額外功能的許可證)。替代軟件是Elasticstack的ELK棧(這里我不使用它,因為配置更復雜)。

安裝Splunk:

你需要在Splunk的網站上創建一個免費帳戶來下載軟件和附加組件。導航到Splunk的主頁,點擊右上角的綠色Free Splunk按鈕,創建一個新帳戶(如果你已經有帳戶,也可以登錄)。在“Splunk Free”下,你將點擊“Download”鏈接。

在下載頁面上,單擊Linux選項卡,然后單擊.deb旁邊的立即下載按鈕(因為我們運行的是Ubuntu,一個基於debian的系統)。同意許可,然后點擊“立即開始下載”按鈕。下載頁面會自動打開一個窗口,以保存下載到您的本地系統。如果你想用wget下載安裝程序,你可以取消這個下載,然后單擊download via Command Line (wget)復制下載的wget字符串。下載大約是375mb。

一旦你的系統上安裝了Splunk安裝程序,你就需要安裝它。從你保存安裝程序的目錄:

 sudo dpkg -i splunk-8.*.deb

這將安裝Splunk到/opt/Splunk。注意,安裝Splunk卷時必須有5 GB的空閑空間,否則Splunk將無法啟動。Splunk存儲所有收集的日志數據的索引位於安裝位置的子文件夾中,因此請確保該卷上有足夠的空間用於收集所有數據

現在我們想要第一次啟動Splunk(接受許可並接受所有默認選項)。系統將提示您為Splunk創建一個新的admin用戶和密碼。保存這些憑證,因為我們稍后會使用它們登錄到web界面:

sudo /opt/splunk/bin/splunk start --answer-yes --accept-license

然后,我們希望將Splunk配置為在引導時自動啟動。我們也將為Splunk啟用systemD並啟動服務(不是Splunk systemD中的大寫S)。

sudo /opt/splunk/bin/splunk stop sudo /opt/splunk/bin/splunk enable boot-start -systemd-managed 1 sudo service Splunkd start

Splunk服務器現在監聽這個服務器的端口8000(如果您從本地機器連接,或者從另一台計算機通過這個系統的IP地址連接,則是http://localhost:8000)。用戶名和密碼是在安裝Splunk時設置的

Splunk目前使用的是免費企業試用許可證,提供所有企業特性60天,並允許您每天索引5gb的日志數據。一旦試用許可證過期,我們將失去的唯一影響此安裝的功能是刪除經過身份驗證的登錄。一旦您轉換為免費許可證,您將不會被提示登錄到Splunk web界面,

Splunk Enterprise提供了許多功能,包括自動更新Splunk實例和自動運行的Splunk應用程序的部署服務器,具有可配置權限的多個用戶帳戶,負載均衡,以及其他功能。

配置Splunk:

現在使用安裝過程中創建的用戶名和密碼登錄到Splunk實例。Splunk服務器正在偵聽端口8000 (http://localhost:8000)。

我們需要安裝一個Splunk插件(稱為附加組件),它允許我們輕松地獲取(收集)Snort 3創建的日志,並對它們進行規范化(確保字段命名與NIDS數據一致,以便Splunk應用程序可以輕松地顯示我們的數據)。

要安裝這個應用程序,請在Splunk實例的主頁上點擊“+Find More Apps”鏈接。

 

 這將帶你到Splunkbase,一個在線倉庫的Splunk插件,擴展和增強你的Splunk安裝的功能。在Splunkbase中搜索Snort3,您將看到一個結果:Snort3 JSON Alerts。點擊這個插件旁邊的綠色安裝按鈕:

 

當你注冊下載Splunk時,輸入你用Splunk創建的用戶名和密碼(而不是你為本地Splunk服務器實例創建的用戶名和密碼)。接受條款和條件,並點擊登錄和安裝,一旦安裝完成,點擊完成。

這個附加組件現在已經安裝在Splunk服務器上了。接下來,我們需要配置這個附加組件,以告訴Splunk Snort 3生成的日志文件存儲在何處,以便Splunk能夠接收它們。我們通過配置文件的命令行來實現這一點:

sudo mkdir /opt/splunk/etc/apps/TA_Snort3_json/local sudo touch /opt/splunk/etc/apps/TA_Snort3_json/local/inputs.conf sudo vi /opt/splunk/etc/apps/TA_Snort3_json/local/inputs.conf

在input .conf文件中輸入以下文本:

[monitor:///var/log/snort/*alert_json.txt*]
sourcetype = snort3:alert:json

重啟Splunk:

sudo service Splunkd restart

現在,當Splunk啟動時,它將掃描/var/log/snort目錄中的json文件,為它們分配snort3:alert:json的sourcetype,並獲取它們,以便我們可以搜索它們

從vour Splunk實例,登錄(因為您重新啟動了服務器),並單擊左側的Search & Reporting APP鏈接。在搜索欄中輸入以下文本:

sourcetype="snort3:alert:json"

然后點擊綠色放大鏡圖標開始搜索。

 

 這將顯示服務器正在收集的所有事件。您可能不會看到很多事件,特別是如果您刪除了我們從pcap文件中創建的舊ison文件。如果你沒有看到任何提醒,你可以使用ping和wget facebook.com創建一些新的提醒(記住我們之前創建過這些規則)。在Splunk中生成的事件和顯示的事件之間有輕微的延遲。如果您繼續沒有看到任何提醒,將時間范圍(搜索圖標旁邊的下拉菜單設置為過去24小時)更改為"所有時間"並重新運行搜索。如果仍然沒有看到任何事件,請檢查/var/log/snort文件夾中是否有json文件!!

使用Splunk

本指南並沒有深入介紹Splunk的使用。我下面提到的Splunk有很多很棒的免費資源

下面是一些簡單的搜索,你可能會發現對你的起步有幫助。要在包含時間、源、目標和消息的表中顯示所有事件,請執行以下搜索:

sourcetype="snort3:alert:json"
| table _time src_ap dst_ap msg

按目的地顯示所有事件的統計:

sourcetype="snort3:alert:json"
| stats count by dest

在地圖上顯示所有事件來源:

sourcetype="snort3:alert:json"
| iplocation src_addr | stats count by Country | geom geo_countries featureIdField="Country"

你可能需要點擊“可視化”選項卡,然后點擊“折線圖”,並將其更改為"地區分布圖")

一些優秀的免費資源使用Splunk:

電子書:探索Splunk:搜索處理語言(SPL)入門和食譜

免費的在線培訓:

清理您的安裝

Splunk目前在免費企業試用模式下運行,有效期只有60天。我們想將該許可證轉換為自由模式,它類似於企業模式,只是刪除了一些特性。您將注意到缺少的特性是使用用戶名和密碼登錄服務器的能力(允許任何人登錄)。您還失去了一些與集群相關的特性,以及將Splunk應用程序部署到其他服務器的能力(當您有多個服務器或系統可以收集日志時,這很有用)。

要更改許可證:單擊右上角的設置,然后單擊"授權":

單擊“更改許可證組”。選擇“Free許可證”,單擊“保存”。單擊“立即重新啟動”,然后單擊“確定”。如果您是從遠程計算機上登錄的,您應該注意到沒有提示您登錄這是故意的,但這可能會帶來安全風險(因為現在任何人都可以登錄到您的服務器上)。如果您在轉換許可證時已登錄到本地機器,則只允許本地登錄

結論

有關運行Snort 3和編譯選項的更多信息,請參閱Snort 3手冊。Snort 3與Snort 2.9.9x系列有很大不同。強烈推薦閱讀本手冊。配置文件和規則文件都是不同的,兩個版本之間不兼容。可以使用包含的snort2.lua命令將舊的Snort配置和規則文件轉換為Snort 3格式。反饋:請將您遇到的問題的反饋和修改指南的建議發送給我:mailto:NoahasublimeRobots.com,反饋可以幫助我更新這些指南。幫助我識別人們在執行這些說明時遇到的常見問題和問題。

注意:已省略附錄ABCD。原手冊在Snort官網。

翻譯不當,多多包含。

附錄A:安裝示例插件

附錄B:更改安裝位置

附錄C:構建開發人員指南

附錄D:安裝BATS: Bash自動化測試系統

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM