亚洲色一色噜一噜噜噜_在线国产精品一区二区_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>

      汶上信息港

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

      作者: 雜七雜八    時(shí)間: 2011-1-13 17:01
      標(biāo)題: IP欺騙的技術(shù)
      。 % W/ Y7 j# J/ u/ F; p
      IP欺騙的技術(shù)比較復(fù)雜,不是簡單地照貓畫老虎就能掌握,但作為常規(guī)攻擊手段,有必要理解其原理,至少有利于自己的安全防范,易守難攻嘛。 $ R# G: Q6 A& ]2 u9 z- n. n, B% k$ ~
      $ n  N: Y6 Q( q: S9 a3 K
      假設(shè)B上的客戶運(yùn)行rlogin與A上的rlogind通信: 8 ?2 M: {  E6 \% @

      + t+ Q' r; ]( I1. B發(fā)送帶有SYN標(biāo)志的數(shù)據(jù)段通知A需要建立TCP連接。并將TCP報(bào)頭中的sequence number設(shè)置成自己本次連接的初始值ISN。 " e  F- K, ~3 y7 P: U

      * s% [6 w6 D+ A. k  `0 q; ?2 R5 }2. A回傳給B一個(gè)帶有SYS+ACK標(biāo)志的數(shù)據(jù)段,告之自己的ISN,并確認(rèn)B發(fā)送來的第一個(gè)數(shù)據(jù)段,將acknowledge number設(shè)置成B的ISN+1。
      4 m. A' k2 Q4 [7 a5 h. ^. b6 [1 _! C2 n" ?
      3. B確認(rèn)收到的A的數(shù)據(jù)段,將acknowledge number設(shè)置成A的ISN+1。
      ' @8 U& d8 ^5 A* |" ^# H: l( m' N; r9 e% J5 r+ d* @6 y2 [
      B ---- SYN ----> A
      1 E2 x7 m" y& ~, |B <---- SYN+ACK A 8 z' u; |/ \. ^4 G# \! f
      B ---- ACK ----> A * j! G2 \# }6 t5 @8 j
      6 d! ?$ N; V4 L0 n; x" S
      TCP使用的sequence number是一個(gè)32位的計(jì)數(shù)器,從0-4294967295。TCP為每一個(gè)連接選擇一個(gè)初始序號(hào)ISN,為了防止因?yàn)檠舆t、重傳等擾亂三次握手,ISN不能隨便選取,不同系統(tǒng)有不同算法。理解TCP如何分配ISN以及ISN隨時(shí)間變化的規(guī)律,對(duì)于成功地進(jìn)行IP欺騙攻擊很重要。 " |( j$ I4 w5 Q; @; C* l0 I5 n

      ; X! U" O" T/ h( J+ w基于遠(yuǎn)程過程調(diào)用RPC的命令,比如rlogin、rcp、rsh等等,根據(jù)/etc/hosts.equiv以及$HOME/.rhosts文件進(jìn)行安全校驗(yàn),其實(shí)質(zhì)是僅僅根據(jù)信源IP地址進(jìn)行用戶身份確認(rèn),以便允許或拒絕用戶RPC。關(guān)于上述兩個(gè)文件請(qǐng)man,不喜歡看英文就去Unix版看看我以前灌過的一瓢水。 & s" ^9 o: p& ~2 O* a. o

      . ]% O/ {/ d3 K+ I6 t0 ~2 T1 s- WIP欺騙攻擊的描述:
      $ Y% n1 z1 [4 O; x3 |& u+ R- E; E6 {4 E% N
      1. 假設(shè)Z企圖攻擊A,而A信任B,所謂信任指/etc/hosts.equiv和$HOME/.rhosts中有相關(guān)設(shè)置。注意,如何才能知道A信任B呢?沒有什么確切的辦法。我的建議就是平時(shí)注意搜集蛛絲
      ! N, m5 o  `$ P% F馬跡,厚積薄發(fā)。一次成功的攻擊其實(shí)主要不是因?yàn)榧夹g(shù)上的高明,而是因?yàn)樾畔⑺鸭膹V泛翔實(shí)。動(dòng)用了自以為很有成就感的技術(shù),卻不比人家酒桌上的巧妙提問,攻擊只以成功為終極目標(biāo),不在乎手段。 7 m" ?3 K8 e1 n* ?! B
      ; L" k' J: O3 k8 I0 A: W
      2. 假設(shè)Z已經(jīng)知道了被信任的B,應(yīng)該想辦法使B的網(wǎng)絡(luò)功能暫時(shí)癱瘓,以免對(duì)攻擊造成干擾。著名的SYN flood常常是一次IP欺騙攻擊的前奏。請(qǐng)看一個(gè)并發(fā)服務(wù)器的框架: 6 X4 Y3 O: v" G  o" J: F" L1 n

      8 w3 r8 M1 F$ ~" ?8 R5 \int initsockid, newsockid;
      & `! e( L! T' y3 @0 A$ ^9 mif ((initsockid = socket(...)) <0) { # a0 C  q: b" }' x! V1 }
      error("can't create socket");   o2 @- }' O5 U( {2 @! d
      } 5 Y  d3 r5 p+ l
      if (bind(initsockid, ...) <0) { ' [4 Y/ X4 t, p: t% t
      error("bind error");
      8 Q5 c- K8 Y# {0 E8 ?, G} & {  E1 C; R8 N" B$ m8 b8 |& g
      if (listen(initsockid, 5) <0) {
      ! z4 Q0 l) d4 e- U7 [6 eerror("listen error"); + r$ `; J  I  |1 j4 S: I3 N. _4 O/ D
      } ! a% ~: _2 f" v% N9 ~
      for (;;) {
      ! w+ i7 z0 Z, f1 {7 I: Gnewsockid = accept(initsockid, ...); /* 阻塞 */ # I" Z2 t0 \* S+ C( F
      if (newsockid <0) {
      3 V( U- B8 C8 c, T, ~error("accept error");
      3 ~. t5 ~. X7 b6 f, [} ' g7 Q) k, q- q
      if (fork() == 0) { /* 子進(jìn)程 */ * P/ G( A3 {' ^* M) s, d! m) Y
      close(initsockid);
      & S2 a, z; p( q7 [) l! [. ^8 ido(newsockid); /* 處理客戶方請(qǐng)求 */
      # k& ^2 g) U, X/ J( N- ]  y/ vexit(0);
      0 N: a7 N2 p3 n# o% O5 g}
      / ^& V' T4 F$ c( p+ ~+ D! K1 ]close(newsockid); + u0 ?# Y3 A# ~4 D! \9 {
      } 3 o* i2 _" h! B& A. E' J

      3 k- ]6 ?; }& B7 i, j/ R- D( Ylisten函數(shù)中第二個(gè)參數(shù)是5,意思是在initsockid上允許的最大連接請(qǐng)求數(shù)目。如果某個(gè)時(shí)刻initsockid上的連接請(qǐng)求數(shù)目已經(jīng)達(dá)到5,后續(xù)到達(dá)initsockid的連接請(qǐng)求將被TCP丟棄。注意一旦連接通過三次握手建立完成,accept調(diào)用已經(jīng)處理這個(gè)連接,則TCP連接請(qǐng)求隊(duì)列空出一個(gè)位置。所以這個(gè)5不是指initsockid上只能接受5個(gè)連接請(qǐng)求。SYN flood正是一種Denial of Service,導(dǎo)致B的網(wǎng)絡(luò)功能暫 碧被盡?nbsp;3 l' ~9 D5 m; h
      / v0 @! F# n  s& n; I7 F( t
      Z向B發(fā)送多個(gè)帶有SYN標(biāo)志的數(shù)據(jù)段請(qǐng)求連接,注意將信源IP地址換成一個(gè)不存在的主機(jī)X;B向子虛烏有的X發(fā)送SYN+ACK數(shù)據(jù)段,但沒有任何來自X的ACK出現(xiàn)。B的IP層會(huì)報(bào)告B的TCP層,X不可達(dá),但B的TCP層對(duì)此不予理睬,認(rèn)為只是暫時(shí)的。于是B在這個(gè)initsockid上再也不能接收正常的連接請(qǐng)求。
      * j# _* S! w0 _* A0 ?
      " q) k5 Y, c/ ]+ O) V' y. c. MZ(X) ---- SYN ----> B 2 z/ S3 y! s: F% h6 P- {' F. N2 `
      Z(X) ---- SYN ----> B ' N( ^6 C# y& E5 y/ C$ [# o
      Z(X) ---- SYN ----> B
      4 A: j$ s9 ^& i2 K, x; f  [# ?4 `Z(X) ---- SYN ----> B
      & v% M. b$ Q& ?7 j) r) oZ(X) ---- SYN ----> B : j; F$ r! D" ~, j1 V: U$ J" o1 J8 x  o
      ......
      & f+ @8 l7 i4 @' ?1 C) Z' LX <---- SYN+ACK B 0 p' C; F2 \5 e
      X <---- SYN+ACK B
      : l8 `: @5 Y: D! k/ V" J0 JX <---- SYN+ACK B
      ; \8 \+ P: T; Y9 e1 m( S1 |: {X <---- SYN+ACK B 1 q$ M4 K7 c# V( i' b: j
      X <---- SYN+ACK B / \% _* F4 U* u1 Z+ o9 W) ^1 L
      ......
      5 A/ N# s" P( Q0 ]5 x) X; L! S4 ]; v. ~0 V9 E' }' M/ t
      作者認(rèn)為這樣就使得B網(wǎng)絡(luò)功能暫時(shí)癱瘓,可我覺得好象不對(duì)頭。因?yàn)锽雖然在initsockid上無法接收TCP連接請(qǐng)求,但可以在another initsockid上接收,這種SYN flood應(yīng)該只對(duì)特定的
      % f' U5 O2 G( P/ [9 G0 q服務(wù)(端口),不應(yīng)該影響到全局。當(dāng)然如果不斷地發(fā)送連接請(qǐng)求,就和用ping發(fā)洪水包一個(gè)道理,使得B的TCP/IP忙于處理負(fù)載增大。至于SYN flood,回頭有機(jī)會(huì)我單獨(dú)灌一瓢有關(guān)DoS的。如何使B的網(wǎng)絡(luò)功能暫 碧被居 很多辦法,根據(jù)具體情況而定,不再贅述。 $ b; y) Q7 w8 S& t' p+ L
      1 m. T/ u6 Y7 e  b
      3. Z必須確定A當(dāng)前的ISN。首先連向25端口(SMTP是沒有安全校驗(yàn)機(jī)制的),與1中類似,不過這次需要記錄A的ISN,以及Z到A的大致的RTT(round trip time)。這個(gè)步驟要重復(fù)多次以便求出 # p4 u% e( M5 n  l; l& |1 i# l
      RTT的平均值?,F(xiàn)在Z知道了A的ISN基值和增加規(guī)律(比如每秒增加128000,每次連接增加64000),也知道了從Z到A需要RTT/2的時(shí)間。必須立即進(jìn)入攻擊,否則在這之間有其他主機(jī)與A連接,
      ( v, F( `% H$ y# lISN將比預(yù)料的多出64000。
      0 r  S4 z6 p# ]9 C
      " T0 f% {7 j& I7 |4. Z向A發(fā)送帶有SYN標(biāo)志的數(shù)據(jù)段請(qǐng)求連接,只是信源IP改成了B,注意是針對(duì)TCP513端口(rlogin)。A向B回送SYN+ACK數(shù)據(jù)段,B已經(jīng)無法響應(yīng)(憑什么?按照作者在2中所說,估計(jì)還達(dá)不到這個(gè)效果,因?yàn)閆必然要模仿B發(fā)起connect調(diào)用,connect調(diào)用會(huì)完成全相關(guān),自動(dòng)指定本地socket地址和端口,可事實(shí)上B很可能并沒有這樣一個(gè)端口等待接收數(shù)據(jù)。除非Z模仿B發(fā)起 : ]+ T, O! J6 d4 n
      連接請(qǐng)求時(shí)打破常規(guī),主動(dòng)在客戶端調(diào)用bind函數(shù),明確完成全相關(guān),這樣必然知道A會(huì)向B的某個(gè)端口回送,在2中也針對(duì)這個(gè)端口攻擊B??墒侨绻@樣,完全不用攻擊B,bind的時(shí)候
      4 S7 q2 |# _" c5 v. T指定一個(gè)B上根本不存在的端口即可。我也是想了又想,還沒來得及看看老外的源代碼,不妥之處有待商榷。總之,覺得作者好象在蒙我們,他自己也沒有實(shí)踐成功過吧。),B的TCP層只是
      ) u  L- Y; p! F! N1 P1 D2 Y簡單地丟棄A的回送數(shù)據(jù)段。 " z$ V- ]% ]$ v& f

      8 n6 W2 b, z( x* r6 D; u5. Z暫停一小會(huì)兒,讓A有足夠時(shí)間發(fā)送SYN+ACK,因?yàn)閆看不到這個(gè)包。然后Z再次偽裝成B向A發(fā)送ACK,此時(shí)發(fā)送的數(shù)據(jù)段帶有Z預(yù)測的A的ISN+1。如果預(yù)測準(zhǔn)確,連接建立,數(shù)據(jù)傳送開始。問題在于即使連接建立,A仍然會(huì)向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ā)送一個(gè)帶有RST標(biāo)志的數(shù)據(jù)段異常終止連接,Z只有從頭再來。 8 I5 A$ I! R# r% S, {

      ) @& d/ u, g( A! A/ S1 WZ(B) ---- SYN ----> A
      ; p4 n. N( e8 }1 c  nB <---- SYN+ACK A
      ( s( o( t7 q) p' u. j9 K9 i. M: J$ q$ ZZ(B) ---- ACK ----> A 9 K. ~5 U/ C$ I) d9 B$ Z
      Z(B) ---- PSH ----> A
      % y4 K( m; M6 X% S8 E7 _1 ]......
      ) S) G: Z* w, ~0 g  P3 O  s
      4 X) q* `6 ~( R7 c3 R6 O; ]6. IP欺騙攻擊利用了RPC服務(wù)器僅僅依賴于信源IP地址進(jìn)行安全校驗(yàn)的特性,建議閱讀rlogind的源代碼。攻擊最困難的地方在于預(yù)測A的ISN。作者認(rèn)為攻擊難度雖然大,但成功的可能性 0 h8 J' q7 W" ^( z( P+ _4 n( H
      也很大,不是很理解,似乎有點(diǎn)矛盾。考慮這種情況,入侵者控制了一臺(tái)由A到B之間的路由器,假設(shè)Z就是這臺(tái)路由器,那么A回送到B的數(shù)據(jù)段,現(xiàn)在Z是可以看到的,顯然攻擊難度 . T% J" o( Z; w
      驟然下降了許多。否則Z必須精確地預(yù)見可能從A發(fā)往B的信息,以及A期待來自B的什么應(yīng)答信息,這要求攻擊者對(duì)協(xié)議本身相當(dāng)熟悉。同時(shí)需要明白,這種攻擊根本不可能在交互狀態(tài)下完 6 n, y3 k; ?/ [
      成,必須寫程序完成。當(dāng)然在準(zhǔn)備階段可以用netxray之類的工具進(jìn)行協(xié)議分析。 * h( w4 D! x. @0 r' W, W

      ( }; L, W' a9 r5 m& B4 I* j7. 如果Z不是路由器,能否考慮組合使用ICMP重定向以及ARP欺騙等技術(shù)?沒有仔細(xì)分析過,只是隨便猜測而已。并且與A、B、Z之間具體的網(wǎng)絡(luò)拓?fù)溆忻芮嘘P(guān)系,在某些情況下顯然大幅度
      2 J' `4 k$ }' t' i2 l6 s' L降低了攻擊難度。注意IP欺騙攻擊理論上是從廣域網(wǎng)上發(fā)起的,不局限于局域網(wǎng),這也正是這種攻擊的魅力所在。利用IP欺騙攻擊得到一個(gè)A上的shell,對(duì)于許多高級(jí)入侵者,得到目標(biāo)主 ) a0 u7 m! H8 E
      機(jī)的shell,離root權(quán)限就不遠(yuǎn)了,最容易想到的當(dāng)然是接下來進(jìn)行buffer overflow攻擊。
      8 m9 b( ?3 f6 Y  m6 b# p' c/ n  k
      7 e% F/ v0 @4 X8. 也許有人要問,為什么Z不能直接把自己的IP設(shè)置成B的?這個(gè)問題很不好回答,要具體分析網(wǎng)絡(luò)拓?fù)?,?dāng)然也存在ARP沖突、出不了網(wǎng)關(guān)等問題。那么在IP欺騙攻擊過程中是否存在ARP沖突問題?;叵胛仪懊尜N過的ARP欺騙攻擊,如果B的ARP Cache沒有受到影響,就不會(huì)出現(xiàn)ARP沖突。如果Z向A發(fā)送數(shù)據(jù)段時(shí),企圖解析A的MAC地址或者路由器的MAC地址,必然會(huì)發(fā)送ARP請(qǐng)求包,但這個(gè)ARP請(qǐng)求包中源IP以及源MAC都是Z的,自然不會(huì)引起ARP沖突。而ARP Cache只會(huì)被ARP包改變,不受IP包的影響,所以可以肯定地說,IP欺騙攻擊過程中不存在ARP沖突。相反,如果Z修改了自己的IP,這種ARP沖突就有可能出現(xiàn),示具體情況而言。攻擊中連帶B一起攻擊了,其目的無非是防止B干擾了攻擊過程,如果B本身已經(jīng)down掉,那是再好不過(是嗎?)。
      9 G' O9 T( f0 H2 R8 B+ i5 W7 p. x( r  |
      9. fakeip曾經(jīng)沸沸揚(yáng)揚(yáng)了一下,我對(duì)之進(jìn)行端口掃描,發(fā)現(xiàn)其tcp端口113是接收入連接的。和IP欺騙等沒有直接聯(lián)系,和安全校驗(yàn)是有關(guān)系的。當(dāng)然,這個(gè)東西并不如其名所暗示,對(duì)IP層沒有任何動(dòng)作。 & r9 W1 E+ i/ P: f+ b% X

      , t' U, ?2 h0 \' q) h! e10. 關(guān)于預(yù)測ISN,我想到另一個(gè)問題。就是如何以第三方身份切斷A與B之間的TCP連接,實(shí)際上也是預(yù)測sequence number的問題。嘗試過,也很困難。如果Z是A與B之間的路由器,就不用說了;或者Z動(dòng)用了別的技術(shù)可以監(jiān)聽到A與B之間的通信,也容易些;否則預(yù)測太難。作者在3中提到連接A的25端口,可我想不明白的是513端口的ISN和25端口有什么關(guān)系?看來需要看看TCP/IP內(nèi)部實(shí)現(xiàn)的源代碼。 ( L3 g' d9 r) C4 P
      4 M- A' s) p0 Z; B% _" y
      未雨綢繆 4 b  y, Y  K$ ?/ v8 Y4 _
      ( Q5 q3 t. a& N6 l! |; _* `1 c  A
      雖然IP欺騙攻擊有著相當(dāng)難度,但我們應(yīng)該清醒地意識(shí)到,這種攻擊非常廣泛,入侵往往由這里開始。預(yù)防這種攻擊還是比較容易的,比如刪除所有的/etc/hosts.equiv、$HOME/.rhosts文件,修改/etc/inetd.conf文件,使得RPC機(jī)制無法運(yùn)做,還可以殺掉portmapper等等。設(shè)置路由器,過濾來自外部而信源地址卻是內(nèi)部IP的報(bào)文。cisio公司的產(chǎn)品就有這種功能。不過路由器只防得了外部入侵,內(nèi)部入侵呢? - M1 f% f) Z: ?. w# ]: K

      - t4 h" t2 @! Y1 n( Q- A% d  b2 |TCP的ISN選擇不是隨機(jī)的,增加也不是隨機(jī)的,這使攻擊者有規(guī)可循,可以修改與ISN相關(guān)的代碼,選擇好的算法,使得攻擊者難以找到規(guī)律。估計(jì)Linux下容易做到,那solaris、irix、hp-unix還有aix呢?sigh
        z( Q7 h" A  F8 g* Z; W' D/ J7 k+ F- Z& [2 v) @! Q
      雖然作者紙上談兵,但總算讓我們了解了一下IP欺騙攻擊,我實(shí)驗(yàn)過預(yù)測sequence number,不是ISN,企圖切斷一個(gè)TCP連接,感覺難度很大。作者建議要找到規(guī)律,不要盲目預(yù)測,這需要時(shí)間和耐心?,F(xiàn)在越發(fā)明白什么是那種鍥而不舍永遠(yuǎn)追求的精神,我們所向往的傳奇故事背后有著如此沉默的艱辛和毅力,但愿我們學(xué)會(huì)的是這個(gè),而不是浮華與喧囂。一個(gè)現(xiàn)成的bug足以讓你取得root權(quán)限,可你在做什么,你是否明白?我們太膚淺了......
      $ C9 f. a* ~  b2 ]
      淺了......





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