深入浅出 App 端安全漏洞之任意调试漏洞、中间人劫持漏洞及加密算法漏洞

上一篇文章为大家介绍到了APP端的备份功能开启漏洞及本地拒绝服务漏洞,本周会为大家介绍完毕最后三个常见的App端漏洞:任意调试漏洞、中间人劫持漏洞及加密算法漏洞。

任意调试漏洞

说到任意调试漏洞,我们就要提到AndroidManifest.xml ,它是每个Android程序中必须的文件。它位于整个项目的根目录,描述了package中暴露的组件(activities, services, 等等),他们各自的实现类,各种能被处理的数据和启动位置。 除了能声明程序中的Activities, ContentProviders, Services, 和Intent Receivers,还能指定permissions和instrumentation(安全控制和测试)。

而在AndroidManifest.xml文件中,debuggable属性值被设置为true时(默认为false),该程序可被任意调试 ,这就产生了任意调试漏洞。

任意调试漏洞的危害:

可被动态调试,增加了apk被破解、分析的风险。
目前动态调试器的功能都很强大,如果debuggable属性为true,则可轻易被调试,通常用于重要代码逻辑分析、破解付费功能等。

下图是IDA的调试界面,可以下断点、单步执行,调试过程中可以看到变量内容,即使没有java代码,反编译后的smali代码也比较容易阅读,加上动态调试,对App的逆向分析将变得容易的多。

HTTPS中间人劫持漏洞

中间人攻击是指攻击者与通讯的两端分别创建独立的联系,并交换其所收到的数据,使通讯的两端认为他们正在通过一个私密的连接与对方直接对话,但事实上整个会话都被攻击者完全控制。在中间人攻击中,攻击者可以拦截通讯双方的通话并插入新的内容。

HTTPS中间人攻击漏洞有以下来源:

  • 没有对SSL证书进行校验。
  • 没有对域名进行校验。
  • 证书颁发机构(Certification Authority)被攻击,导致私钥泄露等。

示例:

  • 实现的X509TrustManager接口的Java代码片段 【其中的checkServerTrusted()方法实现为空,即不检查服务器是否可信】:
  • 接受任意域名的Java代码片段

攻击效果:
某App中添加收货地址,使用中间人劫持能获取到手机号、地址、姓名等敏感信息。

我们从上面的攻击效果可以看出来,利用中间人劫持漏洞,攻击者可通过中间人攻击(比如使用钓鱼WiFi),盗取账户密码明文、聊天内容、通讯地址、电话号码以及信用卡支付信息等敏感信息,甚至通过中间人劫持将原有信息替换成恶意链接或恶意代码程序,以达到远程控制、恶意扣费等攻击意图。

在各大漏洞平台上,有大量存在HTTPS证书不校验漏洞,例如国内绝大部分Android APP存在信任所有证书漏洞、亚马逊最新官方Android版存在一处信任所有证书漏洞、Yahoo雅虎在国内访问遭遇SSL中间人攻击、携程旅游网最新Android客户端https未校验证书导致https通信内容完全被捕获。

加密算法漏洞

以下几种行为会有产生加密算法漏洞的危险:

  • 使用AES/DES/DESede加密算法时,如果使用ECB模式,容易受到攻击风险,造成信息泄露。
  • 代码中生成秘钥时使用明文硬编码,易被轻易破解。
  • 使用不安全的Hash算法(MD5/SHA-1)加密信息,易被破解。
  • 生成的随机数具有确定性,存在被破解的风险。

而加密信息被破解后,产生的危害也就不言而喻了:加密信息被泄露。如果加密的是账号、密码、银行卡、身份证等信息,破解后可被不法分子用于诈骗、盗号、盗刷等。

相关案例:

  • 某互联网金融APP加密算法被破解导致敏感信息泄露

某P2P应用客户端,用来加密数据的DES算法的密钥硬编码在Java代码中,而DES算法是对称密码算法,既加密密钥和解密密钥相同。知道了密文和加密算法以及密钥,通过解密操作,可以从文件中恢复出原始的手势密码。

某租车APP与服务器通信的接口采用http传输数据,并且有对传输的部分参数进行了加密,加密算法采用AES,但是密钥硬编码在java代码中为“shenzhoucar123123”,可被逆向分析出来,导致伪造请求,结合服务器端的漏洞,引起越权访问的风险,如越权查看其它用户的订单等。 攻击者完全可以做到使用其他脚本重新实现相同的加密功能并拼接出各个接口请求,批量的刷取订单信息和用户其他信息。

那么APP端的常见漏洞就介绍到这里,就像蒲公英之前所说的,APP端本身的漏洞只占到了Android应用目前可发现漏洞的21%,除了5%通信层的漏洞,剩下的都是服务器端的漏洞,这里就留到下次说明了。