亚洲色一色噜一噜噜噜_在线国产精品一区二区_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欺騙的技術(shù)

      [復(fù)制鏈接]
      1#
      發(fā)表于 2011-1-13 17:01:50 | 只看該作者 |倒序瀏覽 |閱讀模式
      。 ! ]! o+ s9 ?$ u/ N- M9 C. R3 ?2 }4 u
      IP欺騙的技術(shù)比較復(fù)雜,不是簡單地照貓畫老虎就能掌握,但作為常規(guī)攻擊手段,有必要理解其原理,至少有利于自己的安全防范,易守難攻嘛。 5 ]; F2 O% u& E1 u
      * v2 r8 x, t+ U1 b+ F1 o9 b
      假設(shè)B上的客戶運行rlogin與A上的rlogind通信:
      ( A2 s+ M6 l( y* W: M: Y, V$ O; j: K- C4 P
      1. B發(fā)送帶有SYN標志的數(shù)據(jù)段通知A需要建立TCP連接。并將TCP報頭中的sequence number設(shè)置成自己本次連接的初始值ISN。
      $ L2 d+ L0 O; q4 |$ f3 _: l) z9 w0 W4 a' d3 a9 E" ~$ |
      2. A回傳給B一個帶有SYS+ACK標志的數(shù)據(jù)段,告之自己的ISN,并確認B發(fā)送來的第一個數(shù)據(jù)段,將acknowledge number設(shè)置成B的ISN+1。 1 Q+ Q! z) O4 n) c/ x+ x

      " j$ w9 H7 u5 Q: G3. B確認收到的A的數(shù)據(jù)段,將acknowledge number設(shè)置成A的ISN+1。
      9 ^& L: f$ r; r% E+ b) u4 {( C: M( I$ [7 L; M2 H4 j% h
      B ---- SYN ----> A ( O+ F" v. a& A* n) n- {' V& r
      B <---- SYN+ACK A
      1 y, i( u! I8 |7 p- U2 iB ---- ACK ----> A , {" m0 u( u2 T2 P  [* y! U
      # E7 [' Q% [: c  N" B7 M
      TCP使用的sequence number是一個32位的計數(shù)器,從0-4294967295。TCP為每一個連接選擇一個初始序號ISN,為了防止因為延遲、重傳等擾亂三次握手,ISN不能隨便選取,不同系統(tǒng)有不同算法。理解TCP如何分配ISN以及ISN隨時間變化的規(guī)律,對于成功地進行IP欺騙攻擊很重要。
      " N! t+ S7 P1 k- \$ ~! J: |
      . t0 x* d$ f% P6 X4 e. D3 m9 v基于遠程過程調(diào)用RPC的命令,比如rlogin、rcp、rsh等等,根據(jù)/etc/hosts.equiv以及$HOME/.rhosts文件進行安全校驗,其實質(zhì)是僅僅根據(jù)信源IP地址進行用戶身份確認,以便允許或拒絕用戶RPC。關(guān)于上述兩個文件請man,不喜歡看英文就去Unix版看看我以前灌過的一瓢水。
      5 @, d4 ~1 W4 i3 [4 Q( X2 C$ T4 E5 \0 P) F/ a; [
      IP欺騙攻擊的描述: ! [# o( W: J( u2 |6 [7 R5 G

      3 T+ e/ w  J  h/ ^+ d1. 假設(shè)Z企圖攻擊A,而A信任B,所謂信任指/etc/hosts.equiv和$HOME/.rhosts中有相關(guān)設(shè)置。注意,如何才能知道A信任B呢?沒有什么確切的辦法。我的建議就是平時注意搜集蛛絲
      6 r4 A% f2 m; T' i3 K' i0 E馬跡,厚積薄發(fā)。一次成功的攻擊其實主要不是因為技術(shù)上的高明,而是因為信息搜集的廣泛翔實。動用了自以為很有成就感的技術(shù),卻不比人家酒桌上的巧妙提問,攻擊只以成功為終極目標,不在乎手段。 4 P) U- h+ [7 x# u& C
      ) A. q3 j1 a8 y
      2. 假設(shè)Z已經(jīng)知道了被信任的B,應(yīng)該想辦法使B的網(wǎng)絡(luò)功能暫時癱瘓,以免對攻擊造成干擾。著名的SYN flood常常是一次IP欺騙攻擊的前奏。請看一個并發(fā)服務(wù)器的框架: : Y  i" I" t4 F8 i( Z: o

      / v4 B" i, Y3 S. d! U. fint initsockid, newsockid;
      5 v) c, F1 ?) @5 ]5 f" S& ]# eif ((initsockid = socket(...)) <0) { 6 `* b2 @- i: a! q9 U
      error("can't create socket"); . ?- A! Y5 M- Y; L; v
      }
      / G5 a7 y$ q: m. mif (bind(initsockid, ...) <0) {
      ( S! t3 `! U& z0 yerror("bind error"); ' u& z+ W8 b7 O% O: ]
      }
      & |- W2 ?* g. j! }; u6 K1 ?if (listen(initsockid, 5) <0) { 3 X% G! Q$ J9 m
      error("listen error");
      7 q) C; C; H! Y! c}
      5 Y1 j% q) R; R1 V8 rfor (;;) { ) @! V5 [- W4 k6 F9 `7 ^
      newsockid = accept(initsockid, ...); /* 阻塞 */
        j8 Z' ]' ^# q! Y  l1 k# bif (newsockid <0) {
      % Z/ m/ B, v5 b, E1 g) ]error("accept error"); : y- i: s" }4 C' F
      } 4 [' W7 }, z; e+ @7 a1 [% W& R9 K8 P. n7 v
      if (fork() == 0) { /* 子進程 */ 3 a7 D3 j' v# Y0 V, x, Q, \6 L/ a
      close(initsockid);
        P/ \( P1 M/ `  Mdo(newsockid); /* 處理客戶方請求 */
      4 @8 o+ v0 H% ]. J9 I/ L2 p( {3 Dexit(0); - |  f. ]4 I6 V# a3 K0 s
      }
      " |4 R; o* z3 m- Z/ e# iclose(newsockid);
      0 r8 S: ^, y8 f$ s! Z) G} 1 Z& q) {) y% t9 U+ i% x
      8 T$ q3 _# f& Q5 Q
      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,導(dǎo)致B的網(wǎng)絡(luò)功能暫 碧被盡?nbsp;/ b) R" F; U- B

      1 s- O/ B8 R$ L9 vZ向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上再也不能接收正常的連接請求。 ; H* e" s% U* Q1 A
      1 n' T3 O5 [/ {0 `
      Z(X) ---- SYN ----> B 8 q7 Y5 B0 r' R7 O; P6 y; e
      Z(X) ---- SYN ----> B 3 z5 }2 k4 W+ k' w
      Z(X) ---- SYN ----> B
      9 V; _/ Y6 T. n2 lZ(X) ---- SYN ----> B ) p5 ?* N+ _, P, j1 H8 i" C# `# O
      Z(X) ---- SYN ----> B
      2 E* [* \8 D/ c4 _7 B' H/ V' @...... 5 f9 O2 I$ j9 t4 _
      X <---- SYN+ACK B # r; n, T4 H8 V% U( ~
      X <---- SYN+ACK B 4 O2 }4 {9 Q* Z
      X <---- SYN+ACK B + D5 Q) S  `" O' @$ J
      X <---- SYN+ACK B 4 _4 U2 q, m' H+ ^9 _- O: t
      X <---- SYN+ACK B / |1 V/ F& x/ G& ?: x3 @& |+ \( n
      ...... ) I8 l3 x$ s( H  u* r; ]

      4 a" Z6 I  z1 t% L2 D作者認為這樣就使得B網(wǎng)絡(luò)功能暫時癱瘓,可我覺得好象不對頭。因為B雖然在initsockid上無法接收TCP連接請求,但可以在another initsockid上接收,這種SYN flood應(yīng)該只對特定的 3 ~9 d$ U( }4 W+ L' i7 M% Y
      服務(wù)(端口),不應(yīng)該影響到全局。當(dāng)然如果不斷地發(fā)送連接請求,就和用ping發(fā)洪水包一個道理,使得B的TCP/IP忙于處理負載增大。至于SYN flood,回頭有機會我單獨灌一瓢有關(guān)DoS的。如何使B的網(wǎng)絡(luò)功能暫 碧被居 很多辦法,根據(jù)具體情況而定,不再贅述。
      , ^. }. M5 h4 }7 l1 W! _: x0 \
      ) t" j( R( s9 \0 q; D3 B1 {2 @8 t; ]3. Z必須確定A當(dāng)前的ISN。首先連向25端口(SMTP是沒有安全校驗機制的),與1中類似,不過這次需要記錄A的ISN,以及Z到A的大致的RTT(round trip time)。這個步驟要重復(fù)多次以便求出 " u1 b: Z( d/ y2 f& c
      RTT的平均值?,F(xiàn)在Z知道了A的ISN基值和增加規(guī)律(比如每秒增加128000,每次連接增加64000),也知道了從Z到A需要RTT/2的時間。必須立即進入攻擊,否則在這之間有其他主機與A連接, . b2 v! m3 S2 l1 }2 B) E
      ISN將比預(yù)料的多出64000。
      7 x: ^# w& P( K; Y( E1 l3 Q
      0 [2 j4 d; T" [2 n: r) ?' P4. Z向A發(fā)送帶有SYN標志的數(shù)據(jù)段請求連接,只是信源IP改成了B,注意是針對TCP513端口(rlogin)。A向B回送SYN+ACK數(shù)據(jù)段,B已經(jīng)無法響應(yīng)(憑什么?按照作者在2中所說,估計還達不到這個效果,因為Z必然要模仿B發(fā)起connect調(diào)用,connect調(diào)用會完成全相關(guān),自動指定本地socket地址和端口,可事實上B很可能并沒有這樣一個端口等待接收數(shù)據(jù)。除非Z模仿B發(fā)起 3 z+ C, R2 s2 g0 ?6 `' z: |; \
      連接請求時打破常規(guī),主動在客戶端調(diào)用bind函數(shù),明確完成全相關(guān),這樣必然知道A會向B的某個端口回送,在2中也針對這個端口攻擊B。可是如果這樣,完全不用攻擊B,bind的時候 " d1 |% |+ Z3 ?1 f  u" i6 i3 k! f
      指定一個B上根本不存在的端口即可。我也是想了又想,還沒來得及看看老外的源代碼,不妥之處有待商榷。總之,覺得作者好象在蒙我們,他自己也沒有實踐成功過吧。),B的TCP層只是 3 W6 R: i+ w# X' S, v( e' e: `2 u
      簡單地丟棄A的回送數(shù)據(jù)段。
      " M% i# \" F7 F, l% ^* d+ s" K4 o  }, S8 X3 T9 T8 t
      5. Z暫停一小會兒,讓A有足夠時間發(fā)送SYN+ACK,因為Z看不到這個包。然后Z再次偽裝成B向A發(fā)送ACK,此時發(fā)送的數(shù)據(jù)段帶有Z預(yù)測的A的ISN+1。如果預(yù)測準確,連接建立,數(shù)據(jù)傳送開始。問題在于即使連接建立,A仍然會向B發(fā)送數(shù)據(jù),而不是Z,Z仍然無法看到A發(fā)往B的數(shù)據(jù)段,Z必須蒙著頭按照rlogin協(xié)議標準假冒B向A發(fā)送類似 "cat + + >> ~/.rhosts" 這樣的命令,于是攻擊完成。如果預(yù)測不準確,A將發(fā)送一個帶有RST標志的數(shù)據(jù)段異常終止連接,Z只有從頭再來。 : e1 x+ Q% Y( H% u$ W
      " F1 d$ k; j0 o/ e
      Z(B) ---- SYN ----> A
      - S  ^  T, w. m& ]: UB <---- SYN+ACK A
      ' L3 p8 o# W0 D0 e% w2 O( }" ZZ(B) ---- ACK ----> A
      ! {  S* I. |- W) R( pZ(B) ---- PSH ----> A - Q3 ^3 V  Y' N7 N4 v/ }2 G- {- Y3 m
      ...... 5 |7 }1 o0 p. J' P6 Q
      ' j7 K. ?' H3 J% h$ `  \; |
      6. IP欺騙攻擊利用了RPC服務(wù)器僅僅依賴于信源IP地址進行安全校驗的特性,建議閱讀rlogind的源代碼。攻擊最困難的地方在于預(yù)測A的ISN。作者認為攻擊難度雖然大,但成功的可能性
      # b) J7 ^0 b. [& U- }也很大,不是很理解,似乎有點矛盾??紤]這種情況,入侵者控制了一臺由A到B之間的路由器,假設(shè)Z就是這臺路由器,那么A回送到B的數(shù)據(jù)段,現(xiàn)在Z是可以看到的,顯然攻擊難度 8 }+ r/ W& [  [2 v* V" p$ J
      驟然下降了許多。否則Z必須精確地預(yù)見可能從A發(fā)往B的信息,以及A期待來自B的什么應(yīng)答信息,這要求攻擊者對協(xié)議本身相當(dāng)熟悉。同時需要明白,這種攻擊根本不可能在交互狀態(tài)下完 $ P0 `7 I6 p' N. s& R2 `
      成,必須寫程序完成。當(dāng)然在準備階段可以用netxray之類的工具進行協(xié)議分析。 # x- c. m, g7 Z" f1 ~9 i! T. u4 [- {, x

      9 r1 O2 G* V6 ~$ d1 z7. 如果Z不是路由器,能否考慮組合使用ICMP重定向以及ARP欺騙等技術(shù)?沒有仔細分析過,只是隨便猜測而已。并且與A、B、Z之間具體的網(wǎng)絡(luò)拓撲有密切關(guān)系,在某些情況下顯然大幅度 : q1 i. s3 N( ]
      降低了攻擊難度。注意IP欺騙攻擊理論上是從廣域網(wǎng)上發(fā)起的,不局限于局域網(wǎng),這也正是這種攻擊的魅力所在。利用IP欺騙攻擊得到一個A上的shell,對于許多高級入侵者,得到目標主
      ! R; H2 C4 A2 |$ _! \( E機的shell,離root權(quán)限就不遠了,最容易想到的當(dāng)然是接下來進行buffer overflow攻擊。 5 {3 {* b( x" y- U! o

      9 x" V7 ?2 G  |$ x8. 也許有人要問,為什么Z不能直接把自己的IP設(shè)置成B的?這個問題很不好回答,要具體分析網(wǎng)絡(luò)拓撲,當(dāng)然也存在ARP沖突、出不了網(wǎng)關(guān)等問題。那么在IP欺騙攻擊過程中是否存在ARP沖突問題?;叵胛仪懊尜N過的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掉,那是再好不過(是嗎?)。 # G: p; ~$ Z) H4 x$ o9 r

      $ z% h7 k/ `2 k9. fakeip曾經(jīng)沸沸揚揚了一下,我對之進行端口掃描,發(fā)現(xiàn)其tcp端口113是接收入連接的。和IP欺騙等沒有直接聯(lián)系,和安全校驗是有關(guān)系的。當(dāng)然,這個東西并不如其名所暗示,對IP層沒有任何動作。
      ( w6 ?  H! e; I4 ~7 C. c9 Q5 t8 c! s* r. @/ X
      10. 關(guān)于預(yù)測ISN,我想到另一個問題。就是如何以第三方身份切斷A與B之間的TCP連接,實際上也是預(yù)測sequence number的問題。嘗試過,也很困難。如果Z是A與B之間的路由器,就不用說了;或者Z動用了別的技術(shù)可以監(jiān)聽到A與B之間的通信,也容易些;否則預(yù)測太難。作者在3中提到連接A的25端口,可我想不明白的是513端口的ISN和25端口有什么關(guān)系?看來需要看看TCP/IP內(nèi)部實現(xiàn)的源代碼。 5 @+ j$ h7 L: P8 ~* S
      7 x0 C( R, F! C9 j0 X/ V; L
      未雨綢繆 5 Y" G' M+ y, K) _
      . i  k* o0 ~8 j" w
      雖然IP欺騙攻擊有著相當(dāng)難度,但我們應(yīng)該清醒地意識到,這種攻擊非常廣泛,入侵往往由這里開始。預(yù)防這種攻擊還是比較容易的,比如刪除所有的/etc/hosts.equiv、$HOME/.rhosts文件,修改/etc/inetd.conf文件,使得RPC機制無法運做,還可以殺掉portmapper等等。設(shè)置路由器,過濾來自外部而信源地址卻是內(nèi)部IP的報文。cisio公司的產(chǎn)品就有這種功能。不過路由器只防得了外部入侵,內(nèi)部入侵呢? : _1 M9 e# a8 J, g6 L+ m. t
      ) d6 ~0 j% w; X* u8 j+ w
      TCP的ISN選擇不是隨機的,增加也不是隨機的,這使攻擊者有規(guī)可循,可以修改與ISN相關(guān)的代碼,選擇好的算法,使得攻擊者難以找到規(guī)律。估計Linux下容易做到,那solaris、irix、hp-unix還有aix呢?sigh / h& W2 _; b- b# p) ~- W5 p5 ~6 ~" K

      ' W+ [, M  N) S, e雖然作者紙上談兵,但總算讓我們了解了一下IP欺騙攻擊,我實驗過預(yù)測sequence number,不是ISN,企圖切斷一個TCP連接,感覺難度很大。作者建議要找到規(guī)律,不要盲目預(yù)測,這需要時間和耐心?,F(xiàn)在越發(fā)明白什么是那種鍥而不舍永遠追求的精神,我們所向往的傳奇故事背后有著如此沉默的艱辛和毅力,但愿我們學(xué)會的是這個,而不是浮華與喧囂。一個現(xiàn)成的bug足以讓你取得root權(quán)限,可你在做什么,你是否明白?我們太膚淺了......
      + O. s8 r, P8 \# t
      淺了......
      您需要登錄后才可以回帖 登錄 | 注冊

      本版積分規(guī)則

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

      GMT+8, 2025-5-15 19:40

      Powered by Discuz! X3.5

      © 2001-2025 Discuz! Team.

      快速回復(fù) 返回頂部 返回列表