LINUX下SYN攻防戰 轉

2022-09-13 01:21:14 字數 3115 閱讀 8105

linux下syn攻防戰

(一)syn攻擊原理

syn攻擊屬於dos攻擊的一種,它利用tcp協議缺陷,通過傳送大量的半連線請求,耗費伺服器cpu和記憶體資源.syn攻擊聊了能影響主機外,還可以危害路由器,防火牆等網路系統,事實上syn攻擊並不管目標是什麼系統,只要這些系統開啟tcp服務就可以實施.我們知道,在網路中兩台電腦建立tcp連線時需要進行三次握手過程,客戶端首先向伺服器發關tcp syn資料報,接著伺服器會向客戶端發關相應的syn ack資料報,最後客戶端會以ack進行響應.從而建立正常的握手過程.在具體的連線細節中,伺服器最早接受到syn包時,在tcp協議棧中會將相應的半連線記錄新增到佇列中,之後等待接受下面準備握手的資料報,如果握手成功,那麼這個半連線記錄將從佇列中刪除.或者當伺服器未收到客戶端的確認包時,會重發請求包,一直到超時才將此條目從未連線佇列刪除.但是,在伺服器中的tcp協議棧中儲存的半連線記錄是有限的,當伺服器受到syn型的dos攻擊後,佇列會很快處於充滿狀態,客戶端在短時間內偽造大量不存在的ip位址,向伺服器不斷地傳送syn包,伺服器回覆確認包,並等待客戶的確認,由於源位址是不存在的,伺服器需要不斷的重發直至超時,這些偽造的syn包將長時間占用未連線佇列,正常的syn請求被丟棄,目標系統執行緩慢嚴重者引起網路堵塞甚至系統癱瘓,伺服器隨後就不再接受新的網路連線,從而造成正常的客戶端無法訪問伺服器的情況發生.

(二)實戰syn攻擊過程

syn攻擊實現起來非常的簡單,網際網路上有大量麵成的syn攻擊工具可以直接利用.假設在linux伺服器中安裝了web服務,在 linux的命令提示符中執行"service httpd start"命令,即可開啟web服務,接著執行"netstat -ant | grep 80"命令,可以看到80埠已經處於開啟狀態了.在網路的其它機器上利用syn攻擊軟體(例如"synkill"等)對linux伺服器的80埠進行 dos攻擊,之後在linux伺服器中執行命令"netstat -ant | grep 80",可以看到大量的網路連線資訊,包括連線的型別,原位址,目標直位址,連線狀態等,當然,因為syn工具通常會偽告客戶端位址,因此在連線列表中是找不到真實位址的.在連線狀態中顯示"syn_recv",表示當前處於半連線狀態.我們可以每隔幾秒鐘執行命令"netstat -n -p tcp | grep syn_recv |grep 80 | wc -l",來檢查某個埠(這裡為80)的未連線佇列的條目數,當發現該條目數增大到某個極大值,並處於平衡狀態時,那麼就很有可能是linux的tcp協議棧中的佇列滿了,此時使用者就無法建立新的連線了.

(三)如可在linux中防禦syn型dos攻擊

在linux中防禦syn型dos攻擊的方法比較常見的有增大佇列syn最大半連線數,減小超時值,利用syn cookie技術,過濾可疑的ip位址等常用方法,下面分別進行分析.

(四)增大佇列syn最大半連線數

在linux中執行命令"sysctl -a|grep net.ipv4.tcp_max_syn_backlog",在返回的"net.ipv4.tcp_max_syn_backlog=256"中顯示 linux佇列的最大半連線容量是256.這個預設值對於web伺服器來說是遠遠不夠的,一次簡單的syn攻擊就足以將其完全占用.因此,防禦dos攻擊最簡單的辦法就是增大這個預設值,在linux中執行命令"sysctl -w et.ipv4.tcp_max_syn_backlog=3000",這樣就可以將佇列syn最大半連線數容量值改為3000了.

(五)減小超時值

