人人做人人澡人人爽欧美,国产主播一区二区,久久久精品五月天,羞羞视频在线观看免费

當前位置:蘿卜系統 > 網絡技術教程 > 詳細頁面

網絡安全講座之7:攻擊與滲透(5)

網絡安全講座之7:攻擊與滲透(5)

更新時間:2021-12-14 文章作者:未知 信息來源:網絡 閱讀次數:

網絡技術是從1990年代中期發展起來的新技術,它把互聯網上分散的資源融為有機整體,實現資源的全面共享和有機協作,使人們能夠透明地使用資源的整體能力并按需獲取信息。資源包括高性能計算機、存儲資源、數據資源、信息資源、知識資源、專家資源、大型數據庫、網絡、傳感器等。 當前的互聯網只限于信息共享,網絡則被認為是互聯網發展的第三階段。
TCP/IP序列號生成方法

  TCP的Initial Sequence Number(ISN)的預測



(圖1)

  正常的TCP連接基于一個三次握手(3-way handshake),一個客戶端(Client)向服務器(Server)發送一個初始化序列號ISNc, 隨后,服務器相應這個客戶端ACK(ISNc),并且發送自己的初始化序列號ISNs,接著,客戶端響應這個ISNs(如下圖),三次握手完成。

   C ---〉S: (ISNc)

   S ---〉C: ACK(ISNc)+ ISNs

   C ---〉S: ACK(ISNs)

   C ---〉S: data

   and / or

   S ---〉C: data

  下面,我以Windows2000 Advanced Server為例,來說一下兩臺主機是如何進行三次握手。



(圖2)



(圖3)

  我們可以看到:

  1) Smartboy首先發送一個seq:32468329的包給服務器202.116.128.6。

  2) 然后, 202.116.128.6響應主機Smartboy, 它送給Smartboy自己的

   seq:3333416325 而且響應Smartboy的ack:3240689240。

  3) Smartboy再響應服務器202.116.128.6, seq:3240689240, ack:3333416326。

   三次握手完畢,兩臺幾建立起連接。

   可以看出,在三次握手協議中,Clinet一定要監聽服務器發送過來的ISNs, TCP使用的sequence number是一個32位的計數器,從0-4294967295。TCP為每一個連接選擇一個初始序號ISN,為了防止因為延遲、重傳等擾亂三次握手,ISN不能隨便選取,不同系統有不同算法。理解TCP如何分配ISN以及ISN隨時間變化的規律,對于成功地進行IP欺騙攻擊很重要。

  在Unix系統里,基于遠程過程調用RPC的命令,比如rlogin、rcp、rsh等等,根據/etc/hosts.equiv以及$HOME/.rhosts文件進行安全校驗,其實質是僅僅根據源IP地址進行用戶身份確認,以便允許或拒絕用戶RPC。這就給與了那些攻擊者進行IP地址欺騙的機會。

   讓我們看X是如何冒充T來欺騙S,從而建立一個非法連接 :

   X---->S: SYN(ISNx ) , SRC = T

   S---->T: SYN(ISNs ) , ACK(ISNT) (*)

   X---->S: ACK(ISNs+1 ) , SRC = T (**)

   X---->S: ACK(ISNs +1) , SRC = T, 攻擊命令(可能是一些特權命令)

   但是,T必須要在第(**)中給出ISNs, 問題是ISNs在第(*)步中發給了T(X當然很難截取到),幸運的是,TCP協議有一個約定: ISN變量每秒增加250,000次,這個增加值在許多版本比較舊的操作系統中都是一個常量,在FreeBSD4.3中是125000次每秒,這就給X一個可乘之機。

   看一下X是如何猜出ISNs : 

   a、首先, X發送一個SYN包來獲取服務器現在的ISNs

     X ---〉S: (ISNx)

     S ---〉X: ACK(ISNx)+ ISNs# (1)

   b、緊接著,X冒充T向服務器發送SYN包

        X ---〉S: SYN(ISNx ) , SRC = T (2)

   c、于是,服務器發出一個響應包給T(這個包X是收不到的)

     S ---〉T: SYN(ISNs$) , ACK(ISNT ) (3)

   d、X計算ISNs$:

       ISNs$ = ISNs# + RTT×Increment of ISN (4)

  其中,RTT(Round Trip Time),是一個包往返X和S所用的時間,可以通過Ping 來得到。



