移动端破解TLS加密的数据的设计思路

本文主要讲解了破解移动端HTTPS数据的思路,今天跟大家分享一下。

在上一篇文章中,讲述了如何通过浏览器和wireshark之间的关系,来破解利用浏览器访问的加密数据,在那篇文中曾提到过,中间截获的数据是没有办法解密,其实也不准确。举个栗子,如果在局域网中,能够通过共享等方式拿到那个环境变量为SSLKEYLOGFILE对应的文件,还是能够解密相应的数据流量的,当然还有其他的解决思路,这就是我们这次会涉及到的内容。但是这次的重点是移动端如何破解TLS加密数据,毕竟移动为王。

由于这块内容比较多,准备用两篇文章来讲解,先讲一讲这个破解移动端的设计思路,然后在讲一讲具体的实现方法。我梳理思路写这篇文章的时候,上网更新了一下很多已经快遗忘的知识点,发现有很多地方是值得分享出来的,以后有时间陆续在写。

在PC端的网络通信主要集中在浏览器上,因此总体的思路是让浏览器给wireshark提供实时的秘钥。其实这里面有两个方面需要注意:1、我们所使用的浏览器是firefox和chrome,如果使用别的浏览器怎么办?2、如果产生的HTTPS等流量不是来自于浏览器,而是其他应用软件怎么办?PC端所面临的问题也是这次对应移动端所要解决的问题。来分析一下移动端,对应问题一,移动端的浏览器也是多种多样;对应问题二,移动端的网络流量更多的来自于各种各样的app软件。按照这样的想法,如果这次的设计思路能够解决移动端的问题,PC端问题应该是可以解决的。

对于通过应用软件导出实时秘钥的局限性在于不是所有的浏览器和应用客户端都能够实现导出秘钥的功能。所以思路要切换一下,引入第三方,然后可能会想到网络劫持,然后就是HTTP代理。我们从HTTP代理来寻找相应的解决方案。

传统的HTTP通信方式经过HTTP代理的时候,面临着用户数据被窃取的风险,这自不必说,那么HTTPS通信经过HTTP代理的时候,会不会存在同样的问题?回答此问题,要从TLS的原理谈起,上一篇文章都有介绍,可以回顾下。TLS握手过程中涉及到了一个叫做证书的东西,可以通过

http://www.ruanyifeng.com/blog/2011/08/what_is_a_digital_signature.html,对数字证书有一个了解。HTTPS的通信中证书都是都权威的第三方来颁发给服务器(利用CA私钥加密),然后IE和firefox等默认集成了几家可信的根证书(CA的公钥),多提一点firefox和IE是两大体系,至少在我们证书的管理是不一样。我在chrome中查看系统集成的证书如下(调用IE的):


当然还有中级证书机构等证书,这其实是一个证书链树状结构,http://www.2cto.com/Article/201203/122095.html在这片文章中相关的概念讲的还是比较通俗易懂的。既然证书这个东西是由一些组织颁发的,那么作为HTTP代理服务器也是可以颁发的,只要让取得客户端的认可即可。问题到这里其实已经回到了一个叫做中间人攻击的场景,即HTTP服务器通过伪造证书来解密客户端和服务器之间通信的数据。

我们知道TLS的握手协商阶段是不加密的(这种说法也不是十分准确,毕竟服务器发送给客户端的公钥是使用CA的私钥加密的),在没有数字证书之前的中间人攻击场景如下图:、

按照原本的设计B利用A的公钥加密数据传输给A,因为A并没有告诉任何人A的私钥,因此即使你截获数据,破解也是没有现实意义的。但是C截获了A发送给B的公钥,让A和B在毫不之情的情况下偷梁换柱。

