入侵檢測系統,能夠實時監控網絡傳輸,自動檢測可疑行為,分析來自網絡外部入侵信號和內部的非法活動,在系統受到危害前發出警告,對攻擊作出實時的響應,并提供補救措施,最大程度地保障安全。 然而"道高一尺,魔高一丈",換個角度,如果你是一個名攻擊者,你該如何去做呢? 當然,按道理來說,IDS發展方向是在保證足夠優良的性能的同時,能夠對抗相應的IDS攻擊方法。
1.重新排列攻擊次序
例如攻擊順序是"a;b;c",并且以"b;a;c"的順序也能成功。許多IDS將檢測不到第二種攻擊。邏輯上這是一個吸引人的說法,但現代的攻擊一步就能成功。這些攻擊會被許多IDS發現。復雜的攻擊中,它們中的一些步驟會被某些IDS發現。
2.將一個標準的攻擊由一個以上的人進行
還使用"a;b;c"的例子,如果用戶X進行"a:b",用戶Y進行"c",那么攻擊者幾乎肯定不會被發現。同樣,如果要求有步驟"a","b","c",那么IDS極有可能發現他們中的一步,不管是那個用戶執行它。使用多個賬號確實會迷惑管理員,但攻擊還是會被發現。
3. 將一個標準的攻擊分在多個會話中完成
第一次登陸進行"a;b",然后logout,再登陸到系統進行"c"。如同第五條。舉例來說,得到root權限的溢出腳本可能有多行,但最關鍵的只有一行。例如,必然有一條命令,如"su"等,使非特權用戶成為特權用戶。
4. 用多個IP地址/系統進行攻擊
登陸到X、Y,從X進行"a",從Y進行"b",再從X進行"c"。同樣,隨機的變換其IP,多出來的連接會引起小部分基于網絡的IDS的注意。一些IDS會發現并記錄短時間內從多個ip發起的遠程連接。
這種方式在使用隨機的代理列表進行網絡DDOS攻擊時非常顯著,遺憾的是,很多國產的IDS并不能夠有效的對此進行記錄。
5. 為攻擊中使用的命令定義一個宏
例如,為cp設置一個shell變量$ZZ,然后使用$ZZ代替cp。增加了復雜性,但是IDS必然會記錄這次訪問。想象一下,當IDS在"tprof"程序中觸發時,記錄了這一事件。類似的還有,為/etc/passwd定義一個shell變量也一樣,IDS系統將會發現在一次telnet中對/etc/passwd文件的存取。
所以,此類技術在基于主機的IDS如Stalker,Tripwire中幾乎不會有什么作用。
6. 為命令參數定義一個宏
例如,使用$P代替/etc/passwd。
7. 用腳本代替輸入的命令
通常IDS不會注意到這個腳本。這是第一個確實很有威脅的攻擊技術。但是沒有提到在攻擊成功后發生的事情。像CMDS這樣的工具將記錄異常的登錄。Tripwire也會發現一些后門。如果給nmap、strobe這樣的工具改名倒是一個好主意,但是一旦使用他們,基于網絡的IDS就會發現他們。如果執行一個試圖獲得root權限的腳本,許多IDS產品都能夠覺察攻擊中的變化。
8. 使用不同的命令完成相同的功能
例如,通常在unix shell中 "echo *"等效于"ls"。當攻擊系統的時候,仍然需要運行"tprof"。即使在另一個系統上把它編譯成僅僅運行"trpof"的二進制程序,許多IDS系統如Stalker、SeOS也會發現從非特權用戶向特權用戶的轉變。
9. 在攻擊中改名
例如,攻擊使用臨時文件"xxx",你可以把它改名為"yyy"。這只是假定IDS只按照相應的關鍵字來判斷只搜索指定的文件名。
10. 建立一個對照表對關鍵字進行翻譯
然后進行字符替換,例如,可以使用sed作字符替換。
11.對指令加密
例如,使用ssh,可以防止sniffer,網絡IDS一般包括sniffer功能。
這種方式僅對基于網絡的IDS有用。基于主機的IDS在ssh下對用戶行為可以進行完全的控制。
12.發送時使用后綴符號,然后在其他地方再轉換回來
IDS不會理解這些符號。
14.和目標機之間用全雙工通信,大部分IDS理解不了附加的字符
Dragon,T_Sight和所有版本的DoD NID程序可以對付這些情況。
15.在一次入侵中交互使用一些已知的入侵技術。IDS可能不會全部分辨出
很可能發現至少一種入侵。
16.對daemons發送的結果編碼,這樣返回的格式將不會被IDS察覺
例如,如果你利用 一個sendmail的bug發送一個password文件給你自己,可以通過管道用一個sed腳本將文件中的":"改變成"-"。這發生在入侵成功之后。在入侵成功后怎么處理password文件是很有意思的,但這不屬于典型的攻擊行為。
17.通過管道用awk腳本對字符進行交換。可以躲過IDS
這不是一種新的方法。從一張表里用行號選擇命令,而目標執行相應的命令。例如,你可以鍵入"15 *.com",而目標卻執行"dir *.com"。這只是加密shell命令的一種新辦法。
18.DOS IDS的sensor端口。使它失效
許多基于網絡的IDS產品經過安全的配置,可以在沒有IP堆棧的情況下完成sensor的工作。一些IDS產品,例如Dragon,沒有任何打開的udp或tcp端口。RealSecure,NetProwler,NetRanger同樣可以釋放ip堆棧來防止攻擊。
19.用pingflood來攻擊IDS
通過發送大的ping包,可以使許多運行IDS的系統崩潰,這樣它就不會發現隨后的攻擊。還是DOS技術。許多網絡IDS比周圍的環境有更高的安全性。
20.攻擊IDS所運行的平臺。
許多IDS運行在常見的有漏洞的操作系統上。一旦攻擊平臺得手,對付IDS就輕而易舉了。
21.創造錯誤的審計紀錄來迷惑IDS。
例如,在攻擊包和正常包之間發送包可以使攻擊看起來無害。NFR和Dragon網絡IDS可以避免這些攻擊。一般來說,基于主機的IDS不會存在這些漏洞。
25.消耗IDS系統的磁盤空間,然后進行攻擊。
用無害的數據填充磁盤空間,IDS將崩潰,隨后的攻擊就不會被發現。Ids系統什么時候崩潰呢?如果IDS系統記錄所有的信息,它可能被管理員注意。攻擊者所做的只是提高了管理員的警覺性。
26.停止審計記錄的生成或采集然后進行攻擊。
例如,創建數量很多的進程,那么,IDS系統就不能再創建審計進程。這是一個本地DOS攻擊。許多unix操作系統可以抵抗這些本地攻擊。主機IDS使用單獨的進程,同樣可以避免。當然,如果服務器負載過重,管理員會注意到過多的進程。
27.攻擊響應系統來中斷通信。
例如,一些IDS系統會切斷從攻擊發起處來的所有流量。偽造從特定主機發起的攻擊,IDS系統將切斷從那臺主機來的所有連接,那時就可以攻擊這臺特定的主機了。這是我非常感興趣的攻擊。如果我理解正確的化,這意味著使用IDS的自動阻斷攻擊方IP地址的功能來阻斷被保護網絡主機。一些IDS產品,例如CMDS、NetRanger、NetProwler、RealSecure可以與防火墻或路由器聯動。當特定的事件發生,路由器和防火墻將會限制特定主機的流量。這種技術有一個流量的問題,也就是防火墻和IDS系統協同工作的原因。當流量受限時,只限制由外向內的流量。那么由內向外就成了一個突破口。
28.逆向輸入。
再使用一個轉換工具轉換。在發送和接受時作同樣的事情。這只是一種偽裝shell的新辦法。
29.輸入時中間插入符號,再用awk轉變成前綴符。
IDS系統將不會中斷連接。僅僅在網絡IDS觀察telnet或rlogin會話時才有用。這些技術很難輕易的在ftp,http,smtp等其他的協議上使用。
30.使用"emacs"作為shell,使用wipes和yanks輸入輸出命令緩存代替手工鍵入。
當在目標機執行攻擊指令時IDS系統將只會看到類似于ctrl-W和ctrl-Y。NFR和RealSecure將察覺"emacs"的使用,因為不使用"vi"的人很明顯的是hacker。同樣,這也只是另一個隱藏命令的方法。通常只對telnet和rlogin有用。
非常緩慢的輸入(每條命令之間最好相隔幾個小時)。因為緩存大小的限制,你的輸入被一大堆IDS不得不看的東西沖掉了。網絡IDS有這樣的弱點。主機IDS沒有。一些網絡IDS,如NFR、Dragon等能夠被配置的足夠發現長時間的低帶寬的網絡會話。
31.改變到目標的路由來躲過IDS
如果有拓撲方面知識的話,這將是一種有效的攻擊。為了進行這種攻擊,必須進行一定的網絡解析。這將很容易的被網絡IDS系統發現。這種攻擊同時要求對passive IDS系統了如指掌。
32.改變從目標回來的返回路由來避免IDS
33.用源路由包指定不同的路由到目標,可以躲過一些單一的IDS
幾乎所有的防火墻,路由器和服務器都會丟棄并且紀錄源路由包。31、32、33都假設有備用的通道可以到達目標,但實際上,網絡IDS可以配置成一個遏制點。
34.從被保護網絡上用modem撥號進行攻擊,可以躲過網絡IDS系統
當然,我們有更多的辦法來躲過IDS系統,先觀察它們,再從他們不會察覺的地方入手。例如,我們可以向被Axent IA,BlackICE,甚至RealSecure保護的Windows NT系統釋放一個病毒。這些IDS系統都不會察覺系統級的病毒。
35.干擾目標和IDS之間的通信。對于網絡IDS,可以采用改變路由器通信的辦法
網絡IDS通過監聽網絡通信的辦法來實現。如果通信沒有被監聽到,那么就不會有入侵察覺。這種攻擊僅僅當攻擊者可以改變內部網絡路由,并且從通信到流量都有其他的存取點。許多網絡IDS系統可以察覺到改變路由的企圖。
36.從跳板進行攻擊。攻擊將被察覺,但他們不會追蹤到(除非它們特別擅長追蹤)
但這種辦法不是躲過IDS系統。僅僅是改變了IDS檢測出的入侵主機。而且你作為跳板的主機可能也會監測到你的行為。
37.在不使用的端口上開啟一個連接
這樣做的前提是攻擊者已經可以訪問到目標。新的攻擊不會以這種方式開始。有許多程序例如NetCat可以做這樣的事情。大部分這樣的程序都可以被網絡IDS發現。RealSecure這樣的產品甚至能發現LOKI ICMP 會話。
38.使用改變過的協議通信,例如在單詞中使用逆序
這只是加密網絡傳輸。前提條件是在對方網絡里有一個對應的系統。
39.使用ip包封裝ipx包來攻擊。IDS系統可能僅僅注意ip包,但不理解它的內容
但是如果對方有一個基于ipx的IDS系統,他們就會發現這次攻擊。
40.使用不同的隧道協議攻擊。例如IP over SSL
還是加密傳輸技術。
為新的工具定義你自己的協議,然后用它攻擊。你控制目標主機,寫你自己的加密管道,用它在IDS系統面前通信,這并不是躲過IDS系統。
41.產生大量虛假的攻擊信息來增加IDS的Noise級別。這將使管理員很難從大量信息中篩選出真實的攻擊
很有意思,但是考慮到網絡管理系統被設計為用不為人所理解的方式處理和顯示信息。IDS系統也一樣。例如,Dragong,在許多不同級別的提取中,用一些不同的工具來尋找不同的數據。企業及產品例如WebTrends 趨向于用一種非常容易理解的方式來顯示所有整理過的安全信息。攻擊者如果照前文所說的做了,他會使目標的alert級別升高。
43.把入侵指令放在一個word宏里面。把文檔發送到目標。Ids可能不會解碼宏里面的攻擊指令
參考34。一些產品如RealSecure會發現可疑的JAVA和ActiveX下載。帶有病毒檢測的應用代理防火墻同樣可以察覺這樣的攻擊。
44.把入侵指令放到Power point、lotus-123等任何你能想到的其他產品的宏里面
45.把指令放到編譯后的程序里(例如,一個木馬),然后,想辦法讓目標主機下載然后執行
這是一個經典的攻擊。常見的木馬可以被許多主機和網絡IDS發現。一些防火墻甚至可以發現BO2K的掃描。從另一方面來說,這也是今天計算機安全所面臨的最嚴重的問題之一。幾乎不可能檢查二進制程序甚至源碼來預測它將要做什么。IDS也做不到,但這也不是你扔掉IDS產品的理由。當你想要用E-mail發送敏感的公司信息時,大部分IDS或防火墻產品同樣也不會發現。
46.使用很少見的協議來攻擊。IDS可能不知道如何解碼這種包
協議并不是一個很好的詞語。如果它意味著不同的udp/tcp端口,那么網絡IDS就應該發現它。但是許多網絡IDS產品僅僅把他們可以理解的標記為可疑。對以非icmp,udp,tcp的方式進行的攻擊,很多IDS雖然能夠檢測到卻無法識別。
47.用不同的語言對原始發布的exploit重寫
我認為這不是很有用。例如check-cgi程序,它已經傳播了好幾個月,可以檢查70多個cgi漏洞。它被從c移植到Perl,但在網絡層上沒有任何不同。這種方法僅僅當IDS只搜尋特定的二進制程序才有效。
49.攻擊沒有運行unix的系統。因為今天幾乎所有的IDS都是針對unix系統的
一份調查顯示NetProwler,NFR Flight Jacket,NetRanger,RealSecure,Dragon,BlackICE 都可以發現多數的windows NT類攻擊