Comment on page
03 iOS-网络安全之HTTPS
- 经常会提到的就是中间人攻击
Man-in-the-middle attack(MITM)
- 攻击者插入到原本直接通信的双方之间,双方已为还在直接跟对方通信,但实际是通过了攻击者这个中间人,信息会被它获取或篡改
- HTTPS在建立了TCP链接后,会进行SSL握手来校验证书,写上加密密钥.
- 所以一般中间人攻击分为
- SSL链接建立前的攻击
- HTTPS传输中的攻击
较为常见的攻击 通过ARP欺骗,DNS劫持甚至网管劫持,将客户端访问重定向到攻击者的服务器.让客户端与攻击者的机器建立HTTPS(伪造的证书)链接. 浏览器会提示证书不可信,用户不点击继续浏览就能避免被劫持.
- 防范措施
- iOS原生
- 使用系统API建立HTTPS链接就没问题的,系统默认是没有信任相关伪造证书的不会SSL握手成功
- WebView
- 如果忽略证书校验的话可能会被劫持
b. SSL剥离攻击(SSLSTrip)
将HTTPS链接降级为HTTP链接 客户端直接访问HTTPS链接,攻击者是无法进行降级的 攻击的主要方式是利用用户不会每次都会输入HTTPS://xxxx.xxx.com
这样的链接来访问网站
- 防范措施
- 原生
- 无法劫持App内部HTTPS会话
- WebView
- 如果在全网HTTPS的情况下,可以对打开的链接做检查
c. 针对SSL算法进行攻击
上述两种攻击一般只能影响到WebApp,很难攻击到NativeApp. 牛逼的Hacker会对SSL算法相关的漏洞进行攻击,密码学相关了...
- 防范措施
- 最好对服务端的SSL/TLS配置进行升级
- 只支持尽量高版本的TLS(最低TLSv1)
- 禁用一些已经爆出安全隐患的加密方法
- 使用2048位的数字证书
本地打保证书进App,使用SecTrustSetAnchorCertificates(SecTrustRef trust, CFArrayRef anchorCertificates)
来设置Anchor Certificate
进行校验
文档说明
Calling this function without also calling SecTrustSetAnchorCertificatesOnly disables the trusting of any anchors other than the ones specified by this function call.
https://developer.apple.com/library/mac/documentation/Security/Reference/certifkeytrustservices/#//apple_ref/c/func/SecTrustCopyAnchorCertificates
也就是说,单纯调用SecTrustSetAnchorCertificates方法后不调用SecTrustSetAnchorCertificatesOnly来验证证书,则只会相信SecTrustSetAnchorCertificates传入的证书,而不会信 任其他锚点证书。关于这一点,SecTrustSetAnchorCertificatesOnly方法参数讲解中也有说明:
anchorCertificatesOnly:
If true, disables trusting any anchors other than the ones passed in with the SecTrustSetAnchorCertificates function. If false, the built-in anchor certificates are also trusted. If SecTrustSetAnchorCertificates is called and SecTrustSetAnchorCertificatesOnly is not called, only the anchors explicitly passed in are trusted.
只相信传入的锚点证书,也就只会验证通过由这些锚点证书签发的证书。这样就算被验证的证书是由系统其他信任的锚点证书签发的,也无法验证 通过。
选择哪一级的CA证书就需要自行判断了 如果选择末端的叶子证书,可能导致域名变化后无法访问,甚至证书过期的情况
http://oncenote.com/2015/09/16/Security-2-HTTPS2/ Jaminzzhang博客 https://www.jianshu.com/p/86dcf94b43e2 WebView证书验证
Last modified 2yr ago