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

<address id="xly8e"><var id="xly8e"><center id="xly8e"></center></var></address>
<kbd id="xly8e"><dl id="xly8e"></dl></kbd>
<bdo id="xly8e"><mark id="xly8e"><legend id="xly8e"></legend></mark></bdo>
  • <span id="xly8e"><delect id="xly8e"></delect></span>

    汶上信息港

    標(biāo)題: IP欺騙的技術(shù) [打印本頁]

    作者: 雜七雜八    時間: 2011-1-13 17:01
    標(biāo)題: IP欺騙的技術(shù)
    。 4 D5 i& @& J, w* h
    IP欺騙的技術(shù)比較復(fù)雜,不是簡單地照貓畫老虎就能掌握,但作為常規(guī)攻擊手段,有必要理解其原理,至少有利于自己的安全防范,易守難攻嘛。
    4 Z3 t: @' C1 V% K; w. R+ L& `+ f2 B
    假設(shè)B上的客戶運行rlogin與A上的rlogind通信:
    , [0 x4 a6 l+ K  t% m6 D9 H+ Y* s) _1 e* S* I: `  [
    1. B發(fā)送帶有SYN標(biāo)志的數(shù)據(jù)段通知A需要建立TCP連接。并將TCP報頭中的sequence number設(shè)置成自己本次連接的初始值ISN。
    0 M( N$ m% K$ o! I- v* |* k0 [% p
    - U+ @9 `, t+ @2. A回傳給B一個帶有SYS+ACK標(biāo)志的數(shù)據(jù)段,告之自己的ISN,并確認(rèn)B發(fā)送來的第一個數(shù)據(jù)段,將acknowledge number設(shè)置成B的ISN+1。 : ~& T/ }; \+ X/ `- h0 L: g
    + @- u. {4 q0 u% O3 ]9 w
    3. B確認(rèn)收到的A的數(shù)據(jù)段,將acknowledge number設(shè)置成A的ISN+1。
    + F0 v; Y# M! [( m5 x& o
    & K& o  C. X! F' ]B ---- SYN ----> A 5 W* r7 b) f" t6 D
    B <---- SYN+ACK A 6 w9 G/ |3 O: k7 y$ P
    B ---- ACK ----> A
    0 f  E$ w5 l( l, s6 m: z- `" `3 _$ [0 y* \/ h
    TCP使用的sequence number是一個32位的計數(shù)器,從0-4294967295。TCP為每一個連接選擇一個初始序號ISN,為了防止因為延遲、重傳等擾亂三次握手,ISN不能隨便選取,不同系統(tǒng)有不同算法。理解TCP如何分配ISN以及ISN隨時間變化的規(guī)律,對于成功地進(jìn)行IP欺騙攻擊很重要。
    + y: `7 T, Q4 U; x. c' Q. \  n# O8 O5 B3 Q& D8 u8 \" i( x
    基于遠(yuǎn)程過程調(diào)用RPC的命令,比如rlogin、rcp、rsh等等,根據(jù)/etc/hosts.equiv以及$HOME/.rhosts文件進(jìn)行安全校驗,其實質(zhì)是僅僅根據(jù)信源IP地址進(jìn)行用戶身份確認(rèn),以便允許或拒絕用戶RPC。關(guān)于上述兩個文件請man,不喜歡看英文就去Unix版看看我以前灌過的一瓢水。
      R9 q- i- [2 g, @. o2 I, j
    0 r$ x. ?8 N( {( @7 s" F; |IP欺騙攻擊的描述: 8 |8 V& \1 J" K
    / V& H0 c: C9 l! P  H, h3 c" v
    1. 假設(shè)Z企圖攻擊A,而A信任B,所謂信任指/etc/hosts.equiv和$HOME/.rhosts中有相關(guān)設(shè)置。注意,如何才能知道A信任B呢?沒有什么確切的辦法。我的建議就是平時注意搜集蛛絲   U# q" K7 ]- t4 s% i* Q
    馬跡,厚積薄發(fā)。一次成功的攻擊其實主要不是因為技術(shù)上的高明,而是因為信息搜集的廣泛翔實。動用了自以為很有成就感的技術(shù),卻不比人家酒桌上的巧妙提問,攻擊只以成功為終極目標(biāo),不在乎手段。   J( V$ b+ z& M9 z; t8 j/ U
    $ T2 [2 R9 h* s% C1 {; p9 g# X
    2. 假設(shè)Z已經(jīng)知道了被信任的B,應(yīng)該想辦法使B的網(wǎng)絡(luò)功能暫時癱瘓,以免對攻擊造成干擾。著名的SYN flood常常是一次IP欺騙攻擊的前奏。請看一個并發(fā)服務(wù)器的框架:
    ; k: T1 N& k9 ~* a/ v' E6 |! U" K; ~* |9 W
    int initsockid, newsockid; ' R4 Q3 C' }1 p1 l. ]$ h  N
    if ((initsockid = socket(...)) <0) {
    / V& p+ |/ |$ }8 R# k1 ]0 S1 werror("can't create socket"); % }: P: w* e8 ^6 m0 p1 k- D. r
    } 2 {+ H% L6 t3 P. |' [: E" p
    if (bind(initsockid, ...) <0) {
    5 t0 B: b+ P* i+ A5 Yerror("bind error");
    " l  N2 t6 p% S4 b3 x} ' w3 ?$ a: b! o) n0 Q. `
    if (listen(initsockid, 5) <0) { * H0 G/ J6 }  @  c2 D& U1 [
    error("listen error"); 5 n; ^1 F/ S: M! S7 F4 h
    }
    ! [0 E( ~3 E* x% t/ jfor (;;) {
    ' L$ b( I" I  E! ?newsockid = accept(initsockid, ...); /* 阻塞 */ 4 _1 O" |6 ~  g# g/ f! h( b; F# z
    if (newsockid <0) { . J1 c! f8 l4 z/ Z  f
    error("accept error"); ; T8 a6 c- h$ v9 V6 z2 n
    }
    " o" ^& t0 o6 {0 ^1 Gif (fork() == 0) { /* 子進(jìn)程 */ - H. f2 Y/ b2 j- w
    close(initsockid);
    3 @3 a8 `: B8 [do(newsockid); /* 處理客戶方請求 */
    " a' ~3 V# _+ c% t6 W3 |# ?exit(0);
    / F2 e0 f$ P/ Z. e) g2 r& M3 e3 s} 9 ?3 ^7 Y5 G9 K' |* {
    close(newsockid);
    0 }& q' ?7 u( g! s} 0 u. l8 G7 e/ I5 L, L: b' q

    / X4 d. H8 \4 z* S  elisten函數(shù)中第二個參數(shù)是5,意思是在initsockid上允許的最大連接請求數(shù)目。如果某個時刻initsockid上的連接請求數(shù)目已經(jīng)達(dá)到5,后續(xù)到達(dá)initsockid的連接請求將被TCP丟棄。注意一旦連接通過三次握手建立完成,accept調(diào)用已經(jīng)處理這個連接,則TCP連接請求隊列空出一個位置。所以這個5不是指initsockid上只能接受5個連接請求。SYN flood正是一種Denial of Service,導(dǎo)致B的網(wǎng)絡(luò)功能暫 碧被盡?nbsp;
    " N4 c4 q! ~6 _5 t# q0 {: y- r& U: d/ ^. g/ A: V6 y8 U6 ?
    Z向B發(fā)送多個帶有SYN標(biāo)志的數(shù)據(jù)段請求連接,注意將信源IP地址換成一個不存在的主機(jī)X;B向子虛烏有的X發(fā)送SYN+ACK數(shù)據(jù)段,但沒有任何來自X的ACK出現(xiàn)。B的IP層會報告B的TCP層,X不可達(dá),但B的TCP層對此不予理睬,認(rèn)為只是暫時的。于是B在這個initsockid上再也不能接收正常的連接請求。
    3 E& r2 \* T3 H8 a: H
    # S0 F( `2 N; i3 G  Z; f# jZ(X) ---- SYN ----> B
    9 s8 T+ m$ w- O: N' u- UZ(X) ---- SYN ----> B 1 M+ L/ l/ l/ z  w1 {' T; L/ D( }3 D
    Z(X) ---- SYN ----> B
    1 r6 d! V' Q" ]: Y8 pZ(X) ---- SYN ----> B
    3 A7 E1 J. u& i9 ]Z(X) ---- SYN ----> B
    % y+ g6 \! e* F3 @...... : r* W1 R* H4 I  i: B
    X <---- SYN+ACK B 3 Y% E# j+ @5 ?1 ~+ j; P& B* L3 C! s
    X <---- SYN+ACK B
    , H& A$ A/ t. e2 ~( z7 B. SX <---- SYN+ACK B
      V4 R# x( `/ i0 n* X8 tX <---- SYN+ACK B - Q( Z0 G( G+ j( i
    X <---- SYN+ACK B
    / n& @4 s1 p# X8 L8 g! C......
    ( X) p' B+ e6 K9 h
    3 ^, D0 E4 X5 T' c作者認(rèn)為這樣就使得B網(wǎng)絡(luò)功能暫時癱瘓,可我覺得好象不對頭。因為B雖然在initsockid上無法接收TCP連接請求,但可以在another initsockid上接收,這種SYN flood應(yīng)該只對特定的 ) m: c; y& E. ]9 y! D( i
    服務(wù)(端口),不應(yīng)該影響到全局。當(dāng)然如果不斷地發(fā)送連接請求,就和用ping發(fā)洪水包一個道理,使得B的TCP/IP忙于處理負(fù)載增大。至于SYN flood,回頭有機(jī)會我單獨灌一瓢有關(guān)DoS的。如何使B的網(wǎng)絡(luò)功能暫 碧被居 很多辦法,根據(jù)具體情況而定,不再贅述。
    - Z# E# m/ [5 j) J* |5 I' R2 t) {. y& o4 p. ^6 ]7 W) e1 A4 V
    3. Z必須確定A當(dāng)前的ISN。首先連向25端口(SMTP是沒有安全校驗機(jī)制的),與1中類似,不過這次需要記錄A的ISN,以及Z到A的大致的RTT(round trip time)。這個步驟要重復(fù)多次以便求出 ( P3 o+ N) g7 `1 R
    RTT的平均值?,F(xiàn)在Z知道了A的ISN基值和增加規(guī)律(比如每秒增加128000,每次連接增加64000),也知道了從Z到A需要RTT/2的時間。必須立即進(jìn)入攻擊,否則在這之間有其他主機(jī)與A連接, 8 [9 A3 i; a4 l; z8 U
    ISN將比預(yù)料的多出64000。
    1 H, g0 ?; Y6 d; N, s
    # E8 j  O; n8 v4. Z向A發(fā)送帶有SYN標(biāo)志的數(shù)據(jù)段請求連接,只是信源IP改成了B,注意是針對TCP513端口(rlogin)。A向B回送SYN+ACK數(shù)據(jù)段,B已經(jīng)無法響應(yīng)(憑什么?按照作者在2中所說,估計還達(dá)不到這個效果,因為Z必然要模仿B發(fā)起connect調(diào)用,connect調(diào)用會完成全相關(guān),自動指定本地socket地址和端口,可事實上B很可能并沒有這樣一個端口等待接收數(shù)據(jù)。除非Z模仿B發(fā)起 ( B8 T8 x" K: y8 X
    連接請求時打破常規(guī),主動在客戶端調(diào)用bind函數(shù),明確完成全相關(guān),這樣必然知道A會向B的某個端口回送,在2中也針對這個端口攻擊B。可是如果這樣,完全不用攻擊B,bind的時候 9 t/ v4 K! a! I$ P
    指定一個B上根本不存在的端口即可。我也是想了又想,還沒來得及看看老外的源代碼,不妥之處有待商榷??傊?,覺得作者好象在蒙我們,他自己也沒有實踐成功過吧。),B的TCP層只是 8 m9 T: y' g! q3 v) f& Q  f
    簡單地丟棄A的回送數(shù)據(jù)段。
    . @  U/ \6 a; {% K! P% A  B- x, D6 k" X5 u9 x
    5. Z暫停一小會兒,讓A有足夠時間發(fā)送SYN+ACK,因為Z看不到這個包。然后Z再次偽裝成B向A發(fā)送ACK,此時發(fā)送的數(shù)據(jù)段帶有Z預(yù)測的A的ISN+1。如果預(yù)測準(zhǔn)確,連接建立,數(shù)據(jù)傳送開始。問題在于即使連接建立,A仍然會向B發(fā)送數(shù)據(jù),而不是Z,Z仍然無法看到A發(fā)往B的數(shù)據(jù)段,Z必須蒙著頭按照rlogin協(xié)議標(biāo)準(zhǔn)假冒B向A發(fā)送類似 "cat + + >> ~/.rhosts" 這樣的命令,于是攻擊完成。如果預(yù)測不準(zhǔn)確,A將發(fā)送一個帶有RST標(biāo)志的數(shù)據(jù)段異常終止連接,Z只有從頭再來。 9 g. P5 {& D& O+ _. t
    ' H; @+ p7 v) M( I4 i7 r2 S
    Z(B) ---- SYN ----> A
    : j1 d3 \6 A9 _+ a5 N" g" |B <---- SYN+ACK A
    # |' u) y% v% j+ L2 h6 {Z(B) ---- ACK ----> A 4 t9 p: m7 t' q9 p3 A; q" x
    Z(B) ---- PSH ----> A 0 h0 O& E! y- V% N
    ...... " P8 H9 i7 x  S; h" x, V* G+ W$ R
    : |9 R! l+ G- j9 M: e
    6. IP欺騙攻擊利用了RPC服務(wù)器僅僅依賴于信源IP地址進(jìn)行安全校驗的特性,建議閱讀rlogind的源代碼。攻擊最困難的地方在于預(yù)測A的ISN。作者認(rèn)為攻擊難度雖然大,但成功的可能性 . ^& x* g, \* W+ f% ~8 c
    也很大,不是很理解,似乎有點矛盾??紤]這種情況,入侵者控制了一臺由A到B之間的路由器,假設(shè)Z就是這臺路由器,那么A回送到B的數(shù)據(jù)段,現(xiàn)在Z是可以看到的,顯然攻擊難度 ; t  j% U( M1 ?8 s) V) D0 I4 c
    驟然下降了許多。否則Z必須精確地預(yù)見可能從A發(fā)往B的信息,以及A期待來自B的什么應(yīng)答信息,這要求攻擊者對協(xié)議本身相當(dāng)熟悉。同時需要明白,這種攻擊根本不可能在交互狀態(tài)下完
    0 U4 L, e4 @2 `: E7 c成,必須寫程序完成。當(dāng)然在準(zhǔn)備階段可以用netxray之類的工具進(jìn)行協(xié)議分析。
    5 s! p! ?$ ~9 n) x
    / ]1 t$ d7 x7 w7. 如果Z不是路由器,能否考慮組合使用ICMP重定向以及ARP欺騙等技術(shù)?沒有仔細(xì)分析過,只是隨便猜測而已。并且與A、B、Z之間具體的網(wǎng)絡(luò)拓?fù)溆忻芮嘘P(guān)系,在某些情況下顯然大幅度 8 [  |, z3 w1 W5 V
    降低了攻擊難度。注意IP欺騙攻擊理論上是從廣域網(wǎng)上發(fā)起的,不局限于局域網(wǎng),這也正是這種攻擊的魅力所在。利用IP欺騙攻擊得到一個A上的shell,對于許多高級入侵者,得到目標(biāo)主 - U8 |0 G: [6 j7 Z" t/ f
    機(jī)的shell,離root權(quán)限就不遠(yuǎn)了,最容易想到的當(dāng)然是接下來進(jìn)行buffer overflow攻擊。
    ! B( i) l& v) @; k( }
    $ s6 w/ B+ c) A( i! c8 C2 C8. 也許有人要問,為什么Z不能直接把自己的IP設(shè)置成B的?這個問題很不好回答,要具體分析網(wǎng)絡(luò)拓?fù)?,?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掉,那是再好不過(是嗎?)。 $ j; y( S) x8 P

    6 P  p! s* G, w. {; ]9 N9. fakeip曾經(jīng)沸沸揚揚了一下,我對之進(jìn)行端口掃描,發(fā)現(xiàn)其tcp端口113是接收入連接的。和IP欺騙等沒有直接聯(lián)系,和安全校驗是有關(guān)系的。當(dāng)然,這個東西并不如其名所暗示,對IP層沒有任何動作。 2 S% J4 G& B% U) g1 A

    & n1 n# O  Y* J10. 關(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)的源代碼。 ! l, [# V3 j' \! n
    ; k( m) u5 x+ `7 _3 _0 U' U
    未雨綢繆
    $ W1 E& @+ w0 H. j; i% f, H0 s& Q7 h4 E: n' s, T
    雖然IP欺騙攻擊有著相當(dāng)難度,但我們應(yīng)該清醒地意識到,這種攻擊非常廣泛,入侵往往由這里開始。預(yù)防這種攻擊還是比較容易的,比如刪除所有的/etc/hosts.equiv、$HOME/.rhosts文件,修改/etc/inetd.conf文件,使得RPC機(jī)制無法運做,還可以殺掉portmapper等等。設(shè)置路由器,過濾來自外部而信源地址卻是內(nèi)部IP的報文。cisio公司的產(chǎn)品就有這種功能。不過路由器只防得了外部入侵,內(nèi)部入侵呢? 1 _& t2 e# F; d! K

    % @2 c8 Y4 K. W! J7 a' V: w9 QTCP的ISN選擇不是隨機(jī)的,增加也不是隨機(jī)的,這使攻擊者有規(guī)可循,可以修改與ISN相關(guān)的代碼,選擇好的算法,使得攻擊者難以找到規(guī)律。估計Linux下容易做到,那solaris、irix、hp-unix還有aix呢?sigh
    8 D& R8 j+ U, }: h2 L' m" d, z' j
    $ q; l" d& T/ ]5 i雖然作者紙上談兵,但總算讓我們了解了一下IP欺騙攻擊,我實驗過預(yù)測sequence number,不是ISN,企圖切斷一個TCP連接,感覺難度很大。作者建議要找到規(guī)律,不要盲目預(yù)測,這需要時間和耐心?,F(xiàn)在越發(fā)明白什么是那種鍥而不舍永遠(yuǎn)追求的精神,我們所向往的傳奇故事背后有著如此沉默的艱辛和毅力,但愿我們學(xué)會的是這個,而不是浮華與喧囂。一個現(xiàn)成的bug足以讓你取得root權(quán)限,可你在做什么,你是否明白?我們太膚淺了......
    / o$ G+ \# M5 K% f1 h0 M8 L
    淺了......





    歡迎光臨 汶上信息港 (http://m.loveproblemguru.com/) Powered by Discuz! X3.5