现在 IOS 强制使用 HTTPS 连接了,正好公司业务上也需要 HTTPS ,这几天研究了下,讨论出一个情况觉得 HTTPS 应该是不安全的,不知道设想是否对,请这方面的大神解救下。 总所周知, https 在握手的时候是明文的, SSL/TLS 协议的基本流程如下: ( 1 ) 客户端向服务器端索要并验证公钥。 ( 2 ) 双方协商生成"对话密钥"。 ( 3 ) 双方采用"对话密钥"进行加密通信。
如果在第一步的时候,中间人就对数据进行拦截(可以是免费公共 wifi 网络情况下),之后中间人模拟服务器给客户端返回消息和公钥(这里的公钥假设已经被木马程序安装到 Android 手机中了)之后和客户端进行通讯,获取到用户提交的敏感信息。之后中间人拿着用户的信息在模拟客户端和服务器端进行握手通讯。这样是不是做到拦截了呢?
我想的解决办法就是每次 APP 验证的时候从手机安装包中提取公钥进行验证。
还有个问题不太懂,请教下各位:请求被拦截是否可以被重定向到一个木马网站,之后返回个一个早期被植入 Android 手机中的木马网站的可信任证书,之后伪装成客户端所要访问的服务器和客户端进行通讯呢?谢了。
1
nopy 2016-11-10 23:35:30 +08:00 via Android
手机既然已经中了木马病毒了当然就不安全了。
|
2
JohnLou 2016-11-10 23:36:45 +08:00 via iPhone
不安全那么多人用,脑子锈逗了?
|
3
iyaozhen 2016-11-10 23:39:29 +08:00 via Android
你这个就是中间人攻击。
这里的公钥假设已经被木马程序安装到 Android 手机中了。这样的话基本安全已经没有了,其它都是空谈。 你既然是 iOS 开发者,肯定用过 charls 抓包工具,要抓 https 的包需要手机端装证书。就是这个原理 |
4
xfspace 2016-11-10 23:45:09 +08:00 via Android 1
这就有请 Certificate Transport 上场了。从根源治疗 MITM.
|
6
zomco 2016-11-10 23:49:09 +08:00
很多抓包工具就是这样玩的
|
7
lhbc 2016-11-10 23:51:30 +08:00
贼已经爬窗 /翻墙进你家了,你还担心家里的门安不安全……
|
8
ipconfiger 2016-11-11 00:06:56 +08:00
中木马一切玩完, 所以别用安卓
|
9
bdbai 2016-11-11 00:15:55 +08:00 via Android
@ipconfiger 碰上猪队友, iOS 也没辙。按照“提示”点开证书,安装描述文件,指纹确认,然后...
|
10
ipconfiger 2016-11-11 00:49:36 +08:00
@bdbai 试试, 手把手指导还差不多. 都这样了就别提安全二字了
|
11
kkzxak47 2016-11-11 00:54:58 +08:00 via Android
不理解,我的疑问: 客户端手机系统都沦陷了,失去了公钥鉴别能力,中间人躺着收钱就行了,还要攻击?那个木马能给系统装上伪造公钥,不能伪造你 APP 的验证?
|
12
mornlight 2016-11-11 03:04:41 +08:00 via iPhone
在符合使用规范和大环境安全的前提下, HTTPS 可以保证通信过程不被窃听或篡改。
能随便在客户端安装 CA 已经破坏这个前提了。 |
14
xenme 2016-11-11 05:37:40 +08:00 via iPhone
certificate pinning ,代码验证证书就好了
|
15
des 2016-11-11 08:05:55 +08:00 via Android
|
16
finian 2016-11-11 08:23:13 +08:00
关键字: MITM, SSL Pinning
|
17
VYSE 2016-11-11 08:25:43 +08:00 via Android
可以不用系统 CA ,自带增加攻击难度
|
21
Quaintjade 2016-11-11 09:31:53 +08:00 via Android
能种入根证书并且能拦截到数据的话,就连 http public key pinning 都是浮云啊。
首先你要保证第一次访问的是真服务器,其次你要确保每次都能在 max-age 时间内访问真服务器,再者你要确保客户端不会提前清除数据导致 max-age 失效。 否则的话中间人直接返回个 public-key-pins 把假根证书给 pin 起来,那就 233 了 |
22
Quaintjade 2016-11-11 09:39:29 +08:00 via Android
你说的“每次 APP 验证的时候从手机安装包中提取公钥进行验证”也是同样问题,你得保证用来验证的安装包是真的,这又取决于前一次这安装包怎样来的。
以上说了这么多都假设木马只有能力植入根证书、从外部拦截数据。如果是精心设计的木马的话,可干的事情更多了。 |
23
ipconfiger 2016-11-11 10:38:44 +08:00
@des 被诈骗你用现金一样被人诈走啊, 这是智商税, 无解, 多上少上的问题, 多花点钱买个 iPhone 可以少上智商税, 当然拿个安卓小心用也行, 但是增大了心智负担, 比如说给老年人用怎么解?
|
24
VYSE 2016-11-11 10:44:42 +08:00
@xzg1993 7.0 是福音,帮你搞定一切 https://developer.android.com/training/articles/security-config.html
但无论怎样,客户端环境都是不可控的,再咋保护我直接 hook 上去把你程序内部逻辑 data 泄露出来,只能说尽量 |
25
BubbleNoodle 2016-11-11 11:45:58 +08:00
用 hsts 还有 OCSP
|
27
xzg1993 OP @luoliwang1987 额,小弟才疏学浅,百度了下,没找到具体如何做。。
|