Android安全之Https中间人攻击漏洞
0X01 概述
HTTPS,是一种网络安全传输协议,利用SSL/TLS来对数据包进行加密,以提供对网络服务器的身份认证,保护交换数据的隐私与完整性。
中间人攻击,Man-in-the-middle attack,缩写:MITM,是指攻击者与通讯的两端分别创建独立的联系,并交换其所收到的数据,使通讯的两端认为他们正在通过一个私密的连接与对方直接对话,但事实上整个会话都被攻击者完全控制。
https在理论上是可以抵御MITM,但是由于开发过程中的编码不规范,导致https可能存在MITM攻击风险,攻击者可以解密、篡改https数据。
0X02 https漏洞
Android https的开发过程中常见的安全缺陷:
1) 在自定义实现X509TrustManager时,checkServerTrusted中没有检查证书是否可信,导致通信过程中可能存在中间人攻击,造成敏感数据劫持危害。
2) 在重写WebViewClient的onReceivedSslError方法时,调用proceed忽略证书验证错误信息继续加载页面,导致通信过程中可能存在中间人攻击,造成敏感数据劫持危害。
3) 在自定义实现HostnameVerifier时,没有在verify中进行严格证书校验,导致通信过程中可能存在中间人攻击,造成敏感数据劫持危害。
4) 在setHostnameVerifier方法中使用ALLOW_ALL_HOSTNAME_VERIFIER,信任所有Hostname,导致通信过程中可能存在中间人攻击,造成敏感数据劫持危害。
0X03 漏洞案例
案例一:京东金融MITM漏洞
京东金融Ver 2.8.0由于证书校验有缺陷,导致https中间人攻击,攻击者直接可以获取到会话中敏感数据的加密秘钥,另外由于APP没有做加固或混淆,因此可以轻松分析出解密算法,利用获取到的key解密敏感数据。
御安全扫描结果:
如下是登陆过程中捕获到的数据:
其中的secretkey用于加密后期通信过程中的敏感数据,由于APP中使用的是对称加密,攻击者可以还原所有的通信数据。
案例二:中国移动和包任意消费漏洞
HTTPS证书校验不严格,可被MITM;
加密算法不安全,可被破解;
关键数据保存在sdcard卡上,可被任意访问;
代码混淆度低,业务逻辑,关键数据泄漏;
消息签名算法比较简单,数据可被修改;
通信数据如下:
POST https://mca.cmpay.com:28710/ccaweb/CCLIMCA4/2201194.dor HTTP/1.1
Cookie: JSESSIONID=CHGmYSZLTMRAx_1sSEuUP6Q4vmRI9gWiRPM6ANGnH7eZWv0NhErE!221531807
.......
Content-Length: 521
Host: mca.cmpay.com:28710
Connection: Keep-Alive
Cookie: JSESSIONID=CHGmYSZLTMRAx_1sSEuUP6Q4vmRI9gWiRPM6ANGnH7eZWv0NhErE!221531807
Cookie2: $Version=1
866697029909260201603241008185gye5tKk6EPB4iliO722011944.3.82Android_21-1794*1080-HUAWEI GRA_UL1020093CAS000169918666970299092601050:a7:2b:c5:e2:d8
在用户开启免密支付的前提下,结合以上安全问题,可以实现本地或远程攻击,直接盗取和包用户资金,如给任意账号充值等,给用户带来直接经济损失。
0X04 安全建议
1) 建议自定义实现X509TrustManager时,在checkServerTrusted中对服务器信息进行严格校验
2) 在重写WebViewClient的onReceivedSslError方法时,避免调用proceed忽略证书验证错误信息继续加载页面
3) 在自定义实现HostnameVerifier时,在verify中对Hostname进行严格校验
4) 建议setHostnameVerifier方法中使用STRICT_HOSTNAME_VERIFIER进行严格证书校验,避免使用ALLOW_ALL_HOSTNAME_VERIFIER
作者:佚名
来源:51CTO
安卓开发学习笔记(五):史上最简单且华丽地实现Android Stutio当中Webview控件https/http协议的方法 一.我们先在XML当中自定义一个webview(Second_layout.xml) 代码如下: 可以看到,这里我们使用了现行布局以及WebView控件,tools:context= .SecondActivity 告诉我们这个控件是定义在第二个主活动当中的。
公司新项目要求抓取目前市面上一些热门App的数据,经过研究发现很多App的网络请求都使用https进行数据传输,这样问题就来了,http使用明文传输所有请求都能拦截到,而https请求无法拦截。
云栖大讲堂 擅长前端领域,欢迎各位热爱前端的朋友加入我们( 钉钉群号:23351485)关注【前端那些事儿】云栖号,更多好文持续更新中!
相关文章
- android安全问题(八)伪造短信(利用原生android4.0漏洞)
- Android 增量编译小解
- 谷歌将彻底停用Android 2.3.7及更低版本服务
- android EditText 默认情况下不获取焦点(不弹出输入框)
- Android:你不知道的 WebView 使用漏洞
- Android 5.x重大漏洞:谁都能轻松绕过锁屏密码
- Android JNI(NDK)开发总结
- Android call setting 源码分析 (上)
- Android Forums安卓论坛发生数据泄露 论坛称只泄露了2.5%的用户信息 并已经修复了利用漏洞
- Android 属性动画(Property Animation) 完全解析 (上)
- Android属性设置android:noHistory="true"
- 【AOP 面向切面编程】Android Studio 使用 AspectJ 监控方法运行原理分析
- Kotlin将超越Java成为Android开发的第一语言?
- Android 向多媒体数据库增加音频文件
- 系统深入学习android-Android框架学习-5.设置(Settings)
- qt自定义控件-模拟Android toast提示窗口
- Android Demo 下拉刷新+加载更多+滑动删除