数字证书的机制是为了应对这种攻击,使得B能够确认收到公钥的合法性,也即是说B能够知道收到的公钥是A的还是C的。这个问题从理论上来说是得到了有效的解决,但是在实际应用过程中,B如果认为A和C是合法的,那么上图的场景会同样的复现。C还是有机会解密数据,就是多了一层马甲,脱掉就是了。至于为什么B会认为C是合法的,举个栗子,找一个没有安装过12306证书的电脑(或者如果有证书,删除),访问显示如下:

  

点击继续前往,其实就是相当于你信任并这个证书了(本地添加证书机构的公钥),但是chrome比较好的一点是,地址栏会一直打叉提示你,这不是一个权威的证书,点开那个小锁可以看到相应的证书信息,随时可以停用。这里令我费解的是,在chrome浏览器的设置->证书管理里面并没有找到相应的证书。我初步的推测是chrome证书的管理部分是依赖于IE的证书管理,而对于12306的这种情况,chrome应该是做了独立的证书管理机制。毕竟啥都依赖别人,并不好。而firefox有自己的一套证书管理机制,因此,访问12306,做完类似的操作之后(添加例外),firefox证书管理里面是由相关的证书的,如下图所示。


上述的过程说明了我们认为12306是合法的,尽管浏览器开始并不是这么认为的(因为相应的浏览器开始的时候没有集成相关证书),我们添加了相应的证书,然后浏览器就认为其是合法的了。

根据以上例子的思路,我们可以使用HTTP代理制作证书,通过一些方式让客户端接受,然后HTTP代理就可以获取明文数据了。整体的流程跟上面的中间人攻击场景图是一样的,只是C发给B的公钥放在了C自己颁发给自己的证书之中了,然后B使用已经信任的C的公钥解密……剩下的就顺理成章了。

整体的思路就是这个样子,有时间会写出具体的实现方法。再提一点,支付宝在未经用户允许的情况下,私自为用户添加了自己的证书,其相当于给用户添加了一个后门。然后你懂得。当然了,证书始终存在的问题就是颁发证书机构的可信度,其实这是一个相对论,棱镜门之后……

时间: 2024-11-05 18:37:37

移动端破解TLS加密的数据的设计思路的相关文章

主流移动端账号登录方式的原理及设计思路

哈尔滨SEO: 1.引言 在即时通讯网经常能看到各种高大上的高并发.分布式.高性能架构设计方面的文章,平时大家参加的众多开发者大会,主题也都是各种高大上的话题——什么5G啦.AI人工智能啦.什么阿里双11分分钟多少万QPS高并发等等. 但实际上,对于普通的开发者(包括IM开发人员)来说,多数公司.多数团队也都是干着默默无闻.平淡无奇的产品开发,并没有那么多高并发.高大上的事情可以做. 就拿一个IM系统来说,无论你的架构设计考虑了多少分布式.高吞吐.高可用,所有这些事情只要落地,那编码的第一件事情

一个最简单的通过WireShark破解SSL加密网络数据包的方法

原文地址: http://article.yeeyan.org/view/530101/444688 一般来说,我们用WireShark来抓取包进行分析是没有多大问题的.但这里有个问题是,如果你碰到的是用SSL/TLS等加密手段加密过的网络数据的时候,往往我们只能束手无策.在过去的话,如果我们拥有的该传输会话的私钥的话我们还是可以将它提供给WireShark来让其对这些加密数据包进行解密的 1. 简介 相信能访问到这篇文章的同行基本上都会用过流行的网络抓包工具WireShark,用它来抓取相应的

发现新大陆:一个最简单的破解SSL加密网络数据包的方法

1. 简介 相信能访问到这篇文章的同行基本上都会用过流行的网络抓包工具WireShark,用它来抓取相应的网络数据包来进行问题分析或者其他你懂的之类的事情. 一般来说,我们用WireShark来抓取包进行分析是没有多大问题的.但这里有个问题是,如果你碰到的是用SSL/TLS等加密手段加密过的网络数据的时候,往往我们只能束手无策.在过去的话,如果我们拥有的该传输会话的私钥的话我们还是可以将它提供给WireShark来让其对这些加密数据包进行解密的,但这已经是想当年还用RSA进行网络数据加密的年代的

