Group of Software Security In Progress

GoSSIP @ LoCCS.Shanghai Jiao Tong University

Automatically Detecting SSL Error-Handling Vulnerabilities in Hybrid Mobile Web Apps

  • 作者:Chaoshun Zuo, Jianliang Wu, Shanqing Guo
  • 单位:Shandong University
  • 出处:AsiaCCS’15

Abstract && Introduction

  • 本文主要讨论自动化检测App中WebView对SSL的错误处理
  • 与以前研究的区别在于:既要分析native app activities,还要分析web page。因此本文采取了静态分析和动态分析结合的方法
  • 测试了第三方市场的13,820个app,645个确认有漏洞

Figure 1

System Overview

  • Problem Statement:WebView校验证书时,如校验失败,而客户端没有重写错误处理过程,则WebView会屏蔽当前page;因此开发者通常重写错误处理过程,包括忽略该错误、处理错误并返回结果给WebView。
  • Challenges and Solutions:
    • Is the potential vulnerable code reachable:
      • 先找到潜在漏洞代码,再确认这种代码是否可达。
      • 假设继承自WebViewClient并重写了错误处理方法OnReceiveSsLError的类中,包含忽略错误代码的是有漏洞的。
      • setWebViewClient->WebViewClient->Activity,target activity可达则问题代码可达。
    • How to record Activity jump relations with trigger events:
      • 为确认app是否有漏洞,需要能从launcher Activity触发一些事件后能跳转到target activity。
      • 基于launcher activity到target activity的一条路径建立ACG来实现跳转。ACG的顶点是activity,边是能触发activity的event和相关view。
      • MCG->method->event->ACG. 建立MCG来寻找ACG中的边,遍历MCG找到引起activity跳转的method,以及跳转到哪个activity,识别出该方法所属的事件方法(如OnClick),拥有该实践方法的view和该事件就是这个ACG中的边。
    • How to simulate human operations to both native Android UI and WebView UI:
      • 通过修改Android框架开发了Android Tester:能找到与activity相关的view,触发特定event
      • 利用Robotium为目标app开发了一个通用测试脚本app:当默认page不是https时,能利用test script跳转到https页面。类似爬虫,找出默认page的所有链接,选出其中的https链接。
  • System Overview:
    • 静态分析出潜在问题app
    • 动态分析确认问题app

Figure 2

Detailed Design

  • Static Analysis Module:
    • Static Detection:反编译,找继承自WebViewClient的类;分析收集到的类是否重写了onReceivedSsLError方法。分析发现大部分app选择信任所有证书,部分错误校验,部分直接放弃当前page。
    • Build MCG:MCG表示方法间的调用关系。顶点表示method,边表示method A可以调用B。
    • Locate Target Activities:查找包含问题代码的method,回溯MCG找到对应的activity,回溯在进入系统回调方法时停止因为没有方法会显示调用这些方法。检查activity集,删掉没有在Manifest文件里声明的。
    • Build ACG:
      • 找到target activity后再找从launcher activity跳转到这些activity的路径。
      • startActivity和startActivityForResult这两个系统调用会导致Activity跳转。
      • 建立ACG时,顶点是Manifest里声明的Activity,边根据以上两个系统调用回溯,找到它的起始Activity来建立边。
  • Dynamic Analysis Module:
    • Dynamic Test Environment:
      • 需求:
        • Being able to understand the UI states
        • Being able to get UI objects
        • Being able to perform actions
        • Being able to get return value
      • 实现:
        • 修改了Android系统工具instrumentation,绕过签名验证过程,以能用测试脚本app测试具有不同签名的app
        • 用静态分析阶段得到的配置文件开发了一个测试脚本app用于测试目标app,根据脚本读取配置文件测试app,驱使app跳转到target Activity
        • native Android UI driving跳转到目标Activity,WebView UI driving加载https页面
    • Confirm vulnerability:WebView拒绝问题cert会显示空白page,否则显示正常page即错误处理由app代码完成。所以只要检查是否加载了空白page就可以判断app是否有漏洞。

Evaluation

Figure 3