中文字幕精品亚洲无线码,99视频在线观看精品29,亚州十八禁免费不卡在线视颖,亚洲香蕉网久久综合影视

<sub id="xxpls"></sub><sub id="xxpls"></sub>

  • <listing id="xxpls"><u id="xxpls"></u></listing>
    <sub id="xxpls"></sub>

  • <sub id="xxpls"><ol id="xxpls"></ol></sub>
    <style id="xxpls"><u id="xxpls"></u></style>
  •  找回密碼
     注冊

    QQ登錄

    只需一步,快速開始

    IP欺騙的技術(shù)

    [復(fù)制鏈接]
    1#
    發(fā)表于 2011-1-13 17:01:50 | 只看該作者 |倒序瀏覽 |閱讀模式
    。 $ y/ ~1 ^/ _4 f/ _
    IP欺騙的技術(shù)比較復(fù)雜,不是簡單地照貓畫老虎就能掌握,但作為常規(guī)攻擊手段,有必要理解其原理,至少有利于自己的安全防范,易守難攻嘛。 ; ?8 I- G* h. a
      E& F. z5 m& [% b1 C
    假設(shè)B上的客戶運行rlogin與A上的rlogind通信:
    0 J, y8 [8 V: Q  N7 m) E+ u. Z: m. J' d" k& j5 l. Q
    1. B發(fā)送帶有SYN標志的數(shù)據(jù)段通知A需要建立TCP連接。并將TCP報頭中的sequence number設(shè)置成自己本次連接的初始值ISN。
    2 I7 T5 O2 ]+ R$ ?
    6 e$ k1 ]- d% a$ @( w3 N, E2. A回傳給B一個帶有SYS+ACK標志的數(shù)據(jù)段,告之自己的ISN,并確認B發(fā)送來的第一個數(shù)據(jù)段,將acknowledge number設(shè)置成B的ISN+1。
    ; B; j, f7 g0 Y# t
    9 S( l7 P& V! f3 }3. B確認收到的A的數(shù)據(jù)段,將acknowledge number設(shè)置成A的ISN+1。
    $ d) A6 e3 O/ E* O, E; P- d5 }4 E) J1 H  w* P. i2 ]1 Q# a
    B ---- SYN ----> A   |; L! P  o# t" I# z' m" [5 b
    B <---- SYN+ACK A , f7 [: m+ D# h  H. ]
    B ---- ACK ----> A , ?% q( I* h2 O

    5 P4 k+ y: @, Y1 r+ PTCP使用的sequence number是一個32位的計數(shù)器,從0-4294967295。TCP為每一個連接選擇一個初始序號ISN,為了防止因為延遲、重傳等擾亂三次握手,ISN不能隨便選取,不同系統(tǒng)有不同算法。理解TCP如何分配ISN以及ISN隨時間變化的規(guī)律,對于成功地進行IP欺騙攻擊很重要。
    ! B4 r2 [3 A: W+ I, e. y3 U4 h9 t* t4 T) Q  h
    基于遠程過程調(diào)用RPC的命令,比如rlogin、rcp、rsh等等,根據(jù)/etc/hosts.equiv以及$HOME/.rhosts文件進行安全校驗,其實質(zhì)是僅僅根據(jù)信源IP地址進行用戶身份確認,以便允許或拒絕用戶RPC。關(guān)于上述兩個文件請man,不喜歡看英文就去Unix版看看我以前灌過的一瓢水。
      W& K( z4 y9 W0 c% s# _9 U) }6 f- E8 v  v; ^$ x4 Y
    IP欺騙攻擊的描述:
    . y" ^/ L' T- _9 e8 F0 `+ n
    / W  {: n* e! m7 e# ]% O/ _$ l! b1. 假設(shè)Z企圖攻擊A,而A信任B,所謂信任指/etc/hosts.equiv和$HOME/.rhosts中有相關(guān)設(shè)置。注意,如何才能知道A信任B呢?沒有什么確切的辦法。我的建議就是平時注意搜集蛛絲 . p4 m* ]4 i! C) s  S2 k. Q# z
    馬跡,厚積薄發(fā)。一次成功的攻擊其實主要不是因為技術(shù)上的高明,而是因為信息搜集的廣泛翔實。動用了自以為很有成就感的技術(shù),卻不比人家酒桌上的巧妙提問,攻擊只以成功為終極目標,不在乎手段。 3 z5 |; B! i; D4 ?9 W  G" j; a
      H9 k4 b$ {% Z% G
    2. 假設(shè)Z已經(jīng)知道了被信任的B,應(yīng)該想辦法使B的網(wǎng)絡(luò)功能暫時癱瘓,以免對攻擊造成干擾。著名的SYN flood常常是一次IP欺騙攻擊的前奏。請看一個并發(fā)服務(wù)器的框架: & |! Z3 M! [# I6 l! x$ J6 v! W- Y' O. T  P
    . a+ K* A- y7 A  l1 D' F
    int initsockid, newsockid;
    + m# }7 c* \& W0 b+ f1 d9 w0 gif ((initsockid = socket(...)) <0) { $ q- @# o7 M3 n" u1 P! x' O
    error("can't create socket");
    ' n7 V. T* s1 _* y2 b3 C1 X. j' Y}
    ) p/ ]  h$ h5 Dif (bind(initsockid, ...) <0) { 6 @2 p( K" q# c/ I2 y2 D
    error("bind error"); ! S% c3 o; o7 w/ Z4 A% P. i
    } ; w" l& _  p! B. s
    if (listen(initsockid, 5) <0) {
    / f3 [/ M: b7 x& {0 \$ ?5 L5 r  Herror("listen error");
    - {2 I5 I7 w! G: U}
    1 a" ^- r( d4 V! E5 L8 U3 g$ @3 Efor (;;) {
    9 ~3 v7 N4 ]: Y3 {% ?2 h) l! @newsockid = accept(initsockid, ...); /* 阻塞 */
    5 I( n4 Y* a: H" qif (newsockid <0) { $ k* v' _& ^' u9 @: C; n1 q' y
    error("accept error"); 5 {% q7 p4 B4 k  X, Z. t2 {
    }
    4 h7 g4 l. }0 ~if (fork() == 0) { /* 子進程 */
    8 U3 A5 ~5 n# \$ hclose(initsockid); ) d5 I# e1 h2 R! D
    do(newsockid); /* 處理客戶方請求 */ ' g2 A2 q3 X4 W+ y) D  i
    exit(0); ( Q9 L, S7 S+ B! {2 h( Q
    }
    6 e( y' h6 y+ D9 a" Dclose(newsockid);
    # y% i! D' ?2 D) [' C! b}
    . q, S2 H# w8 ^" E6 p9 B, C
    1 Q5 P. `. K) }9 Mlisten函數(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;7 }0 p6 q% L7 L, [; b, m

    ' B) F; d9 J& m8 B! X$ o3 i; }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上再也不能接收正常的連接請求。 % `3 G. T; f; A; X  m2 {9 X  f

    + v) A% Q! I* l8 L6 }Z(X) ---- SYN ----> B : b% ^$ T$ l) I9 ~1 c+ l+ C
    Z(X) ---- SYN ----> B
    3 t6 G- g  j9 V! z; ^Z(X) ---- SYN ----> B 2 j' d: Z, _; s
    Z(X) ---- SYN ----> B
    * I& b: w$ o& T' S: bZ(X) ---- SYN ----> B
    1 b9 W1 c3 [0 p  Y......
    ! L3 ?+ x$ G( y, S: NX <---- SYN+ACK B . V$ ~: ~5 F8 x- I0 B' e" O& ^
    X <---- SYN+ACK B ) o0 j/ ^" I% P( d  t$ W) o
    X <---- SYN+ACK B ) c) X  @* D" q
    X <---- SYN+ACK B
    + S. b) F+ r3 d; VX <---- SYN+ACK B
    . N& f2 u& F6 Y6 O......
    ( B- U/ {9 J* `2 e2 {1 ]
    6 o8 Z6 z9 Q3 ]5 i% ]$ \, \  x( V: |作者認為這樣就使得B網(wǎng)絡(luò)功能暫時癱瘓,可我覺得好象不對頭。因為B雖然在initsockid上無法接收TCP連接請求,但可以在another initsockid上接收,這種SYN flood應(yīng)該只對特定的 ; x% a1 s: N3 e- T4 k/ V% r& n
    服務(wù)(端口),不應(yīng)該影響到全局。當然如果不斷地發(fā)送連接請求,就和用ping發(fā)洪水包一個道理,使得B的TCP/IP忙于處理負載增大。至于SYN flood,回頭有機會我單獨灌一瓢有關(guān)DoS的。如何使B的網(wǎng)絡(luò)功能暫 碧被居 很多辦法,根據(jù)具體情況而定,不再贅述。
    7 s1 M! \7 U% C/ M/ o0 Q) C+ F
    ( H, w  c! _4 {# w9 N$ r3. Z必須確定A當前的ISN。首先連向25端口(SMTP是沒有安全校驗機制的),與1中類似,不過這次需要記錄A的ISN,以及Z到A的大致的RTT(round trip time)。這個步驟要重復(fù)多次以便求出 5 ^* `; m; G. O; v( m
    RTT的平均值?,F(xiàn)在Z知道了A的ISN基值和增加規(guī)律(比如每秒增加128000,每次連接增加64000),也知道了從Z到A需要RTT/2的時間。必須立即進入攻擊,否則在這之間有其他主機與A連接, + c2 t* a$ Q( r8 q
    ISN將比預(yù)料的多出64000。 ( i9 L* M4 M; W- g2 f
    2 X% q8 v4 y$ D" I
    4. 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ā)起 ( A" Z; o- \' O
    連接請求時打破常規(guī),主動在客戶端調(diào)用bind函數(shù),明確完成全相關(guān),這樣必然知道A會向B的某個端口回送,在2中也針對這個端口攻擊B??墒侨绻@樣,完全不用攻擊B,bind的時候
    ! a! k4 b6 a. f3 v0 w# m指定一個B上根本不存在的端口即可。我也是想了又想,還沒來得及看看老外的源代碼,不妥之處有待商榷??傊X得作者好象在蒙我們,他自己也沒有實踐成功過吧。),B的TCP層只是 : t! f1 }9 |; [
    簡單地丟棄A的回送數(shù)據(jù)段。
    + _( p2 n4 F6 X- K! V1 H' m$ U7 u  T# d3 n- G' u" B! ^
    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只有從頭再來。 & K, ^+ A1 E7 b( E

    0 }. d) J  P0 L0 sZ(B) ---- SYN ----> A 4 q* S$ Q- I. l% ~  z1 I" ^
    B <---- SYN+ACK A 5 R/ y. D# P8 o, @
    Z(B) ---- ACK ----> A
    ; q; H2 ~: |$ N# K4 k: Q, ^Z(B) ---- PSH ----> A
    # ~; O3 i# U! N+ ]# P, l...... + v/ H# d! G6 Z# m# y5 M

    " k2 t3 y: i/ z5 e6. IP欺騙攻擊利用了RPC服務(wù)器僅僅依賴于信源IP地址進行安全校驗的特性,建議閱讀rlogind的源代碼。攻擊最困難的地方在于預(yù)測A的ISN。作者認為攻擊難度雖然大,但成功的可能性 ( g+ I' A4 W# \! O* s
    也很大,不是很理解,似乎有點矛盾??紤]這種情況,入侵者控制了一臺由A到B之間的路由器,假設(shè)Z就是這臺路由器,那么A回送到B的數(shù)據(jù)段,現(xiàn)在Z是可以看到的,顯然攻擊難度
    9 [9 w2 D  h8 h6 i驟然下降了許多。否則Z必須精確地預(yù)見可能從A發(fā)往B的信息,以及A期待來自B的什么應(yīng)答信息,這要求攻擊者對協(xié)議本身相當熟悉。同時需要明白,這種攻擊根本不可能在交互狀態(tài)下完 4 p3 G% `* u. K) h; m3 k+ S# C) t: A
    成,必須寫程序完成。當然在準備階段可以用netxray之類的工具進行協(xié)議分析。 $ Q. t( T4 [" o; w" k, c
    ; n# k8 B  b# j  Z; K
    7. 如果Z不是路由器,能否考慮組合使用ICMP重定向以及ARP欺騙等技術(shù)?沒有仔細分析過,只是隨便猜測而已。并且與A、B、Z之間具體的網(wǎng)絡(luò)拓撲有密切關(guān)系,在某些情況下顯然大幅度 ' d& D7 @* d" |
    降低了攻擊難度。注意IP欺騙攻擊理論上是從廣域網(wǎng)上發(fā)起的,不局限于局域網(wǎng),這也正是這種攻擊的魅力所在。利用IP欺騙攻擊得到一個A上的shell,對于許多高級入侵者,得到目標主
    ) t9 }) |& E. L7 |0 H9 y3 Z機的shell,離root權(quán)限就不遠了,最容易想到的當然是接下來進行buffer overflow攻擊。 . F' S! B' H$ ^6 u( ^+ i. I
    9 x6 R: h/ r7 O
    8. 也許有人要問,為什么Z不能直接把自己的IP設(shè)置成B的?這個問題很不好回答,要具體分析網(wǎng)絡(luò)拓撲,當然也存在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掉,那是再好不過(是嗎?)。
      h6 l! c9 X1 l
    - g* w' V+ P  c$ d# e9. fakeip曾經(jīng)沸沸揚揚了一下,我對之進行端口掃描,發(fā)現(xiàn)其tcp端口113是接收入連接的。和IP欺騙等沒有直接聯(lián)系,和安全校驗是有關(guān)系的。當然,這個東西并不如其名所暗示,對IP層沒有任何動作。
    # u1 v2 r) y' U1 G- u( V. I+ @9 D2 s0 g: m& L, T5 B" W& D7 z
    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)的源代碼。
    3 H# N: l( D; _5 M# |: D& V( W" y  E/ J- Q
    未雨綢繆
    5 ]* ]. @% k' b, M# X: U3 Z/ }) l% M8 h1 j3 M: z8 I# u
    雖然IP欺騙攻擊有著相當難度,但我們應(yīng)該清醒地意識到,這種攻擊非常廣泛,入侵往往由這里開始。預(yù)防這種攻擊還是比較容易的,比如刪除所有的/etc/hosts.equiv、$HOME/.rhosts文件,修改/etc/inetd.conf文件,使得RPC機制無法運做,還可以殺掉portmapper等等。設(shè)置路由器,過濾來自外部而信源地址卻是內(nèi)部IP的報文。cisio公司的產(chǎn)品就有這種功能。不過路由器只防得了外部入侵,內(nèi)部入侵呢? ' H/ Y/ r; w4 C4 Z

    , c7 B3 L4 w* g+ U" D3 ]% b! QTCP的ISN選擇不是隨機的,增加也不是隨機的,這使攻擊者有規(guī)可循,可以修改與ISN相關(guān)的代碼,選擇好的算法,使得攻擊者難以找到規(guī)律。估計Linux下容易做到,那solaris、irix、hp-unix還有aix呢?sigh 1 O* ]3 t$ j- @* k. [& Y
    6 `) A$ ?; A  y7 N6 D
    雖然作者紙上談兵,但總算讓我們了解了一下IP欺騙攻擊,我實驗過預(yù)測sequence number,不是ISN,企圖切斷一個TCP連接,感覺難度很大。作者建議要找到規(guī)律,不要盲目預(yù)測,這需要時間和耐心?,F(xiàn)在越發(fā)明白什么是那種鍥而不舍永遠追求的精神,我們所向往的傳奇故事背后有著如此沉默的艱辛和毅力,但愿我們學會的是這個,而不是浮華與喧囂。一個現(xiàn)成的bug足以讓你取得root權(quán)限,可你在做什么,你是否明白?我們太膚淺了...... 8 n, B5 k( b7 ?+ n
    淺了......
    您需要登錄后才可以回帖 登錄 | 注冊

    本版積分規(guī)則

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

    GMT+8, 2025-6-26 00:59

    Powered by Discuz! X3.5

    © 2001-2025 Discuz! Team.

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