在linux中建立tcp連線時,在客戶端和伺服器之間建立握手過程中,當伺服器未收到客戶端的確認包時,會重發請求包,一直到超時才將此條目從未連線佇列是刪除,也就是說半連線存在一定的存活時間,超過這個時間,半連線就會自動斷開,在上述syn攻擊測試中,當經過較長的的時間後,就會發現一些半連線已經自動斷開了.半連線存活時間實際上是系統所有重傳次數等待的超時時間之和,這個值越大,半連線數占用的backlog佇列的時間就越長,系統能處理的 syn請求就越少,因此,縮短超時時間就可以有效防禦syn攻擊,這可以通過縮小重傳超時時間和減少重傳次數來實現.在linux中預設的重傳次數為5 次,總超時時間為3分鐘,在linux中執行命令"sysctl -w net.ipv4.tcp_synack_retries=1",將超時重傳次數設定為1.

(六)利用syn cookie來防禦dos攻擊

除了在tcp協議棧中開闢乙個記憶體空間來儲存半連線數之外,為避免因為syn請求數量太多,導致該佇列被填滿的情況下,linux伺服器仍然可以處理新的 syn連線,可以利用syn cookie技術來處理syn連線.什麼是syn cookie呢?syn cookie是用乙個cookie來響應tcp syn請求的,在正常的tcp連線過程中,當伺服器接收乙個syn資料報,就會返回乙個syn -ack包來應答,然後進入tcp -syn -recv(半開放連線)狀態來等待最後返回的ack包.伺服器用乙個資料空間來描述所有未決的連線,然而這個資料空間的大小是有限的,所以攻擊者將塞滿這個空間,在tcp syn cookie的執行過程中,當伺服器收到乙個syn包的時候,他返回乙個syn -ack包,這個資料報的ack序列號是經過加密的,它由tcp連線的源位址和埠號,目標位址和埠號,以及乙個加密種子經過hash計算得出的,然後伺服器釋放所有的狀態.如果乙個ack包從客戶端返回後,伺服器重新計算cookie來判斷它是不是上個syn -ack的返回包.如果是的話,伺服器就可以直接進入tcp連線狀態並開啟連線.這樣伺服器就可以避免守候半開放連線了,在linux中執行命令"echo "echo "1" > / proc/sys/net/ipv4/tcp_syncookies"> > /etc/rc_local",這樣即可啟動syn cookie,並將其新增到了linux的啟動檔案,這樣即使系統重啟也不影響syn cookie的啟用狀態.

(七)過濾可疑的ip直址

當客戶機對伺服器進行攻擊時.在伺服器上可以進行抓包操作,這樣可以對資料報中的ip進行檢測,然後再對這些可疑的潮行過濾,從而將其無法正常連線伺服器.利用linux自帶的"tcpdump"命令可以實現抓包操作.執行命令"tcpdump -c 1000 -l eth 0 -n dst port 80 > test.txt",就可以在當前目錄下建立乙個'test.txt"檔案,在其中包含大量的網路資料報,通過對該檔案的的分析,就很容易得到可疑的客戶端ip,之後利用系統自帶的"iptables"命令即可對可疑ip進行遮蔽.便如執行命令"iptables -a input -s 219.29.78.79 -d 0/0 -j reject",即可禁止"219.29.78.79"的外部主要訪問本機所有埠.其中"-j reject"引數表示禁止訪問.

系統安全攻防戰 DLL注入技術詳解

dll注入是一種允許攻擊者在另乙個程序的位址空間的上下文中執行任意 的技術。攻擊者使用dll注入的過程中如果被賦予過多的執行特權,那麼攻擊者就很有可能會在dll檔案中嵌入自己的惡意攻擊 以獲取更高的執行許可權。具體而言,該技術遵循以下步驟 1.需要將dll寫入磁碟中 2.createremoteth...

系統安全攻防戰 DLL注入技術詳解

dll注入是一種允許攻擊者在另乙個程序的位址空間的上下文中執行任意 的技術。攻擊者使用dll注入的過程中如果被賦予過多的執行特權,那麼攻擊者就很有可能會在dll檔案中嵌入自己的惡意攻擊 以獲取更高的執行許可權。具體而言,該技術遵循以下步驟 需要將dll寫入磁碟中 createremotethread...

系統安全攻防戰 DLL注入技術詳解

dll注入是一種允許攻擊者在另乙個程序的位址空間的上下文中執行任意 的技術。攻擊者使用dll注入的過程中如果被賦予過多的執行特權,那麼攻擊者就很有可能會在dll檔案中嵌入自己的惡意攻擊 以獲取更高的執行許可權。具體而言,該技術遵循以下步驟 1.需要將dll寫入磁碟中 2.createremoteth...