1.2 檢測方法局限
NIDS常用的檢測方法有特征檢測、異常檢測、狀態檢測、協議分析等。實際中的商用入侵檢測系統大都同時采用幾種檢測方法。
NIDS不能處理加密后的數據,如果數據傳輸中被加密,即使只是簡單的替換,NIDS也難以處理,例如采用SSH、HTTPS、帶密碼的壓縮文件等手段,都可以有效的防止NIDS的檢測。 NIDS難以檢測重放攻擊、中間人攻擊、對網絡監聽也無能為力。
目前的NIDS還難以有效的檢測DDoS攻擊。
1.2.1 系統實現局限
由于受NIDS保護的主機極其運行的程序各種各樣,甚至對同一個協議的實現也不盡相同,入侵者可能利用不同系統的不同實現的差異來進行系統信息收集(例如Nmap通過TCP/IP指紋來對操作系統的識別)或者進行選擇攻擊,由于NIDS不大可能通曉這些系統的不同實現,故而可能被入侵者繞過。
1.2.2 異常檢測的局限
異常檢測通常采用統計方法來進行檢測。
異常檢測需要大量的原始的審計紀錄,一個純粹的統計入侵檢測系統會忽略那些不會或很少產生有會影響統計規律的審計紀錄的入侵,即使它具有很明顯的特征。
統計方法可以被訓練而適應入侵模式。當入侵者知道他的活動被監視時,他可以研究統計入侵檢測系統的統計方法,并在該系統能夠接受的范圍內產生審計事件,逐步訓練入侵檢測系統,從而其相應的活動簡檔偏離正常范圍,最終將入侵事件作為正常事件對待。
應用系統越來越復雜,許多主體活動很難以簡單的統計模型來刻畫,而復雜的統計模型在計算量上不能滿足實時的檢測要求。
統計方法中的閾值難以有效確定,太小的值會產生大量的誤報,太大的值會產生大量的漏報,例如系統中配置為200個/秒半開TCP連接為SYN_Flooding,則入侵者每秒建立199個半開連接將不會被視為攻擊。
1.2.2.1 緩慢掃描
異常檢測常用于對端口掃描和DoS攻擊的檢測。NIDS存在一個流量日志的上限,如果掃描間隔超過這個上限,NIDS將忽略掉這個掃描。
盡管NIDS可以將這個上限配置得很長,但此配置越長,對系統資源要求越多,受到針對NIDS的DoS攻擊的可能性就越大。
1.2.3 特征檢測的局限
檢測規則的更新總是落后于攻擊手段的更新,目前而言,一個新的漏洞在互聯網上公布,第二天就可能在網上找到用于攻擊的方法和代碼,但相應的檢測規則平均還需要好幾天才能總結出來。存在一個發現新入侵方法到用戶升級規則庫/知識庫的時間差,對有心的入侵者,將有充足的時間進行入侵。
很多公布的攻擊并沒有總結出相應的檢測規則或者檢測規則誤報率很高。并且現在越來越多的黑客傾向于不公布他們發現的漏洞,從而很難總結出這些攻擊的攻擊特征。
目前新的規則的整理主要為志愿者或者廠家完成,由用戶自行下載使用,用戶自定義的規則實際上很少,在方便了用戶的同時,也方便了入侵者:入侵者可以先檢查所有的規則,然后采用不會被檢測到的手段來進行入侵,大大降低被NIDS發現的概率。
目前總結出的規則主要針對網絡上公布的黑客工具或者方法,但對于很多以源代碼發布的黑客工具而言,很多入侵者可以對源代碼進行簡單的修改(例如黑客經常修改特洛伊木馬的代碼),產生攻擊方法的變體,就可以繞過NIDS的檢測。
1.2.4 協議局限
對于應用層的協議,一般的NIDS只簡單的處理了常用的如HTTP、FTP、SMTP等,,尚有大量的協議沒有處理,也不大可能全部處理,直接針對一些特殊協議或者用戶自定義協議的攻擊,都能很好的繞過NIDS的檢查。
1.2.5 入侵變體
1.2.5.1 HTTP攻擊變體
重復的目錄分割符,‘/’變為‘//’。
當前目錄,‘/cgi-bin/phf’變為‘/cgi-bin/./phf’。
上級目錄,‘/cgi-bin/phf’變為‘/cgi-bin/xxx/../phf’。
URL編碼,‘/cgi-bin/’變為‘%2fcgi-bin/’。
使用TAB等其它分割符代替空格。
NULL方法,‘GET %00/cgi-bin/phf’。
使用GET外的其它方法,例如POST。
改變參數順序,添加無用參數。
對于IIS,還有以下方法:
DOS/Win下目錄分割符,‘/winnt/system32/cmd.exe’變為‘/winnt\system32\cmd.exe’。
大小寫轉換,例如cmd.exe變為CMD.EXE。
IIS二次解碼,例如cmd.exe變為%2563md.exe,%25解碼后為’%’,再解碼%63為’c’。
UNICODE編碼,例如cmd.exe變為%c0%63md.exe。由于UNICODE編碼比較復雜,目前只有極少數的NIDS能夠對其進行解碼。
1.2.5.2 Telnet攻擊變體
使用退格鍵。
使用Tab鍵進行命令補齊。
采用Shell來執行攻擊代碼。
采用宏。
添加無用參數。
事實上NIDS很難檢測那些通過Telnet連接到服務器后進行的本地攻擊。
1.2.6 TCP/IP協議局限
由于TCP/IP設計當初并沒有很好的考慮安全性,故現在的IPV4的安全性令人堪憂,除了上面的由于網絡結構引起的問題外,還有下面的一些局限。
1.2.6.1 IP分片
將數據包分片,有些NIDS不能對IP分片進行重組,或者超過了其處理能力,則可以繞過NIDS。
一個IP數據報最多8192個分片,NIDS的一個性能參數即為能重組的最大的IP分片數。
NIDS每接收到一個新的IP數據報的IP分片的時候,將啟動一個分片重組過程,在重組完成或者超時后(一般為15秒超時)關閉此重組過程,NIDS的一個性能參數即為能同時重組的IP包數。
一個IP數據報的最大為64K,為準備接收一個IP數據報,NIDS將準備足夠的內存來容納即將到來的后續分片,NIDS的一個性能參數即為能進行重組的最大的IP數據報的長度。
結合上面的三個參數,即為NIDS在超時時間(例如15秒)內能同時準備進行最大值(例如64K)的IP數據報重組的數目。
如果NIDS接收到的數據包超過上述的極限,NIDS不得不丟包,從而發生DoS攻擊。
1.2.6.2 IP重疊分片
在重組IP包分片的時候,如果碰到重疊分片的話,各個操作系統的處理方法是不一樣的,例如有些系統會采用先收到的分片(Windows和Solaris),有些會采用后收到的分片(BSD和Linux),如果重疊分片的數據不一樣的話,并且NIDS的處理方式與受保護主機不一樣,則將導致NIDS重組后的數據包與被保護主機的數據包不一致,從而繞過NIDS的檢測。
例如可以重疊TCP或UDP的目的端口,然后滲透過目前絕大多數防火墻,并可能繞過NIDS。
還可以重疊TCP的標志位,使NIDS不能正確檢測到TCP FIN包,從而使NIDS很快達到能夠同時監控的TCP連接數的上限;使NIDS不能正確檢測到TCP SYN包,從而使NIDS檢測不到應有的TCP連接。
1.2.6.3 TCP分段
如果NIDS不能進行TCP流重組,則可以通過TCP分段來繞過NIDS。
一些異常的TCP分段將迷惑一些NIDS。
1.2.6.4 TCP un-sync
在TCP中發送錯誤的序列號、發送重復的序列號、顛倒發送順序等,有可能繞過NIDS。
1.2.6.5 OOB
攻擊者發送OOB數據,如果被保護主機的應用程序可以處理OOB,由于NIDS不可能準確預測被保護主機收到OOB的時候緩沖區內正常數據的多少,于是可能繞過NIDS。
有些系統在處理OOB的時候,會丟棄開始的1字節數據(例如Linux下的Apache,但IIS不會),則通過在發送的多個TCP段中,包含帶OOB選項的TCP段,則有可能導致NIDS流重組后的數據與受保護主機的應用程序不一致,從而繞過NIDS。
1.2.6.6 T/TCP
如果目標主機可以處理事物TCP(目前很少系統支持),攻擊者可以發送事務TCP,NIDS可能不會與被保護主機上的應用程序進行同樣的處理,從而可能繞過NIDS。