1. 程式人生 > >完了!TCP出了大事!

完了!TCP出了大事!

前情回顧:[《非中間人就不能劫持TCP了嗎?》](https://mp.weixin.qq.com/s/tipHNNO05o75_guzwY07Ag) ## 不速之客 夜黑風高,烏雲蔽月。 兩位不速之客,身著黑衣,一高一矮,潛入Linux帝國。 ![](https://imgkr.cn-bj.ufileos.com/ce9fd63f-e425-4e6e-abb8-710b9fede95c.png) 這一潛就是一個多月,直到他們收到了一條訊息······ 高個:“上峰終於給我們派任務了” 矮個:“什麼任務?我都閒的發慌了” 高個:“上峰讓我們配合他們完成TCP連線的劫持” 矮個:“TCP劫持?我們就是個普通程式,並沒有核心許可權,怎麼去修改網路連線啊,這不是強人所難嘛” 高個:“是啊,我也很奇怪。信上只約定了讓我們到時候告訴他們一個計數器的值就行,其他我們不用管” ![](https://imgkr.cn-bj.ufileos.com/70c61479-6f33-4b08-b84f-42cdc35f5eb3.png) 矮個:“計數器,什麼計數器?” 高個:“**DelayedACKLost**,信上說執行`cat /proc/net/netstat`就能看到” 矮個:“不需要特殊許可權嗎?” 高個:“我也不知道,要不咱先試一下?” 兩人收起信件,環顧一圈,見四下無人,便偷偷執行了這一條命令: ![](https://imgkr.cn-bj.ufileos.com/469ec3f4-2c80-42e0-99e4-3cdf68eeb9e8.png) “這都是些什麼啊?怎麼這麼多?”,矮個子問到。 “看樣子,**像是記錄了Linux帝國網路協議棧的很多統計資訊**”,高個子一邊說一邊仔細的檢視著。 “這些資訊居然是公開的,誰都可以看?” “也只能看,又改不了。怕啥?快找吧,找到DelayedACKLost再說” 兩人瞪大了眼睛,總算在一片密密麻麻的輸出中,找到了他們要的計數器。 可這一個小小的計數器怎麼就能助上峰完成TCP的劫持,二人卻是百思不得其解。 ## 祕密任務 第二天晚上。 “快醒醒,上峰又來訊息了”,在高個子的一陣搖晃中,矮個睜開了困頓的雙眼。 “又是什麼訊息啊?” “讓我們立即彙報DelayedACKLost的值” 兩人趕緊起身,再次執行了那條命令,拿到了計數器的值,報了上去。 剛發完訊息還沒緩過神,上峰的指示又來了:DelayedACKLost有無增加? ![](https://imgkr.cn-bj.ufileos.com/1b089fad-07e0-4fa9-b715-5ff9655076fd.png) 兩人互相看了一眼,不解其意,不過還是再次查看了計數器,確認沒有增加,再次把結果報了上去。 就這樣,來來回回幾十次,上峰一直詢問這個計數器有無增加,可把哥倆忙壞了。 終於,上峰不再來訊息,兩人有了喘息的時間。 ## 古怪的TCP連線 而此刻,Linux帝國網路部協議棧大廈還是燈火通明。 ![](https://imgkr.cn-bj.ufileos.com/d14fd364-9618-4bdf-95dc-cabd474f29a6.png) “今晚是怎麼回事,網路怎麼這麼差,我都收到了好多錯誤包了”,新來的Robert嘆了口氣。 “不至於吧,是不是因為剛來還不太熟練?”,一旁的Cerf隨口問到。 “不是啊,有一條連線,我收到的包序列號不是太小,就是太大,搞了好多次才正確的,我還沒見過這種情況呢!”,Robert繼續說到。 一聽這話,Cerf趕緊放下了手裡的工作,來到Robert工位旁邊,“這麼邪乎?你說這情況我來這裡這麼久也沒見過,讓我看看” Cerf仔細查看了過去一段時間的通訊,這條連線上,不斷有資料包傳送過來,但因為TCP序列號一直不對,所以一直給丟掉了。 ![](https://imgkr.cn-bj.ufileos.com/9cdf5936-7338-43d2-8ce5-e0abd9c64fd0.png) “有點奇怪,這傢伙怎麼感覺像是在猜序列號啊?而且奇怪的是最終居然讓他給猜出來了!這條連線一定有古怪,多半是被人劫持了。劫持方因為不知道序列號,所以一直在嘗試猜測序列號”,Cerf說到。 Robert也看了一看,“你這麼一說,確實是,而且你看,他不是瞎猜,好像是用二分法在猜!序列號是個32位的整數,二分法猜測,只需要32次就能猜出來” ![](https://imgkr.cn-bj.ufileos.com/0919e518-8e3e-432a-9182-df958e3c1b33.png) “二分法?要用二分法的前提他得知道他是猜大了還是猜小了,得不到這個反饋,他就只能瞎猜了。他是如何得知猜大還是猜小的呢?” 兩人思來想去,也想不通對方是如何用二分法猜出了最終的序列號,隨後將此事報給了網路部傳輸層主管,主管又將這事報給了帝國安全部長。 ## 揪出潛伏者 部長得知這個訊息後,高度重視,要求全面排查網路部TCP小組相關的程式碼。 大家尋著TCP資料包處理的流程,在序列號檢查處的位置發現了問題。 ![](https://imgkr.cn-bj.ufileos.com/59d6f99d-f2ee-4a96-9da8-b45cf46de9c6.png) 如果序列號檢查不通過,就會進入`tcp_send_dupack`,大家都把注意力放到了這裡: ![](https://imgkr.cn-bj.ufileos.com/1687010d-d5ae-4734-82e8-e7c2ed479404.png) “這裡這個before判斷是什麼意思?”,主管問到。 Cerf上前回答說:“這是在判斷收到的資料包的序列號是不是比期望的序列號小,如果小的話,說明網路有重傳,就要關閉延遲迴復ACK的機制,需要立即回覆ACK” “延遲迴復ACK?” ![](https://imgkr.cn-bj.ufileos.com/98a2cff9-6719-4ea0-b180-fe5fc5d55bb1.png) “哦,主管,這是我們TCP小組的一個優化,TCP傳輸需要確認,但是如果每一次互動資料都發送ACK就太浪費了,所以我們做了一個優化,等到多次或者有資料傳送的時候,一併把回覆的ACK帶上,就不用了每次傳送ACK報文,我們把這個叫**Delayed ACK**,也就是延遲確認。”,Cerf繼續解釋到。 “那下面這個`tcp_enter_quickack_mode`是不是就是關閉這個機制,進入快速ACK回覆模式?”,主管問到。 “沒錯沒錯!” 這時,安全部長指著一行問到,“這裡看著有些古怪,是在幹嘛?” ![](https://imgkr.cn-bj.ufileos.com/d4fcd293-73ec-4547-af9e-92f027258ebe.png) “這個我知道,Cerf昨天教過我,這個是在進行統計。把這一次延遲ACK的丟失計入對應的全域性計數器中”,Robert說到。 經驗老道的安全部長此刻意識到了問題,“如此看來,收到的序列號比期望小的時候,這個計數器才會增加,如果大了就不會增加。各位試想一下,如果那個猜測的傢伙能看到這個計數器有無增長,不就能知道是猜大了還是猜小了?” Robert搖了搖頭說到:“不會吧,這計數器在我們這裡,網路上其他人怎麼可能知道。再說了,這個計數器大家都在用,用這個判斷,誤差太大啦!” 主管也搖了搖頭,“不對,雖說是大家都在用,不過這裡這個計數器很特別,發生的概率很小,一般不會走到這裡來,網路哪那麼容易出問題嘛” ![](https://imgkr.cn-bj.ufileos.com/50c04dd7-11d4-4903-9541-0f5f7955c1cb.png) 安全部長說到:“根據目前掌握的資訊,之前就有其他部門反映帝國有奸細混了進來,不過他們一直藏在暗處,至今還沒有揪出來。如若他們和外界勾結,作為眼線,觀察這個計數器的變化,外面就能知道他的猜測是大是小。對,一定是這樣!” 隨後,安全部長來到了檔案系統部門,呼叫了`/proc/net/netstat`的訪問記錄,根據記錄很快定位到了隱藏在Linux帝國的兩個細作,下令將他們逮捕。 高矮兩位奸細如實交代了一切······ **未完待續······** ## 彩蛋 > “老大,我們派出的潛伏者失去聯絡了” > > “無妨,沒有那兩個笨蛋,我也能劫持TCP” > > *預知後事如何,請關注後續精彩······* > 本文的攻擊手法改編自看雪2018峰會,網路安全大牛錢志雲分享的主題《TCP的厄運,網路協議側通道分析及利用》 > > 看雪論壇原文連結:https://bbs.pediy.com/thread-245982.htm ## 往期TOP5文章 [CPU明明8個核,網絡卡為啥拼命折騰一號核?](https://mp.weixin.qq.com/s/Xf3sbkJFWDQ7bzhKFEmkzA) [因為一個跨域請求,我差點丟了飯碗](https://mp.weixin.qq.com/s/K15IVpe57STOf0SxyLEg9A) [完了!CPU一味求快出事兒了!](https://mp.weixin.qq.com/s/NVIgNj4c7ixkJWsemOt--g) [雜湊表哪家強?幾大程式語言吵起來了!](https://mp.weixin.qq.com/s/erSqe-nItuQPxW4MT3LEVg) [一個HTTP資料包的奇幻之旅](https://mp.weixin.qq.com/s/axPUi-8kHtFQTwgRtyZtGQ) ![](https://imgkr.cn-bj.ufileos.com/4b6d4bd9-3924-4288-a3e9-a31ea0dd045a.png)