版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、LINUX下SYN攻防戰(zhàn) (一)SYN攻擊原理SYN攻擊屬于DOS攻擊的一種,它利用TCP協(xié)議缺陷,通過發(fā)送大量的半連接請求,耗費服務器CPU和內(nèi)存資源.SYN攻擊聊了能影響主機外,還可以危害路由器,防火墻等網(wǎng)絡系統(tǒng),事實上SYN攻擊并不管目標是什么系統(tǒng),只要這些系統(tǒng)打開TCP服務就可以實施.我們知道,在網(wǎng)絡中兩臺電腦建立TCP連接時需要進行三次握手過程,客戶端首先向服務器發(fā)關TCP SYN數(shù)據(jù)包,接著服務器會向客戶端發(fā)關相應的SYN ACK數(shù)據(jù)包,最后客戶端會以ACK進行響應.從而建立正常的握手過程.在具體的連接細節(jié)中
2、,服務器最早接受到SYN包時,在TCP協(xié)議棧中會將相應的半連接記錄添加到隊列中,之后等待接受下面準備握手的數(shù)據(jù)包,如果握手成功,那么這個半連接記錄將從隊列中刪除.或者當服務器未收到客戶端的確認包時,會重發(fā)請求包,一直到超時才將此條目從未連接隊列刪除.但是,在服務器中的TCP協(xié)議棧中存儲的半連接記錄是有限的,當服務器受到SYN型的DOS攻擊后,隊列會很快處于充滿狀態(tài),客戶端在短時間內(nèi)偽造大量不存在的IP地址,向服務器不斷地發(fā)送SYN包,服務器回復確認包,并等待客戶的確認,由于源地址是不存在的,服務器需要不斷的重發(fā)直至超時,這些偽造的SYN包將長時間占用未連接隊列,正常的SYN請求被丟棄,目標系統(tǒng)
3、運行緩慢嚴重者引起網(wǎng)絡堵塞甚至系統(tǒng)癱瘓,服務器隨后就不再接受新的網(wǎng)絡連接,從而造成正常的客戶端無法訪問服務器的情況發(fā)生. (二)實戰(zhàn)SYN攻擊過程SYN攻擊實現(xiàn)起來非常的簡單,互聯(lián)網(wǎng)上有大量面成的SYN攻擊工具可以直接利用.假設在Linux服務器中安裝了Web服務,在 Linux的命令提示符中執(zhí)行"service httpd start"命令,即可開啟Web服務,接著執(zhí)行"netstat -ant | grep 80"命令,可以看到80端口已經(jīng)處于打開狀態(tài)了.在網(wǎng)絡的其它機器上利用
4、SYN攻擊軟件(例如"synkill"等)對Linux服務器的80端口進行 DOS攻擊,之后在Linux服務器中執(zhí)行命令"netstat -ant | grep 80",可以看到大量的網(wǎng)絡連接信息,包括連接的類型,原地址,目標直地址,連接狀態(tài)等,當然,因為SYN工具通常會偽告客戶端地址,因此在連接列表中是找不到真實地址的.在連接狀態(tài)中顯示"SYN_RECV",表示當前處于半連接狀態(tài).我們可以每隔幾秒鐘運行命令"netstat -n -p TCP | grep SYN_RECV |grep 80 | wc -l",來
5、檢查某個端口(這里為80)的未連接隊列的條目數(shù),當發(fā)現(xiàn)該條目數(shù)增大到某個極大值,并處于平衡狀態(tài)時,那么就很有可能是Linux的TCP協(xié)議棧中的隊列滿了,此時用戶就無法建立新的連接了. (三)如可在Linux中防御SYN型DOS攻擊在Linux中防御SYN型DOS攻擊的方法比較常見的有增大隊列SYN最大半連接數(shù),減小超時值,利用SYN cookie技術,過濾可疑的IP地址等常用方法,下面分別進行分析. (四)增大隊列SYN最大半連接數(shù)在Linux中執(zhí)
6、行命令"sysctl -a|grep net.ipv4.tcp_max_syn_backlog",在返回的"net.ipv4.tcp_max_syn_backlog=256"中顯示 Linux隊列的最大半連接容量是256.這個默認值對于Web服務器來說是遠遠不夠的,一次簡單的SYN攻擊就足以將其完全占用.因此,防御DOS攻擊最簡單的辦法就是增大這個默認值,在Linux中執(zhí)行命令"sysctl -w et.ipv4.tcp_max_syn_backlog=3000",這樣就可以將隊列SYN最大半連接數(shù)容量值改為3000了.
7、 (五)減小超時值在Linux中建立TCP連接時,在客戶端和服務器之間創(chuàng)建握手過程中,當服務器未收到客戶端的確認包時,會重發(fā)請求包,一直到超時才將此條目從未連接隊列是刪除,也就是說半連接存在一定的存活時間,超過這個時間,半連接就會自動斷開,在上述SYN攻擊測試中,當經(jīng)過較長的的時間后,就會發(fā)現(xiàn)一些半連接已經(jīng)自動斷開了.半連接存活時間實際上是系統(tǒng)所有重傳次數(shù)等待的超時時間之和,這個值越大,半連接數(shù)占用的Backlog隊列的時間就越長,系統(tǒng)能處理的 SYN請求就越少,因此,縮短超時時間就可以有效防御SYN攻擊,這可以通過縮小重傳超時時間和
8、減少重傳次數(shù)來實現(xiàn).在Linux中默認的重傳次數(shù)為5 次,總超時時間為3分鐘,在Linux中執(zhí)行命令"sysctl -w net.ipv4.tcp_synack_retries=1",將超時重傳次數(shù)設置為1. (六)利用SYN cookie來防御DOS攻擊除了在TCP協(xié)議棧中開辟一個內(nèi)存空間來存儲半連接數(shù)之外,為避免因為SYN請求數(shù)量太多,導致該隊列被填滿的情況下,Linux服務器仍然可以處理新的 SYN連接,可以利用SYN Cookie技術來處理SYN連接.什么是SYN Cookie呢?SYN Co
9、okie是用一個Cookie來響應TCP SYN請求的,在正常的TCP連接過程中,當服務器接收一個SYN數(shù)據(jù)包,就會返回一個SYN -ACK包來應答,然后進入TCP -SYN -RECV(半開放連接)狀態(tài)來等待最后返回的ACK包.服務器用一個數(shù)據(jù)空間來描述所有未決的連接,然而這個數(shù)據(jù)空間的大小是有限的,所以攻擊者將塞滿這個空間,在TCP SYN COOKIE的執(zhí)行過程中,當服務器收到一個SYN包的時候,他返回一個SYN -ACK包,這個數(shù)據(jù)包的ACK序列號是經(jīng)過加密的,它由TCP連接的源地址和端口號,目標地址和端口號,以及一個加密種子經(jīng)過HASH計算得出的,然后服務器釋放所有的狀態(tài).如果一個A
10、CK包從客戶端返回后,服務器重新計算COOKIE來判斷它是不是上個SYN -ACK的返回包.如果是的話,服務器就可以直接進入TCP連接狀態(tài)并打開連接.這樣服務器就可以避免守候半開放連接了,在Linux中執(zhí)行命令"echo "echo "1" > / proc/sys/net/ipv4/tcp_syncookies"> > /etc/rc_local",這樣即可啟動SYN Cookie,并將其添加到了Linux的啟動文件,這樣即使系統(tǒng)重啟也不影響SYN Cookie的激活狀態(tài).(七)過濾可疑的IP直址當客戶機對服務器進
11、行攻擊時.在服務器上可以進行抓包操作,這樣可以對數(shù)據(jù)包中的IP進行檢測,然后再對這些可疑的潮行過濾,從而將其無法正常連接服務器.利用Linux自帶的"tcpdump"命令可以實現(xiàn)抓包操作.執(zhí)行命令"tcpdump -c 1000 -l eth 0 -n dst port 80 > test.txt",就可以在當前目錄下創(chuàng)建一個'test.txt"文件,在其中包含大量的網(wǎng)絡數(shù)據(jù)包,通過對該文件的的分析,就很容易得到可疑的客戶端IP,之后利用系統(tǒng)自帶的"iptables"命令即可對可疑IP進行屏蔽.便如執(zhí)行命令&q
12、uot;iptables -A INPUT -s 9 -d 0/0 -j REJECT",即可禁止"9"的外部主要訪問本機所有端口.其中"-j REJECT"參數(shù)表示禁止訪問.首先聲明,這篇文章你我參考了一些網(wǎng)上的文章,自己經(jīng)過實戰(zhàn)檢驗過了。當我netstat n p TCP tcp的時候出現(xiàn)tcp 0 0 192.168.xxx.xxx:25 8:2037 SYN_RECV大概有7百多的連接數(shù)。我自己做了一些配置,對于少量的tcp syn flood感覺還是有點效果。我這里
13、先介紹以下什么是TCP SYN Flood攻擊? TCP SYN Flood是一種常見有最容易被利用的一種攻擊手法,我這里就介紹一下SYN攻擊的基本原理、工具及檢測方法,并探討SYN攻擊防范技術。我先說一下TCP的三次握手連接:1、 第一次握手:建立連接,客戶端發(fā)送syn包(syn=j)到服務器,并進入SYN_SEND狀態(tài),等待服務器確認。2、 第二次握手:服務器收到syn包,必須確認客戶的SYN(ack=j+1),同時自己也發(fā)送一個SYN包(syn=k),即SYN+ACK包,此時服務器進入SYN_RECV狀態(tài);3、 第三次握手:客戶端收到服務器的SYNAC
14、K包,向服務器發(fā)送確認包ACK(ack=k+1),此包發(fā)送完畢,客戶端和服務器進入ESTABLISHED狀態(tài),完成三次握手。 (TCP 連接示意圖)(TCP 關閉示意圖) 完成三次握手,客戶端與服務器開始傳送數(shù)據(jù),在上述過程中,還有一些重要的概念: 未連接隊列:在三次握手協(xié)議中,服務器維護一個未連接隊列,該隊列為每個客戶端的SYN包(syn=j)開設一個條目,該條目表明服務器已收到SYN包,并向客戶發(fā)出確認,正在等待客戶的確認包。這些條目所標識的連接在服務器處于Syn_RECV狀態(tài),當服務器收到客戶的確認包時,刪除該條目,服務器進入ESTABLISHED狀態(tài)。 Backlog參數(shù):表示未連接隊
15、列的最大容納數(shù)目。 SYN-ACK 重傳次數(shù)服務器發(fā)送完SYNACK包,如果未收到客戶確認包,服務器進行首次重傳,等待一段時間仍未收到客戶確認包,進行第二次重傳,如果重傳次數(shù)超過系統(tǒng)規(guī)定的最大重傳次數(shù),系統(tǒng)將該連接信息從半連接隊列中刪除。注意,每次重傳等待的時間不一定相同。 半連接存活時間:是指半連接隊列的條目存活的最長時間,也即服務從收到SYN包到確認這個報文無效的最長時間,該時間值是所有重傳請求包的最長等待時間總和。有時我們也稱半連接存活時間為Timeout時間、SYN_RECV存活時間。SYN攻擊的基本原理 SYN攻擊屬于DOS攻擊的一種,它利用TCP協(xié)議缺陷,通過發(fā)送大量的半連接請求,
16、耗費CPU和內(nèi)存資源。SYN攻擊除了能影響主機外,還可以危害路由器、防火墻等網(wǎng)絡系統(tǒng),事實上SYN攻擊并不管目標是什么系統(tǒng),只要這些系統(tǒng)打開TCP服務就可以實施。從上圖可看到,服務器接收到連接請求(syn=j),將此信息加入未連接隊列,并發(fā)送請求包給客戶(syn=k,ack=j+1),此時進入SYN_RECV狀態(tài)。當服務器未收到客戶端的確認包時,重發(fā)請求包,一直到超時,才將此條目從未連接隊列刪除。配合IP欺騙,SYN攻擊能達到很好的效果,通常,客戶端在短時間內(nèi)偽造大量不存在的IP地址,向服務器不斷地發(fā)送syn包,服務器回復確認包,并等待客戶的確認,由于源地址是不存在的,服務器需要不斷的重發(fā)直至
17、超時,這些偽造的SYN包將長時間占用未連接隊列,正常的SYN請求被丟棄,目標系統(tǒng)運行緩慢,嚴重者引起網(wǎng)絡堵塞甚至系統(tǒng)癱瘓。SYN攻擊工具 SYN攻擊實現(xiàn)起來非常的簡單,互聯(lián)網(wǎng)上有大量現(xiàn)成的SYN攻擊工具。 windows系統(tǒng)下的SYN工具 以synkill.exe為例,運行工具,選擇隨機的源地址和源端囗,并填寫目標機器地址和TCP端囗,激活運行,很快就會發(fā)現(xiàn)目標系統(tǒng)運行緩慢。如果攻擊效果不明顯,可能是目標機器并未開啟所填寫的TCP端囗或者防火墻拒絕訪問該端囗,此時可選擇允許訪問的TCP端囗,通常,windows系統(tǒng)開放tcp139端囗,UNIX系統(tǒng)開放tcp7、21、23等端囗。 檢測SYN攻
18、擊 檢測SYN攻擊非常的方便,當你在服務器上看到大量的半連接狀態(tài)時,特別是源IP地址是隨機的,基本上可以斷定這是一次SYN攻擊。我們使用系統(tǒng)自帶的netstat 工具來檢測SYN攻擊:# netstat -n -p TCPtcp 0 0 192.168.xxx.xxx:25 63:23112 SYN_RECV - tcp 0 0 192.168.xxx.xxx:25 31:1518 SYN_RECV - tcp 0 0 192.168.xxx.xxx:25 8:2508 SYN_RECV - tcp 0 0 192.168
19、.xxx.xxx:25 43:3914 SYN_RECV - 以上是在linux上查看到的,很多連接處于SYN_RECV狀態(tài)(在WINDOWS系統(tǒng)中是SYN_RECEIVED狀態(tài)),源IP地址都是隨機的(也可能是同一個IP的很多SYNRECV連接狀態(tài)),表明這是一種帶有IP欺騙的SYN攻擊。 我們也可以通過下面的命令直接查看在LINUX環(huán)境下某個端囗的未連接隊列的條目數(shù): netstat atun grep SYN_RECV grep :25 wc -l 顯示TCP端囗25的未連接數(shù)請求及個數(shù)。SYN攻擊防范技術 關于SYN攻擊防范技術,人們研究得比較早。歸納起來,主要有兩
20、大類,一類是通過防火墻、路由器等過濾網(wǎng)關防護,另一類是通過加固TCP/IP協(xié)議棧防范.但必須清楚的是,SYN攻擊不能完全被阻止,我們所做的是盡可能的減輕SYN攻擊的危害,除非將TCP協(xié)議重新設計。 過濾網(wǎng)關防護 這里,過濾網(wǎng)關主要指明防火墻,當然路由器也能成為過濾網(wǎng)關。防火墻部署在不同網(wǎng)絡之間,防范外來非法攻擊和防止保密信息外泄,它處于客戶端和服務器之間,利用它來防護SYN攻擊能起到很好的效果。過濾網(wǎng)關防護主要包括超時設置,SYN網(wǎng)關和SYN代理三種。 網(wǎng)關超時設置:防火墻設置SYN轉發(fā)超時參數(shù)(狀態(tài)檢測的防火墻可在狀態(tài)表里面設置),該參數(shù)遠小于服務器的timeout時間。當客戶端發(fā)送完SYN
21、包,服務端發(fā)送確認包后(SYNACK),防火墻如果在計數(shù)器到期時還未收到客戶端的確認包(ACK),則往服務器發(fā)送RST包,以使服務器從隊列中刪去該半連接。值得注意的是,網(wǎng)關超時參數(shù)設置不宜過小也不宜過大,超時參數(shù)設置過小會影響正常的通訊,設置太大,又會影響防范SYN攻擊的效果,必須根據(jù)所處的網(wǎng)絡應用環(huán)境來設置此參數(shù)。 SYN網(wǎng)關:SYN網(wǎng)關收到客戶端的SYN包時,直接轉發(fā)給服務器;SYN網(wǎng)關收到服務器的SYN/ACK包后,將該包轉發(fā)給客戶端,同時以客戶端的名義給服務器發(fā)ACK確認包。此時服務器由半連接狀態(tài)進入連接狀態(tài)。當客戶端確認包到達時,如果有數(shù)據(jù)則轉發(fā),否則丟棄。事實上,服務器除了維持半連
22、接隊列外,還要有一個連接隊列,如果發(fā)生SYN攻擊時,將使連接隊列數(shù)目增加,但一般服務器所能承受的連接數(shù)量比半連接數(shù)量大得多,所以這種方法能有效地減輕對服務器的攻擊。 SYN代理:當客戶端SYN包到達過濾網(wǎng)關時,SYN代理并不轉發(fā)SYN包,而是以服務器的名義主動回復SYN/ACK包給客戶,如果收到客戶的ACK包,表明這是正常的訪問,此時防火墻向服務器發(fā)送ACK包并完成三次握手。SYN代理事實上代替了服務器去處理SYN攻擊,此時要求過濾網(wǎng)關自身具有很強的防范SYN攻擊能力。2、加固tcp/ip協(xié)議棧 防范SYN攻擊的另一項主要技術是調(diào)整tcp/ip協(xié)議棧,修改tcp協(xié)議實現(xiàn)。主要方法有SynAtt
23、ackProtect保護機制、SYN cookies技術、增加最大半連接和縮短超時時間等。tcp/ip協(xié)議棧的調(diào)整可能會引起某些功能的受限,管理員應該在進行充分了解和測試的前提下進行此項工作。 SYN cookies技術,TCP協(xié)議開辟了一個比較大的內(nèi)存空間backlog隊列來存儲半連接條目,當SYN請求不斷增加,并這個空間,致使系統(tǒng)丟棄SYN連接。為使半連接隊列被塞滿的情況下,服務器仍能處理新到的SYN請求,SYN cookies技術被設計出來。 SYN cookies應用于linux、FreeBSD等操作系統(tǒng),當半連接隊列滿時,SYNcookies并不丟棄SYN請求,而是通過加密技術來標識
24、半連接狀態(tài)。 在TCP實現(xiàn)中,當收到客戶端的SYN請求時,服務器需要回復SYNACK包給客戶端,客戶端也要發(fā)送確認包給服務器。通常,服務器的初始序列號由服務器按照一定的規(guī)律計算得到或采用隨機數(shù),但在SYN cookies中,服務器的初始序列號是通過對客戶端IP地址、客戶端端囗、服務器IP地址和服務器端囗以及其他一些安全數(shù)值等要素進行hash運算,加密得到的,稱之為cookie。當服務器遭受SYN攻擊使得backlog隊列滿時,服務器并不拒絕新的SYN請求,而是回復cookie(回復包的SYN序列號)給客戶端, 如果收到客戶端的ACK包,服務器將客戶端的ACK序列號減去1得到cookie比較值,
25、并將上述要素進行一次hash運算,看看是否等于此cookie。如果相等,直接完成三次握手(注意:此時并不用查看此連接是否屬于backlog隊列)。 在RedHat linux中,啟用SYN cookies是通過在啟動環(huán)境中設置以下命令來完成: # echo 1 > /proc/sys/net/ipv4/tcp_syncookies 注:也可以通過修改其它參數(shù),或者使用/proc/sys/net/ipv4/netfilter/ip_contrack_* 增加最大半連接數(shù)(加大未連接隊列空間) 大量的SYN請求導致未連接隊列被塞滿,使正常的TCP連接無法順利完成三次握手,通過增大未連接隊列空間可以緩解這種壓力。當然backlog隊列需要占用大量的內(nèi)存資源,不能被無限的擴大。 LINUX:Linux用變量tcp_max_syn_backlog定義backlog隊列容納的最大半連接數(shù)。在Redhat 7.3中,該變量的值默認為256,在AS中,是1024。這個值是遠遠不夠的,一次強度不大的SYN攻擊就能使半連接隊列占滿。我們可以通過以下命令修改此變量的值: # sysctl -w net.ipv4.tcp_max_syn_backlog="
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 人教版七年級歷史與社會下冊5.3.2-東部和西部差異顯著說課稿
- 家具鋼材知識培訓課件
- 城鄉(xiāng)醫(yī)療保障的統(tǒng)籌發(fā)展研究-理論、實證與對策
- 2025年高中禁毒教育第三課 禁毒法律 課件 (共46張)
- 第十七章 勾股定理 評估測試卷(含答案)2024-2025學年數(shù)學人教版八年級下冊
- 毒品基礎知識培訓課件
- 貴州師范大學《版畫》2023-2024學年第一學期期末試卷
- 貴州商學院《廣聯(lián)達小學期》2023-2024學年第一學期期末試卷
- 貴州黔南科技學院《統(tǒng)計學C》2023-2024學年第一學期期末試卷
- 新疆吐魯番地區(qū)(2024年-2025年小學六年級語文)部編版專題練習((上下)學期)試卷及答案
- 中學學校裝修改造工程施工組織設計方案
- 幼兒園反恐防暴技能培訓內(nèi)容
- 2024年WPS計算機二級考試題庫350題(含答案)
- 2024年5G網(wǎng)絡覆蓋工程分包合同
- 2025屆北京市海淀區(qū)交大附中高一物理第一學期期末復習檢測試題含解析
- 護理員技能培訓課件
- 煤礦防治水細則解讀
- 四川新農(nóng)村建設農(nóng)房設計方案圖集川東北部分
- 2023智能座艙白皮書-聚焦電動化下半場-畢馬威
- 福建省福州市九師教學聯(lián)盟2023-2024學年高一上學期期末學業(yè)聯(lián)考化學試題(解析版)
- 植物病蟲害防治技能大賽理論題及答案
評論
0/150
提交評論