专栏首页moon聊技术可怕,原来 HTTPS 也没用

可怕,原来 HTTPS 也没用

背景

最近发生了几个事情,想必有的你已经看到过了:

  • 网传 某PDD员工在某匿名社区发布同事被抬上救护车的照片被抓出来并辞退?
  • 某运营同学在试用期期间因为在工作期间上了某 1024 网站,导致试用期不过。(恰好今天浏览到一个知乎问题)

试用期不过因在公司浏览 1024 网站

  • 前两天还看到不少公众号推文,大意是:看小电影前一定要注意网址是不是 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工作原理[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 在握手阶段有一个很重要的东西 —— 证书。

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扫描浏览器历史记录,你可知道)

当然各种 App 肯定也不是吃素的,不会让『中间人攻击』这么容易就得逞的,咱们接着看。

如何防止信息安全,反爬

前面提到,要实施中间人攻击,关键在于证书是否得到信任。浏览器的行为是证书可以让用户授权是否信任,而 APP 就可以开发者自己控制。

比如我尝试通过类似的方式对某匿名社区进行抓包解密 HTTPS,但最终失败了,为什么呢?

这就要谈到『SSL Pinning』技术。

App 可以自己检验 SSL 握手时服务端返回的证书是否合法,“SSL pinning” 技术说的就是在 App 中只信任固定的证书或者公钥。

因为在握手阶段服务端的证书必须返回给客户端,如果客户端在打包的时候,就把服务端证书放到本地,在握手校验证书的环节进行比较,服务端返回的证书和本地内置的证书一模一样,才发起网络请求。否则,直接断开连接,不可用。

当然,一般情况下,用这种技术也就能防止 HTTPS 信息被解密了。

不过,也还有其他的技术能够破解这种方法,比如 Android 下的一些 Hook 技术,具体而言就是绕过本地证书强校验的逻辑。感兴趣的同学可以抱着学习目的研究一下。不过据说这种方式需要对系统进行 Root、越狱等,需要一些更高权限的设置。

因此,也告诫我们,一定不要乱安装一些软件,稍不注意可能就中招,让自己在互联网上进行裸奔。一方面个人隐私信息等泄露,另外一个方面可能一些非常重要的如账户密码等也可能被窃取。

可能的监控手段有哪些?

办公电脑当然要接入公司网络,通过上面介绍的内容,你也应该知道,你在什么时候浏览了哪些网站,公司其实都是一清二楚的。

若自己的手机如果接入了公司网络也是一模一样(连 Agent 软件都不需要装)。这就提醒我们,私人上网尽量用自己的移动网络呀。

浏览记录,来源知乎

上面提到,如一些涉及隐私的敏感信息,如一些 PC 软件、手机 App 自己内部加密传输的话,内容加密(包括但不限于 HTTPS)不被破解也问题不大。

不过,这当然依赖这些软件设计者的水平了。比如同一个匿名用户对外展示的 ID 不能相同,如果是同一个的话也恰好暴露了逻辑漏洞。

当然,我们还是不要抱有侥幸心理,在监管的要求下,如果确实有一些违法等不恰当的言论等,始终还是有门路找到你的。

更何况,一般办公电脑都会预安装一些公司安全软件,至于这些软件究竟都干了些什么,有没有进行传说中悄悄截图什么的,这就因人(公司)而异了。(不讨论类似行为是否涉及到侵犯了员工隐私等问题)

图源知乎

不过,个人认为,咱也没必要过度担心。一般公司也不会因为你上班偶尔摸个鱼,逛逛淘宝、看看微博来找你麻烦的。毕竟没必要这么点芝麻事情来『大动干戈』。

但最好是不是对照员工手册来看看,是否有明令禁止的行为?自己的行为是不是太过了,免得被抓住把柄,正所谓『常在河边走哪有不湿鞋』,『欲加之罪、何患无辞』。

后记

本人才疏学浅,文章难免有所疏漏,如有相应问题,还望大家指教。最后,祝大家一辈子都不要因文中提到的类似事情掉坑里。

觉得本号分享的文章有价值,记得添加星标哦。周更很累,不要白 piao,需要来点正反馈,安排个 “一键三连”(点赞、在看、分享)如何?😝 这将是我持续输出优质文章的最强动力。

