複製鏈接
請複製以下鏈接發送給好友

會話劫持

鎖定
在現實生活中,比如你去市場買菜,在交完錢後你要求先去幹一些別的事情,稍候再來拿菜;如果這個時候某個陌生人要求把菜拿走,賣菜的人會把菜給陌生人嗎?!當然,這只是一個比喻,但這恰恰就是會話劫持的喻意。所謂會話,就是兩台主機之間的一次通訊
你有一張某商場的禮品卡,但是禮品卡別人偷了,偷卡的人拿着你的禮品卡去商場消費,商户還是會認的對吧,認卡不認人,會話劫持同理。 [1] 
中文名
會話劫持
外文名
session hijacking
處理機制
預防和檢測
所屬學科
網絡工程

會話劫持會話劫持簡介

例如你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會話劫持攻擊方式的好處在於使攻擊者避開了被攻擊主機對訪問者的身份驗證和安全認證,從而使攻擊者直接進入對被攻擊主機的的訪問狀態,因此對系統安全構成的威脅比較嚴重。 [2] 

會話劫持會話劫持步驟

會話劫持找到一個活動的會話

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

會話劫持猜測正確的序列號碼

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

會話劫持把合法的用户斷開

一旦確定了序列號,攻擊者就能夠把合法的用户斷開。這個技術包括拒絕服務、源路由或者向用户發送一個重置命令。無論使用哪一種技術,這個目的都是要讓用户離開通訊路徑並且讓服務器相信攻擊者就是合法的客户機。
如果這些步驟取得成功,攻擊者現在就可以控制這個會話。只要這個會話能夠保持下去,攻擊者就能夠通過身份驗證進行訪問。這種訪問能夠用來在本地執行命令以便進一步利用攻擊者的地位。 [3] 

會話劫持如何預防檢測

處理會話劫持問題有兩種機制:預防和檢測。預防措施包括限制入網的連接和設置你的網絡拒絕假冒本地地址從互聯網上發來的數據包。
加密也是有幫助的。如果你必須要允許來自可信賴的主機的外部連接,你可以使用Kerberos或者IPsec工具。使用更安全的協議,FTP和Telnet協議是最容易受到攻擊的。SSH是一種很好的替代方法。SSH在本地和遠程主機之間建立一個加密的頻道。同時,有些網站也用Https代替Http協議。Https在本地和遠程主機之間建立一個加密的頻道。通過使用IDS或者IPS系統能夠改善檢測。交換機、SSH等協議和更隨機的初始序列號的使用會讓會話劫持更加困難。此外,網絡管理員不應該麻痹大意,有一種安全感。雖然會話劫持不像以前那樣容易了,但是,會話劫持仍是一種潛在的威脅。允許某人以經過身份識別的身份連接到你的一個系統的網絡攻擊是需要認真對付的。 [3] 
參考資料
  • 1.    PHP session 詳解  .26樓筆記[引用日期2019-01-28]
  • 2.    "Firefox extension steals Facebook, Twitter, etc. sessions". The H. 25 October 2010.
  • 3.    "WhatsApp no longer sends plain text". The H. 24 August 2012.