(圖4)

  上圖顯示了round trip times (RTT) 大概是0。

  Increment of ISN是協議棧的初始序列號每秒鐘增加的值,以Unix為例,當沒有外部連接發生時,服務器的ISN每秒增加128,000,有連接的時候,服務器的ISN每秒增加64,000。

   e、于是,

    X ---> S : ACK(ISNs$)   (冒充可信主機成功了)

    X ---> S : 惡意的命令或竊取機密消息的命令

  在評價以下的解決方案時有幾點要注意:

  1.該解決方案是否很好地滿足TCP的穩定性和可操作性的要求?
  2.該解決方案是否容易實現?
  3.該解決方案對性能的影響如何?
  4.該解決方案是否經得起時間的考驗?

  以下的幾種方案各有各的優點和缺點,它們都是基于增強ISN生成器的目標提出的。

  配置和使用密碼安全協議

  TCP的初始序列號并沒有提供防范連接攻擊的相應措施。TCP的頭部缺少加密選項用于強加密認證,于是,一種叫做IPSec的密碼安全協議的技術提出了。IPSec提供了一種加密技術(End to end cryptographic),使系統能驗證一個包是否屬于一個特定的流。這種加密技術是在網絡層實現的。其它的在傳輸層實現的解決方案(如SSL/TLS和SSH1/SSH2), 只能防止一個無關的包插入一個會話中,但對連接重置(拒絕服務)卻無能為力,原因是因為連接處理是發生在更低的層。IPSec能夠同時應付著兩種攻擊(包攻擊和連接攻擊)。它直接集成在網絡層的安全模型里面。

  上面的解決方案并不需要對TCP協議做任何得修改,RFC2385(“基于TCP MD5簽名選項的BGP會話保護)和其他的技術提供了增加TCP頭部的密碼保護,但是,卻帶來了收到拒絕服務攻擊和互操作性和性能方面的潛在威脅。使用加密安全協議有幾個優于其它方案的地方。TCP頭部加密防止了Hijacking和包擾亂等攻擊行為,而TCP層仍然能夠提供返回一個簡單增加ISN的機制,使方案提供了最大程度的可靠性。但實現IPSec非常復雜,而且它需要客戶機支持,考慮到可用性,許多系統都選擇使用RFC 1948。

  使用RFC1948

  在RFC1948中,Bellovin提出了通過使用4-tuples的HASH單向加密函數,能夠使遠程攻擊者無從下手(但不能阻止同一網段的攻擊者通過監聽網絡上的數據來判斷ISN)。

  Newsham 在他的論文 [ref_newsham]中提到:

  RFC 1948 [ref1]提出了一種不容易攻擊(通過猜測)的TCP ISN的生成方法。此方法通過連接標識符來區分序列號空間。每一個連接標識符由本地地址,本地端口,遠程地址,遠程端口來組成,并由一個函數計算標識符分的序列號地址空間偏移值(唯一)。此函數不能被攻擊者獲得,否則,攻擊者可以通過計算獲得ISN。于是,ISN就在這個偏移值上增加。ISN的值以這種方式產生能夠抵受上面提到的對ISN的猜測攻擊。

  一旦全局ISN空間由上述方法來生成,所有的對TCP ISN的遠程攻擊都變得不合實際。但是,需要指出的,即使我們依照RFC 1948來實現ISN的生成器,攻擊者仍然可以通過特定的條件來獲得ISN(這一點在后面敘述).

  另外,用加密的強哈希算法(MD5)來實現ISN的生成器會導致TCP的建立時間延長。所以,有些生成器(如Linux kernel )選擇用減少了輪數的MD4函數來提供足夠好的安全性同時又把性能下降變得最低。削弱哈希函數的一個地方是每幾分鐘就需要對生成器做一次re-key 的處理,經過了一次re-key的處理后,安全性提高了,但是,RFC793提到的可靠性卻變成另一個問題。

  我們已經知道,嚴格符合RFC1948的ISN生成方法有一個潛在的危機:

  一個攻擊者如果以前合法擁有過一個IP地址,他通過對ISN進行大量的采樣,可以估計到隨后的ISN的變化規律。在以后,盡管這個IP地址已經不屬于此攻擊者,但他仍然可以通過猜測ISN來進行IP欺騙。

  以下,我們可以看到RFC 1948的弱點:

  ISN = M + F(sip, sport, dip, dport,

  )

  其中

  ISN 32位的初始序列號

  M 單調增加的計數器

  F 單向散列哈希函數 (例如 MD4 or MD5)

  sip 源IP地址

  sport 源端口

  dip 目的IP地址

  dport 目的端口

  哈希函數可選部分,使遠程攻擊者更難猜到ISN.

  ISN自身的值是按照一個常數值穩定增加的,所以F()需要保持相對的穩定性。而根據Bellovin 所提出的,是一個系統特定的值(例如機器的啟動時間,密碼,初始隨機數等),這些值并不 會經常變。

  但是,如果Hash函數在實現上存在漏洞(我們無法保證一個絕對安全的Hash函數,況且,它的實現又與操作系統密切相關),攻擊者就可以通過大量的采樣,來分析,其中,源IP地址,源端口,目的IP地址,目的端口都是不變的,這減少了攻擊者分析的難度。

  Linux TCP的ISN生成器避免了這一點。它每5分鐘計算一次值,把泄漏的風險降到了最低。

  有一個辦法可以做的更好:

  取M = M + R(t)

  ISN = M + F(sip, sport, dip, dport, )

  其中

  R(t) 是一個關于時間的隨機函數

  很有必要這樣做,因為它使攻擊者猜測ISN的難度更大了(弱點在理論上還是存在的)。


網絡的神奇作用吸引著越來越多的用戶加入其中,正因如此,網絡的承受能力也面臨著越來越嚴峻的考驗―從硬件上、軟件上、所用標準上......,各項技術都需要適時應勢,對應發展,這正是網絡迅速走向進步的催化劑。

溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統下載排行

網站地圖xml | 網站地圖html
主站蜘蛛池模板: 河东区| 于田县| 建阳市| 尤溪县| 泸定县| 黄龙县| 广宗县| 温州市| 左云县| 思南县| 舒城县| 桐庐县| 青冈县| 威信县| 宝清县| 泰顺县| 喜德县| 绵阳市| 乐清市| 恩施市| 扎兰屯市| 东兴市| 克什克腾旗| 枝江市| 井研县| 运城市| 濮阳县| 达州市| 琼结县| 桓仁| 克山县| 岢岚县| 厦门市| 七台河市| 东台市| 朝阳市| 新宾| 河池市| 芦溪县| 平度市| 安溪县|