亚洲色一色噜一噜噜噜_在线国产精品一区二区_91国自产拍 精品_国产伦三级一区二区

  • <object id="nlumt"><tt id="nlumt"><pre id="nlumt"></pre></tt></object>
    <legend id="nlumt"><mark id="nlumt"></mark></legend>
    <pre id="nlumt"><tt id="nlumt"><rt id="nlumt"></rt></tt></pre>

    <bdo id="nlumt"><delect id="nlumt"></delect></bdo>

       找回密碼
       注冊

      QQ登錄

      只需一步,快速開始

      IP欺騙的技術

      [復制鏈接]
      1#
      發(fā)表于 2011-1-13 17:01:50 | 只看該作者 |倒序瀏覽 |閱讀模式
      。 & \% u) P4 `+ p1 I& \6 y9 z
      IP欺騙的技術比較復雜,不是簡單地照貓畫老虎就能掌握,但作為常規(guī)攻擊手段,有必要理解其原理,至少有利于自己的安全防范,易守難攻嘛。 ; C* I7 ~5 H8 n& ?
      3 ]" }$ S4 d  B: d; P
      假設B上的客戶運行rlogin與A上的rlogind通信: / T" ~' k* r7 w+ ~2 v% u

        s0 V7 T4 W4 N' K$ i: ~' \1. B發(fā)送帶有SYN標志的數(shù)據(jù)段通知A需要建立TCP連接。并將TCP報頭中的sequence number設置成自己本次連接的初始值ISN。
      5 ^3 q9 g* u* ^' {+ `" M
      5 {, V7 s  M$ J( k2. A回傳給B一個帶有SYS+ACK標志的數(shù)據(jù)段,告之自己的ISN,并確認B發(fā)送來的第一個數(shù)據(jù)段,將acknowledge number設置成B的ISN+1。 , z5 T4 b/ Q" G' C& t* S0 ^

      6 s( ~0 e) S7 N( m3. B確認收到的A的數(shù)據(jù)段,將acknowledge number設置成A的ISN+1。
      8 X2 q8 ]& a. @* a, F: @
      6 p( h- s0 H0 P; S3 \" w4 \; `B ---- SYN ----> A
      , a5 Z9 `+ X- Q" [# k" H1 gB <---- SYN+ACK A ! s7 Y1 @7 m0 L* i: J/ x! `
      B ---- ACK ----> A 3 N) }% f; z3 N) i
      ! j( u# f, U, {; ]
      TCP使用的sequence number是一個32位的計數(shù)器,從0-4294967295。TCP為每一個連接選擇一個初始序號ISN,為了防止因為延遲、重傳等擾亂三次握手,ISN不能隨便選取,不同系統(tǒng)有不同算法。理解TCP如何分配ISN以及ISN隨時間變化的規(guī)律,對于成功地進行IP欺騙攻擊很重要。
      3 `- B. e8 v: f  f3 u' U1 V" D5 |% @+ S* \) N
      基于遠程過程調(diào)用RPC的命令,比如rlogin、rcp、rsh等等,根據(jù)/etc/hosts.equiv以及$HOME/.rhosts文件進行安全校驗,其實質(zhì)是僅僅根據(jù)信源IP地址進行用戶身份確認,以便允許或拒絕用戶RPC。關于上述兩個文件請man,不喜歡看英文就去Unix版看看我以前灌過的一瓢水。
      6 L% I% ]( s% T5 D* T! o4 n
      & o% w9 X$ t0 M, r- Z$ OIP欺騙攻擊的描述: + E) o/ ?  d0 C
      1 v" y2 {0 M: @% @  x
      1. 假設Z企圖攻擊A,而A信任B,所謂信任指/etc/hosts.equiv和$HOME/.rhosts中有相關設置。注意,如何才能知道A信任B呢?沒有什么確切的辦法。我的建議就是平時注意搜集蛛絲 - Z7 s! F+ S1 E% j# j5 S+ v( u# d1 d
      馬跡,厚積薄發(fā)。一次成功的攻擊其實主要不是因為技術上的高明,而是因為信息搜集的廣泛翔實。動用了自以為很有成就感的技術,卻不比人家酒桌上的巧妙提問,攻擊只以成功為終極目標,不在乎手段。 % y) N+ {( P* V- L, y" v+ {

      3 }# \' ]8 |2 J$ J( u2. 假設Z已經(jīng)知道了被信任的B,應該想辦法使B的網(wǎng)絡功能暫時癱瘓,以免對攻擊造成干擾。著名的SYN flood常常是一次IP欺騙攻擊的前奏。請看一個并發(fā)服務器的框架:
      % \$ m) h! v8 P, ]0 f) j
      # Q! }  O3 f* t# d5 B' M- y% Bint initsockid, newsockid;
      7 b9 s1 ^8 o. q; y; C0 a; _7 ?if ((initsockid = socket(...)) <0) { 3 ?+ M- H! ]# c1 x5 Z' S
      error("can't create socket"); 5 K; R7 Q3 S) z
      }
      8 Y- G/ v2 c% c. L+ [0 Iif (bind(initsockid, ...) <0) {
      # \7 |/ r0 B3 ]7 ?" V1 O# H4 `, Nerror("bind error"); & I/ p2 e* I* _2 P/ T, Z. N8 J
      } ; ]1 a6 k& K2 m3 a* u1 F
      if (listen(initsockid, 5) <0) {
      ' W7 E9 e0 w* \5 L0 D7 ierror("listen error"); $ u) _/ f: |8 D( I
      } ) y. d8 h. n) O0 y# P$ ~9 M( y
      for (;;) {
      4 M' y  t1 \4 W6 wnewsockid = accept(initsockid, ...); /* 阻塞 */
      " `5 T9 n* M. xif (newsockid <0) {
      % o  v4 S: m* N9 ~; [# Berror("accept error");
      % p" x3 w  S& O} " T' L* ^$ U7 i1 \9 w
      if (fork() == 0) { /* 子進程 */ ' U) P' I2 _$ ^
      close(initsockid);
      " v3 r  ~4 C0 M/ ^' sdo(newsockid); /* 處理客戶方請求 */
      ) J7 X, j, }- m$ O0 ^# ^0 mexit(0); % g- y/ i, s% N& y
      }
      1 p' Q' o* l! ?: p( ~1 Fclose(newsockid); % z2 d* _0 s, |7 ?( k
      } 1 _8 @7 y" N) i. b: N
      & Z& w" p# s" p$ V  [' `$ l: A
      listen函數(shù)中第二個參數(shù)是5,意思是在initsockid上允許的最大連接請求數(shù)目。如果某個時刻initsockid上的連接請求數(shù)目已經(jīng)達到5,后續(xù)到達initsockid的連接請求將被TCP丟棄。注意一旦連接通過三次握手建立完成,accept調(diào)用已經(jīng)處理這個連接,則TCP連接請求隊列空出一個位置。所以這個5不是指initsockid上只能接受5個連接請求。SYN flood正是一種Denial of Service,導致B的網(wǎng)絡功能暫 碧被盡?nbsp;2 _. ^& t5 H: p' [
      8 I+ k% B" y" ^' r! ^* j
      Z向B發(fā)送多個帶有SYN標志的數(shù)據(jù)段請求連接,注意將信源IP地址換成一個不存在的主機X;B向子虛烏有的X發(fā)送SYN+ACK數(shù)據(jù)段,但沒有任何來自X的ACK出現(xiàn)。B的IP層會報告B的TCP層,X不可達,但B的TCP層對此不予理睬,認為只是暫時的。于是B在這個initsockid上再也不能接收正常的連接請求。
      " c6 f# v; s0 I8 m2 G5 i9 I- U% [5 T, @
      Z(X) ---- SYN ----> B
      / ?9 F( K; f& t7 }9 B  a- |Z(X) ---- SYN ----> B , S" w1 q+ C5 f5 j. |  S( s8 D$ b+ J
      Z(X) ---- SYN ----> B
      - f  V" F0 l( j' GZ(X) ---- SYN ----> B 5 J# `) o' r* Y: @; z
      Z(X) ---- SYN ----> B
      8 m, P# f! L4 Y+ K......
      0 I! x/ }6 s  O# `, AX <---- SYN+ACK B
      3 m; L8 s, u. l( b8 D  Y% Q6 @" }X <---- SYN+ACK B
      , U+ ~3 C$ t, u+ N/ W2 RX <---- SYN+ACK B 2 @/ U! p7 J+ B, h- u# c! ^
      X <---- SYN+ACK B
      , l7 Y" X- D8 d: I# O9 YX <---- SYN+ACK B 5 Y: y8 M  X, K+ ~
      ...... . X) t" }* k7 L' M4 F: u2 b7 ?9 H" K# M; C

      8 `4 C! p' f4 O作者認為這樣就使得B網(wǎng)絡功能暫時癱瘓,可我覺得好象不對頭。因為B雖然在initsockid上無法接收TCP連接請求,但可以在another initsockid上接收,這種SYN flood應該只對特定的 9 {" F2 D9 o, s; D* m6 W
      服務(端口),不應該影響到全局。當然如果不斷地發(fā)送連接請求,就和用ping發(fā)洪水包一個道理,使得B的TCP/IP忙于處理負載增大。至于SYN flood,回頭有機會我單獨灌一瓢有關DoS的。如何使B的網(wǎng)絡功能暫 碧被居 很多辦法,根據(jù)具體情況而定,不再贅述。
      5 P* `2 j0 s+ p; s. h$ r- d) q# |3 N5 r) I9 z; U" S
      3. Z必須確定A當前的ISN。首先連向25端口(SMTP是沒有安全校驗機制的),與1中類似,不過這次需要記錄A的ISN,以及Z到A的大致的RTT(round trip time)。這個步驟要重復多次以便求出
      / k, ?, O2 C, p5 }% C$ [, |1 X7 RRTT的平均值?,F(xiàn)在Z知道了A的ISN基值和增加規(guī)律(比如每秒增加128000,每次連接增加64000),也知道了從Z到A需要RTT/2的時間。必須立即進入攻擊,否則在這之間有其他主機與A連接,
      8 ^# s1 W7 v7 L1 u+ h. nISN將比預料的多出64000。 ; x; Y* F+ t( g6 @7 e& V

      , ^8 L. ]7 i; J  r) h6 G" k) f' F4. Z向A發(fā)送帶有SYN標志的數(shù)據(jù)段請求連接,只是信源IP改成了B,注意是針對TCP513端口(rlogin)。A向B回送SYN+ACK數(shù)據(jù)段,B已經(jīng)無法響應(憑什么?按照作者在2中所說,估計還達不到這個效果,因為Z必然要模仿B發(fā)起connect調(diào)用,connect調(diào)用會完成全相關,自動指定本地socket地址和端口,可事實上B很可能并沒有這樣一個端口等待接收數(shù)據(jù)。除非Z模仿B發(fā)起
      / c) y8 c# v/ G. l5 l! T% U! y連接請求時打破常規(guī),主動在客戶端調(diào)用bind函數(shù),明確完成全相關,這樣必然知道A會向B的某個端口回送,在2中也針對這個端口攻擊B。可是如果這樣,完全不用攻擊B,bind的時候
      0 K! @4 o6 C  q& J$ [: B指定一個B上根本不存在的端口即可。我也是想了又想,還沒來得及看看老外的源代碼,不妥之處有待商榷??傊?,覺得作者好象在蒙我們,他自己也沒有實踐成功過吧。),B的TCP層只是 2 f/ w$ j+ J# r3 K' |
      簡單地丟棄A的回送數(shù)據(jù)段。
      9 s5 a/ l0 r6 a( k7 u
      # Z  ~% `1 \+ p' S3 u+ [5. Z暫停一小會兒,讓A有足夠時間發(fā)送SYN+ACK,因為Z看不到這個包。然后Z再次偽裝成B向A發(fā)送ACK,此時發(fā)送的數(shù)據(jù)段帶有Z預測的A的ISN+1。如果預測準確,連接建立,數(shù)據(jù)傳送開始。問題在于即使連接建立,A仍然會向B發(fā)送數(shù)據(jù),而不是Z,Z仍然無法看到A發(fā)往B的數(shù)據(jù)段,Z必須蒙著頭按照rlogin協(xié)議標準假冒B向A發(fā)送類似 "cat + + >> ~/.rhosts" 這樣的命令,于是攻擊完成。如果預測不準確,A將發(fā)送一個帶有RST標志的數(shù)據(jù)段異常終止連接,Z只有從頭再來。 5 p: N- L8 q" U+ g+ i
      , H! K0 ~, {, S
      Z(B) ---- SYN ----> A
      1 p/ m( a* G  C5 IB <---- SYN+ACK A
      $ B, k  I" I6 K  ]$ PZ(B) ---- ACK ----> A
      ; V& K' ]& [, gZ(B) ---- PSH ----> A
      # P, @, l. R! Z& l1 ]) k...... + }( g* w5 ]% n& Q
      ( e" X: J) p; t+ G6 _% E
      6. IP欺騙攻擊利用了RPC服務器僅僅依賴于信源IP地址進行安全校驗的特性,建議閱讀rlogind的源代碼。攻擊最困難的地方在于預測A的ISN。作者認為攻擊難度雖然大,但成功的可能性
      9 Y1 Y* S3 C: U2 O" c" y! W1 ]也很大,不是很理解,似乎有點矛盾??紤]這種情況,入侵者控制了一臺由A到B之間的路由器,假設Z就是這臺路由器,那么A回送到B的數(shù)據(jù)段,現(xiàn)在Z是可以看到的,顯然攻擊難度 % W! `/ }' B; ?# J" J6 |3 K1 C, ?
      驟然下降了許多。否則Z必須精確地預見可能從A發(fā)往B的信息,以及A期待來自B的什么應答信息,這要求攻擊者對協(xié)議本身相當熟悉。同時需要明白,這種攻擊根本不可能在交互狀態(tài)下完 % h( k! V! I2 l* p% O
      成,必須寫程序完成。當然在準備階段可以用netxray之類的工具進行協(xié)議分析。
      0 p& d. i1 y4 z& O0 b4 f' @; [+ W- D! t  K. d# r: n2 y
      7. 如果Z不是路由器,能否考慮組合使用ICMP重定向以及ARP欺騙等技術?沒有仔細分析過,只是隨便猜測而已。并且與A、B、Z之間具體的網(wǎng)絡拓撲有密切關系,在某些情況下顯然大幅度 & g& M) _! P6 o3 c5 z4 u
      降低了攻擊難度。注意IP欺騙攻擊理論上是從廣域網(wǎng)上發(fā)起的,不局限于局域網(wǎng),這也正是這種攻擊的魅力所在。利用IP欺騙攻擊得到一個A上的shell,對于許多高級入侵者,得到目標主
      / ~7 g4 K% [% V, P: h4 Q機的shell,離root權(quán)限就不遠了,最容易想到的當然是接下來進行buffer overflow攻擊。
      $ `, G3 o2 n0 B7 U$ z$ L$ {# J& v  B1 S% B6 Y) w' `' m. ?( D' F
      8. 也許有人要問,為什么Z不能直接把自己的IP設置成B的?這個問題很不好回答,要具體分析網(wǎng)絡拓撲,當然也存在ARP沖突、出不了網(wǎng)關等問題。那么在IP欺騙攻擊過程中是否存在ARP沖突問題。回想我前面貼過的ARP欺騙攻擊,如果B的ARP Cache沒有受到影響,就不會出現(xiàn)ARP沖突。如果Z向A發(fā)送數(shù)據(jù)段時,企圖解析A的MAC地址或者路由器的MAC地址,必然會發(fā)送ARP請求包,但這個ARP請求包中源IP以及源MAC都是Z的,自然不會引起ARP沖突。而ARP Cache只會被ARP包改變,不受IP包的影響,所以可以肯定地說,IP欺騙攻擊過程中不存在ARP沖突。相反,如果Z修改了自己的IP,這種ARP沖突就有可能出現(xiàn),示具體情況而言。攻擊中連帶B一起攻擊了,其目的無非是防止B干擾了攻擊過程,如果B本身已經(jīng)down掉,那是再好不過(是嗎?)。
      $ T- F  @7 G8 Z! K" G" o1 M
      ' P0 R! [% ]0 b& l# l) y9. fakeip曾經(jīng)沸沸揚揚了一下,我對之進行端口掃描,發(fā)現(xiàn)其tcp端口113是接收入連接的。和IP欺騙等沒有直接聯(lián)系,和安全校驗是有關系的。當然,這個東西并不如其名所暗示,對IP層沒有任何動作。 ; A% u1 L/ k9 W' i5 `/ p

      4 @  q7 x  s; \* c4 [10. 關于預測ISN,我想到另一個問題。就是如何以第三方身份切斷A與B之間的TCP連接,實際上也是預測sequence number的問題。嘗試過,也很困難。如果Z是A與B之間的路由器,就不用說了;或者Z動用了別的技術可以監(jiān)聽到A與B之間的通信,也容易些;否則預測太難。作者在3中提到連接A的25端口,可我想不明白的是513端口的ISN和25端口有什么關系?看來需要看看TCP/IP內(nèi)部實現(xiàn)的源代碼。 . M% a0 e. T% A  M
        S& T0 E. f* ?& c) e9 @1 G
      未雨綢繆 : n  p3 u( Y. \9 T
      - c: ]& n3 Z3 u+ }
      雖然IP欺騙攻擊有著相當難度,但我們應該清醒地意識到,這種攻擊非常廣泛,入侵往往由這里開始。預防這種攻擊還是比較容易的,比如刪除所有的/etc/hosts.equiv、$HOME/.rhosts文件,修改/etc/inetd.conf文件,使得RPC機制無法運做,還可以殺掉portmapper等等。設置路由器,過濾來自外部而信源地址卻是內(nèi)部IP的報文。cisio公司的產(chǎn)品就有這種功能。不過路由器只防得了外部入侵,內(nèi)部入侵呢? $ r  l# g. i0 J$ y* n3 }  g

      2 N; ~" {  i6 h# y% y1 }" XTCP的ISN選擇不是隨機的,增加也不是隨機的,這使攻擊者有規(guī)可循,可以修改與ISN相關的代碼,選擇好的算法,使得攻擊者難以找到規(guī)律。估計Linux下容易做到,那solaris、irix、hp-unix還有aix呢?sigh ( J9 j$ ?4 b- T) Q, \
      9 w( K  {8 U5 u7 c
      雖然作者紙上談兵,但總算讓我們了解了一下IP欺騙攻擊,我實驗過預測sequence number,不是ISN,企圖切斷一個TCP連接,感覺難度很大。作者建議要找到規(guī)律,不要盲目預測,這需要時間和耐心。現(xiàn)在越發(fā)明白什么是那種鍥而不舍永遠追求的精神,我們所向往的傳奇故事背后有著如此沉默的艱辛和毅力,但愿我們學會的是這個,而不是浮華與喧囂。一個現(xiàn)成的bug足以讓你取得root權(quán)限,可你在做什么,你是否明白?我們太膚淺了......
      , H& ~7 Z+ \) ^* ?/ `
      淺了......
      您需要登錄后才可以回帖 登錄 | 注冊

      本版積分規(guī)則

      QQ|本地廣告聯(lián)系: QQ:905790666 TEL:13176190456|Archiver|手機版|小黑屋|汶上信息港 ( 魯ICP備19052200號-1 )

      GMT+8, 2025-5-4 01:10

      Powered by Discuz! X3.5

      © 2001-2025 Discuz! Team.

      快速回復 返回頂部 返回列表