試用期沒(méi)過(guò),因在公司上了 1024 網(wǎng)站...
最近瀏覽到一個(gè)知乎問(wèn)題:某運(yùn)營(yíng)同學(xué)在試用期期間因?yàn)樵诠ぷ髌陂g上了某 1024 網(wǎng)站,導(dǎo)致試用期不過(guò)。
試用期不過(guò)因在公司瀏覽 1024 網(wǎng)站
前兩天還看到不少公眾號(hào)推文,大意是:看小電影前一定要注意網(wǎng)址是不是 HTTPS 的,因?yàn)?HTTPS 是加密的,別人就不知道了。
提醒大家,不要啥app都亂安裝 小心你看小電影的記錄被人截取。
看到上面幾個(gè)問(wèn)題,我不禁想問(wèn)(這腦回路也是……):
-
通過(guò)瀏覽器訪(fǎng)問(wèn) HTTPS 站點(diǎn),其他人知道嗎?
-
通過(guò) App 訪(fǎng)問(wèn)匿名論壇(HTTPS),公司知道么?(他是不是接入了公司 WiFi?)
總之就是,上班時(shí)間上網(wǎng)摸魚(yú)嗎?哪怕用 HTTPS 問(wèn),如果公司知道,是通過(guò)什么手段?
本文談?wù)勎业目捶ǎ饕譃橐韵聨讉€(gè)方面:
-
HTTPS 為什么安全。
-
HTTPS 真的安全嗎?
-
App 如何保證信息安全,不被爬走?
-
公司可能的監(jiān)控手段有哪些?我們應(yīng)該怎么做?
HTTPS 為什么安全
HTTPS,也稱(chēng)作 HTTP over TLS,TLS 前身是SSL,會(huì)有各個(gè)版本。
TLS協(xié)議在TCP/IP協(xié)議棧中的關(guān)系
上圖描述了在TCP/IP協(xié)議棧中TLS(各子協(xié)議)和 HTTP 的關(guān)系。HTTP+TLS 也就是 HTTPS,和 HTTP 相比,HTTPS的優(yōu)勢(shì):
-
數(shù)據(jù)完整性:內(nèi)容傳輸經(jīng)過(guò)完整性校驗(yàn)
-
數(shù)據(jù)隱私性:內(nèi)容經(jīng)過(guò)對(duì)稱(chēng)加密,每個(gè)連接生成一個(gè)唯一的加密密鑰
-
身份認(rèn)證:第三方無(wú)法偽造服務(wù)端(客戶(hù)端)身份
下圖就是大致介紹了 HTTPS 的握手流程:
HTTPS 原理
感興趣的同學(xué)可以用 WireShark 抓包詳細(xì)看看其中的每一個(gè)步驟,有助于理解 HTTPS 的完整流程。這里,我就不詳述了,可以參考下小林的這篇圖解 HTTPS,很詳細(xì)。
大致就是客戶(hù)端和服務(wù)端通過(guò)“握手會(huì)談”商量出一個(gè)雙方支持的加密算法和相應(yīng)隨機(jī)參數(shù),得到一對(duì)密鑰,后續(xù)的傳輸?shù)膬?nèi)容都通過(guò)這對(duì)密鑰進(jìn)行加解密。
這對(duì)密鑰很牛皮,比如要加密傳輸消息『tangleithu』,客戶(hù)端通過(guò)公鑰加密得到的密文『xyyaabbccdd』進(jìn)行傳輸,服務(wù)端用自己的私鑰對(duì)密文解密,恰好能得到『tangleithu』。中間錯(cuò)一位都不行,這樣就保證了數(shù)據(jù)完整和隱私性。
因此,你在通過(guò) HTTPS 訪(fǎng)問(wèn)網(wǎng)站的時(shí)候,就算流量被截取監(jiān)聽(tīng),獲取到的信息也是加密的,啥實(shí)質(zhì)性的內(nèi)容也看不到。
例如,如下圖所示,當(dāng)我訪(fǎng)問(wèn)某個(gè)網(wǎng)站,此時(shí)通過(guò) wireshark 抓包得到的信息,能獲得僅僅是一些通信的IP地址而已。
HTTPS加密傳輸
這下放心了嗎?
摸魚(yú)的過(guò)程中,就算訪(fǎng)問(wèn)的 IP 地址被知道了,好像也無(wú)關(guān)緊要?
其實(shí),有了 IP 地址也能獲取不少信息了。
還好這個(gè) IP 搜出來(lái)是 github,而不是……
你或許會(huì)高興,連個(gè)網(wǎng)站域名都看不到,可以放心摸魚(yú)了。不過(guò),這是真的嗎?
HTTPS 真的完全安全嗎?
HTTPS 真的完全安全嗎?連訪(fǎng)問(wèn)的域名都獲取不到?答案是否定的。
上述 HTTPS 在握手階段有一個(gè)很重要的東西 —— 證書(shū)。
SNI —— 域名裸奔
當(dāng)訪(fǎng)問(wèn) HTTPS 站點(diǎn)時(shí),會(huì)首先與服務(wù)器建立 SSL 連接,第一步就是請(qǐng)求服務(wù)器的證書(shū)。
當(dāng)一個(gè) Server IP 只對(duì)應(yīng)一個(gè)域名(站點(diǎn))時(shí),很方便,任意客戶(hù)端請(qǐng)求過(guò)來(lái),無(wú)腦返回該域名(服務(wù))對(duì)應(yīng)的證書(shū)即可。但 IP 地址(IPv4)是有限的呀,多個(gè)域名復(fù)用同一個(gè) IP 地址的時(shí)候怎么辦?
服務(wù)器在發(fā)送證書(shū)時(shí),不知道瀏覽器訪(fǎng)問(wèn)的是哪個(gè)域名,所以不能根據(jù)不同域名發(fā)送不同的證書(shū)。
因此 TLS 協(xié)議升級(jí)了,多了 SNI 這個(gè)東西,SNI 即 Server Name Indication,是為了解決一個(gè)服務(wù)器使用多個(gè)域名和證書(shū)的 SSL/TLS 擴(kuò)展。
現(xiàn)在主流客戶(hù)端都支持這個(gè)協(xié)議的。別問(wèn)我怎么知道這個(gè)點(diǎn)的,之前工作上因?yàn)檫@個(gè)事情還費(fèi)了老大勁兒……
它的原理是:在與服務(wù)器建立 SSL 連接之前,先發(fā)送要訪(fǎng)問(wèn)站點(diǎn)的域名(Hostname),這樣服務(wù)器會(huì)根據(jù)這個(gè)域名返回一個(gè)合適的證書(shū)。此時(shí)還沒(méi)有辦法進(jìn)行加解密,因此至少這個(gè)域名是裸奔的。
如下圖所示,上面的截圖其實(shí)是訪(fǎng)問(wèn)我的個(gè)人博客的抓包情況,客戶(hù)端發(fā)送握手請(qǐng)求時(shí),很自覺(jué)帶上了自己的域名。
HTTPS SNI
因此,即便是 HTTPS,訪(fǎng)問(wèn)的域名信息也是裸奔狀態(tài)。你上班期間訪(fǎng)問(wèn)小電影網(wǎng)站,都留下了痕跡,若接入了公司網(wǎng)絡(luò),就自然而然被抓個(gè)正著。
除了域名是裸奔外,其實(shí)還有更嚴(yán)重的風(fēng)險(xiǎn),那就是中間人攻擊。
中間人攻擊
前面也提到 HTTPS 中的關(guān)鍵其實(shí)在于這個(gè)證書(shū)。從名字可以看出來(lái),中間人攻擊就是在客戶(hù)端、服務(wù)器之間多了個(gè)『中介』,『中介』在客戶(hù)端、服務(wù)器雙方中偽裝對(duì)方,如下圖所示,這個(gè)『MitmProxy』充當(dāng)了中間人,互相欺騙:
中間人攻擊,來(lái)源 evil0x
可以安裝 MitmProxy 或者 Fiddler 之類(lèi)的抓包軟件嘗試一把,然后開(kāi)啟代理。
此時(shí)用手機(jī)訪(fǎng)問(wèn)百度,得到的信息如下:
證書(shū)信任前
提示,連接不是私密連接,其實(shí)就是瀏覽器識(shí)別了證書(shū)不太對(duì)勁,沒(méi)有信任。而如果此時(shí)手機(jī)安裝了 Fiddler 的證書(shū),就會(huì)正常訪(fǎng)問(wèn)。
證書(shū)信任后可正常訪(fǎng)問(wèn)
因此,當(dāng)你信任證書(shū)后,在中間人面前,又是一覽無(wú)余了。
而如果你用了公司電腦,估計(jì)你有相應(yīng)的操作讓信任證書(shū)吧,或者手機(jī)上是否有安裝類(lèi)似的客戶(hù)端軟件吧?
抓緊時(shí)間看看手機(jī)的證書(shū)安裝明細(xì)。
我前任公司在信息安全這塊做得就非常謹(jǐn)慎,手機(jī)會(huì)有工作手機(jī),未授權(quán)的任何 App 都不能安裝,誰(shuí)知道 App 會(huì)悄悄干些什么事情呢。(最新熱點(diǎn),QQ掃描瀏覽器歷史記錄,你可知道)
當(dāng)然各種 App 肯定也不是吃素的,不會(huì)讓『中間人攻擊』這么容易就得逞的,咱們接著看。
如何防止信息安全,反爬
前面提到,要實(shí)施中間人攻擊,關(guān)鍵在于證書(shū)是否得到信任。瀏覽器的行為是證書(shū)可以讓用戶(hù)授權(quán)是否信任,而 APP 就可以開(kāi)發(fā)者自己控制。
比如我嘗試通過(guò)類(lèi)似的方式對(duì)某匿名社區(qū)進(jìn)行抓包解密 HTTPS,但最終失敗了,為什么呢?
這就要談到『SSL Pinning』技術(shù)。
App 可以自己檢驗(yàn) SSL 握手時(shí)服務(wù)端返回的證書(shū)是否合法,“SSL pinning” 技術(shù)說(shuō)的就是在 App 中只信任固定的證書(shū)或者公鑰。
因?yàn)樵谖帐蛛A段服務(wù)端的證書(shū)必須返回給客戶(hù)端,如果客戶(hù)端在打包的時(shí)候,就把服務(wù)端證書(shū)放到本地,在握手校驗(yàn)證書(shū)的環(huán)節(jié)進(jìn)行比較,服務(wù)端返回的證書(shū)和本地內(nèi)置的證書(shū)一模一樣,才發(fā)起網(wǎng)絡(luò)請(qǐng)求。否則,直接斷開(kāi)連接,不可用。
當(dāng)然,一般情況下,用這種技術(shù)也就能防止 HTTPS 信息被解密了。
不過(guò),也還有其他的技術(shù)能夠破解這種方法,比如 Android 下的一些 Hook 技術(shù),具體而言就是繞過(guò)本地證書(shū)強(qiáng)校驗(yàn)的邏輯。感興趣的同學(xué)可以抱著學(xué)習(xí)目的研究一下。不過(guò)據(jù)說(shuō)這種方式需要對(duì)系統(tǒng)進(jìn)行 Root、越獄等,需要一些更高權(quán)限的設(shè)置。
因此,也告誡我們,一定不要亂安裝一些軟件,稍不注意可能就中招,讓自己在互聯(lián)網(wǎng)上進(jìn)行裸奔。一方面?zhèn)€人隱私信息等泄露,另外一個(gè)方面可能一些非常重要的如賬戶(hù)密碼等也可能被竊取。
可能的監(jiān)控手段有哪些?
辦公電腦當(dāng)然要接入公司網(wǎng)絡(luò),通過(guò)上面介紹的內(nèi)容,你也應(yīng)該知道,你在什么時(shí)候?yàn)g覽了哪些網(wǎng)站,公司其實(shí)都是一清二楚的。
若自己的手機(jī)如果接入了公司網(wǎng)絡(luò)也是一模一樣(連 Agent 軟件都不需要裝)。這就提醒我們,私人上網(wǎng)盡量用自己的移動(dòng)網(wǎng)絡(luò)呀。
瀏覽記錄,來(lái)源知乎
上面提到,如一些涉及隱私的敏感信息,如一些 PC 軟件、手機(jī) App 自己內(nèi)部加密傳輸?shù)脑?huà),內(nèi)容加密(包括但不限于 HTTPS)不被破解也問(wèn)題不大。
不過(guò),這當(dāng)然依賴(lài)這些軟件設(shè)計(jì)者的水平了。比如同一個(gè)匿名用戶(hù)對(duì)外展示的 ID 不能相同,如果是同一個(gè)的話(huà)也恰好暴露了邏輯漏洞。
當(dāng)然,我們還是不要抱有僥幸心理,在監(jiān)管的要求下,如果確實(shí)有一些違法等不恰當(dāng)?shù)难哉摰?,始終還是有門(mén)路找到你的。
耗子尾汁
更何況,一般辦公電腦都會(huì)預(yù)安裝一些公司安全軟件,至于這些軟件究竟都干了些什么,有沒(méi)有進(jìn)行傳說(shuō)中悄悄截圖什么的,這就因人(公司)而異了。(不討論類(lèi)似行為是否涉及到侵犯了員工隱私等問(wèn)題)
圖源知乎
不過(guò),個(gè)人認(rèn)為,咱也沒(méi)必要過(guò)度擔(dān)心。一般公司也不會(huì)因?yàn)槟闵习嗯紶柮€(gè)魚(yú),逛逛淘寶、看看微博來(lái)找你麻煩的。畢竟沒(méi)必要這么點(diǎn)芝麻事情來(lái)『大動(dòng)干戈』。
但最好是不是對(duì)照員工手冊(cè)來(lái)看看,是否有明令禁止的行為?自己的行為是不是太過(guò)了,免得被抓住把柄,正所謂『常在河邊走哪有不濕鞋』,『欲加之罪、何患無(wú)辭』。
石頭才疏學(xué)淺,文章難免有所疏漏,如有相應(yīng)問(wèn)題,還望大家指教。最后,祝大家一輩子都不要因?yàn)檫@種事情掉坑里。
后記
本文重點(diǎn)強(qiáng)調(diào)了 HTTPS 的知識(shí)點(diǎn)(中間人攻擊、SNI等),其實(shí)早在域名解析階段就已經(jīng)暴露了。
對(duì)域名發(fā)起請(qǐng)求前,要知道域名的IP地址,就要訪(fǎng)問(wèn)DNS服務(wù)器,公司只需網(wǎng)絡(luò)中指定DNS服務(wù)器,截獲不加密的 DNS 報(bào)文分分鐘就了解“摸魚(yú)”的情況。
DNS
這里引用下某個(gè)讀者的評(píng)論,覺(jué)得有收獲,特此補(bǔ)充如下:
想要“偷偷”的摸魚(yú)不被監(jiān)控,除了上文中提到的 HTTPS,不要忘了安全的DNS,DoH(DNS over HTTPs, DoH)或DoT(DNS over TLS, DoT)。
目前比較好的方式還是,自己搭建DoH的DNS server,連上網(wǎng)絡(luò)后設(shè)置DNS服務(wù)器為你的server IP,原生Android甚至在設(shè)置里提供了“私人DNS”選項(xiàng)。
當(dāng)然如果還能跑一個(gè)代理服務(wù),前面提到的SNI泄露訪(fǎng)問(wèn)域名的問(wèn)題也一起解決了。抓包只能發(fā)現(xiàn)你一直在訪(fǎng)問(wèn)你自己的server。為了再真一點(diǎn),甚至可以在你的server上再搭一個(gè)web server,放上一些內(nèi)容,這樣就算有人追蹤到這個(gè)IP,打開(kāi)看也是一個(gè)正常的站點(diǎn)。
免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。文章僅代表作者個(gè)人觀(guān)點(diǎn),不代表本平臺(tái)立場(chǎng),如有問(wèn)題,請(qǐng)聯(lián)系我們,謝謝!