V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ZCPgyer
V2EX  ›  蒲公英

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

  •  
  •   ZCPgyer · 2016-11-16 14:54:30 +08:00 · 8625 次点击
    这是一个创建于 2961 天前的主题,其中的信息可能已经有所发展或是发生改变。

    上周为大家介绍到了 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%通信层的漏洞,剩下的都是服务器端的漏洞,这里就留到下次说明了。

    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1051 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 20:06 · PVG 04:06 · LAX 12:06 · JFK 15:06
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.