會話劫持

會話劫持

在現實生活中,比如你去市場買菜,在交完錢後你要求先去乾一些別的事情,稍候再來拿菜;如果這個時候某個陌生人要求把菜拿走,賣菜的人會把菜給陌生人嗎?!當然,這只是一個比喻,但這恰恰就是會話劫持的喻意。所謂會話,就是兩台主機之間的一次通訊。

  • 中文名稱
    會話劫持

定義

例如你Telnet到某台主機,這就是一次Telnet會話;你瀏覽某個網站,這就是一次HTTP會話。而會話劫持(Session Hijack),就是結合了嗅探以及欺騙技術在內的攻擊手段。例如,在一次正常的會話過程當中,攻擊者作為第三方參與到其中,他可以在正常數據包中插入惡意數據,也可以在雙方的會話當中進行監聽,甚至可以是代替某一方主機接管會話。我們可以把會話劫持攻擊分為兩種類型:1)中間人攻擊(Man In The Middle,簡稱MITM),2)注射式攻擊(Injection);並且還可以把會話劫持攻擊分為兩種形式:1)被動劫持,2)主動劫持;被動劫持實際上就是在後台監視雙方會話的數據流,從中獲得敏感數據;而主動劫持則是將會話當中的某一台主機"踢"下線,然後由攻擊者取代並接管會話,這種攻擊方法危害非常大,攻擊者可以做很多事情,比如"cat etc/master.passwd"(FreeBSD下的Shadow檔案)。

原理結構

會話劫持利用了TCP/IP工作原理來設計攻擊。TCP使用端到端的連線,即TCP用(源IP,源TCP連線埠號,目的IP,目的TCP端號)來唯一標識每一條已經建立連線的TCP鏈路。另外,TCP在進行數據傳輸時,TCP報文首部的兩個欄位序號(seq)和確認序號(ackseq)非常重要。序號(seq)和確認序號(ackseq)是與所攜帶TCP數據淨荷(payload)的多少有數值上的關係:序號欄位(seq)指出了本報文中傳送的數據在傳送主機所要傳送的整個數據流中的順序號,而確認序號欄位(ackseq)指出了傳送本報文的主機希望接收的對方主機中下一個八位組的順序號。因此,對於一台主機來說,其收發的兩個相臨TCP報文之間的序號和確認序號的關係為:它所要發出的報文中的seq值應等於它所剛收到的報文中的ackseq的值,而它所要傳送報文中ackseq的值應為它所收到報文中seq的值加上該報文中所傳送的TCP淨荷的長度。

TCP會話劫持的攻擊方式可以對基於TCP的任何套用發起攻擊,如HTTP、FTP、Telnet等。對於攻擊者來說,所必須要做的就是窺探到正在進行TCP通信的兩台主機之間傳送的報文,這樣攻擊者就可以得知該報文的源IP、源TCP連線埠號、目的IP、目的TCP端號,從而可以得知其中一台主機對將要收到的下一個TCP報文段中seq和ackseq值的要求。這樣,在該合法主機收到另一台合法主機傳送的TCP報文前,攻擊者根據所截獲的信息向該主機發出一個帶有淨荷的TCP報文,如果該主機先收到攻擊報文,就可以把合法的TCP會話建立在攻擊主機與被攻擊主機之間。帶有淨荷的攻擊報文能夠使被攻擊主機對下一個要收到的TCP報文中的確認序號(ackseq)的值的要求發生變化,從而使另一台合法的主機向被攻擊主機發出的報文被被攻擊主機拒絕。TCP會話劫持攻擊方式的好處在於使攻擊者避開了被攻擊主機對訪問者的身份驗證和安全認證,從而使攻擊者直接進入對被攻擊主機的的訪問狀態,因此對系統安全構成的威脅比較嚴重。

步驟

找到一個活動的會話

會話劫持的第一步要求攻擊者找到一個活動的會話。這要求攻擊者嗅探在子網上的通訊。攻擊者將尋找諸如FTP之類的一個已經建立起來的TCP會話。如果這個子網使用一個集線器,查找這種會話是很容易的。一個交換的網路需要攻擊者破壞地址解析協定

猜測正確的序列號碼

下一步,攻擊者必須能夠猜測正確的序列號碼。請記住,一個基本的TCP協定設計是傳輸的數據的每一個位元組必須要有一個序列號碼。這個序列號用來保持跟蹤數據和提供可靠性。最初的序列號碼是在TCP協定握手的第一步生成的。目的地系統使用這個值確認發出的位元組。這個序列號欄位長度有32個位元組。這就意味著可能有大約4,294,967,295個序列號。一旦這個序列號一致,這個賬戶就會隨著數據的每一個位元組逐步增加。

把合法的用戶斷開

一旦確定了序列號,攻擊者就能夠把合法的用戶斷開。這個技術包括拒絕服務、源路由或者向用戶傳送一個重置命令。無論使用哪一種技術,這個目的都是要讓用戶離開通訊路徑並且讓伺服器相信攻擊者就是合法的客戶機。

如果這些步驟取得成功,攻擊者現在就可以控制這個會話。只要這個會話能夠保持下去,攻擊者就能夠通過身份驗證進行訪問。這種訪問能夠用來在本地執行命令以便進一步利用攻擊者的地位。

預防檢測

處理會話劫持問題有兩種機制:預防和檢測。預防措施包括限制入網的連線和設定你的網路拒絕假冒本地地址從網際網路上發來的數據包。

加密也是有幫助的。如果你必須要允許來自可信賴的主機的外部連線,你可以使用Kerberos或者IPsec工具。使用更安全的協定,FTP和Telnet協定是最容易受到攻擊的。SSH是一種很好的替代方法。SSH在本地和遠程主機之間建立一個加密的頻道。通過使用IDS或者IPS系統能夠改善檢測。交換機、SSH等協定和更隨機的初始序列號的使用會讓會話劫持更加困難。此外,網路管理員不應該麻痹大意,有一種安全感。雖然會話劫持不像以前那樣容易了,但是,會話劫持仍是一種潛在的威脅。允許某人以經過身份識別的身份連線到你的一個系統的網路攻擊是需要認真對付的。

其它詞條