1. 简介
CopperDroid通过直接监测System call,不但可以判断操作系统的一些动作(比如进程创建、文件创建),还可以判断进程内部的动作(比如短信发送,这种行为和android的对象有关),最终产生详细的、并且有意义的,有语义的行为信息。
2. android全系统动态二进制分析的难点
Android app的特性决定了我们很难依靠传统的基于system call的动态分析系统。比如:Android系统通过Binder进行进程内(IPC)和进程间(RPC)通信。仅仅依靠system call无法还原这些高级语义。
通过CopperDroid,我们证明了android app的行为,完全可以通过system calls构建出来。不管这些行为是来自于java还是来自于native code。我们只需要从system call向上构建IPC/RPC和android object等高级语义,就行了。
这个想法还是很具有挑战性的。
3. CopperDroid实现思路
CopperDroid使用了数据解码的技术,重新建立起复杂的android对象,这是CopperDroid的真实价值所在,包括:
- Automatic IPC Unmarshalling
- Value-based Data Flow Analysis
- Behavioral Reconstruction
其它同类工具,比如:Droidscope依赖于具体的android操作系统和dvm;taintdroid则依赖于DVM。CopperDroid对android操作系统和dvm没有依赖,这使得它更加通用。
CopperDroid的整体架构如下图:
3.1 Tracking System Call Invocations
CopperDroid通过对QEMU进行intrument,根据swi指令,跟踪system call。
3.2 Behavior Reconstruction
程序的任何行为都可以通过system call和它的参数描述出来。CopperDroid通过对ioctl这个system call的payload进行分析,还原程序的高层语义,如下图所示:
参考:CopperDroid - Automatic Reconstruction of Android Malware Behaviors