Group of Software Security In Progress

GoSSIP @ LoCCS.Shanghai Jiao Tong University

ViewDroid: Towards Obfuscation-Resilient Mobile Application Repackaging Detection

论文下载

Abstract

本文设计并实现了名为ViewDroid的重打包检测工具。通过分析用户使用app时呈现的行为特征,抽取能够用于区分不同app的高层抽象特征,这种app相似性检测方法能够有效的对抗代码混淆。

Introduction

首先列举了目前Android平台上重打包的发展情况,列举了最近有关重打包检测的研究工作,基于Fuzzy Hashing、PDG、Feature Hashing、Module Decoupling等技术。在本文中,作者在研究重打包技术的时候发现了目前主流的重打包行为的两个特征:

  1. Android平台上的应用程序的基础是和用户之间的互动,用户通过界面UI和app进行信息交换。
  2. 因为需要利用被重打包app的流行性,所以在重打包时,攻击者会保留被重打包app的UI界面,尽可能的在给用户的感觉上和原app保持一致。

所以作者提出了一种基于view graph的静态重打包检测技术。ViewDroid之所以能够对抗代码混淆技术,是出于以下两个原因:

  1. view graph是一种高层的app描述方式,不会受到底层代码混淆技术的影响。
  2. 由于view graph的建立是基于Android API(startActivity and startActivityForResult),在代码混淆过程中,这些基本的API不会收到影响。

本文的主要贡献有:

  1. 率先提出UI级的app birthmark,view graph.
  2. 设计并实现了基于view graph的重打包检测系统—ViewDroid。
  3. 从SandMarks和KlassMaster上选取了39种混淆方法,实验结果表明ViewDroid能够很好的对抗代码混淆技术。 4. 大规模的实验,10311个现实app。

Problem Statement

本文不考虑native-code。

Attack Model

攻击者会使用混淆技术混淆代码,同时删除/增加少量的代码。

Design Goals

设计出准确的birthmark,同时能够对抗代码混淆,对重打包的检测结果应该是稳定的。

Design

Overview

几个定义:

  • view:展现给用户看的,用于和用户互动的,由若干组件组成的UI界面。
  • view graph:有向图G(V,E),V代表了节点,每个节点代表了一个view。E是边,一条从a到b的边表示能从view a切换到view b。
  • 在view graph上,可以为view添加各种特征,比如特殊的API。

System Architecture

  1. 用apktool反编译.
  2. 通过一些特殊的api来判断view的生成,比如onCreate()、setContentView()等。
  3. 提取view节点的特征。
  4. 利用Intent构造边。
  5. 提取边的特征,比如切换view的方式。

一个feature view graph如下:

Fig

Graph相似性检测

用VF2同构算法进行两个graph的相似度比较。使用一些预处理来减少复杂性:

  1. 两个grahp的大小差别很大,则认为是不同的。
  2. 两个graph中view节点的特征重复较少,少于1/3,则认为是不同的。
  3. 两个graph中边的特征重复较少,少于1/3,则认为是不同的。

Evaluation

  • 从Goolge Play上选取10311个真实的app,共有573872个app对。相似度阈值设为0.7。结果如下:

Fig

被判为重打包的app对中,有129对判断错误,主要是由广告库引起的。

  • 选了一些重打包过的app,一共901对,其中检测出了868对。没检测出来主要是因为代码修改太多、阈值太高。
  • 把上面实验结果中检测出重打包的app放到virusTotal里去,19%的是恶意程序。
  • 还有一些和app类型相关的分析,可以自己看。
  • 选了一些重打包的app和恶意程序,混淆之后进行检测,同时和AndroGuard对比,结果如下:

Fig

Discussion

对于比较小的app,检测效果不好。一些专业的攻击者可以针对ViewDroid进行专门的混淆,来绕过检测。对于加密型的混淆,ViewDroid无能为力,需要动态分析!