




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第五章攻擊——直搗龍門(上)5.1簡介5.2一般的攻擊方法本章重點和復習要點本章重點和復習要點描述PingofDeath攻擊的實現原理?描述TearDrop攻擊的實現原理?描述SYNFlood攻擊的實現原理?如何防范?描述LandAttack攻擊的實現原理?描述SmurfAttack攻擊的實現原理?什么是DDoS攻擊,畫出相應的攻擊模型?詳細描述反射式DDoS攻擊的攻擊原理。網絡蠕蟲型DDoS攻擊的入侵機制是什么?反彈端口型DDoS攻擊的入侵機制是什么?返回首頁本章重點和復習要點基于IP地址的認證(即基于信任的認證)與基于口令的認證有什么不同?詳細描述IP欺騙攻擊的詳細實現過程?如果黑客已經控制了本地的DNS服務器,如何偽造DNS應答信息?如果黑客沒有辦法可以控制本地的DNS服務器,那應該如何通過偽造DNS應答信息實現DNS欺騙?什么是會話劫持?它大體上分為哪兩類?有什么不同?中間人攻擊類型的會話劫持一般使用哪些欺騙技術實現?本章重點和復習要點什么是緩沖區溢出?緩沖區溢出如何進行分類?對一個程序設置SUID位的含義是什么?為什么我們一般會尋找如下一個程序的漏洞進行緩沖區溢出攻擊:具有root執行權限且設置了SUID位?簡單說明在什么情況下就能實現堆/BSS緩沖區溢出攻擊的?如何實現的?分別利用類printf函數的哪幾個特性就能實現格式化串溢出攻擊?針對緩沖區溢出攻擊有哪些對策?5.1簡介
從黑客攻擊的目的來看,無非兩種:一種是給目標以致命打擊,雖然黑客自己不一定能得到直接利益,但能讓目標系統受損,甚至癱瘓。另一種攻擊,其目的在于獲取直接的利益,比如截取到目標系統的機密信息,或者得到目標系統的最高控制權。在此過程中,黑客無意對目標系統的正常工作能力進行破壞,他可能更希望非常隱蔽地實現自己的目的。返回首頁5.2一般的攻擊方法
5.2.1拒絕服務攻擊只要網絡系統或應用程序還存在漏洞,只要網絡協議的實現還存在隱患,甚至只要提供服務的系統仍然具有網絡開放的特性,拒絕服務攻擊就會存在。拒絕服務攻擊并非某一種具體的攻擊方式,而是攻擊所表現出來的結果。黑客可以采用種種手段,最終使得目標系統因遭受某種程度的破壞而不能繼續提供正常的服務,甚至導致物理上的癱瘓或崩潰。具體的操作方法可以是多種多樣,但其最終目的就是導致目標系統無法正常的運行或處理正常的服務請求。返回首頁1.PingOfDeath(死亡之Ping)
一個完整的IP數據包最大為65535Byte,ICMP(Ping使用的協議)作為內嵌于IP中的協議,其所允許的最大數據量應該是65535-20-8=65507Byte,其中20為IP頭大小,8為ICMP頭大小。如果底層協議的MTU(最大傳輸單元)小于上層IP數據包的大小,IP包就應該分片,并由接收者進行重組,典型的以太網的MTU為1500Byte。
在早期操作系統TCP/IP協議棧實現中,對單個IP報文的處理過程中通常是設置有一定大小的緩沖區(65535Byte),以應付IP分片的情況。接收數據包時,網絡層協議要對IP分片進行重組。但如果重組后的數據報文長度超過了IP報文緩沖區的上限時,就出現溢出現象,導致TCP/IP協議棧的崩潰。
早期的Ping工具有個特點,允許任意設置發送數據的字節數,于是黑客只需要簡單地利用Ping工具就可以讓目標主機拒絕服務。當然,這個問題并不局限于Ping,黑客發送其他類型的數據包(包括TCP和UDP)時,只要能讓IP分片重組后超過正常IP數據包的大小限制,會導致同樣結果。
目前,所有標準TCP/IP協議棧已經具備了對付超大尺寸包的能力。另外多數防火墻都可自動過濾掉這種攻擊行為。現在,Windows2000中的Ping命令最多只允許發送65500Byte大小的數據,Linux則一律是84Byte。2.IGMPFlood
與PingOfDeath類似,都是利用IP分片進行攻擊的。所不同的是,IGMPFlood利用的是IGMP協議,IGMP類型為0(不可識別),但它并不使用多播的D類IP地址,而是將目的IP地址設置為被攻擊目標的IP地址。許多OS并不能很好地處理這樣的IGMP報文,包括Windows95/98/NT4等,一旦遭受攻擊,受害主機的反應會明顯變慢,甚至藍屏。3.WindowsOOBAttack
專門針對Windows3.1/95/NT的攻擊,受攻擊的主機可以在片刻間出現藍屏現象(系統崩潰)。原因是系統中某些端口的監聽程序不能處理“意外”來臨的帶外數據,從而造成嚴重的非法操作。通常黑客最多選擇的目標是TCP139端口,黑客只要先跟目標主機的139端口建立連接,繼而發送一個帶URG標志的帶外數據報文,目標系統即告崩潰。
所謂帶外(Out-Of-Band,OOB)數據,是指在網絡通信中,當某一方有重要信息需要告知另一方時所采用的不同于正常數據的模式。這些信息可以被快速地遞交給另一方并被特殊處理。通常,傳輸這種數據信息所采用的傳輸通道與普通數據的是不同的,這就是帶外數據的來歷。
在TCP協議中,傳輸帶外數據并沒有使用特殊的通道,而是使用與普通數據傳輸相同的連接,只不過傳輸的機制不同而已。TCP協議提供了一個緊急模式的帶外數據傳輸機制,通過設置TCP頭中的URG標志,接收方可以對數據中的某些信息進行特殊處理。TCP協議只支持一個字節的帶外數據,并用緊急指針標識出帶外數據字節的偏移位置。網絡上這類攻擊工具很多(通過perl腳本程序即可實現),多是以Winnuke冠名,又稱為藍屏炸彈。4.Teardrop(淚滴)利用早期某些OS中TCP/IP協議棧IP分片包進行重組時的漏洞(沒有考慮到一種特殊的分片重疊,導致系統非法操作)進行的攻擊,受影響的系統包括Windows3.1/95/NT以及Linux2.1.63之前的版本,其結果是直接導致系統崩潰,Windows系統則表現為典型的藍屏癥狀。
協議棧在處理IP分片時,要對收到的相同ID的分片進行重組,這時免不了出現一些重疊現象,分片重組程序要對此進行處理。對一個分片的標識,可以用offset表示其在整個包中的開始偏移,用end表示其結束偏移。對于其他一些重疊情況,分片重組程序都能很好地處理,但對于一種特殊情況,分片重組程序就會出現致命失誤,即第二個分片的位置整個包含在第一個分片之內。
分片重組程序中,當發現offset2小于end1時,會將offset2調整到和end1相同,然后更改len2:len2=end2-offset2,在這里,分片重組程序想當然地認為分片2的末尾偏移肯定是大于其起始偏移的,但在這種情況下,分片2的新長度len2變成了一個負值,這在隨后的處理過程中將會產生致命的操作失誤。
后來還有一些拒絕服務攻擊利用的也是IP分片重組過程中的眾多漏洞,例如Jolt2攻擊,其原理是所有IP分片的偏移經過疊加后超出了正常IP包的最大限制,受影響的系統包括Windows95/98/NT/2000,以及一些Linux內核版本。對IP分片包的處理也是防火墻需要解決的一個問題,現在狀態檢測類型的防火墻,對異常分片的出現都有相應的一些處理方法,如對特殊重疊分片的丟棄等。5.UDPFlood
有些系統在安裝后,沒有對缺省配置進行必要的修改,使得一些容易遭受攻擊的服務端口對外敞開著。UDPFlood利用的就是Echo和Chargen(CharacterGenerator)這兩種UDP服務。
Echo服務(TCP7和UDP7)對接收到的每個字符進行回送;Chargen(TCP19和UDP19)對每個接收到的數據包都返回一些隨機生成的字符(如果是與Chargen服務在TCP19端口建立了連接,它會不斷返回亂字符直到連接中斷)。
黑客一般會選擇兩個遠程目標,生成偽造的UDP數據包,目的地是一臺主機的Chargen服務端口,來源地假冒為另一臺主機的Echo服務端口。這樣,第一臺主機上的Chargen服務返回的隨機字符就發送給第二臺主機的Echo服務了,第二臺主機再回送收到的字符,如此反復,最終導致這兩臺主機應接不暇而拒絕服務,同時造成網絡帶寬的損耗。
現在的大多數OS即便提供這兩種服務,但對于1024以下的源端口,Echo和Chargen都“置之不理”。最好的方法是盡量減少不必要的網絡服務。在Windows2000安裝好之后,應禁止掉“SimpleTCP/IPServices”服務,包括Echo、Discard(9)、Daytime(13)、Quote(17)、Chargen等。6.SYNFlood
?攻擊原理是較為流行的DoS攻擊方式之一,當然,在單機上實行SYNFlood早已經“過時”了,但將它應用到DDoS攻擊中,其后果往往是很嚴重的。一個正常的TCP連接,需要經過三次握手過程才能真正建立。但是如果客戶端不按常規辦事(假定源IP根本就是一個不會產生響應的虛假地址),并不向服務器最終返回三次握手所必須的ACK包,這種情況下服務器對于未完成連接隊列中的每個連接表項都設置一個超時定時器,一旦超時時間到,則丟棄該表項。
但黑客并不會只發送一次這樣的SYN包,如果他源源不斷發送,每個SYN包的源IP都是隨機產生的一些虛假地址(導致受害者不可能再進行IP過濾或追查攻擊源),受害者的目標端口未完成隊列就不斷壯大,因為超時丟棄總沒有新接收的速度快,所以直到該隊列滿為止,正常的連接請求將不會得到響應。?攻擊的簡單檢測通過簡單的netstat命令,如果發現系統中存在大量的SYN_RECEIVED的網絡連接,就基本上可以斷定系統正在遭受SYNFlood攻擊。
netstat–n–ptcp?攻擊的防御防御起來不是很容易:一是因為這種攻擊使用的是正常TCP網絡服務都不會禁止的SYN類型數據包,而且因為數據包很小,黑客可以在短時間內產生大量這樣的數據包;二是黑客根本不需要得到目標主機的返回信息,所以他可以偽造數據包的源IP和源端口,讓目標主機無法追查攻擊來源,也很難對隨機產生的源IP和源端口進行過濾。
有兩類可以防止SYNFlood攻擊的方法。主機系統中可以采取下列措施(重新設置TCP/IP協議棧的參數):
?增加TCP監聽套接字未完成連接隊列的最大長度;
?減少未完成隊列的超時等待時間;
?使用諸如SYNCookies這樣的特殊措施。這種方法是Linux內核特有的機制,服務器并不是一收到SYN包就建立一個半連接(即在未完成隊列中添加一個表項),而是先向SYN請求的發送方返回一個附帶Cookies的SYN/ACK包,如果收到客戶端的響應,才真正建立連接。
這種方法可以一定程度上抵御攻擊,但不是根本的辦法。因為系統資源有限,增加了連接隊列長度,消耗的內存資源就更多。黑客發動攻擊的效率總比系統資源的調整更高一些,如果黑客發動DDoS攻擊,系統還是無法抵御。上述這些方法并不能從本質上提高抵御SYNFlood攻擊的能力。
現在成熟的防火墻產品,基本上都有針對SYNFlood攻擊的防御措施,其技術實現可以分為3類:?SYNThreshold
設定一個未完成連接隊列的限定值,如果超過了該值,則丟棄SYN數據報文,最有代表性的就是Cisco的PIX防火墻。
?SYNDefender
防火墻在轉發客戶端到服務器的SYN請求并收到服務器返回的SYN/ACK之后,立刻向服務器返回ACK,而不是等待客戶端的最后應答。最有代表性的就是CheckPoint的Firewall-1防火墻。它比SYNThreshold更有效,但也存在自身的缺陷:一方面,可能造成服務器的資源浪費;另一方面,防火墻本身成了可被利用的一個潛在的弱點。?SYNProxy
是對SYNDefender的一種改進機制。防火墻在收到客戶端的SYN請求后,不會立即轉發給服務器,它會在代表服務器建立了完整的TCP連接后,才向服務器轉發真正的連接請求。最有代表性的就是Netscreen防火墻和天網防火墻。
采用SYNDefender機制的防火墻,能夠抵御每秒發送500個以內SYN包的SYNFlood攻擊,而采用SYNProxy機制的防火墻,能夠有效抵御每秒發送20000個以內SYN包的SYNFlood攻擊。通常情況下,即便黑客占用了所有ISDN的有限帶寬,發送SYN包的頻率也不會超過200個/秒,所以利用防火墻來防御SYNFlood攻擊,一般情況下都是比較有效的,但如果黑客采用大規模的DDoS攻擊,恐怕任何防御措施都不能完全有效。7.LandAttack
如果向Windows95的某開放端口(例如139端口)發送一個包含SYN標識的特殊的TCP數據包,將導致目標系統立即崩潰。做法很簡單,就是設置該SYN包的源IP為目標主機的IP,源端口為目標主機受攻擊的端口。(WindowsNT4.0+SP3、Windows3.11、某些FreeBSD系統、CISCOIOS11.3之前的版本)因試圖與自己連接而陷入死循環。該方法如今也比較陳舊,對于WinowsNT4.0來說,只要安裝了SP4就可以防止這種攻擊。
Land攻擊利用TCP初始連接建立期間的應答方式存在的問題,攻擊的關鍵在于服務器端和客戶端有各自的序列號。當目標機器把包發送給自己,目標機器等待自己的序列號(如5000)得到應答,而這個應答卻是它自己剛剛才發送出去的,而且其應答序列號是攻擊者的序列號(如1002)。由于這個序列號同目標機器所期望的序列號相差太大(不在接收窗口范圍內),TCP認為這個包有問題,被丟棄。這樣目標機器再次重發數據包,將導致無限循環:目標機器一直給自己發送錯誤應答,并希望能夠看到具有正確序列號的應答返回。8.SmurfAttack
黑客以受害主機的名義向某個網絡地址發送ICMPecho請求廣播,收到該ICMPecho請求的網絡中的所有主機都會向“無辜”的受害主機返回ICMPecho響應,使得受害主機應接不暇,導致其對正常的網絡應用拒絕服務。之所以Smurf攻擊屢屢奏效,并非受害主機的OS或網絡協議有什么問題,而在于這種攻擊的“借力”效果。黑客可以利用自己有限的帶寬,同時找到一個高帶寬的網絡作為“反彈攻擊跳板”,轉而攻擊一個有限帶寬的受害系統。
要防御Smurf攻擊,通常需要從3方面來考慮:1)為了防止本網絡內某個主機發動Smurf攻擊,在網絡的邊界網關(路由器)就應該設置過濾規則,禁止源地址非本網絡IP的數據包出去。2)設置防火墻禁止可疑的ICMP數據包進入本網絡(例如,某些狀態監測防火墻,可以對非本地請求卻返回給本地的ICMPecho響應進行過濾),或者干脆屏蔽ICMP。3)設置路由器,使其禁止對定向廣播的支持(防止成為跳板)。9.FraggleAttack
與Smurf類似,所有偽造了源IP地址的UDP包,都被發送到一個支持定向廣播的網絡,其目標端口為UDP7,也就是Echo服務的端口,如果該網絡的一些主機開啟了Echo服務(對于沒有開啟Echo服務的主機,因為收到返回的ICMP不可達信息,也會造成大量的網絡流量),依據Echo服務的特性,它們都會向源主機回送接收到的數據,最終效果與返回ICMPecho響應是相同的,會導致受害主機停止服務。拒絕服務攻擊并不是一個組織一個網絡就可以解決的問題,它需要的是整個網絡環境的同步改善。10.垃圾郵件攻擊(郵件炸彈)
基于標準SMTP協議的郵件服務器,在客戶端請求發送郵件時,是不對其身份進行驗證的。另外,許多郵件服務器都允許郵件中繼(對任何接收者地址非本地的郵件提供轉發服務),這兩點給郵件炸彈的傳播帶來了方便。
黑客利用某個“無辜”的郵件服務器,持續不斷地向攻擊目標(郵件地址)發送垃圾郵件,很可能“撐破”用戶的信箱,導致正常郵件的丟失。這種方法簡單但很“奏效”,一方面它導致用戶正常通信的中斷,另一方面,也會給垃圾郵件“策源地”的郵件服務器帶來沉重負擔。如果該服務器被受害的郵件服務器列入過濾名單,損失就更為慘重。5.2.2分布式拒絕服務攻擊1.簡介DDoS攻擊是DoS攻擊的一種延伸,它之所以威力巨大,是因為其協同攻擊的能力。黑客使用DDoS工具,往往可以同時控制成百上千臺攻擊源,向某個單點目標發動攻擊,它還可以將各種傳統的DoS攻擊手段結合使用。對DDoS的防御,至今沒有一個很好的解決方法。
2.DDoS攻擊模型有4種不同的角色:?黑客(Intruder):黑客親自操作的主機用戶接口(Netcat或Telnet),其作用是向Master發送各種命令,包括攻擊指令等。?主控端(Master):監聽來自Intruder的命令,并向網絡上分布的各個Daemon發起攻擊命令,使其真正開始攻擊。?守護進程端(Daemon):接收和響應來自Master的攻擊命令,是真正實施攻擊的前鋒。?受害者(Victim):即被攻擊的目標主機。4.DDoS攻擊對策最基本的攻擊對策,還是要解決好OS、協議棧,以及各種網絡服務和應用系統的漏洞問題。及時安裝補丁程序,進行合理配置,對網絡流量以及通信過程進行監視(IDS),設置嚴格的過濾規則(路由器和防火墻)。廣泛的合作和協同一致。為了及時發現自己的系統是否被種植了DDoS工具,使用find_ddos系列工具,這些工具針對不同種類的系統類型,可以幫助管理員發現多種常見的DDoS工具(包括其Master端以及Daemon端)。5.2.4網絡欺騙類型的攻擊1.IP欺騙攻擊(1)IP欺騙原理
IP欺騙就是偽造數據包源IP地址的攻擊,基于兩個前提:一是目前的TCP/IP網絡在路由數據包時,不對源IP地址進行判斷,這就給偽造IP包創造了條件;二是兩臺主機之間,存在著基于IP地址的認證授權訪問,就可以進行“會話劫持”。
一:UNIX平臺的主機對外提供某些網絡服務,都是基于簡單的IP地址來進行認證的,最有代表性的就是rlogin、rsh、rcp等。當客戶端要求建立這些服務連接時,如果服務器主機上設置有/etc/hosts.equiv或$HOME/.rhosts這樣的文件,往往就不需要進行身份驗證。正是基于這種簡單的信任關系,黑客只要知道哪臺主機是受目標主機信任的(最好是對root用戶的信任),就可以冒充受信任主機,進行rlogin登錄,但是,對黑客來說,目標主機作出的任何反應他都是看不見的。1)信任和認證是一種相反的關系,信任關系越強,認證的嚴格性越低。2)最初的認證是由基于信任關系的源地址來進行的。3)由于IP地址(以及IP頭中的大部分域)可以偽造,因此基于IP源地址的認證是不可靠的。4)要進行欺騙攻擊,必須要有某種信任關系存在。使用IP欺騙技術以后,攻擊過程再也不必使用任何用戶名和口令了。
IP欺騙受歡迎的另一個原因是它是其它攻擊形式(如“會話劫持”)的重要基礎。二:另一個技術上的難點,在于對TCP連接的初始序列號ISN的精確猜測。如果序列號不正確,所傳輸的報文就不能被正確接收。在IP欺騙過程中,黑客只是單方面向目標主機發送數據包(因為黑客使用的是假冒的源IP地址),不可能收到目標主機的會應,所以確定目標主機的ISN就是關鍵了。在TCP報文頭部,ISN是一個32位的值,TCP協議為每一個連接選擇一個ISN,為了防止因為延遲、重傳等擾亂三次握手,ISN不能隨便選取。理解TCP如何分配ISN以及ISN隨時間的變化規律,對于成功的進行IP欺騙很重要。
通常,ISN的取值每秒增加128000,如果有新的連接,每次連接ISN的值增加64000。黑客可以先與目標主機建立正常的TCP連接,提取其ISN值,并且多次嘗試,以找到穩定的規律,將最近一次的ISN記錄下來。此外,黑客還需要掌握到目標主機的往返時間(RTT),這樣的話,所估算的目標主機的ISN就是最近一次的記錄加上128000*(RTT/2)。當然,如果在黑客兩次反應之間,目標主機又建立了新的連接,所估算的ISN還要加上64000。可見猜測ISN并不容易。
猜測的序列號有出入三:黑客發送給目標主機的數據包,目標主機的回應都返回給受信任的主機。正常情況下,受信任主機會立刻返回給目標主機RST報文而終止連接。所以還有一個先決條件,就是不能讓被冒充的主機對外界產生任何響應。如果被冒充的主機處于關機狀態,就不必理會;否則黑客就要想辦法使其停止響應,最常用的就是SYNFlooding等拒絕服務攻擊。(2)IP欺騙攻擊過程(3)IP欺騙攻擊對策原理較簡單,但實施起來難度相當大。而且現在大多數OS使用較強壯的隨機序列號生成器,要準確猜測TCP連接的ISN幾乎不可能。
?在邊界路由器上進行源地址過濾,也就是說,對進入本網絡的IP包,要檢查其源IP地址,禁止外來的卻使用本地IP的數據包進入,這也是大多數路由器的缺省配置。
?禁止r-類型的服務,用SSH代替Telnet、rlogin這樣的不安全的網絡服務。
?如果是Linux系統,可以借助路由模塊的源地址過濾功能防止IP欺騙。
?TCP的序列號不是隨機選擇的或者隨機增加的。Bellovin描述了一種彌補TCP不足的方法,就是分割序列號空間,每一個連接都將有自己獨立的序列號空間。2.DNS欺騙攻擊(1)DNS欺騙攻擊原理針對DNS服務器向另一個DNS服務器發送某個解析請求,黑客冒充被請求方,向請求方返回一個被篡改了的應答。
DNS欺騙能夠成功,首先一個條件就是DNS服務器會在本地Cache中進行緩存(有可能是被黑客篡改了的信息),以后向該DNS服務器發送的對同一域名的解析請求,得到的結果都將被篡改(在該條目被緩存的生存期內)。
其實這樣的欺騙并不局限于正常的域名解析,反向域名解析(PTR)和郵件交換解析(MX),都可能被欺騙利用,可能導致的結果是:利用域名進行訪問認證的服務將允許黑客登錄,而郵件中繼的過程,也可能因為MX欺騙而將郵件投遞到了偽造的郵件服務器中。有了進行欺騙的可能,問題焦點是怎樣偽造DNS應答信息。
一:黑客可以控制本地的域名服務器,在其數據庫中增加一個附加條目,將攻擊目標的域名指向黑客自己的IP。......最后將在本地域名服務器上偽造的該條目“注射”到攻擊目標的域名服務器的Cache中。
二:更為現實的情況,就是黑客并不能控制任何DNS服務器,但它可以控制該服務器所在網絡的某臺主機,并可以通過Sniffer監聽所有該網絡中的通信情況。這時候,黑客要對遠程的DNS服務器進行欺騙攻擊,所采用的手段很象IP欺騙攻擊:首先黑客要冒充某個域名服務器的IP地址;其次黑客要能預測某個目標域名服務器所發送DNS數據包的ID號。DNS服務器之間同時可能會進行多個解析過程,而不同的過程使用的是相同的端口號(53),是通過DNS報文中的ID號來彼此區分的。不同的解析會話,采用不同的ID號。如果黑客所偽造的DNS應答包中含有正確的ID號,并且搶在被假冒DNS服務器之前向目標DNS服務器返回偽造信息,攻擊就是成功的。而多數DNS服務器采用一種有規律的ID生成機制,對于每次發送的域名解析請求,DNS服務器都會將數據包中的ID加1。如此一來,黑客如果可以在DNS服務器的網絡中進行嗅探,他只要向攻擊目標DNS服務器發送一個對本地某域名的解析請求,通過嗅探得到的來自目標DNS服務器的請求數據包(因為遠程DNS服務器肯定會轉而請求本地的DNS服務器),黑客就可以得到想要的ID號了。知道了ID號和ID增長的規律,以下的過程類似于IP欺騙攻擊。(2)DNS欺騙攻擊過程(3)DNS欺騙攻擊對策現在大多數DNS服務器軟件,都有防御DNS欺騙的相應措施,不過在配置DNS服務器時還應該注意:?使用最新版本的DNS服務器軟件(BIND),并及時安裝補丁。
?限制區域傳輸的范圍。
?限制動態更新。
?采用分層的DNS體系結構。
DNSExpert是DNS服務器分析工具,運行于Windows系統,可以對各種類型和版本的DNS服務器進行全面分析,掃描其安全問題,并給出直接的解決方法。5.2.5會話劫持攻擊1.會話劫持原理所謂會話劫持(SessionHijack),就是在一次正常的通信過程中,黑客作為第三方參與到其中,或者是在數據流里注射額外的信息,或者是將雙方的通信模式暗中改變,即從直接聯系變成交由黑客中轉。
一、中間人攻擊(ManInTheMiddle,MITM)
通過ARP欺騙進行的MITM攻擊,要求黑客必須置身于通信雙方任意一方的網絡中(共享式/交換式),他通過構造假的ARP響應包,污染受害主機的ARP緩沖區,使受害主機彼此之間發送的數據包先到達黑客的主機(但IP地址正確),再由黑客重新構造轉發(改變MAC地址)。
對于DNS欺騙,因為是基于IP地址的,所以在廣域網內也可以操作進行,例如Web服務器重定向。MITM攻擊相當于在通信雙方之間加入了一個透明的代理,而且這種攻擊方式不僅對常規的通信協議有效(明文傳輸),對于配置不當的加密協議也有利用的可能,如SSH和SSL協議。
二、注射式會話劫持不需要改變通信雙方數據的流向,只是在正常的數據流中插入黑客填充的內容。涉及到兩種技術:IP欺騙和序列號判斷(僅TCP通信需要)。黑客首先要能夠對被攻擊對象的網絡通信進行監聽,其次,他要等待一次TCP會話連接完全建立之后(成功地進行了身份認證)。他沒有必要猜測序列號,因為他可以根據嗅探得到的數據來構造正確的序列號。
有一個致命的弱點,就是可能導致ACK風暴(Storm),但如果源主機是Linux系統,就不會導致ACK風暴。黑客的注射數據會導致雙方通信的不同步,并最終導致會話失敗,當然黑客只要略施技巧就能恢復原有會話通信的同步。
MITM和注射式會話劫持并沒有清晰區別,兩種機制往往緊密結合在一起。
2.會話劫持工具及實例
Hunt可以在共享式/交換式網絡中工作,在混雜模式或ARP欺騙條件下進行嗅探,可進行注射式會話劫持或MITM。也可以中斷指定的連接會話,讓紊亂的會話恢復同步。Juggernaut基于傳統的Sniffer技術,可以監視網絡中所有的TCP會話,特性在于還可以主動劫持會話。由于攻擊者可以看到序列號,有必要的話,它可以把偽造的數據包放到TCP流中。這將允許攻擊者以被欺騙的客戶具有的特權來訪問服務器。攻擊者同樣也可以查看所有同攻擊相關的輸出,而且不把它們送往客戶機,這樣的攻擊是透明的。在這種情況下,攻擊者甚至不需要知道訪問機器所需的口令。攻擊者只需簡單地等待用戶登錄到服務器,然后劫持會話數據流即可。
TCP會話劫持能成功的前提首先是TCP建立連接的三次握手過程中沒有任何的認證機制。TCP假定只要接收的數據包包含正確的序列號就認為數據是可接受的。一旦連接建立,服務器將無法確定進入的數據包是確實來自真實的客戶機器而不是某一臺假冒的機器。
即使攻擊者無法進行竊聽,可以通過IP地址欺騙方法來猜測服務器的序列號完成會話劫持。當然有可能猜錯序列號,真正的客戶和服務器會對這些數據包進行應答,并要求重發。有可能產生大量的要求對方重發的TCPACK應答包,形成TCPACK風暴。攻擊者就可能不能完成會話劫持,并可能被發現。5.2.6緩沖區溢出攻擊1.緩沖區溢出概述十多年來應用非常廣泛的一種攻擊手段,近年來,許多著名的安全漏洞都與緩沖區溢出有關。所謂緩沖區溢出,就是由于填充數據越界而導致程序原有流程的改變,黑客借此精心構造填充數據,讓程序轉而執行特殊的代碼,最終獲得系統的控制權。
棧溢出(格式化字符串溢出)按填充數據溢出的緩沖區位置:堆溢出
BSS溢出按黑客重定向程序流程的方式:直接植入黑客自己代碼;跳轉執行系統中已經加載的代碼。按利用的外部條件的不同:本地緩沖區溢出;遠程緩沖區溢出。(1)堆棧概念基礎與棧幀相關的3個寄存器:SP(ESP):棧頂指針,它隨著數據入棧出棧而發生變化;BP(EBP):基地址指針,它用于標識棧中一個相對穩定的位置,通過BP,可以方便地引用函數參數以及局部變量;IP(EIP):函數調用返回后下一個執行語句的地址。
在函數調用之前,堆棧中首先被壓入所傳遞的參數,然后是返回地址(當前IP的值);進入函數后,由所調用的函數負責,將BP值入棧(并將SP的值賦給BP,作為新的棧幀基地址),接著為函數中的局部變量留出空間。函數執行完畢,在返回之前,要將局部變量所占用的棧空間清除,然后彈出保存的BP值(即恢復前一個棧幀的基地址),最后,利用彈出的IP值,程序執行又恢復到原有的流程。
棧是從內存高地址向內存低地址增長的,在函數的棧幀中,很重要的就是給函數局部變量留出的空間,通常函數中會通過類似“charbuffer[20]”之類的C語言語句定義一個緩沖區,如果要向該緩沖區中填充數據,其增長方向將是由低地址到高地址的。
這樣一來,就存在問題,如果給緩沖區填充的數據超過了預先分配給它的空間大小,即發生這種緩沖區“溢出”,很有可能覆蓋掉EBP甚至RET(返回地址),這也正是緩沖區溢出攻擊的“奧秘”所在。黑客只要特殊構造傳遞給程序的參數字串,使其緩沖區溢出,用黑客自己的代碼覆蓋原有的返回地址,就可以實現改變程序流程的目的,讓進程轉而執行黑客特意設定的代碼。(2)關于SUID/SGID
一般來講,用戶執行某個程序,系統中相應的進程將以該用戶的身份運行,繼而就要遵循對該用戶的權限設置,就算能夠讓進程轉向運行任意設定的代碼,還是無法突破這種限制,因為無論怎樣,進程始終是以該用戶身份運行的。
在UNIX系統中,程序在沒有運行前,作為一個靜態的文件,屬于某個創建它的用戶,因此也就具有屬主的UID和GID。為了規定不同用戶的訪問權限,還可以設定文件的存取模式。存取模式中除了3個表示不同用戶權限的數字外,還有一個可設置文件特性的數字,它也是八進制數,其中2表示設定了SGID,4表示設定了SUID,而SGID和SUID的特性正是緩沖區溢出攻擊所要利用的。
一旦程序開始執行,就變成了動態的進程,系統會給該進程分配進程標識號(PID)。此外進程還具有兩組特殊的標識號,一組是真實(Real)UID和GID,另一組是有效(Effective)UID和GID。真實UID和GID用于標識運行該進程的用戶,而有效UID和GID則是真正用于存取權限判斷的標識號。
一般來講,如果該進程對應的程序文件并沒有設置SUID或SGID,進程的真實UID與其有效UID就是相同的,都等于運行該程序的用戶的UID,組標識也是如此。但是如果程序設置了SUID,那對應進程的有效UID就不是運行該進程的用戶了,而是該程序本身屬主的UID。即設置了SUID位的X程序,無論誰運行它,都仿佛是X的屬主自己運行。
如果某個設置了SUID位的程序屬于root用戶所有,那無論誰執行它,都相當于用root身份在運行。進而可以想到,如果該程序具有緩沖區溢出漏洞,黑客就可以利用這一漏洞,以root的權限來運行自己設定的代碼了。2.UNIX中的棧溢出攻擊voidfunction(inta,intb,intc){charbuffer1[5];charbuffer2[10];int*ret=buffer1+12;(*ret)+=8;}voidmain(){intx=0;function(1,2,3);x=1;printf{“%d\n”,x);}在這個程序中,“ret=buffer1+12”語句用于讀取棧中存放的function函數的返回地址,而“(*ret)+=8”語句則是將該返回地址加8并重新賦值。function函數返回時,將越過其下一條語句“x=1”,轉而直接執行“printf(“%d\n”,x)”語句,最終x的值將是0,而不是1。這是一個典型的修改函數返回地址的例子。通常存在緩沖區溢出漏洞的程序又是怎樣“無意中”修改了函數返回地址的呢?
voidfunction(char*str){voidmain(){charbuffer[16];charlarge_string[256];strcpy(buffer,str);inti;}for(i=0;i<255;i++)large_string[i]=‘A’;function(large_string);}
buffer后面的棧內容將被該字串覆蓋掉(包括ebp和ret)。因為我們填充的是‘A’,最終函數返回地址將變成“0x41414141”,如果執行這個程序,由于該地址不在程序有效虛擬內存范圍內,系統會報告一個“SegmentationViolation”錯誤。
gets、strcat、spintf、vsprintf、scanf都能導致緩沖區溢出。通常利用此類漏洞進行攻擊時,這種植入的字串都是通過命令行參數傳遞給程序的主函數的,再傳給被調函數的。
通常植入緩沖區的代碼執行的是一個Shell,如果緩沖區溢出的程序本身是SUID的,其屬主是root,那黑客得到的Shell也就具有root權限了。鑒于代碼的目的性非常明確,人們就將這段代碼叫做“Shellcode”(不同的系統,其Shellcode也各不相同)。下面是一個典型的Shellcode源程序,使用execve函數來執行/bin/sh命令,也就是得到一個Shell。#include<stdio.h>voidmain(){char*name[2];name[0]=“/bin/sh”;name[1]=NULL;execve(name[0],name,NULL);}
但是,要將Shellcode植入緩沖區中,它必須作為可直接執行的機器代碼才行,所以要先將該程序編譯成匯編代碼,然后經過適當的調整,最后得到適合系統類型的機器代碼。
有了這段代碼,黑客就可以設計自己的攻擊程序了。在該程序中,他要構造一個特殊的字串,該字串中包含Shellcode,也包含Shellcode的地址(用該地址覆蓋函數的返回地址)。然后,攻擊程序調用execve之類的函數來執行有緩沖區溢出漏洞的命令程序,并將構造好的字串作為參數傳遞給命令程序。這樣的程序,通常被稱為exploit程序。
那么,Shellcode的地址又是怎樣確定的呢?因為Shellcode是被植入到棧緩沖區的,所以,定位Shellcode,也就是定位內存中棧的地址了。下面的程序說明怎樣將包含地址和Shellcode的字串植入緩沖區的。charshellcode[]=“\xeb\x1f\x5e\x89\x76\x08\x31\xc0\x88\x46\x07\x89\x46\x0c\xb0\x0b”“\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\x31\xdb\x89\xd8\x40\xcd”“\x80\xe8\xdc\xff\xff\xff/bin/sh”;
charlarge_string[128];voidmain(){charbuffer[96];inti;long*long_ptr=(long*)large_string;
for(i=0;i<32;i++)*(long_ptr+i)=(int)buffer;for(i=0;i<strlen(shellcode);i++)large_string[i]=shellcode[i];strcpy(buffer,large_string);}
首先,在large_string中填充buffer的地址;然后,將Shellcode放到large_string的最前面;最后,將這個超長的字串拷貝到狹小的緩沖區中。其結果是,main函數的正常返回地址被buffer的地址所取代,而buffer開始處,正好是Shellcode,main函數不能正常退出,strcpy執行之后將會轉而執行Shellcode。當緩沖區空間很小時(容納
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 浙江省杭州及周邊重點中學2024-2025學年高一下學期期中考試歷史試題(含答案)
- 四川省瀘州市合江縣2024-2025學年七年級下學期期中考試生物學試題(含答案)
- 保密協議模板
- 海口房屋買賣合同
- 個人公積金商業貸購房合同
- 15 我們不亂扔 公開課一等獎創新教學設計
- 幼兒表演性舞蹈創編實例
- 員工加班調休統計分析報告審核獎懲管理制度
- 蘇教版八年級上冊第七單元 生物和環境是統一體第十九章 生態系統第一節 生態系統的組成教案
- 人教版小學二年級上冊數學 第1單元 長度單位 教案
- 律所律師勞動合同范本
- 防艾教育課件下載
- 2025中交第一航務工程局限公司招聘69人易考易錯模擬試題(共500題)試卷后附參考答案
- 施工現場質量、安全生產管理體系
- 2025年醫院感染知識題庫及答案
- 2025年山東濰坊市再擔保集團股份限公司社會招聘11人自考難、易點模擬試卷(共500題附帶答案詳解)
- (高清版)DB11∕T2326-2024油氣管道高后果區識別與管理規范
- 液壓升降平臺施工方案
- 房產中介法律知識
- 2024年11月-礦山隱蔽致災因素普查
- 2025年由民政局策劃的離婚協議官方文本模板
評論
0/150
提交評論