公司悄悄部署了一個(gè)東西,盯著你···
圖片來(lái)自 Pexels
這個(gè)網(wǎng)絡(luò)中所有人的上網(wǎng)內(nèi)容我都看的清清楚楚,是不是很可怕?
我被一家公司老板買(mǎi)來(lái)運(yùn)行在一個(gè)配置極高的 Linux 服務(wù)器上,這臺(tái)服務(wù)器上的網(wǎng)卡可不得了,公司進(jìn)出的網(wǎng)絡(luò)數(shù)據(jù)包都得流經(jīng)它,它源源不斷的把數(shù)據(jù)包抓上來(lái)交給我來(lái)分析。
你們應(yīng)該也知道,網(wǎng)絡(luò)通信是分層的,最常見(jiàn)的就是那個(gè) TCP/IP 協(xié)議體系了。
拿到數(shù)據(jù)包后,我就得按照這個(gè)協(xié)議規(guī)范,一層層的脫去協(xié)議的外殼,拿到它們的負(fù)載數(shù)據(jù)。
TCP 會(huì)話重組
我重點(diǎn)要照顧的是 TCP 協(xié)議,因?yàn)楹枚鄳?yīng)用都要使用 TCP 來(lái)傳輸,像上網(wǎng)沖浪 HTTP、發(fā)郵件 SMTP、微信聊天等等。
我想要掌控網(wǎng)絡(luò)中的通信,第一個(gè)就要拿 TCP 開(kāi)刀,得想辦法把 TCP 傳輸?shù)囊粋€(gè)個(gè)數(shù)據(jù)包給重組起來(lái),形成一個(gè)完整的會(huì)話,這樣我才好知道應(yīng)用層傳了什么東西,這個(gè)步驟叫做會(huì)話重組。
不過(guò)這個(gè) TCP 協(xié)議有點(diǎn)復(fù)雜,拋開(kāi)我們抓到的包本來(lái)就存在亂序的情況不說(shuō),它本身還有三次握手、四次揮手、超時(shí)重傳、延遲回復(fù)等很多機(jī)制。
有時(shí)候還會(huì)遇到時(shí)間跨度很久的長(zhǎng)連接,這無(wú)疑都給我想要重組 TCP 會(huì)話造成了很大的難度。
而我重組 TCP 會(huì)話的唯一線索就是數(shù)據(jù)包包頭中的序列號(hào) SEQ 和確認(rèn)號(hào) ACK。
不過(guò)我還是死磕 RFC 規(guī)范,把這些問(wèn)題都攻克了,能夠成功重組出一個(gè)個(gè)的 TCP 會(huì)話數(shù)據(jù),成功率還蠻高的。
應(yīng)用協(xié)議識(shí)別
TCP 會(huì)話重組出來(lái)了,我就可以拿到里面?zhèn)鬏數(shù)臄?shù)據(jù)了。接下來(lái)要做的一件事就是識(shí)別應(yīng)用層到底是什么應(yīng)用在傳輸?shù)哪?
用我們的行話說(shuō),那就是做應(yīng)用協(xié)議識(shí)別,這個(gè)時(shí)候我就得看一下端口了。
我根據(jù)三次握手?jǐn)?shù)據(jù)包的方向,就可以確定出誰(shuí)是客戶(hù)端,誰(shuí)是服務(wù)端。
再看一下服務(wù)端的端口號(hào)(這個(gè)在 TCP 包頭里面就可以看到),就能知道這是一個(gè)什么服務(wù)了。
像常見(jiàn)的有下面這些:
- 22:SSH 遠(yuǎn)程登陸
- 25:郵件服務(wù)
- 53:域名解析服務(wù)
- 80:HTTP Web 服務(wù)
- 3306:MySQL 數(shù)據(jù)庫(kù)服務(wù)
- 3389:遠(yuǎn)程桌面連接服務(wù)
- ······
最常見(jiàn)的就是 80 端口的 Web 服務(wù)了,人類(lèi)每天上網(wǎng)都在用到。
有時(shí)候 Web 服務(wù)不走 80 端口,換成了別的,不過(guò)這難不倒我,我可以通過(guò)分析 TCP 的負(fù)載數(shù)據(jù)特征,看看有沒(méi)有 HTTP 協(xié)議的特征出現(xiàn),因?yàn)? HTTP 協(xié)議的特征實(shí)在是太明顯啦!
到了后來(lái),根據(jù)端口的經(jīng)驗(yàn)出錯(cuò)的概率越來(lái)越大了,我就統(tǒng)一根據(jù)內(nèi)容來(lái)進(jìn)行識(shí)別判斷,不再相信端口。
每個(gè)應(yīng)用都有它們各自的協(xié)議特征,這個(gè)識(shí)別我可是下了點(diǎn)功夫,輕易不會(huì)透露。
文件還原
現(xiàn)在我知道應(yīng)用層是什么協(xié)議了,我就可以把應(yīng)用層協(xié)議傳輸?shù)臄?shù)據(jù)給整明白了。
還是拿最常見(jiàn)的 Web 服務(wù)來(lái)說(shuō)吧,HTTP 協(xié)議是一個(gè)基于請(qǐng)求-響應(yīng)的協(xié)議,比如下面的這一次通信:
請(qǐng)求是一個(gè) GET 包,看請(qǐng)求的資源貌似是一張 JPG 圖片。
再看響應(yīng)包,狀態(tài)碼是 200 OK,看來(lái)沒(méi)啥問(wèn)題。再看看 Content-Type,image/jpeg,是個(gè) JPG 圖片沒(méi)跑了。
現(xiàn)在我就可以定位到響應(yīng)包的負(fù)載段,就是在 HTTP 頭,兩個(gè)回車(chē)換行(0D0A)后面就是數(shù)據(jù)了。
找到數(shù)據(jù)位置,再根據(jù) Content-Length 的大小,把數(shù)據(jù)摳出來(lái)寫(xiě)成一個(gè) PNG 格式的文件就大功告成了!
OMG,這是哪個(gè)血?dú)夥絼偟男』镒佑衷诳疵琅畧D片了!
上面這個(gè)把協(xié)議中傳輸?shù)奈募崛〕鰜?lái)的過(guò)程叫做文件還原,除了 HTTP 協(xié)議,我還支持文件傳輸協(xié)議 FTP、郵件傳輸協(xié)議 SMTP、文件共享的 SMB 協(xié)議呢。
你們通過(guò)這些協(xié)議傳輸?shù)奈募?,我都能給你還原出來(lái),是不是很可怕?
HTTPS 解密
有一天,我發(fā)現(xiàn) 80 端口的數(shù)據(jù)包越來(lái)越少了,與此同時(shí),443 端口的通信數(shù)據(jù)不知不覺(jué)多了起來(lái)。
后來(lái)才知道原來(lái)為了防止被我這樣的網(wǎng)絡(luò)中間人窺探隱私,他們都用上了一個(gè)叫 HTTPS 的技術(shù)。
HTTPS 把數(shù)據(jù)進(jìn)行了加密傳輸,這樣我拿到以后都是加密后的,沒(méi)辦法知道傳輸了什么內(nèi)容。
不過(guò)這家公司的老板很聰明,他要求公司的員工電腦上都裝上了一個(gè)“安全軟件”。
美其名曰保護(hù)電腦不被入侵,實(shí)際上啊是在他們的電腦上做了一個(gè)中間人劫持,進(jìn)行了 HTTPS 的證書(shū)替換(你不信可以看看這個(gè):誰(shuí)動(dòng)了你的 HTTPS 流量?)。
這個(gè)“安全軟件”作為中間人把 HTTPS 證書(shū)和密鑰告訴我,我就可以解密 HTTPS 流量了!你們上網(wǎng)干了啥我還是能知道的一清二楚!
網(wǎng)絡(luò)阻斷
你以為我只能在一旁監(jiān)聽(tīng)嗎?圖樣!
要是你們?cè)L問(wèn)那些敏感的網(wǎng)站,或者嘗試把老板交代給我重點(diǎn)看護(hù)的數(shù)據(jù)偷偷傳出去,那我就不只是看著那么簡(jiǎn)單了,這個(gè)時(shí)候我就要啟動(dòng)阻斷功能。
為了不影響公司網(wǎng)絡(luò)的運(yùn)轉(zhuǎn),我一般都是旁路部署的,這樣要是我哪天抽風(fēng)遇到了 Bug,還可以立即把我撤下去。
這個(gè)所謂旁路部署呢,就是抓取的包都是一份拷貝,而不是通過(guò)我轉(zhuǎn)發(fā)。
不過(guò)這樣一來(lái)也給我阻斷網(wǎng)絡(luò)通信帶來(lái)了一些麻煩,如果我是串聯(lián)到網(wǎng)絡(luò)中,那可就簡(jiǎn)單了,遇到那些可疑的網(wǎng)絡(luò)連接我直接丟掉數(shù)據(jù)包,不轉(zhuǎn)發(fā)出去就得了。
可現(xiàn)在我不是串聯(lián),而是旁路部署,怎么辦呢?
聰明如我,怎么可能被這小小的問(wèn)題難住?我可是深諳 TCP 協(xié)議的行家,在發(fā)現(xiàn)可疑的連接建立的時(shí)候,就將它掐滅在萌芽狀態(tài)!
具體來(lái)說(shuō),TCP 連接的建立是要經(jīng)過(guò)三次握手的:
當(dāng)我發(fā)現(xiàn)可疑的 SYN 數(shù)據(jù)包時(shí),在服務(wù)端回復(fù)第二次握手包之前,以迅雷不及掩耳盜鈴之勢(shì),用服務(wù)器 IP 的名義偽造一個(gè) RST 的數(shù)據(jù)包給客戶(hù)端,這樣連接就被我掐斷了!
這一招雖然不能保證百分之百成功,但我離客戶(hù)端更近,我的偽造包一般都能比真正的服務(wù)端響應(yīng)包早一步到達(dá)客戶(hù)端,所以成功率還是蠻高的!
唉,說(shuō)曹操,曹操就到!發(fā)現(xiàn)了一個(gè)可疑的連接來(lái)了,先不說(shuō)了,我要去忙了~
彩蛋:悄悄告訴你們,上次公司 HR 給我導(dǎo)入了一批 URL 列表,讓我重點(diǎn)關(guān)注下都是誰(shuí)在訪問(wèn):
- www.lagou.com
- www.zhipin.cpm
- www.liepin.com
作者:軒轅之風(fēng)
編輯:陶家龍
出處:轉(zhuǎn)載自公眾號(hào)編程技術(shù)宇宙(ID:xuanyuancoding)