本文首发自【程序猿石头】微信公众号:可怕,原来 HTTPS 也没用 其余相同内容均为未受权转载抄袭。html
工做时间上网摸鱼,你觉得公司就不知道了?git
最近发生了几个事情,想必你已经看到过了:github
网传 某PDD员工在某匿名社区发布同事被抬上救护车的照片被抓出来并辞退?web
某运营同窗在试用期期间由于在工做期间上了某 1024 网站,致使试用期不过。(刚好今天浏览到一个知乎问题)算法
试用期不过因在公司浏览 1024 网站windows
看到上面几个问题,我不由想问(这脑回路也是……):浏览器
总之就是,上班时间上网摸鱼吗?哪怕用 HTTPS 问,若是公司知道,是经过什么手段?安全
本文谈谈个人见解,主要分为如下几个方面:服务器
HTTPS,也称做 HTTP over TLS,TLS 前身是SSL,会有各个版本。微信
TLS协议在TCP/IP协议栈中的关系
上图描述了在TCP/IP协议栈中TLS(各子协议)和 HTTP 的关系。HTTP+TLS 也就是 HTTPS,和 HTTP 相比,HTTPS的优点:
上面内容参考了HTTPS工做原理[1]。(石头在N 久前用印象笔记收藏的,如今好多原文访问不了了)
HTTPS 原理
上图就是大体介绍了 HTTPS 的握手流程,感兴趣的同窗能够用 WireShark 抓包详细看看其中的每个步骤,有助于理解 HTTPS 的完整流程。这里,我就不详述了,能够参考下小林的这篇图解 HTTPS,很详细;石头在 14 年也写过一篇抓包分析的文章。 Mac/Windows Wireshark/tcpdump抓包TCP 3次握手,4次挥手实例[2]
大体就是客户端和服务端经过“握手会谈”商量出一个双方支持的加密算法和相应随机参数,获得一对密钥,后续的传输的内容都经过这对密钥进行加解密。
这对密钥很牛皮,好比要加密传输消息『tangleithu』,客户端经过公钥加密获得的密文『xyyaabbccdd』进行传输,服务端用本身的私钥对密文解密,刚好能获得『tangleithu』。中间错一位都不行,这样就保证了数据完整和隐私性。
这个过程比较复杂,本文不详述,相似的原理可参考石头多年前写的这篇文章 —— RSA算法。
所以,你在经过 HTTPS 访问网站的时候,就算流量被截取监听,获取到的信息也是加密的,啥实质性的内容也看不到。
例如,以下图所示,当我访问某个网站,此时经过 wireshark 抓包获得的信息,能得到仅仅是一些通讯的IP地址而已。
HTTPS加密传输
这下放心了吗?
摸鱼的过程当中,就算访问的 IP 地址被知道了,好像也可有可无?
其实,有了 IP 地址也能获取很多信息了。
还好这个 IP 搜出来是 github,而不是……
你或许会高兴,连个网站域名都看不到,能够放心摸鱼了。不过,这是真的吗?
HTTPS 真的彻底安全吗?连访问的域名都获取不到?答案是否认的。
上述 HTTPS 在握手阶段有一个很重要的东西 —— 证书。
当访问 HTTPS 站点时,会首先与服务器创建 SSL 链接,第一步就是请求服务器的证书。
当一个 Server IP 只对应一个域名(站点)时,很方便,任意客户端请求过来,无脑返回该域名(服务)对应的证书便可。但 IP 地址(IPv4)是有限的呀,多个域名复用同一个 IP 地址的时候怎么办?
服务器在发送证书时,不知道浏览器访问的是哪一个域名,因此不能根据不一样域名发送不一样的证书。
所以 TLS 协议升级了,多了 SNI 这个东西,SNI 即 Server Name Indication,是为了解决一个服务器使用多个域名和证书的 SSL/TLS 扩展。
如今主流客户端都支持这个协议的。别问我怎么知道这个点的,以前工做上由于这个事情还费了老大劲儿……
它的原理是:在与服务器创建 SSL 链接以前,先发送要访问站点的域名(Hostname),这样服务器会根据这个域名返回一个合适的证书。此时尚未办法进行加解密,所以至少这个域名是裸奔的。
以下图所示,上面的截图实际上是访问个人我的博客(www.tanglei.name)的抓包状况,客户端发送握手请求时,很自觉带上了本身的域名。
HTTPS SNI
所以,即使是 HTTPS,访问的域名信息也是裸奔状态。你上班期间访问小电影网站,都留下了痕迹,若接入了公司网络,就天然而然被抓个正着。
除了域名是裸奔外,其实还有更严重的风险,那就是中间人攻击。
前面也提到 HTTPS 中的关键其实在于这个证书。从名字能够看出来,中间人攻击就是在客户端、服务器之间多了个『中介』,『中介』在客户端、服务器双方中假装对方,以下图所示,这个『MitmProxy』充当了中间人,互相欺骗:
中间人攻击,来源 evil0x
能够安装 MitmProxy 或者 Fiddler 之类的抓包软件尝试一把,而后开启代理。
此时用手机访问百度,获得的信息以下:
证书信任前
提示,链接不是私密链接,其实就是浏览器识别了证书不太对劲,没有信任。而若是此时手机安装了 Fiddler 的证书,就会正常访问。
证书信任后可正常访问
所以,当你信任证书后,在中间人面前,又是尽收眼底了。
而若是你用了公司电脑,估计你有相应的操做让信任证书吧,或者手机上是否有安装相似的客户端软件吧?
抓紧时间看看手机的证书安装明细。
我前任公司在信息安全这块作得就很是谨慎,手机会有工做手机,未受权的任何 App 都不能安装,谁知道 App 会悄悄干些什么事情呢。(最新热点,QQ扫描浏览器历史记录,你可知道)
固然各类 App 确定也不是吃素的,不会让『中间人攻击』这么容易就得逞的,我们接着看。
前面提到,要实施中间人攻击,关键在于证书是否获得信任。浏览器的行为是证书可让用户受权是否信任,而 APP 就能够开发者本身控制。
好比我尝试经过相似的方式对某匿名社区进行抓包解密 HTTPS,但最终失败了,为何呢?
这就要谈到『SSL Pinning』技术。
App 能够本身检验 SSL 握手时服务端返回的证书是否合法,“SSL pinning” 技术说的就是在 App 中只信任固定的证书或者公钥。
由于在握手阶段服务端的证书必须返回给客户端,若是客户端在打包的时候,就把服务端证书放到本地,在握手校验证书的环节进行比较,服务端返回的证书和本地内置的证书如出一辙,才发起网络请求。不然,直接断开链接,不可用。
固然,通常状况下,用这种技术也就能防止 HTTPS 信息被解密了。
不过,也还有其余的技术可以破解这种方法,好比 Android 下的一些 Hook 技术,具体而言就是绕过本地证书强校验的逻辑。感兴趣的同窗能够抱着学习目的研究一下。不过听说这种方式须要对系统进行 Root、越狱等,须要一些更高权限的设置。
所以,也告诫咱们,必定不要乱安装一些软件,稍不注意可能就中招,让本身在互联网上进行裸奔。一方面我的隐私信息等泄露,另一个方面可能一些很是重要的如帐户密码等也可能被窃取。
办公电脑固然要接入公司网络,经过上面介绍的内容,你也应该知道,你在何时浏览了哪些网站,公司其实都是一清二楚的。
若本身的手机若是接入了公司网络也是如出一辙(连 Agent 软件都不须要装)。这就提醒咱们,私人上网尽可能用本身的移动网络呀。
浏览记录,来源知乎
上面提到,如一些涉及隐私的敏感信息,如一些 PC 软件、手机 App 本身内部加密传输的话,内容加密(包括但不限于 HTTPS)不被破解也问题不大。
不过,这固然依赖这些软件设计者的水平了。好比同一个匿名用户对外展现的 ID 不能相同,若是是同一个的话也刚好暴露了逻辑漏洞。
固然,咱们仍是不要抱有侥幸心理,在监管的要求下,若是确实有一些违法等不恰当的言论等,始终仍是有门路找到你的。
耗子尾汁
更况且,通常办公电脑都会预安装一些公司安全软件,至于这些软件究竟都干了些什么,有没有进行传说中悄悄截图什么的,这就因人(公司)而异了。(不讨论相似行为是否涉及到侵犯了员工隐私等问题)
图源知乎
不过,我的认为,咱也不必过分担忧。通常公司也不会由于你上班偶尔摸个鱼,逛逛淘宝、看看微博来找你麻烦的。毕竟不必这么点芝麻事情来『大动干戈』。
但最好是否是对照员工手册来看看,是否有明令禁止的行为?本身的行为是否是太过了,省得被抓住把柄,正所谓『常在河边走哪有不湿鞋』,『欲加之罪、何患无辞』。
石头才疏学浅,文章不免有所疏漏,若有相应问题,还望你们指教。最后,祝你们一生都不要由于这种事情掉坑里。
本文重点强调了 HTTPS 的知识点(中间人攻击、SNI等),其实早在域名解析阶段就已经暴露了。
对域名发起请求前,要知道域名的IP地址,就要访问DNS服务器,公司只需网络中指定DNS服务器,截获不加密的 DNS 报文分分钟就了解“摸鱼”的状况。
DNS
这里引用下公众号文章发出后,某个读者的评论,以为有收获,特此补充以下:
想要“偷偷”的摸鱼不被监控,除了上文中提到的 HTTPS,不要忘了安全的DNS,DoH(DNS over HTTPs, DoH)或DoT(DNS over TLS, DoT)。
目前比较好的方式仍是,本身搭建DoH的DNS server,连上网络后设置DNS服务器为你的server IP,原生Android甚至在设置里提供了“私人DNS”选项。
固然若是还能跑一个代理服务,前面提到的SNI泄露访问域名的问题也一块儿解决了。抓包只能发现你一直在访问你本身的server。为了再真一点,甚至能够在你的server上再搭一个web server,放上一些内容,这样就算有人追踪到这个IP,打开看也是一个正常的站点。
参考资料: