


摘? ?要:Snort是一個輕量級的開源網絡入侵檢測系統,其作為入侵檢測工具在入侵防范方面得到了廣泛的應用。針對當前服務器容易受到不被日志機制、監測系統和入侵檢測系統捕捉的隱蔽端口掃描攻擊,文章基于Snort入侵檢測系統,分析了端口掃描的基本特征,進行自定義Snort規則,以達到對隱蔽端口掃描攻擊的檢測和報警效果,更加促進應用層實現安全過濾。
關鍵詞:Snort入侵檢測;端口掃描;入侵防范
中圖分類號: D918? ? ? ? ? 文獻標識碼:A
1 引言
端口掃描是一種收集信息型的網絡攻擊,以向目的主機TCP/IP服務端口發送探測數據包的方式進行初步測試,再通過分析目的主機響應的數據包獲取服務端口狀態、服務器版本、用戶漏洞等重要信息,并可通過端口掃描捕獲目的主機流出的IP數據包監視其運行情況。端口掃描技術作為惡意攻擊的前奏,當這些重要信息泄露,將會嚴重威脅用戶的網絡,并且隨著端口掃描技術的發展,端口掃描越來越隱蔽,難以發現,再加上檢測過濾產品由于應用環境的復雜性,客觀上常難以滿足實際應用環境的需要。因此,針對服務器環境的需要來配置對端口掃描的檢測和防護是有必要的,通常可基于經典入侵檢測工具Snort,結合針對性的規則實現。
Snort入侵檢測功能是基于它的規則庫,規則庫中通過一種簡單的規則描述語言,記錄網絡攻擊表現的一些特征。根據鑒別的數據包是否匹配規則描述的特征判斷是否是攻擊行為,結合基于Snort檢測機制,達到檢測防范效果。
2 端口掃描特征分析及演示
2.1 特征分析
互聯網上大多數應用是基于TCP/IP協議,故對端口掃描的特征分析需基于TCP/IP協議,從分析TCP連接“三次握手”“四次揮手”以及相關數據包為出發點,了解端口掃描基本特征。
TCP連接只存在請求和響應,請求和響應都是對應的數據報文。報文包含一些重要字段用于表示連接狀態,有SYN、ACK、FIN、RST、URG、PSH。SYN用于初始化連接;ACK可以確認收到的數據;FIN作為斷開連接標志;RST用于重新建立連接;URG指示數據時緊急數據,應立即處理;PSH用于強制將數據壓入緩沖區[1]。故“三次握手”就是在客戶端和服務端之間三次TCP報文交換的過程,如圖1所示;“四次揮手”就是結合客戶端和服務端雙方的狀態來闡明鏈接釋放的過程,如圖2所示。
基于以上信息,對以下端口掃描方式進行特征分析有幾點。
(1)TCP content()掃描。此掃描嘗試與每一個TCP端口進行“三次握手”通信(SYN、SYN/ACK和ACK),會產生大量的連接請求以及錯誤信息。若能夠成功建立連接,表明端口開放,反之端口關閉。
(2)TCP SYN 掃描。此掃描不需要建立一個完全的TCP連接但需要Root權限,是一個半開放的掃描。其通過掃描器發送一個SYN包,當目標主機端口返回一個SYN/ACK信息時,表明該端口處于偵聽狀態,若返回一個PRST則反之。當收到一個SYN/ACK,掃描器需返回一個RST關閉該連接,一般情況下可避免在目標主機上留下掃描痕跡[2]。
(3)TCP FIN掃描。此掃描方式不依賴“三次握手”的過程,而是利用TCP連接“FIN”結束標志位。主機端口關閉時會用適當的RST回復FIN數據包,而開放的端口則會對這種可疑的數據報不加理睬并將其丟棄,此掃描是基于該思想來進行,該類掃描相關報文常包含大量的“FIN”結束位標志。該方式可用于通過被一些防火墻和包過濾器進行監視的指定端口。
(4)Xmas-Tree掃描。正常情況下,TCP數據包中的ACK、FIN、RST、SYN、URG、PSH標志位并不能被同時設置。該掃描便是向目標端口發送一個含有FIN(結束)、URG(緊急)和PUSH(彈出)標志的分組,對于關閉的端口,目標系統會返回RST標志,而在目標端口開放的情況下,目標主機將不返回任何信息,利用該特征從而判斷端口開放情況。
(5)TCP空掃描。該掃描方式與Xmas-Tree掃描原理相同,但發送的數據包不同,該掃描向目標端口發送一個不包含任何標志位的分組,目標端口關閉的端口應該會返回RST標志位。
(6)IP段掃描。此掃描并不是直接發送TCP數據包,而是通過將數據包拆分成兩個較小的IP段,把一個TCP頭分成幾個數據包,從而繞過濾器探測。
(7)TCP反向ident掃描。該掃描是應用第三方計算機向目標主機發送SYN包,并使第三方主機對目標主機返回的SYN|ACK回應RST,對RST不做回應。而利用第三方計算機進行掃描時,本地計算機進行的是對第三方計算機連續Ping的操作,通過查看第三方計算機機返回的Echo響應的ID字段,確定目標主機上端口開放或是關閉狀態。
2.2 使用Nmap工具進行端口掃描
Nmap是一種常用于網絡發現和審計的掃描器,它可用于發現網絡上的主機,可進行端口掃描、應用和版本偵測、OS檢測以及與腳本進行腳本交互,是一種能夠枚舉和測試網絡的工具,下列是Nmap一些常用掃描命令參數。
(1)-sT:TCP connect()掃描。
(2)-sS:TCP SYN掃描。
(3)-sF:TCP FIN掃描。
(4)-sX:Xmas-Tree掃描。
(5)-p:指定端口號掃描。
(6)-v:顯示掃描過程。
(7)-F:快讀掃描。
(8)-Pn:在目標主機禁止Ping連接情況下,能夠繞過主機發現的過程進行端口掃描。
(9)-A:包括探測操作系統及版本,掃描腳本以及進行路徑跟蹤等全面掃描系統的掃描方式。
在安全測評工作當中,Nmap是常用的端口掃描工具之一,利用Nmap探測檢測主機或Web服務器上開放多余的端口,在該類端口還未造成影響時進行及時彌補。Nmap掃描應用有兩部分演示。
(1)檢測TCP端口,如圖3所示。由圖結果可知端口80、3306、3389開放,端口23關閉以及檢測出端口所對應的服務。
(2)對目標主機(39.96.38.215)進行Xmas-Tree掃描,命令指令為Nmap -sX 39.96.38.215,利用Wrieshark抓取目標主機的網絡數據包,如圖4所示。分析發現數據包的TCP標志位包含FIN、PSH、URG,符合Xmas-Tree掃描的主要特征。
3 檢測端口掃描Snort規則擬定
在進行規則擬定之前,先對規則結構進行基本說明。Snort每條規則在邏輯上分為兩部分:規則頭和規則選項[3]。規則頭包括四個部分:規則動作、協議、源信息、目的信息。規則動作有五種,分別為Alert〔生成告警、記錄(Log)包〕、Log(記錄包)、Pass(丟棄包)、Activate(Alert并且激活另一條Dynamic規則)、Dynamic(先保持空閑后作為規則執行)。協議有四種,為TCP、UDP、ICMP和IP[3]。源信息和目的信息包括IP地址端口等。規則選項組成了規則的核心,包含報警信息以及規則觸發時提供給管理員的參考信息。具體作用是在規則頭信息的基礎上進一步分析,確定復雜的攻擊。Snort規則選項用分號“;”隔開,規則選項關鍵字和其參數用冒號“:”分開,由于規則選項及其參數數量過多,這里便不做詳細敘述。Snort規則結構大體如圖5描述所示。
基于以上規則結構,結合前章端口掃描特征分析,規則擬定如下:
alert tcp ![39.96.38.215/32] any ->39.96.38.215/32 any
//規則頭,匹配除主機外任意(any)源IP和端口到主機和和其任意端口的TCP數據包發送告警消息,檢測非主機的IP地址發送的tcp協議包
(//規則選項
msg:”PortScan”;//在報警和包日志中打印的消息內容
flow:to_server,established;//檢測向服務器發送方向的報文
dsize:<300;//應用層負載包長度小于300
flags:FPU;//TCP flags值
content:"|03|"; nocase; offset:4; depth:1;
//nocase指定對content字符串不區分大小寫,offest設定開始搜索位置為4,depth設定搜索的最大深度為1,即負載偏移4取1的值為03
content:"select|20|geometryn|28|0x00000000000700000001";distance:10;
within:50;
//相對于上面的03特征向后偏移10個字節之后再取50個字節
//50個字節里邊包含select|20|geometryn|28|0x00000000000700000001
sid:1000001;//規則編號,用戶自行編寫規則的編號在1000000以上
rev:1;)//版本信息。
通過該條規則,能夠將除了本地主機IP之外的任意源IP的任意端口發向本主機端口的TCP數據包按照要求進行檢測,若檢測到端口掃描,則會報警記錄到日志文件中。
4 實驗與結果分析
4.1實驗環境
Window Server;Linux虛擬機;WinPcap 4.1.3;Snort 2.9.11.1。
4.2 實驗步驟
(1)絕對路徑配置。將編寫完成的規則保存至Snort的Rules路徑下local.rules文件中并將Snort.conf中的相關相對路徑改成絕對路徑,在Snort運行時才會加載自定義的規則文件。
(2)運行Snort,命令:snort? -A full -c "C:\Snort\etc\snort.conf" -l "C:\Snort\log" -A full 為默認的報警機制,snort.conf是規則集文件,當檢測的數據包和規則集中某一規則成功匹配,Snort采取相應行動并記錄至指定輸出目錄(C:\Snort\log)中。
(3)通過Nmap工具進行Xmas-Tree掃描。
(4)查看報警信息:
[**][1:1000001:0]PortScan [* *]
[Classification: Detectionof aNetwork Scan] [Priority: 0]
06/19-19:24:57.564404 192.168.197.129:3389->39.96.38.250:7599
TCP TTL:128 TOS:0x0 ID:55250 IpLen:20 DgmLen:1692 DF
[**][1:1000001:0]PortScan [* *]
[Classification: Detection of a Network Scan] [Priority: 0]
06/19-19:25:00.564449 192.168.197.129:3389-> 39.96.38.250:7599
TCP TTL:128 TOS:0x0 ID:55250 IpLen:20 DgmLen:1692 DF。
4.3 結果分析
實驗表明,當主機受到Xmas-Tree掃描時,運行Snort的主機能夠捕獲網絡上的數據包,在進行預處理之后,將包被送到檢測引擎,檢測引擎通過規則文件(即local.rules)中的規則選項來對每個包的特征和包信息進行單一、簡單的檢測。由報警信息可知,基于編寫規則選項下,Snort能夠成功檢測出關于端口掃描的數據包,并能夠詳細地記錄攻擊源IP(192.168.197.129)、攻擊類型(PortScan)、攻擊目標(39.92.38.250)、攻擊時間(6/19),實現防范端口掃描攻擊。
4.4 實驗總結
基于規則的檢測操作簡單且工作可靠,其工作過程精確,易調整配置及優化,減少誤報率。根據實際應用的需要進行規則編寫,能夠有針對性地提出防范措施。
實驗中的主機基于防范端口掃描攻擊的需要,對端口掃描原理及常用技術進行解析,以Xmas-Tree隱蔽端口掃描技術為攻擊實例,提取其報文中FIN、PSH、URG標志位的特征,編寫規則選項中的內容,結合Snort的靈活性,完成相應的端口掃描攻擊防范。
5 結束語
依新發布的網絡安全等級保護2.0標準,國家針對網絡邊界及計算環境提出入侵防范要求,能夠對入侵行為進行檢測并提供報警是主要要求之一。而Snort作為一個入侵檢測工具,通過添加有效檢測入侵行為的規則,能夠成為防火墻的重要補充及構建安全區域邊界和安全計算環境的組成部分。因此,針對作為入侵攻擊前奏的端口掃描攻擊來探討Snort的規則,對實現入侵防范具有一定的促進作用。
本文以TCP/IP協議為基礎,詳細說明端口掃描行為特征以及常用的端口探測技術,通過Nmap工具講述端口掃描實現方式,從而擬定相應的檢測規則,從實際操作方面,探討自定義Snort規則實現防在范端口掃描及在入侵防范方面的促進作用。Snort規則是Snort入侵檢測系統檢測入侵行為的知識庫,在計算機網絡不斷受到網絡攻擊威脅和破壞的情況下,必須及時添加新的規則,提高Snort的檢測能力。
本文的Snort規則基于端口掃描攻擊行為特征進行編寫,而網絡攻擊不僅包括端口掃描攻擊,還包含SQL注入、XSS、拒絕服務等多種攻擊方式,需要對攻擊方式進行深入研究,根據應用環境要求,舉一反三,編寫出能夠完成入侵防范效果的規則。
參考文獻
[1] James F. Kurose,Keith W. Ross ,陳鳴譯.計算機網絡(第4版)[M].北京:機械工業出版社,2009.
[2] 王國棟.端口掃描技術的研究與實現[J].軟件(教育現代化),2013.
[3] Snort中文手冊[Z].https://www.docin.com/p-981478311.html
[4] 趙艷華.基于Snort的檢測方法研究與分析[D].衡陽:南華大學,2017.
作者簡介:
丁佳(1984-),男,漢族,山東煙臺人,北京化工大學,本科,山東維平信息安全測評技術有限公司,工程師;主要研究方向和關注領域:網絡安全、等保測評、風險評估。