slides - 中国科学院软件研究所

Download Report

Transcript slides - 中国科学院软件研究所

2014年“软件与网络安全”科学与技术前沿论坛
基于权限机制的安卓
软件分析和系统加固研究
杨 珉
复旦大学软件学院
1
以系统权限为中心的研究进展
软件行为分析技术
系统安全加固技术
2
安卓平台安全状况堪忧
3
安卓应用软件飞速增长
众多第三方应用市场
图:Google应用商城2009年12月份到2013年7月份的统计报告
4
应用软件恶意行为泛滥
国内Android应用商城中程序隐私泄露分析,第五届信息安全漏洞分析与风险评估大会,2012年
5
应用软件的安全缺陷涌现
• Analyzing Inter-Application Communication in Android, in MobiSys’11
• Permission Re-Delegation: Attacks and Defenses, in USENIX Security’11
• Systematic Detection of Capability Leaks in Stock Android Smartphones, in NDSS’12
• CHEX: Statically Vetting Android Apps for Component Hijacking Vulnerabilities, in
CCS’12
• DroidChecker: Analyzing Android Applications for Capability Leak, in WiSec’12
• Detecting Passive Content Leaks and Pollution in Android Applications, in NDSS’13
• The Impact of Vendor Customizations on Android Security, in CCS’13
• IntentFuzzer: Detecting Capability Leaks of Android Applications, in AsiaCCS’14
• …
6
应用软件的安全核查
• 工信部,“关于加强移动智能终端进网管理的通
知”
• 2013年11月
• 国家网信办,“APP应用程序发展管理办法”
• 2014年10月
• Google Play
• Bouncer:约40%的恶意行为识别率
• 第三方应用市场
• 商业化杀毒引擎+不断增长的恶意软件样本库
7
恶意行为分析:
基于权限使用视图的分析平台
8
零天恶意软件依赖人工分析
• 人工分析:高成本、大时延、易规避
无法满足海量软件
的分析检测需求
9
安装时的权限授予模式
• 利用系统调用分析软件行为的
方法不适用安卓平台
• 虚拟机沙箱导致语义割裂
• 特有的编程与运行模型
• 应用软件如何使用这些权限?
• 应用软件对敏感资源施加何种
影响?
10
基于权限使用视图的敏感行为分析
• VetDroid自动化分析平台
Application Layer
System Services
Behavior Profiler
Sample Apps(.apk)
Application Driver
Behavior Report
VetDroid Sandbox
Log File
•
Permission Use Analysis for Vetting Undesirable Behaviors in Android Apps ,IEEE
Transactions on Information Forensics and Security, 2014
•
Vetting Undesirable Behaviors in Android Apps with Permission Use Analysis ,ACM
Conference on Computer and Communications Security 2013
11
基于权限使用的行为分析方法
自
动
识
别
权
限
使
用
行
为
读取通讯录
处理通讯录数据
孤立的
动作
打开网络
发送数据
自动构建行为视图
权
限
使
用
视
图
有依赖
关系的
行为
12
权限使用视图
android.permission.ACCESS_FINE_LOCATION, Tag: 0x4
net.maxicom.android.snake.SnakeService$1; run()V ---->
android.location.LocationManager; requestLocationUpdates(X1, X2,X3,X4)
X1="gps",X2=1L,X3=250.0F,X4=0x40528310(type=net.maxicom.android.sn
ake.LocationListener)
申请使用
权限
LOCATION
net.maxicom.android.snake.LocationListener; onLocationChanged(X1,X2)
X1=0x40528310(type=net.maxicom.android.snake.LocationListener),
X2=0x40527568(type=android.location.Location, tag=0x4)
LOCATION
java.net.URI; <init>(X1, X2)
X1=0x40529aa0(type=java.net.URI),
X2="?email=%22**%40gmail.com%22&code=%***%22&time=***&lat=*
*&lng=**&pro=gps&acc=0.01"(tag=0x4)
android.permission.INTERNET, Tag: 0x8
LOCATION
位置跟踪行为
net.maxicom.android.snake.SnakeService$1$1; handleMessage()VL---->
org.apache.http.impl.client.AbstractHttpClient; execute(X1,X2,X3)
X1=0x4052f008(type=org.apache.http.impl.client.DefaultHttpClient),
X2=0x4053f238(type=org.apache.http.client.methods.HttpPost),
X3=0x400210c8(type=org.apache.http.impl.client.DefaultHttpClient)
INTERNET
org.apache.harmony.luni.platform.OSNetworkSystem;writeImpl(X1,X2,X3,X4,X5)
使用权限获
得的数据
X1=0x40310548(type=org.apache.harmony.luni.platform.OSNetworkSystem, tag=0x8),
X2=0x4053fd20(type=java.io.FileDescriptor),X3=0x4056ac88(type=[B, tag=0x4),X4=0x0I,X5=0x140I
13
VetDroid系统架构
• 核心组件
• 显式权限使用分析:程序中哪些地方申请权限
• 隐式权限使用分析:程序中哪些地方使用敏感资源
• 程序驱动
• 行为采样
Application Layer
System Services
Behavior Profiler
VetDroid Sandbox
Permission Use Analysis
Sample Apps(.apk)
Application Driver
E-PUP Identifier
Behavior Report
I-PUP Tracker
Log Tracer
Log File
14
分析过程
android.permission.ACCESS_FINE_LOCATION, Tag: 0x4
net.maxicom.android.snake.SnakeService$1; run()V ---->
android.location.LocationManager; requestLocationUpdates(X1, X2,X3,X4)
X1="gps",X2=1L,X3=250.0F,X4=0x40528310(type=net.maxicom.android.sn
ake.LocationListener)
申请使用
权限
LOCATION
net.maxicom.android.snake.LocationListener; onLocationChanged(X1,X2)
X1=0x40528310(type=net.maxicom.android.snake.LocationListener),
X2=0x40527568(type=android.location.Location, tag=0x4)
LOCATION
第一步:自动地采样软件中申请权限的行为
java.net.URI; <init>(X1, X2)
X1=0x40529aa0(type=java.net.URI),
显式权限使用分析
X2="?email=%22**%40gmail.com%22&code=%***%22&time=***&lat=*
*&lng=**&pro=gps&acc=0.01"(tag=0x4)
android.permission.INTERNET, Tag: 0x8
第二步:自动地跟踪软件中使用这些通过权限获得的数据的
net.maxicom.android.snake.SnakeService$1$1; handleMessage()VL---->
org.apache.http.impl.client.AbstractHttpClient; execute(X1,X2,X3)
行为
LOCATION
X1=0x4052f008(type=org.apache.http.impl.client.DefaultHttpClient),
X2=0x4053f238(type=org.apache.http.client.methods.HttpPost),
隐式权限使用分析
X3=0x400210c8(type=org.apache.http.impl.client.DefaultHttpClient)
INTERNET
org.apache.harmony.luni.platform.OSNetworkSystem;writeImpl(X1,X2,X3,X4,X5)
使用权限获
得的数据
X1=0x40310548(type=org.apache.harmony.luni.platform.OSNetworkSystem, tag=0x8),
X2=0x4053fd20(type=java.io.FileDescriptor),X3=0x4056ac88(type=[B, tag=0x4),X4=0x0I,X5=0x140I
15
显式权限使用分析
• 目标:程序如何使用权限与系统交互
• 技术难点
• 1:获取所有显式权限使用点
• 2:识别精确权限使用信息
• 技术路线
• 识别程序-系统交互点
• 从安卓系统内部捕获权限检查信息
• 根据不同权限检查方式进行传播
16
采样权限检查信息
Application
App_1
System Service
App_2
Location
Manager
Service
Activity
Manager
Service
AndPermChk AndPermChk
ReqSysResource ReqSysResource
ReqSysResource
Package
Manager
Service
......
AndPermChk
Android Framework
KerPermChk KerPermChk
Network
File
System
Binder
IPC
Linux Kernel
17
采样权限检查信息
Application-System Interaction
Application
App.getLastLocation()
E-PUP:
ACCESS_FINE_LOCATION
框架层权限检查传播方法
 Binder层插桩
App.getLocationProviders()
内核层权限检查传播方法
引入两个单独的系统调用
Not a E-PUP
System
LocationManagerService
.getLastKnownLocation()
ACCESS_FINE_LOCATION
Permission Checked
LocationManagerService
.getAllProviders()
No Permission Checked
18
隐式权限使用分析
• 目标:程序如何使用通过权限获得的资源
• 难点1:获取所有资源递交点(同步或异步方式)
• 方案:区分同步和异步的方式,识别Callback的方式获
取系统资源
• 难点2:自动地跟踪程序内部逻辑
• 方案:基于权限使用的污点技术(扩展TaintDroid系统
),将敏感数据标记权限使用信息
19
原型系统与实验
• 原型系统
• 支持Android 2.3/4.1
• 运行在Nexus S/Prime/4手机、模拟器
• 实验
• 恶意软件分析
• GP商城应用分析
20
恶意软件样本集分析(Genome)
恶意行为类别的识别精确,恶意行为捕获的机率高。
恶意行为类型
#
恶意软件家族分类
偷取短信
46
BaseBridge, SMSReplicator, Zitmo, Gone60
偷取手机号码
38
ADRD, YZHC, GoldDream, Pjapps, GGTracker,
GingerMaster, DroidDream, DroidKungFu[1-4]
偷取通讯录
8
Zitmo, Gone60, Walkinwat
跟踪地理位置
9
TapSnake, DroidDream, DroidKungFu1,
Bgserv, DroidKungFu2, DroidKungFu4
发送短信
43
Pjapps, Zsone, Walkinwat, RogueSPPush,
GGTracker, FakePlayer, SMSReplicator
阻截短信
22
Zitmo, RogueSPPush, GGTracker, Zsone
21
GP热门应用分析
更强的隐私泄露检测能力
泄露的隐私
TaintDroid
VetDroid
135
135
手机号码
7
7
地理位置
17
24
联网状态
0
28
手机串号(IMEI)
精确的信息泄露诊断能力
泄露的隐私
#
泄露的原因
地理位置
12
Inner-Active Ads
Wetter Ads
Flurry Ads
Google Ads
InMobi Ads
Fortumo Payments
基站位置
3
Vserv Ads
Handmark
手机号码
1
Mobile Public
22
VetDroid的优势
刻画安卓行为 通用的行为 分 析 程 序 过 滤 不 敏
语义信息
分析能力
内部行为
感行为
Syscall-based
CopperDroid
TaintDroid/AppInte
nt
ProfileDroid
DroidScope
PermissionEventGra
ph
VetDroid
-√
-√
---
---
√
--
--
√
√
√
√
√
-√
---
√
--
--
√
√
√
√
√
表:与相关研究工作的比较
23
敏感资源保护:
基于上下文的细粒度权限管理框架
24
应用软件间密切协同
大量内嵌第三方SDK
频繁使用程序间交互
25
安卓权限机制分析
• 权限管理机制:应用软件的粒度
func_x
APP_1
func_y
func_a
APP_2
func_c
func_b
SEND_SMS SEND_SMS
func_d
func_e
SEND_SMS
Android Permission System
26
现有权限机制的安全风险
• 应用程序内部不敏感
• 同一个程序内部的所有代码可以使用相同的权限
• 例如:程序重打包攻击、恶意SDK攻击
• 应用程序间交互不敏感
• 一个程序可能会被其他程序利用来访问某些资源
• 例如:权限代理攻击、组件劫持攻击
27
基于权限机制的系统加固研究
问题:无法根据应用程序上下文进行灵活的权限管理
权限系统扩展
Aurasium
使用时权限授予机制
Dr.Andorid & Mr.Hide
提供细粒度的权限语义
SEAndroid
采用Linux强制式访问控制构建权限系统
FlaskDroid
针对框架层资源引入强制式访问控制进
行管理
环境敏感的权
限机制
CRePE, MobileIFC,
DR BACA, Saint
根据设备所处的环境信息定义不同的权
限使用规则,例如时间、地理位置
程序通讯加固
IPC Inspection
根据程序交互链中的各个程序的权限交
集进行权限管理
TrustDroid, XManDroid 基于预定义规则阻止有风险的程序交互
程序内部隔离
Quire
提供程序员检查程序交互链的能力
Aframe, AdDroid,
AdSplit
采用进程隔离第三方程序组件
Compsac
根据代码调用组件链中的各个组件的权
限交集进行权限管理
28
基于上下文的细粒度权限管理框架
• 全系统的权限统一管理机制
• 程序运行时上下文跟踪技术
Android Framework
Policy
Engine
Permission
Record
App_1
App_2
Permission
Manager
4
1
2
Context API
3
Context Builder
4
5
Policy
Manager
install policy
extend action
Security
Applications
Library Layer
Linux Kernel
29
应用程序上下文信息
• 两类程序运行时上下文信息
• 程序内上下文:内部的执行流信息
• 函数之间的调用关系
• 采用函数调用上下文来表示
• 程序间上下文:程序间交互执行流
• 基于Binder驱动跟踪程序交互上下文
• 传播程序的UID信息,以及各个交互程序内部的上下
文
30
基于Binder的上下文跟踪原理
App_1
App_2
App_3
User Space
App_1
(uid: pcc)
App_1
App_2
(uid: pcc) (uid: pcc)
interaction
interaction
Context: None
Linux Kernel
App_1
(uid, pcc)
App_1
(uid: pcc)
App_2
(uid: pcc)
31
规则语言
policy := <action> <app> <permission> <context>
action := grant | deny | ...
context := <uid-context> <uid-context> ...
uid-context := <uid> <pcc-context>
pcc-context := <pcc> | <method-chain>
method-chain := <method-sig> <method-sig> ...
图:上下文敏感的权限管理规则语言的结构
<policy action=”deny” app=”com.example.tester” permission=”INTERNET” >
<uid-selector selector=”strictcontains” >
<uid-context uid=”com.example.tester” />
<pcc-selector selector=”contains” >
<method-sig className=”com.example.tester.TestActivity”
methodName=”onCreate” />
</pcc-selector>
</uid-context>
</uid-selector>
</policy>
图:一个样例规则
32
基于上下文的权限管理
LocationManager.getLastKnownLocation()
• UID: 10053, com.snapwork.finance
• 权限:android.permission.ACCESS_FINE_LOCATION
• 程序内上下文:
com.flurry.android.e-e-LL-42
com.flurry.android.e-a-VLLZ-3
com.flurry.android.v-run-V-21
一、可以控制是否允
许Flurry SDK访问位置
信息
二、不影响SnapWork
自身访问位置信息
33
原型系统与实验
• 原型系统
• 支持Android 2.3/4.1,支持Nexus Prime/4、模拟器
• 实验
• 整体性能测试
• 最差情况下的性能测试
• 规则匹配的性能测试
34
性能测试
测试集
原生系统
FineDroid
(w/o context)
FineDroid
(w/ context)
AnTutu
7701
7718 (+0.22 %) 7671 (-0.39 %)
Linpack
43.36
42.60 (-1.76 %)
CaffeineMark
3
8518
8495 (-0.27 %)
42.50 (-1.99
%)
8457.5 (-0.71
%)
表:整体性能测试结果
权限使用类型 原生系统
Socket (KEP)
0.14 ms
IMEI (AEP)
0.62 ms
FineDroid
(w/o context)
2.16 ms Δ2.02
ms
0.69 ms Δ0.06
ms
FineDroid
(w/ context)
2.18 ms Δ0.02
ms
1.09 ms Δ0.40
ms
表:最差情况下的性能测试结果
35
规则匹配的性能测试
<policy action=”deny” app=”com.example.tester” permission=”INTERNET” >
<uid-selector selector=”strictcontains” >
<uid-context uid=”com.example.tester” />
<pcc-selector selector=”contains” >
<method-sig className=”com.example.tester.TestActivity”
methodName=”onCreate” />
</pcc-selector>
</uid-context>
</uid-selector>
</policy>
图:测试使用的样例规则
权限使用类型
FineDroid
FineDroid
(w/o policy) (w/ policy)
性能开销
Socket (KEP)
2.18 ms
3.06 ms
0.88 ms
IMEI (AEP)
1.09 ms
1.99 ms
0.90 ms
表:规则匹配性能测试结果
36
权限泄露漏洞修复实例
public class SmsReceiverService extends Service {
public int onStartCommand(Intent intent, int flags, int startId) {
... ...
Message msg = mServiceHandler.obtainMessage();
msg.arg1 = startId;
msg.obj = intent;
mServiceHandler.sendMessage(msg);
... ...
}
}
private final class ServiceHandler extends Handler {
public void handleMessage(Message msg) {
Intent intent = (Intent)msg.obj;
if (intent != null) {
String action = intent.getAction();
... ...
} else if (SMS_RECEIVED_ACTION.equals(action)) {
handleSmsReceived(intent, error);
}
... ...
}
}
}
private void handleSmsReceived(Intent intent, int error) {
SmsMessage[] msgs = Intents.getMessagesFromIntent(intent);
String format = intent.getStringExtra("format");
Uri messageUri = insertMessage(this, msgs, error, format);
if (messageUri != null) {
long threadId = MessagingNotification.getSmsThreadId(this, messageUri);
MessagingNotification.blockingUpdateNewMessageIndicator(this, threadId, false);
}
}
AOSP中Mms程序存在
的WRITE_SMS权限泄
露漏洞
37
应用实例:Mms权限泄露漏洞
public interface
• Mms服务包含三种
权限泄露路径
c
SmsReceiverService
a
• 快速修复的安全策略
SmsReceiver
WRITE_SMS leak
b
SEND_SMS leak
<policy action=”deny” app=”com.android.mms” permission=”WRITE_SMS” >
<uid-selector selector=”strictcontains” >
<uid-context uid=”^com.android.mms” pcc=”*” />
<uid-context uid=”com.android.mms” />
<pcc-selector selector=”contains” >
<method-sig className=”com.android.mms.transaction.SmsReceiverService”
methodName=”handleSmsReceived” />
</pcc-selector>
</uid-context>
</uid-selector>
</policy>
38
权限漏洞修复规则自动生成
• 利用CHEX漏洞分析结果,修复规则自动化生成
应用名
泄露路径数
com.gmail.traveldevel.android.vlc.app2
131
com.froogloid.kring.google.zxing.client.
24
android-67
de.cellular.tagesschau-5
361
com.akbur.mathsworkout-92
2
com.appspot.swisscodemonkeys.paintfx-4
2
com.androidfu.torrents-26
1
com.espn.score_center-141
6
com.espn.score_center-142
6
fr.pb.tvflash-9
2
hu.tagsoft.ttorrent.lite-15
8
总计
414
生成规则数
2
24
361
2
2
1
6
6
2
8
414
39
谢谢!
40