关于增量更新云平台数据的设计思路

1.使用mysqldump进行增量文件备份 2.如何使用java 调用mysqldump?  http://cnhnslhs-163-com.iteye.com/blog/1774508http://blog.csdn.net/icejadelove/article/details/4966317 3.生成的是一个文件,返回的是OK和文件路径,然后C#去下载这个文件并执行import动作. 4.下载成功后向服务器发起一个指令,让其删除掉这个文件,防止磁盘占用太多. 5.根据TS的范围进行重新生成

使用X.509数字证书加密解密实务(三)-- 使用RSA证书结合对称加密技术加密长数据

本文全部源代码下载:/Files/chnking/EncryptLongData.rar 一.  使用证书结合对称加密算法加.解密长数据 上一章节讨论了如何使用RSA证书加密数据,文中提到:“Dotnet的RSA实现有个特点,它必须要在明文中添加一些随机数,所以明文不能把128字节占满,实际测试,明文最多为117字节,留下的空间用来填充随机数”.也就是说对于1024位密钥的RSA来说,一次只能加密128字节的数据,对于Dotnet的RSA实现更是只能加密117个字节的数据. 这就引出一个问题,超

简谈-Python爬虫破解JS加密的Cookie

通过Fiddler抓包比较,基本可以确定是JavaScript生成加密Cookie导致原来的请求返回521. 发现问题: 打开Fiddler软件,用浏览器打开目标站点(http://www.kuaidaili.com/proxylist/2/) .可以发现浏览器对这个页面加载了两次,第一次返回521,第二次才正常返回数据.很多没有写过网站或是爬虫经验不足的童鞋,可能就会觉得奇怪为什么会这样?为什么浏览器可能正常返回数据而代码却不行? 仔细观察两次返回的结果可以发现: 1.第二次请求比第一次请求的

Openldap配置TLS加密传输

为啥要用TLS? Openldap默认使用简单验证,对slapd的所有访问都使用明文密码通过未加密通道进行.为了确保信息安全,需要对信息进行加密传输,SSL(Secure Sockets Layer)是一个可靠的解决方案. 它使用 X.509 证书,由可信任第三方(Certificate Authority (CA))进行数字签名的一个标准格式的数据.有效的数字签名意味着已签名的数据没有被篡改.如果签名的数据被更改,将不会通过验证 SSL/TLS 加密原理简介 SSL/TLS 是基于 PKI 机

Android开发周报:Android L默认加密用户数据

Android开发周报:Android L默认加密用户数据 新闻 <iCloud前车之鉴,Android L默认开启加密功能>:iCloud 艳照风波再起,第二波女星照片流出,大量女星的裸照又开始在社交网站疯传,本次大规模的“艳照门”依然有可能是黑客利用苹果iCloud云端系统的漏洞, 在破解了女艺人们所设的简单密码后侵入并非法盗取了裸照,继而在网络论坛发布.注重保护用户的隐私,是厂商们义不容辞的责任,谷歌宣布Android L上将默认加密用户数据. <苹果出了个指南教你怎么从Andro

开源项目SMSS发开指南(四)——SSL/TLS加密通信详解

本文将详细介绍如何在Java端.C++端和NodeJs端实现基于SSL/TLS的加密通信,重点分析Java端利用SocketChannel和SSLEngine从握手到数据发送/接收的完整过程.本文也涵盖了在Ubuntu系统上利用OpenSSL和Libevent如何创建一个支持SSL的服务端.文章中介绍的知识点并未全部在SMSS项目中实现,因此笔者会列出所有相关源码以方便读者查阅.提醒:由于知识点较多,分享涵盖了多种语言.预计的学习时间可能会大于3小时,为了保证读者能有良好的学习体验,继续前请先安