最近浏览了一个知乎问题:一个运营同学在试用期内试用期是因为在工作期间上了一个 1024 网站。
图片来自 Pexels
前两天看了很多推文,大意是看小电影前一定要注意网站是否 HTTPS ,因为 HTTPS 是加密的,别人不知道。
看到以上问题,不禁想问(这个脑回路也是……):
- 通过浏览器访问 HTTPS 网站,别人真的不知道吗?
- 通过 App 访问匿名论坛(HTTPS),公司怎么知道的?(他是不是接入了公司 WiFi?)
总之,上班时间上网钓鱼吗?即使用 HTTPS 访问,如果公司知道,是什么手段?
本文主要分为以下几个方面:
- HTTPS 为什么安全?
- HTTPS 真的安全吗?
- App 如何保证信息安全不被爬走?
- 公司可能的监控方法是什么?我们如何确保我们的隐私泄露?
HTTPS 为什么安全?
HTTPS,也称作 HTTP over TLS,TLS 前身是 SSL,每个版本都有。
TLS 协议在 TCP/IP 协议栈中的关系
上图描述了在 TCP/IP 在协议栈中 TLS(各子协议)和 HTTP 的关系,HTTP TLS 也就是 HTTPS。
和 HTTP 相比,HTTPS 的优势:
- 数据完整性:内容传输完整性验证。
- 数据隐私:内容对称加密,每个连接生成唯一的加密密钥。
- 身份认证:第三方不能伪造服务端(客户端)身份。
HTTPS 原理
上图大致介绍 HTTPS 握手过程,感兴趣的学生可以使用 WireShark 详细看看每一步,有助于理解 HTTPS 的完整流程。这里就不详细说明了。
大致来说,客户端和服务端通过“握手会谈”讨论双方支持的加密算法和相应的随机参数,获得一对密钥,并通过这对密钥解密后续传输的内容。
这对密钥很牛皮,比如加密传输信息『tangleithu』,通过公钥加密客户端获得的密文『xyyaabbccdd』传输,服务端用自己的私钥解密密文,正好可以得到『tangleithu』。
中间没有错,保证了数据的完整性和隐私性。这个过程比较复杂,本文不详细。
所以,你在通过 HTTPS 访问网站时,即使流量被截取监控,获取的信息也会加密,看不到任何实质性的内容。
例如,如下图所示,当我访问某个网站时,通过 wireshark 抓包获得的信息只能获得一些通信 IP 地址。
HTTPS 加密传输
你现在放心了吗?即使在钓鱼的过程中,也要访问 IP 地址被知道了,好像也无关紧要?其实,有了 IP 地址也可以获得很多信息。
还好这个 IP 发现是 Github,而不是……
你可能会很高兴,甚至看不到网站域名,你可以放心钓鱼。但这是真的吗?
HTTPS 真的安全吗?
HTTPS 真的完全安全吗?连访问域名都拿不到?答案是否定的。HTTPS 在握手阶段有一个很重要的东西:证书。
SNI:域名裸奔
当访问 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 扫描浏览器历史记录,你知道吗?p>
当然各种 App 当然不是素食者,也不会让『中间人攻击』这么容易得逞,我们继续看。
如何防止信息安全,反爬
前面提到,实施中间人攻击的关键在于证书是否被信任。浏览器的行为是证书是否允许用户信任, APP 开发者可以自己控制。
例如,我试图以类似的方式抓住匿名社区的包解密 HTTPS,但最终失败了,为什么呢?
这就要谈到『SSL Pinning』技术。App 可自行检查 SSL 握手时服务端返回的证书合法吗?“SSL pinning” 技术说的是 App 只信任固定证书或公钥。
因为在握手阶段,服务端的证书必须返回给客户端。如果客户端打包,将服务端证书放在当地,并在握手验证过程中进行比较。服务端返回的证书与当地内置证书完全相同,然后启动网络请求。
否则,不能直接断开连接。当然,一般来说,这种技术可以防止 HTTPS 信息解密。
然而,还有其他技术可以解决这种方法,如 Android 一些 Hook 技术,具体来说,是绕过当地证书强校验的逻辑。
感兴趣的学生可以抱着学习的目的进行研究。然而,据说这种方法需要 系统Root、越狱等,需要一些更高权限的设置。
因此,我们也警告我们不要随意安装一些软件。如果我们不注意,我们可能会被抓住,让自己在互联网上裸奔。
一方面,个人隐私信息被泄露,另一方面,一些非常重要的事情,如账户密码,可能会被盗。
有哪些可能的监控手段?
当然,办公电脑应该访问公司网络。通过上面介绍的内容,你也应该知道你什么时候浏览了哪些网站上,公司很清楚。
若自己的手机如果接入了公司网络也是一模一样(连 Agent 软件不需要安装)。这提醒我们,私人互联网应该尝试使用自己的移动网络。
来自知乎的浏览记录
上面提到的,比如一些涉及隐私的敏感信息,比如一些 PC 软件,手机 App 如果自身内部加密传输,内容加密(包括但不限于 HTTPS)不被破解也不是什么大问题。
不过,这当然依赖这些软件设计者的水平了。比如同一个匿名用户对外展示的 ID 不一样,如果是一样的话,恰好暴露了逻辑漏洞。
当然,我们不应该冒险。在监管的要求下,如果有一些不恰当的言论,如违法行为,我们仍然有办法找到你。
更何况,一般办公电脑都会预安装一些公司安全软件,至于这些软件究竟都干了些什么,有没有进行传说中悄悄截图什么的,这就因人(公司)而异了。(不讨论类似行为是否涉及到侵犯了员工隐私等问题)
图源知乎
然而,就我个人而言,我认为没有必要太担心。一般来说,公司不会因为你偶尔在工作中钓鱼而去淘宝和微博打扰你。毕竟,没有必要做这么多芝麻的事情『大动干戈』。
但最好比较员工手册,是否有明确禁止的行为?你的行为太多了,以免被抓住。『河边经常走哪里不湿鞋?』,『欲加之罪,何患无辞』。
后记
我才华横溢,学习浅薄。文章难免会被遗漏。如果有相应的问题,我希望你能给我一些建议。最后,祝大家一辈子不要因为文章中提到的类似事情掉进坑里。
作者:石哥,阿里 P7,清华学渣,前大疆后端 Leader。
陶家龙
来源:转载自微信官方账号程序猿石头(ID: tangleithu)