本文分享自微信公众号 - moon聊技术(onetraveller_llxz)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-10-13

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 可怕,原来 HTTPS 也没用

    总之就是,上班时间上网摸鱼吗?哪怕用 HTTPS 访问,如果公司知道,是通过什么手段?

    帅地
  • 原来Canal也可以做HA?

    在做实时数仓时,数据量往往比较大的,如果使用Canal来监听MySQL的状态当Canal 是单节服务时,服务器挂掉是就会造成数据丢失,这时Ca...

    大数据老哥
  • 原来HTTPS还可以这样去理解

    我们先不了聊HTTP,HTTPS,我们先从一个聊天软件说起,我们要实现A能发一个hello消息给B:

    Bug开发工程师
  • 原来这就是RPC呀,也没那么难嘛?

    RPC就是远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的思想。

    用户2781897
  • 人工智能是不可怕,但你也得会用啊!

    随着人工智能与机器人技术的发展,几乎所有的行业都开始采用人工智能来取代人类劳动力。 如同圈地运动和农业机械化把劳动力赶出土地的过程一样,眼下这场人工智能革命也正...

    AI科技大本营
  • 原来玩游戏也可以学会编程

    除了想成为一名程序员并拥有一份高薪工作之外,还有很多理由让你去学习编程。即使是那些认为自己在其他行业工作的人也可以学习编程,因为它在很多领域都有作用。如果您知道...

    HuangWeiAI
  • 简单复习下 JS 可选 (?.)操作符号,原来函数也可以用可选写法

    如何使用null (null和undefined)检查访问对象的嵌套属性?假设我们必须从后台的接口访问用户详细信息。

    前端达人
  • 实体类的枚举属性--原来支持枚举类型这么简单,没有EF5.0也可以

        通常,我们都是在业务层和界面层使用枚举类型,这能够为我们编程带来便利,但在数据访问层,不使用枚举类型,因为很多数据库都不支持,比如我们现在用的SqlSe...

    用户1177503
  • 没有地图也能导航?DeepMind用街景来认路

    译者 | 王柯凝 【AI科技大本营导读】在童年记忆中,你是如何沿着路线去朋友家、学校或者商店的?那时候没有地图,只是简单的记住街景和沿途转向。随着开始尝试新的越...

    AI科技大本营
  • 没有硬件,也可以运行与测试 TFLite 应用

    提到人工智能和机器学习(Marchine Learning,ML),你的脑海里是否立即会浮现计算中心、高端 GPU、成百上千的 TPU 等等。实际上,随着嵌入式...

    云水木石
  • 原来“神笔马良”的那根“笔”也可以写代码

    HTML5学堂:在大家都羡慕“神笔马良”拥有那支无所不能的笔时,在前端开发中,也出现了一支很神奇的“笔”——CodePen,顾名思义,code+pen,即是代码...

    HTML5学堂
  • 使用Python实现PDF转word原来如此简单,你也可以学会哦

    想必大家都有为转PDF遇到了烦恼过吧,虽然word有自动的功能但是非会员只能转三五页,但是实际情况下我们不知只有三五页纸吧,今天在浏览CSDN...

    大数据老哥
  • 原来在Android中请求权限也可以有这么棒的用户体验

    PermissionX这个开源项目起源于我今年出版的新书《第一行代码 第3版》,本来的主要目的只是为了带领读者朋友们学习如何开发并发布一个开源库。然而随着我发现...

    用户1158055
  • 不会linux也没关系,点击鼠标即可完成的LDSC分析来了

    LDSC分析基于已有的GWAS结果,即gwas summary数据,可以评估性状的遗传力,分析两个性状间的遗传相似度。相比GREML, 其运算速度快,更适用于处...

    生信修炼手册
  • 涨知识,原来可以这样用 CSS 来追踪用户

    英文:jbtronics 译文:枫上雾棋 https://segmentfault.com/a/1190000012901505 ? 除了使用 JS 追踪用...

    企鹅号小编
  • 我也没想到,Java开发 API接口可以不用写 Controller了

    今天介绍我正在用的一款高效敏捷开发工具magic-api,顺便分享一点工作中使用它的心得

    程序员内点事
  • 学算法有什么用?唉,对你来说,可能真没用

    在我大一的时候,曾看过李开复老师的一篇著名的文章——《算法为魂》。这篇文章对我影响深远,甚至说改变了我的人生选择都不为过。

    五分钟学算法
  • 8个好看又实用 Python可视化工具包,再也不怕做不出图表了!

    用 Python 创建图形的方法有很多,但是哪种方法是最好的呢?当我们做可视化之前,要先明确一些关于图像目标的问题:你是想初步了解数据的分布情况?想展示时给人们...

    编程文青李狗蛋
  • 百度全面开放HTTPS的几个重要问题

    百度从 14 年开始对外开放了 https 的访问,并于 3 月初正式对全网用户进行了 https 跳转。

    哲洛不闹

扫码关注云+社区

领取腾讯云代金券