中文字幕精品亚洲无线码,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>
  • 汶上信息港

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

    作者: 雜七雜八    時間: 2011-1-13 17:01
    標題: IP欺騙的技術(shù)
    。 / `6 K$ D" T/ s) e! V
    IP欺騙的技術(shù)比較復雜,不是簡單地照貓畫老虎就能掌握,但作為常規(guī)攻擊手段,有必要理解其原理,至少有利于自己的安全防范,易守難攻嘛。 2 u; o* N% ]0 U# D* A  W/ I9 G

    ( S) \, P' W+ r# U假設(shè)B上的客戶運行rlogin與A上的rlogind通信: # Q! |4 K8 e5 f% D
    ! p* ]4 Y% Y9 Y/ q/ \
    1. B發(fā)送帶有SYN標志的數(shù)據(jù)段通知A需要建立TCP連接。并將TCP報頭中的sequence number設(shè)置成自己本次連接的初始值ISN。
    - j- I: {1 o1 K5 k1 Z# R/ I3 r  M# b; @2 G8 y& b3 d
    2. A回傳給B一個帶有SYS+ACK標志的數(shù)據(jù)段,告之自己的ISN,并確認B發(fā)送來的第一個數(shù)據(jù)段,將acknowledge number設(shè)置成B的ISN+1。 5 G; ]* |) I: y& q
    9 o7 A4 f/ L  ^. K4 N
    3. B確認收到的A的數(shù)據(jù)段,將acknowledge number設(shè)置成A的ISN+1。 # G4 ?& y1 F; E( C) P6 J, w: y

      ]) e9 h) u  i7 [' lB ---- SYN ----> A
    / J) m$ [& z6 y$ u2 l- ^, xB <---- SYN+ACK A ! ~" E# L7 K+ |
    B ---- ACK ----> A
    # d* v5 F  G0 p4 o% e( T4 i+ v+ }' c6 n
    TCP使用的sequence number是一個32位的計數(shù)器,從0-4294967295。TCP為每一個連接選擇一個初始序號ISN,為了防止因為延遲、重傳等擾亂三次握手,ISN不能隨便選取,不同系統(tǒng)有不同算法。理解TCP如何分配ISN以及ISN隨時間變化的規(guī)律,對于成功地進行IP欺騙攻擊很重要。 . P' y. E9 `; @1 x6 B

    1 M- C) Z4 E8 @& r* e2 S基于遠程過程調(diào)用RPC的命令,比如rlogin、rcp、rsh等等,根據(jù)/etc/hosts.equiv以及$HOME/.rhosts文件進行安全校驗,其實質(zhì)是僅僅根據(jù)信源IP地址進行用戶身份確認,以便允許或拒絕用戶RPC。關(guān)于上述兩個文件請man,不喜歡看英文就去Unix版看看我以前灌過的一瓢水。
    " h" D- T1 @  B- O3 ~9 m% Z3 \% t6 i  m# n5 `7 ^' ]$ C( e
    IP欺騙攻擊的描述: $ b+ p' e! i( Y7 W1 I
    ) _3 N8 n6 p1 ?; H' O- K
    1. 假設(shè)Z企圖攻擊A,而A信任B,所謂信任指/etc/hosts.equiv和$HOME/.rhosts中有相關(guān)設(shè)置。注意,如何才能知道A信任B呢?沒有什么確切的辦法。我的建議就是平時注意搜集蛛絲 : B' `. G4 N+ Z
    馬跡,厚積薄發(fā)。一次成功的攻擊其實主要不是因為技術(shù)上的高明,而是因為信息搜集的廣泛翔實。動用了自以為很有成就感的技術(shù),卻不比人家酒桌上的巧妙提問,攻擊只以成功為終極目標,不在乎手段。
    : u3 T' D5 K: f) T6 U+ I# B- |3 M
    2 K' b' m* t% p: x3 S1 \% r2. 假設(shè)Z已經(jīng)知道了被信任的B,應該想辦法使B的網(wǎng)絡(luò)功能暫時癱瘓,以免對攻擊造成干擾。著名的SYN flood常常是一次IP欺騙攻擊的前奏。請看一個并發(fā)服務器的框架:
    ( H) Y1 k; p5 x/ p+ w3 Z* G1 X( W: e' V2 F
    int initsockid, newsockid; 5 z8 }5 O& f8 ]( @' ~: L
    if ((initsockid = socket(...)) <0) {
    $ q; x! A* ~& [- }: K4 Herror("can't create socket"); 7 q' l/ O% {9 l; @
    }
    / V6 K  Y; b& A0 ^if (bind(initsockid, ...) <0) {
    , R" M+ R7 N5 Q# Eerror("bind error");
    # C3 ~, |% v- f" g/ G}
    $ m1 Y. f6 G* |& h% D0 s" [if (listen(initsockid, 5) <0) { , w/ B' s& n3 X: r, y) c% s
    error("listen error"); 4 T  s6 y+ B7 C6 ~) c
    }
    6 D4 q* |- P, I2 a% [& h% B* }for (;;) {
    9 l: `4 D! a" v1 m0 {newsockid = accept(initsockid, ...); /* 阻塞 */ $ J2 O5 I* n) j7 q
    if (newsockid <0) { 1 v; f) z7 X5 V/ a- K5 d
    error("accept error");
    9 I4 w- K+ |# A& e5 z} 5 O8 d5 d6 y) o- J. I3 s
    if (fork() == 0) { /* 子進程 */
    6 z' C" P5 e* G2 Zclose(initsockid); 4 \; A7 o$ i( B% L
    do(newsockid); /* 處理客戶方請求 */ . e6 t4 s; f8 x8 ]( J
    exit(0);
    8 B) Q: i+ @. r" o. m0 ^7 H} ( K7 N* {2 d6 s: x6 @7 m3 y' a) [. j
    close(newsockid);
    * t# b' c5 N5 R5 w& f& s/ z} , y' B7 V( L$ B, b2 z5 {: n! N5 I

    4 n0 f" Y. ?( f4 s2 u  Alisten函數(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)絡(luò)功能暫 碧被盡?nbsp;
    # W8 t" p: t$ v2 ?2 v% i7 z
    " T' ^5 g  l* @  |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 q! v( e( T/ [- [% n' F% I
    ) M7 W& e. @0 i0 a/ L& C
    Z(X) ---- SYN ----> B   D4 E: v3 m$ Q6 `9 o/ i
    Z(X) ---- SYN ----> B : p( V( p* X) _4 D. n- ^! k: N
    Z(X) ---- SYN ----> B $ F0 p* f/ I3 s) s; b7 [- P. ]
    Z(X) ---- SYN ----> B
    / S! j; ~# d6 A; Z1 R! ~Z(X) ---- SYN ----> B 9 t+ T( ?) G9 U- ?+ r
    ......
    $ s7 h: ?4 @/ }- vX <---- SYN+ACK B
    4 i% q5 w, D. P& ^. F+ d/ W0 TX <---- SYN+ACK B
    2 N( |4 A6 p) X* X4 L& Q1 R5 LX <---- SYN+ACK B
    1 k# n2 L- f( P7 c" A( JX <---- SYN+ACK B + r3 z, Z) j' o+ X# J2 z3 _5 M
    X <---- SYN+ACK B
    7 l$ x# G4 c. G9 e4 `  p......
    ! y4 t" ?4 W, ~6 ?; {* ^/ S* j6 a8 V* U6 \/ T& [% a. L
    作者認為這樣就使得B網(wǎng)絡(luò)功能暫時癱瘓,可我覺得好象不對頭。因為B雖然在initsockid上無法接收TCP連接請求,但可以在another initsockid上接收,這種SYN flood應該只對特定的
    5 m# U. d3 {& h. n0 }3 k: V; k服務(端口),不應該影響到全局。當然如果不斷地發(fā)送連接請求,就和用ping發(fā)洪水包一個道理,使得B的TCP/IP忙于處理負載增大。至于SYN flood,回頭有機會我單獨灌一瓢有關(guān)DoS的。如何使B的網(wǎng)絡(luò)功能暫 碧被居 很多辦法,根據(jù)具體情況而定,不再贅述。 : p/ x* R; Y2 ^
    & f) {2 o% v' `) }) K/ z" S' S% _
    3. Z必須確定A當前的ISN。首先連向25端口(SMTP是沒有安全校驗機制的),與1中類似,不過這次需要記錄A的ISN,以及Z到A的大致的RTT(round trip time)。這個步驟要重復多次以便求出 8 a. n4 @% \9 C, C
    RTT的平均值?,F(xiàn)在Z知道了A的ISN基值和增加規(guī)律(比如每秒增加128000,每次連接增加64000),也知道了從Z到A需要RTT/2的時間。必須立即進入攻擊,否則在這之間有其他主機與A連接, % l& l* ~9 i, N: }9 [- v0 l, h
    ISN將比預料的多出64000。 6 |) r# G0 r. m0 ^
    1 d" s6 q4 ?7 `/ t* c! A
    4. 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)用會完成全相關(guān),自動指定本地socket地址和端口,可事實上B很可能并沒有這樣一個端口等待接收數(shù)據(jù)。除非Z模仿B發(fā)起
    + Z& [+ Y- g) Q8 f6 }: `# L連接請求時打破常規(guī),主動在客戶端調(diào)用bind函數(shù),明確完成全相關(guān),這樣必然知道A會向B的某個端口回送,在2中也針對這個端口攻擊B??墒侨绻@樣,完全不用攻擊B,bind的時候
    ( C+ K/ T  Z1 W$ m7 M指定一個B上根本不存在的端口即可。我也是想了又想,還沒來得及看看老外的源代碼,不妥之處有待商榷。總之,覺得作者好象在蒙我們,他自己也沒有實踐成功過吧。),B的TCP層只是
    5 g! H2 o2 \6 j; |" G* J簡單地丟棄A的回送數(shù)據(jù)段。 8 H& d3 J# T; ]: P4 w
    : b7 I: L7 }! q) u1 W/ Q' v
    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只有從頭再來。 0 F3 W( W: s. @8 M& m; ]

    1 q  \; K8 v: [0 S8 C# g1 pZ(B) ---- SYN ----> A
    ! C2 z' k( E) lB <---- SYN+ACK A / a: h* d  o. l" R  j- F- |, ~
    Z(B) ---- ACK ----> A ( J/ W- I+ h( t% r: {3 T; H
    Z(B) ---- PSH ----> A
      T5 R# A4 l0 r; ~7 r( |...... 5 D& p& u; I# Z" B

    - q$ z+ C& d% r* W- y. D/ m& V6. IP欺騙攻擊利用了RPC服務器僅僅依賴于信源IP地址進行安全校驗的特性,建議閱讀rlogind的源代碼。攻擊最困難的地方在于預測A的ISN。作者認為攻擊難度雖然大,但成功的可能性 ! f, ]$ X  N# m5 m
    也很大,不是很理解,似乎有點矛盾??紤]這種情況,入侵者控制了一臺由A到B之間的路由器,假設(shè)Z就是這臺路由器,那么A回送到B的數(shù)據(jù)段,現(xiàn)在Z是可以看到的,顯然攻擊難度
    ! H5 m9 {9 t) _6 k4 F驟然下降了許多。否則Z必須精確地預見可能從A發(fā)往B的信息,以及A期待來自B的什么應答信息,這要求攻擊者對協(xié)議本身相當熟悉。同時需要明白,這種攻擊根本不可能在交互狀態(tài)下完
    ' D+ D7 f* H1 R  B6 B  e成,必須寫程序完成。當然在準備階段可以用netxray之類的工具進行協(xié)議分析。 ( A2 S- C2 l( f/ P! g9 ~! I

    ' r$ B8 D: A6 J" \+ p7. 如果Z不是路由器,能否考慮組合使用ICMP重定向以及ARP欺騙等技術(shù)?沒有仔細分析過,只是隨便猜測而已。并且與A、B、Z之間具體的網(wǎng)絡(luò)拓撲有密切關(guān)系,在某些情況下顯然大幅度
    % L* d2 B* r$ J降低了攻擊難度。注意IP欺騙攻擊理論上是從廣域網(wǎng)上發(fā)起的,不局限于局域網(wǎng),這也正是這種攻擊的魅力所在。利用IP欺騙攻擊得到一個A上的shell,對于許多高級入侵者,得到目標主 ) C6 ?" o4 @; p& y7 x
    機的shell,離root權(quán)限就不遠了,最容易想到的當然是接下來進行buffer overflow攻擊。
    2 \* E4 Y- G/ a" w, c$ B# T1 t! W; e( E
    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掉,那是再好不過(是嗎?)。
    ; u' w8 R( @$ b5 e; x0 A3 u4 B( C3 T& I2 Z5 p8 l- e
    9. fakeip曾經(jīng)沸沸揚揚了一下,我對之進行端口掃描,發(fā)現(xiàn)其tcp端口113是接收入連接的。和IP欺騙等沒有直接聯(lián)系,和安全校驗是有關(guān)系的。當然,這個東西并不如其名所暗示,對IP層沒有任何動作。 ) L' f) e- T7 q! t$ e
    2 E+ c$ @  W. d* ]0 [0 t3 ]) a$ Q/ j
    10. 關(guān)于預測ISN,我想到另一個問題。就是如何以第三方身份切斷A與B之間的TCP連接,實際上也是預測sequence number的問題。嘗試過,也很困難。如果Z是A與B之間的路由器,就不用說了;或者Z動用了別的技術(shù)可以監(jiān)聽到A與B之間的通信,也容易些;否則預測太難。作者在3中提到連接A的25端口,可我想不明白的是513端口的ISN和25端口有什么關(guān)系?看來需要看看TCP/IP內(nèi)部實現(xiàn)的源代碼。 % a8 n6 }) }2 U  j

    4 n  l/ U- D* i( Q未雨綢繆
    5 U4 l% l& Z# d/ Y' s
    & M2 P9 L- E/ N, |' S* b雖然IP欺騙攻擊有著相當難度,但我們應該清醒地意識到,這種攻擊非常廣泛,入侵往往由這里開始。預防這種攻擊還是比較容易的,比如刪除所有的/etc/hosts.equiv、$HOME/.rhosts文件,修改/etc/inetd.conf文件,使得RPC機制無法運做,還可以殺掉portmapper等等。設(shè)置路由器,過濾來自外部而信源地址卻是內(nèi)部IP的報文。cisio公司的產(chǎn)品就有這種功能。不過路由器只防得了外部入侵,內(nèi)部入侵呢? % v+ |3 a5 E9 G0 H) F' H: \  f4 U
    5 I) x: }& {6 k2 k# a2 _1 P& A- @1 R
    TCP的ISN選擇不是隨機的,增加也不是隨機的,這使攻擊者有規(guī)可循,可以修改與ISN相關(guān)的代碼,選擇好的算法,使得攻擊者難以找到規(guī)律。估計Linux下容易做到,那solaris、irix、hp-unix還有aix呢?sigh
    0 s/ Z: l9 U7 V5 d( k0 Q. q8 r! q2 M2 X0 [, Z- S3 W* \: f# q- f
    雖然作者紙上談兵,但總算讓我們了解了一下IP欺騙攻擊,我實驗過預測sequence number,不是ISN,企圖切斷一個TCP連接,感覺難度很大。作者建議要找到規(guī)律,不要盲目預測,這需要時間和耐心。現(xiàn)在越發(fā)明白什么是那種鍥而不舍永遠追求的精神,我們所向往的傳奇故事背后有著如此沉默的艱辛和毅力,但愿我們學會的是這個,而不是浮華與喧囂。一個現(xiàn)成的bug足以讓你取得root權(quán)限,可你在做什么,你是否明白?我們太膚淺了......
    6 Y  ~* U5 o% h) i
    淺了......





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