網路威脅與日俱增,單單建置防火牆已不足以防禦,因此企業都會建置入侵偵測系統來彌補防火牆的不足。本文將示範將主機型入侵偵測系統Maltrail部署於個別主機中,利用偵測主機上惡意封包流量的方式來即時發現主機潛在的資安問題。
隨著日常生活越來越依賴網路服務,對於資訊安全的要求也越發重視。企業除了建置防火牆設備外,往往也會建置入侵偵測系統(Intrusion Detection System,IDS)來彌補防火牆的不足。一般入侵偵測系統大致可分為網路型(NIDS)和主機型入侵偵測系統(HIDS)。NIDS通常部署於網路閘道(Gateway)上,利用監控來往封包的方式來偵測惡意的封包流量,而HIDS則是部署在個別主機上,利用監控主機上的程式(Process)和稽核紀錄(Log)等方式來判別是否有惡意的行為。
在本文中,將具有NIDS部分功能的主機型入侵偵測系統Maltrail部署於個別主機中,主要利用偵測主機上惡意封包流量的方式來即時發現主機潛在資安問題,而使用的作業系統為Centos 8。
Maltrail簡介
Maltrail(Malicious Traffic Detection System)是一套以Python語言所撰寫的偵測網路惡意流量檢測系統,主要用於偵測主機上的惡意封包流量。Maltrail除了利用比對惡意樣式的方式來判別網路封包是否為惡意的流量外,也使用公開的黑名單資訊,例如使用OpenPhish釣魚網頁收集網站(https://openphish.com/)所提供的公開資訊來辨別主機上是否有不適當的流量。目前,Maltrail可偵測下列型式的惡意流量包括以下幾項:
Domain型式
可偵測一般的惡意網域型式,例如zvpprsensinaix.com(這是一種屬於Banjori家族的惡意軟體)。
URL型式
可偵測如http://XXX.XXX.XXX/harsh02.exe(惡意執行檔)等型式的流量。
IP型式
可根據所使用的外部黑名單資訊,例如已知的惡意IP,來辦別是否為惡意的封包流量。
HTTP通訊協定
利用HTTP通訊協定所定義的User-Agent欄位資訊來判別是否為惡意的流量,該欄位為用來儲存使用者所使用的瀏覽器資訊。一般來說,如果攻擊者使用類似如網站弱點掃描之類的軟體,就會在user-Agent欄位上留下特殊的特徵字樣。以nikto為例,這是一套開源碼社群中有名的網站漏洞弱點掃描軟體(官方網站為http://www.cirt.net/code/nikto.shtml),許多攻擊者在攻擊之前會先使用此類軟體對目標網站進行弱點掃描,來查看是否有相關可利用的漏洞。而此類的HTTP封包流量上的user-Agent欄位便會有nikto字樣,Maltrail即可利用此特徵來判別網站是否遭受到惡意的掃描。
動手安裝Maltrail
除了提供優異的惡意流量偵測功能外,Maltrail另外更提供豐富的圖表化介面,讓使用者能更加便利地取得相關資訊。在簡單的說明相關特性後,接下來安裝Maltrail。
首先安裝所需要的套件,主要是處理封包流量及管理程式相關的軟體套件,執行如下指令:
yum install libpcap-devel yum install procps yum install schedtool
接著,執行下列指令以安裝Python相關軟體套件:
yum install python3-devel pip3 install pcapy-ng
最後,至Maltrail官方網站取得最新版本,執行下列指令來下載相關的程式及組態檔:
git clone --depth 1 https://github. com/stamparm/maltrail.git
認識Maltrail運作方式
Maltrail依系統運作的架構來區分,可分為Sensor及Server兩種角色,如圖1所示。
其中,Sensor角色主要負責偵測惡意網路封包流量,並將相關資訊傳送至Server上。Server基本上可視為一個網站伺服器,在取得Sensor所傳送的資料後,即以圖形化的介面呈現。而後,使用者即可利用瀏覽器連線去取得相關資訊。
為了方便說明起見,本文將在同一台主機上同時運作Sensor與Server角色。在簡單瞭解Maltrail的架構後,接著說明相關組態檔「maltrail.conf」,可用來設定Server與Sensor在運作時的相關組態。
Server運作組態說明
首先說明Server運作組態,相關組態值會設定於[Server]區段中,常用的設定,如下所述:
HTTP_ADDRESS [IP位置]
設定伺服器主機所在的IP位置。
HTTP_PORT [通訊埠資訊]
設定伺服器所使用的通訊埠,預設為8338。
USE_SSL [true或false]
設定伺服器是否使用SSL加密連線,包括True(使用SSL加密連線)和False(不使用SSL加密連線)兩個選項。
USERS [使用者帳號名稱:密碼]
伺服器採用帳號和密碼的驗證方式,使用者須輸入正確的帳號及密碼資訊,方可登入查看Sensor的相關資訊,而此組態即是設定相關的帳號及密碼資訊。其中密碼資訊採用SHA256演算法加密。例如「admin:[SHA256加密密碼字串]」,就表示使用者的帳號為admin。
在預設的情況下,Maltrail提供了一組帳號為admin,密碼為changeme!的預設帳號密碼。如果使用者想要更改預設密碼,利用「echo -n ‘密碼字串’| sha256sum | cut -d " " -f 1」指令即可產生一組新的加密密碼字串,如圖2所示,便會產生一組密碼為「mypasswd」的加密字串,再將此字串設定於相對應的位置,即可更改預設的密碼。
USE_SERVER_UPDATE_TRAILS [true或false]
在一般的情況下,Maltrail通常會長時間的運作。在這段時間中,其所參考的外部資料很可能會有不少的變動,但若未特別的設定,在啟動之後就不會繼續更新相關的外部資料,而此組態則是用來設定是否要於運作的期間進行自動更新。若設定為true,表示在運作的過程中將會自動定時更新外部資料。
Sensor常用組態介紹
在簡單說明過Server角色的相關組態後,接著就來介紹Sensor角色的常用組態設定:
PROCESS_COUNT [CPU的核心數量]
設定CPU所支援的核心數量,可依據所在主機上的CPU支援的核心數量來設定適當的數量,以發揮多核心的處理優勢。
USE_FEED_UPDATES [true|false]
設定是否要在運作期間可動態地更新外部資訊(FEED),設定為true,表示要動態更新相關的資訊。
UPDATE_PERIOD [秒數]
當USE_FEED_UPDATES組態設定為true,此組態即為設定欲更新的時間區隔(單位為秒),預設為86400,表示每天更新所參考的外部資訊。
DISABLED_FEEDS [FEED名稱]
可在此組態設定不使用的FEED資料,可採用逗號分隔的方式來表示多個FEED資料,例如「DISABLED_FEEDS turris, ciarmy」,表示不使用上述兩個FEED的資料。
CUSTOM_TRAILS_URL [URL]
如果使用者欲使用其他的外部資料參考,可在此設定欲使用的外部資料所在位置(URL)。
CUSTOM_TRAILS_DIR [資料存放目錄]
設定所取得外部資料置放於本地端的目錄位置。
CAPTURE_BUFFER [記憶體百分比或使用容量]
設定在擷取網路封包進行分析時,所能使用的系統實體記憶體容量限制。此組態有百分比、絕對數字兩種設定方式。百分比方式是以百分比來表示使用容量的限制。例如設定10%,表示最多使用系統實體記憶體中的百分之十,而絕對數字這種方式以設定數字的方式來表示使用容量的限制,例如設定512MB,代表僅能使用512M位元組的記憶體容量。
MONITOR_INTERFACE [網路介面代號]
設定Maltrail擷取網路封包資料時所使用的網路介面卡(例如eth0),或以any來設定主機上所有的網路介面均可擷取網路封包。
CAPTURE_FILTER [過濾規則]
Maltrail可擷取完整的網路封包資訊,但很多時候未必需要封包的所有內容,因此可在此組態中利用正規化標記法的方式來設定欲擷取封包的樣式,其規則與有名的tcpdump(官方網址為https://www.tcpdump.org/)的擷取封包規則一致。
SENSOR_NAME [SENSOR名稱]
可在此組態設定相對應的名稱,以便區分不同的Sensor裝置。
SYSLOG_SERVER [syslog伺服器位置]
Maltrail支援Syslog資訊輸出功能,可在此組態中設定Syslog伺服器。可將相關的資訊以Syslog格式儲存在Syslog伺服器上。
USE_HEURISTICS [true|false]
設定是否要啟用啟發式演算法,預設為true。
LOG_DIR [稽核紀錄檔所在目錄]
設定相關稽核紀錄檔案所儲存的目錄位置。
執行Maltrail補捉事件
介紹完相關組態檔的用法後,接下來執行Maltrail,在此將在同一台主機上同時啟用Sensor和Server角色。首先啟用Sensor,使用如下指令:
python3 sensor.py
這可能需要一點時間,因為要載入大量的外部資料。在啟動成功後(會輸出running等字樣),主機已可針對相關網路卡流經的封包進行惡意封包的偵測與記錄。接著,再執行啟用Server功能,執行指令如下:
python3 server.py
同樣地,在啟動成功後(會輸出running等字樣),就會提供網站伺服器的功能,以提供使用者利用瀏覽器連線,在沒有更改預設帳號∕密碼的情況下,使用者可利用預設帳號(admin)和密碼(changeme!)即可登入。如圖3所示。
接著做個小測試,觀察Maltrail是否有正常運作。利用nslookup指令,查詢一個惡意的網域:
nslookup morphed.ru
如果Maltrail可順利補捉到此事件,如圖4所示,就表示系統已成功建置。
<本文作者:吳惠麟,多年資安經驗,喜好利用開源碼建構相關解決方案,著有「資訊安全原理與實驗」等書。>