1024电影网八达
前两天也看到很多推文,大意是看小电影之前一定要注意网址是不是HTTPS,因为HTTPS是加密的,别人不知道。
看到上面的问题,我忍不住想问(这个脑回路也是...):
简而言之,你在工作时间上网钓鱼吗?即使有HTTPS的权限,如果公司知道,通过什么手段?
[图像上传失败...(图片-ab58e 2-161469 2093957)]
本文谈谈我的看法,主要分为以下几个方面:
HTTPS,又称HTTP over TLS,TLS前身是SSL,会有各种版本。
上图描述了TCP/IP协议栈中TLS(子协议)和HTTP的关系,HTTP+TLS也是HTTPS。
HTTPs与http相比的优势:
上图是对HTTPS握手过程的大致介绍。感兴趣的同学可以使用WireShark抓取袋子,详细查看每个步骤,这将有助于他们了解HTTPS的完整过程。在这里,我就不赘述了。
一般来说,客户端和服务器通过“握手会谈”协商一个双方都支持的加密算法和相应的随机参数,得到一对密钥,通过这个密钥对后续的传输内容进行加密和解密。
这对钥匙很牛皮。比如对传输消息“tangleithu”进行加密,客户端传输公钥加密得到的密文“xyyaabbccdd”,服务器用自己的私钥对密文进行解密,就是为了得到“tangleithu”。
中间不能出错,保证了数据的完整性和私密性。这个过程比较复杂,本文就不赘述了。
所以当你通过HTTPS访问一个网站时,即使流量被拦截监控,你得到的信息也是加密的,看不到任何实质性的内容。
举个例子,如下图所示,我在访问一个网站的时候,只能从wireshark获取的信息中得到一些通信IP地址。
你放心了吗?钓鱼的过程中,即使知道IP地址,好像也无所谓?事实上,用一个IP地址就可以获得很多信息。
还好这个IP被发现是Github,而不是...
[图像上传失败...(图片-5b 829 a-161469 2093957)]
你可能会庆幸自己连一个网站的域名都看不到,可以放心钓鱼了。但这是真的吗?
[图像上传失败...(图片-795 ebb-161469 2093957)]
HTTPS真的完全安全吗?连你访问过的域名都拿不到?答案是否定的。上述HTTPS在握手阶段有一个非常重要的东西:证书。
SNI:域名裸奔
当您访问HTTPS网站时,您将首先与服务器建立SSL连接,并且第一步是请求服务器的证书。
当一个服务器IP只对应一个域名(站点)时,非常方便。任何一个客户端请求它,无脑返回域名(服务)对应的证书。
但是IP地址(IPv4)是有限的。多个域名复用同一个IP地址怎么办?
服务器发送证书的时候不知道浏览器访问的是哪个域名,所以无法根据不同的域名发送不同的证书。
所以TLS协议进行了升级,增加了SNI,即服务器名称指示,以解决一个服务器使用多个域名和证书的SSL/TLS扩展。
现在主流客户端都支持这个协议。别问我怎么知道这个的。因为这个,我在工作中遇到了很多麻烦...
它的原理是:在与服务器建立SSL连接之前,发送要访问的站点的域名,这样服务器就会根据这个域名返回一个合适的证书。这个时候没有办法加密解密,所以至少这个域名是在裸奔。
如下图所示,上面的截图其实是我个人博客(www.tanglei.name)的截图。客户端发送握手请求时,有意识的自带域名。
因此,即使使用HTTPS,访问的域名信息也是裸奔的。上班时访问小电影网站,留下痕迹。如果接入公司网络,自然会被抓个正着。
除了域名裸奔,其实还有更严重的风险,那就是中间人攻击。
中间人攻击
如前所述,HTTPS的关键实际上在于这一证书。
顾名思义,中间人攻击就是在客户端和服务器之间增加一个“中介”,“中介”在客户端和服务器之间伪装成对方。
如下图所示,这个“MitmProxy”充当中间人,互相欺骗:
中间人攻击,来源evil0x
可以安装MitmProxy或Fiddler等抓包软件来试试,然后打开代理。
此时,当你用手机访问百度时,你会得到以下信息:
证书信任前
提示:连接不是私有连接,实际上是浏览器识别证书不对,没有信任。而如果此时手机上安装了提琴手证书,则正常访问。
证书被信任后可以正常访问。
所以,当你信任证书的时候,在中间人面前,是通畅的。
而且如果你用的是公司电脑,估计你有相应的操作信任证书,或者手机上有没有安装类似的客户端软件?
花点时间看看手机(比如我的手机)的证书安装详情:
我之前的公司在信息安全方面非常谨慎。手机会有工作电话,任何未经授权的App都不能安装。谁知道App会悄悄做什么?(最新热点,QQ扫描浏览器历史,你知道吗)
当然,各类app肯定不是吃素的,不会让“中间人攻击”那么容易得逞。我们继续看。
如前所述,中间人攻击的关键是证书是否可信。浏览器的行为是证书让用户授权是否信任,而APP可以由开发者自己控制。
举个例子,我在一个匿名社区里尝试过用类似的方式解密HTTPS,但最终还是失败了。为什么?
这是关于“SSL Pinning”技术的。App可以检查SSL握手时服务器返回的证书是否合法。“SSL pinning”技术意味着在应用程序中只信任固定的证书或公钥。
由于握手阶段必须将服务器的证书返回给客户端,如果客户端在打包时将服务器的证书放在本地,并在握手验证过程中进行比对,则服务器返回的证书与发起网络请求前在本地构建的证书完全相同。
否则直接断开,不可用。当然,一般来说,使用这种技术也可以防止HTTPS信息被解密。
不过也有其他技术可以破解这种方法,比如Android下的一些Hook技术,专门绕过本地证书强验证的逻辑。
有兴趣的同学可以抱着学习的目的去研究一下。不过据说这种方法需要Root系统,越狱等。,并且需要一些更高权限的设置。
所以也告诫我们一定不要乱装一些软件。一不小心就可能中招,让自己在网上裸奔。
一方面是个人隐私信息被泄露,另一方面一些非常重要的东西比如账号密码也可能被窃取。
当然,办公室的电脑要连上公司网络。通过上面的介绍,你也应该知道你什么时候访问了哪些网站。事实上,公司对此了如指掌。
如果你的手机连上公司网络,也是一模一样的(连代理软件都不用装)。这提醒我们,私人互联网用户应该尽量使用自己的移动网络。
如前所述,如果一些涉及隐私的敏感信息,如一些PC软件、手机App等在内部传输,内容加密(包括但不限于HTTPS)不被破解问题不大。
但是,这肯定要看这些软件设计师的水平。比如同一个匿名用户显示的ID不可能相同,如果相同,那只是暴露了一个逻辑漏洞。
当然,我们不要碰运气。在监督的要求下,如果有一些不合法不合适的言论,还是有办法找到你的。
更何况一般的办公电脑都会预装一些公司的安全软件。至于这些软件做了什么,有没有拍传说中的截图,因人(公司)而异。(不讨论类似行为是否涉及侵犯员工隐私等。)
不过,个人认为,我不需要太担心。一般公司不会因为你上班,就偶尔摸一把鱼,逛逛淘宝,逛逛微博。毕竟这种小事没必要“大惊小怪”。
但是是不是最好对照员工手册,看看有没有明令禁止的行为?你的行为是否过分到无法避免被抓?俗话说“不湿鞋总不能走在河边”,“如果你想增加罪恶感,总可以找到解决的办法”。