劫持TCP不一定非要是中間人
導讀 | Hi,我是Robert,上回說到我費了老大勁才考上了 帝國的公務員,被分配到了網路部協議棧大廈的傳輸層工作。 |
Hi,我是Robert,上回說到我費了老大勁才考上了Linux帝國的公務員,被分配到了網路部協議棧大廈的傳輸層工作。
上班第一天,主管就讓我處理一個新的TCP連線練練手。雖然我理論背的滾瓜爛熟,不過還沒有實際上手處理過TCP資料包,竟有些緊張起來。
接過這個請求連線的資料包後,我準備了一個響應包,將SYN標記和ACK標記都點亮後,接下來就犯了難了。這個確認號ACK我倒是知道是對方的序列號+1,不過我回復的序列號該是多少呢?
我閉上眼睛在腦子飛快的檢索RFC,很快想了起來,RFC793有言,初始序列號ISN是一個計數器,每4ms加1。
我趕緊向一旁的Cerf求助,“Hi,Cerf,初始序列號計數器在哪裡啊?”
Cerf順手指了一下牆上的一個鐘錶樣式的東西,“喏,那就是,這是個全域性統一的計數器,大家共用。”
我填充好了序列號欄位,正欲傳送,Cerf叫住了我,“等等,你打算就拿這個計數器直接當初始序列號傳送出去啊?”
“這有什麼不對嗎?RFC793就是這樣說的啊”
“這都是多老的版本了,現在早就不這樣了!直接用這個當序列號很危險的”
我有些不好意思,接下來Cerf給我介紹了前因後果。
“原來,早先時候位元宇宙中別的帝國就是直接按照RFC793來設計ISN的。後來出了一件事,有一個攻擊者冒充客戶端給伺服器傳送資料包,把別人正常的TCP連線給劫持了,竊取了機密的資料!你猜他是怎麼辦到的?”
這可難不倒我,脫口而出:“肯定是這傢伙在半道上監聽了網路通訊,拿到了他們通訊的序列號和確認號,然後就能偽造一方進行通訊了”
Cerf搖了搖頭,“非也,這傢伙不是中間人,沒有監聽通訊哦”
這下我倒是蒙了,皺起了眉頭,“不是中間人,那就沒辦法知道序列號了,不知道序列號的前提下,怎麼能冒充呢?”
聽到我的問題,Cerf會心一笑,“這傢伙太聰明瞭,在冒充之前,他先和伺服器建立過連線,拿到了伺服器的初始序列號。因為這個序列號是每4ms加1,所以後面掐著時間推算一下,就能算到後面建立連線的時候,伺服器新的ISN是什麼”
我恍然大悟,“這傢伙真雞賊,那看來這個ISN不能這樣簡單設定。”
“所以啊,我剛剛制止了你,現在RFC出了新規定1948號檔案,規定ISN要這麼算:”
ISN = M + F(localhost, localport, remotehost, remoteport)
“M就是你剛剛看那個計數器,在此基礎之上,還增加了一個F,把通訊雙方的IP和埠,也就是四元組資訊做一個運算,得到一個值加在計數器之上,增加ISN的不可預測性”
我點了點頭,“這個F一般用什麼演算法呢?”
“在我們們Linux帝國,之前用過MD4演算法,後來升級成MD5演算法了”
“感謝Cerf,要不是你我就要犯錯誤了”
Cerf拍拍我的肩,語重心長的說:“你還要不停學習啊,考上帝國公務員只是第一步”
“要學習的不只是他,你也是啊,不知道關於ISN又出新規定了嗎?”
我倆一起回頭,原來是主管走了過來。
“主管,啥新規定啊?”,Cerf問到。
“RFC出了個新規定6528號檔案,現在的ISN是這樣計算的:”
ISN = M + F(localip, localport, remoteip, remoteport, secretkey)
“多了一個secretkey!”,我一下發現了不同。
“沒錯!如果雙方用同樣的埠先後進行兩次通訊,四元組是固定的,那F函式算下來的結果也是固定的,這樣隨機性就大大降低了。所以再增加一個secretkey,讓ISN變得更難預測”
“那是不是這樣就萬無一失啦?再也不怕被劫持了呢?”,我接著問到。
主管頓了一下,說到:“除非是網路中其他單位做中間人來劫持,否則應該是沒有辦法了”
主管不愧是主管,懂得是比我們多。
耽誤了半天,我的這條連線還沒有回覆,我趕緊按照新的演算法,算出了ISN,給對方回了過去。
第一個練手的連線就讓我學到了不少東西,沒想到一個簡單的ISN居然還有這麼多講究。
時間來到下午,Cerf帶我在大廈到處轉轉,熟悉一下環境。
不多時,我們來到了一間屋子,屋子裡擺放著一堆計數器,上面的訊號燈還在一明一暗的不停閃著。
“這又是一堆什麼計數器啊,怎麼這麼多!”,我問一旁的Cerf。
“這些是記錄我們們網路部門工作資料的重要展示,不僅在我們們傳輸層,下面一樓的網路層也有一個屋子存放了他們的計數器。每一次啟動,我們們發了多少包、收了多少包、出錯了多少、收到多少重複包等等資訊,都在這一筆筆記著呢。你後面正式工作了,少不了要經常來這裡的”
我放眼望去,每個計數器上面都貼了標籤:
SyncookiesSent SyncookiesRecv SyncookiesFailed EmbryonicRsts PruneCalled RcvPruned OfoPruned ······ DelayedACKs DelayedACKLocked DelayedACKLost ListenOverflows ListenDrops TCPPrequeued
正瞧著,忽然發現有不少同名的計數器,再仔細一瞧,不是同名,而是這裡劃分了8個分割槽,每個分割槽裡的計數器都是一樣的。
“Cerf,這裡怎麼有8份一樣的計數器啊”
“那是因為和我們們打交道的CPU是個8核的,為了防止多個執行緒之間競爭,加鎖太耽誤事兒了,就弄了8份。最後統計的時候再合在一起就行了”
離開了計數器的房間,Cerf又帶我參觀了存放連線請求佇列的倉庫,接著又教了我幾個TCP定時器的用法,這一天真是收穫滿滿。
明天就要正式工作了,不知道又是怎樣的一天~
未完待續······
“醒醒,上峰給我們派任務了,讓我們配合他劫持TCP連線”
“我們又沒有核心許可權怎麼能劫持TCP連線呢?”
“信上沒說,只是讓我們彙報一個計數器的值”
“什麼計數器?”
預知後事如何,請關注後續精彩······
本文地址:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2710285/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 疫情期間技術人員不一樣的工作模式模式
- 根證書和中間證書有什麼不一樣
- 學習最重要是方法,管理最重要是高度
- 中間人攻擊 -- Cookie噴發Cookie
- 對github的中間人攻擊Github
- 中間人攻擊 -- Cookie 噴發Cookie
- 域名劫持 dns,域名劫持,dns劫持是什麼,瞭解域名劫持DNS
- 中間人攻擊原理與實踐
- 談談JS中的函式劫持JS函式
- 美佛州發生劫持人質事件致5人死亡 嫌犯已被捕事件
- 中間人攻擊(man-in-the-middle attack):你和網際網路中間的第三人
- 中間人攻擊利用框架bettercap測試框架
- Windows更新+中間人=遠端命令執行Windows
- 關於iOS HTTPS中間人攻擊iOSHTTP
- 最好用的中間人攻擊工具mitmproxyMIT
- YASKAWA機器人TCP法詳解機器人TCP
- 劫持GPS定位&劫持WIFI定位WiFi
- struts頁面中要是有兩個表單如何處理?
- 授人以漁教新人程式設計?可他要是釣到河豚會死的程式設計
- 遊戲人間遊戲
- 流量劫持,分析為什麼會流量劫持,流量劫持危害大麼
- crontab與系統時間不一致
- Web 前端頁面劫持和反劫持Web前端
- 設定非root賬號不用sudo直接執行docker命令Docker
- 面試官:為什麼 TCP 三次握手期間,客戶端和服務端的初始化序列號要求不一樣?面試TCP客戶端服務端
- DNS劫持DNS
- dns劫持,dns劫持是什麼,該怎麼去預防dns劫持DNS
- 如何教新人程式設計:授人以漁(可他要是釣到河豚會死的)程式設計
- DNS劫持 DNS汙染 介紹、dns 劫持 汙染DNS
- Tcp, WebSocket 和 http 之間的通訊TCPWebHTTP
- tcp減少2msl的時間TCP
- RHEL5.2中用ntp實現時間自動同步(和AS4不一樣)
- 中間人攻擊(爬蟲工具) mitmproxy 使用指南爬蟲MIT
- java主要是做什麼的?Java
- get:程式設計主要是思考程式設計
- mysql5.7日誌時間與系統時間不一致MySql
- 什麼是DNS劫持?如何應對DNS劫持?DNS
- 淺析TCP和nodejs中TCP的簡單應用TCPNodeJS