A Study of Android Application Security

Similar documents
A Study of Android Application Security

Smartphone Security for Android Applications

Detecting privacy leaks in Android Apps

WebView addjavascriptinterface Remote Code Execution 23/09/2013

Lecture 17: Mobile Computing Platforms: Android. Mythili Vutukuru CS 653 Spring 2014 March 24, Monday

Programming the Android Platform. Logistics

Comparing the Effectiveness of Penetration Testing and Static Code Analysis

Symantec's Secret Sauce for Mobile Threat Protection. Jon Dreyfus, Ellen Linardi, Matthew Yeo

CompTIA Mobile App Security+ Certification Exam (Android Edition) Live exam ADR-001 Beta Exam AD1-001

APPLICATION SECURITY: FROM WEB TO MOBILE. DIFFERENT VECTORS AND NEW ATTACK

Understanding Android s Security Framework

All Your Code Belongs To Us Dismantling Android Secrets With CodeInspect. Steven Arzt Secure Software Engineering Group Steven Arzt 1

PROFILEDROID: MULTI-LAYER PROFILING OF ANDROID APPLICATIONS XUETAO WEI LORENZO GOMEZ UNIVERSITY OF CALIFORNIA, RIVERSIDE PROFESSOR IULIAN NEAMTIU

Overview of CS 282 & Android

Programming with Android: System Architecture. Dipartimento di Scienze dell Informazione Università di Bologna

Remote Android Assistant with Global Positioning System Tracking

Automatic vs. Manual Code Analysis

A proposal to realize the provision of secure Android applications - ADMS: an application development and management system -

Android Malware for Pen-testing. IOAsis San Fransicso 2014

Clojure and Android. Daniel Solano Gómez. Clojure/conj Sattvik Software & Technology Resources, Ltd. Co.

Lecture 1 Introduction to Android

RV-Droid: Runtime Verification and Enforcement for Android Applications

Harvesting Developer Credentials in Android Apps

Synthesis for Developing Apps on Mobile Platforms

GadgetTrak Mobile Security Android & BlackBerry Installation & Operation Manual

ANDROID BASED MOBILE APPLICATION DEVELOPMENT and its SECURITY

The OWASP Foundation

Tushar Dalvi Sr. Security Engineer at LinkedIn Penetration Tester. Responsible for securing a large suite mobile apps

ITG Software Engineering

A Case Study of an Android* Client App Using Cloud-Based Alert Service

Adobe Systems Incorporated

Android Architecture. Alexandra Harrison & Jake Saxton

Final Year Project Interim Report

Beginners Guide to Android Reverse Engineering

Overview of Web Services API

Countering The Faults Of Web Scanners Through Byte-code Injection

SSOScan: Automated Testing of Web Applications for Single Sign-On vulnerabilities

QUIRE: : Lightweight Provenance for Smart Phone Operating Systems

Pentesting Android Apps. Sneha Rajguru

Messing with the Android Runtime

Spring Design ScreenShare Service SDK Instructions

An Android-based Instant Message Application

An Overview of Java. overview-1

MASTERTAG DEVELOPER GUIDE

Detection and Identification of Android Malware Based on Information Flow Monitoring

AndroidLeaks: Automatically Detecting Potential Privacy Leaks In Android Applications on a Large Scale

HybriDroid: Analysis Framework for Android Hybrid Applications

Overview. The Android operating system is like a cake consisting of various layers.

Rake: Semantics Assisted Networkbased Tracing Framework

Android Basics. Xin Yang

A Framework for Static Detection of Privacy Leaks in Android Applications

Iotivity Programmer s Guide Soft Sensor Manager for Android

Hacking your Droid ADITYA GUPTA

Sales Rabbit Integration

Appium mobile test automation

Developers. Saturday, June 30, 2012

Enterprise Application Security Workshop Series

Customize Mobile Apps with MicroStrategy SDK: Custom Security, Plugins, and Extensions

Publishing, Analytics and Ads

The Android Platform

Comparing Application Security Tools

Introduction to Android

AppConnect FAQ for MobileIron Technology Partners! AppConnect Overview

(In-)Security of Backend-as-a-Service

Malware detection methods for fixed and mobile networks

bbc Developing Service Providers Adobe Flash Media Rights Management Server November 2008 Version 1.5

Mobility Introduction Android. Duration 16 Working days Start Date 1 st Oct 2013

Smartphone Pentest Framework v0.1. User Guide

Introduction to Android Android Architecture Software Development Purpose of the project Location Based Service (LBS) Android. Location class Google

AppsPlayground: Automatic Security Analysis of Smartphone Applications

CHAPTER 5 INTELLIGENT TECHNIQUES TO PREVENT SQL INJECTION ATTACKS

Top Ten Web Attacks. Saumil Shah Net-Square. BlackHat Asia 2002, Singapore

Advanced ANDROID & ios Hands-on Exploitation

BAPI. Business Application Programming Interface. Compiled by Y R Nagesh 1

Repsheet. A Behavior Based Approach to Web Application Security. Aaron Bedra Application Security Lead Braintree Payments. tirsdag den 1.

Android Packer. facing the challenges, building solutions. Rowland YU. Senior Threat Researcher Virus Bulletin 2014

A qbit on Android Security

Step One Check for Internet Connection

Intrusion detection for web applications

RoverPal - A Mobile Payment Application

The Behavioral Analysis of Android Malware

ProfileDroid: Multi-layer Profiling of Android Applications. Xuetao Wei Lorenzo Gomez Iulian Neamtiu Michalis Faloutsos

Retargeting Android Applications to Java Bytecode

Writing standalone Qt & Python applications for Android

Example of Standard API

Android Architecture For Beginners

How To Customize An Orgsync App On Anorus Mobile Security Suite On A Microsoft Ipad Oracle 2.5 (Ios) On A Pc Orca 2.2 (Iphone) On An Android Orca2 (Ip

AT&T VERIFY CONNECT (V3.2.0) GETTING STARTED GUIDE FOR MOBILE SDK

Detection of illegal control flow in Android System: Protecting private data used by Smartphone Apps

Clustering with Tomcat. Introduction. O'Reilly Network: Clustering with Tomcat. by Shyam Kumar Doddavula 07/17/2002

Universal Mobile Ads is a plugin for Unreal Engine 4 that enables the MoPub ad mediation system for ios & Android.

Visualizing an OrientDB Graph Database with KeyLines

VOL. 2, NO. 1, January 2012 ISSN ARPN Journal of Science and Technology ARPN Journals. All rights reserved

Sample HP OO Web Application

Getting Started Guide for Developing tibbr Apps

Admin. Mobile Software Development Framework: Android Activity, View/ViewGroup, External Resources. Recap: TinyOS. Recap: J2ME Framework

Graduate presentation for CSCI By Janakiram Vantipalli ( Janakiram.vantipalli@colorado.edu )

Index Terms: Smart phones, Malwares, security, permission violation, malware detection, mobile devices, Android, security

Transcription:

A Study of Android Application Security William Enck, Damien Octeau, Patrick McDaniel, and Swarat Chaudhuri USENIX Security Symposium August 2011 Systems and Internet Infrastructure Security Laboratory (SIIS) 1

2 New Dominant Player

2 New Dominant Player Nobody is looking at all the apps (250K and growing) What would you look for if you did?

Studying Applications Goal: Study a breadth of security properties in a large set of popular Android smartphone applications. How do you get the applications and source code? How to retrieve application packages (.apk files)? How to retrieving application source code? How do you go about studying the source code? What do you look for? How do you look for it? How do you know what s actually there? Systems and Internet Infrastructure Security Laboratory (SIIS) 3

Dalvik EXecutables Android applications written Java, compiled to Java bytecode, and translated into DEX bytecode (Dalvik VM) Java Compiler Class1.class Constant Pool dx.dex file Header Java Source Code (.java files) Class Info Data ClassN.class Constant Pool Class1 definition Constant Pool Class Info ClassN definition Data Data We want to work with Java, not DEX bytecode There are a lot of existing program analysis tools for Java We want to see what the developer was doing (i.e., confirmation) Non-trivial to retarget back to Java: register vs. stack architecture, constant pools, ambiguous scalar types, null references, etc. Systems and Internet Infrastructure Security Laboratory (SIIS) 4

5 Getting back to the Source The ded decompiler (1) DEX Parsing Retargeting Process CFG Construction Refers to both the entire process and the.dex.class retargeting tool Multi-stage process with many sub-stages http://siis.cse.psu.edu/ded (2) Java.class Conversion (3) Java.class Optimization Missing Type Inference Constant Pool Conversion Method Code Retargeting Type Inference Processing Constant Identification Constant Pool Translation Bytecode Reorganization Instruction Set Translation ded recovers source code from application package Retargeting: type inference, instruction translation, etc Optimization: use Soot to re-optimize for Java bytecode Decompilation: standard Java decompilation (Soot)

6 Type Inference START double return_a_double(int a) { if(a!= 1) return 2.5; else return 1.2; Source code false 0 const/4 1 if-eq true 3 constwide/high16 6 const-wide double return_a_double(int) 0: const/4 v0,1 1: if-eq v3,v0,6 3: const-wide/high16 v0,16388 5: return-wide v0 6: const-wide v0,4608083138725491507 11: goto 5 5 returnwide EXIT 11 goto DEX bytecode CFG

Type Inference double return_a_double(int a) { if(a!= 1) return 2.5; else return 1.2; START 0 const/4 1 if-eq Ambiguous assignment to v0 Source code false true 3 constwide/high16 6 const-wide double return_a_double(int) 0: const/4 v0,1 1: if-eq v3,v0,6 3: const-wide/high16 v0,16388 5: return-wide v0 6: const-wide v0,4608083138725491507 11: goto 5 5 returnwide EXIT 11 goto DEX bytecode CFG Systems and Internet Infrastructure Security Laboratory (SIIS) 6

6 Type Inference START double return_a_double(int a) { if(a!= 1) return 2.5; else return 1.2; Source code false 0 const/4 1 if-eq true Ambiguous assignment to v0 Uses v0 3 constwide/high16 6 const-wide double return_a_double(int) 0: const/4 v0,1 1: if-eq v3,v0,6 3: const-wide/high16 v0,16388 5: return-wide v0 6: const-wide v0,4608083138725491507 11: goto 5 5 returnwide EXIT 11 goto DEX bytecode CFG

7 Recovering Types ded dex2jar double return_a_double(int var1) { double var2; if(var1!= 1) { var2 = 2.5D; else { var2 = 1.2D; double return_a_double(int var1) { long var2; if(var1!= 1) { var2 = 4612811918334230528L; else { var2 = 4608083138725491507L; return var2; return (double)var2;

8 Optimization by Soot

8 Optimization by Soot public void cleartiles() { for (int x = 0; x < mxtilecount; x++) { for (int y = 0; y < mytilecount; y++) { settile(0, x, y);

8 Optimization by Soot public void cleartiles() { for (int x = 0; x < mxtilecount; x++) { for (int y = 0; y < mytilecount; y++) { settile(0, x, y);.class files.dex file

8 Optimization by Soot public void cleartiles() { for (int x = 0; x < mxtilecount; x++) { for (int y = 0; y < mytilecount; y++) { settile(0, x, y);.class files.dex file ded New.class files

8 Optimization by Soot public void cleartiles() { for (int x = 0; x < mxtilecount; x++) { for (int y = 0; y < mytilecount; y++) { settile(0, x, y);.class files.dex file public void cleartiles() { int var1 = 0; while(true) { int var2 = mxtilecount; if(var1 >= var2) { return; int var3 = 0; while(true) { var2 = mytilecount; if(var3 >= var2) { ++var1; break; byte var4 = 0; this.settile(var4, var1, var3); ++var3; New.class files ded

9 Optimization by Soot public void cleartiles() { for (int x = 0; x < mxtilecount; x++) { for (int y = 0; y < mytilecount; y++) { settile(0, x, y);.class files.dex file ded New.class files

9 Optimization by Soot public void cleartiles() { for (int x = 0; x < mxtilecount; x++) { for (int y = 0; y < mytilecount; y++) { settile(0, x, y);.class files.dex file ded Optimized.class files New.class files Soot

9 Optimization by Soot public void cleartiles() { for (int x = 0; x < mxtilecount; x++) { for (int y = 0; y < mytilecount; y++) { settile(0, x, y);.class files.dex file ded public void cleartiles() { for(int var1 = 0; var1 < mxtilecount; ++var1) { for(int var2 = 0; var2 < mytilecount; ++var2) { this.settile(0, var1, var2); Optimized.class files Soot New.class files

10 Studying Apps Decompiled top 1,100 free apps from Android market: over 21 million lines of source code We use static analysis to identify both dangerous behavior and vulnerabilities followed by inspection Must identify specific properties for analysis Note: Static analysis says what can happen not what does

11 Analysis Framework Using Fortify SCA custom rules let you focus on the what, not the how Control flow analysis: e.g., look at API options Data flow analysis: e.g., information leaks, injection attacks Structural analysis: grep on steroids Semantic analysis: look at possible variable values

12 Analysis Overview Analysis for Dangerous Behavior Misuse of Phone Identifiers Exposure of Physical Location Abuse of Telephony Services Eavesdropping on Video Eavesdropping on Audio Botnet Characteristics (Sockets) Havesting Installed Applications Data flow analysis Data flow analysis Semantic analysis Control flow analysis Structural analysis (+CG) Structural analysis Structural analysis Also studied inclusion of advertisement and analytics libraries and associated properties Analysis for Vulnerabilities Leaking Information to Logs Data flow analysis Leaking Information to IPC Control flow analysis Unprotected Broadcast Receivers Control flow analysis Intent Injection Vulnerabilities Control flow analysis Delegation Vulnerabilities Control flow analysis Null Checks on IPC Input Control flow analysis Password Management* Data flow analysis Cryptography Misuse* Structural analysis Injection Vulnerabilities* Data flow analysis * included with analysis framework Existing Java analysis rules aren t sufficient FSMs and other details in Tech Report: http://www.enck.org/pubs/nas-tr-0144-2011.pdf

13 Phone Identifiers We ve seen phone identifiers (Ph.#, IMEI, IMSI, etc) sent to network servers, but how are they used? Program analysis pin-pointed 33 apps leaking Phone IDs Finding 2 - device fingerprints Finding 3 - tracking actions Finding 4 - along with registration and login

14 Device Fingerprints (1) com.eoeandroid.ewallpapers.cartoon - SyncDeviceInfosService.getDevice_info() r1.append((new StringBuilder("device_id=")).append(tm.getDeviceId()).toString()).append((new StringBuilder ("&device_software_version=")).append(tm.getdevicesoftwareversion()).tostring()); r1.append((new StringBuilder("&build_board=")).append(Build.BOARD).toString()).append((new StringBuilder("&build_brand=")).append (Build.BRAND).toString()).append((new StringBuilder("&build_device=")).append(Build.DEVICE).toString()).append((new StringBuilder ("&build_display=")).append(build.display).tostring()).append((new StringBuilder("&build_fingerprint=")).append (Build.FINGERPRINT).toString()).append((new StringBuilder("&build_model=")).append(Build.MODEL).toString()).append((new StringBuilder ("&build_product=")).append(build.product).tostring()).append((new StringBuilder("&build_tags=")).append(Build.TAGS).toString()).append ((new StringBuilder("&build_time=")).append(Build.TIME).toString()).append((new StringBuilder("&build_user=")).append (Build.USER).toString()).append((new StringBuilder("&build_type=")).append(Build.TYPE).toString()).append((new StringBuilder ("&build_id=")).append(build.id).tostring()).append((new StringBuilder("&build_host=")).append(Build.HOST).toString()).append((new StringBuilder("&build_version_release=")).append(Build$VERSION.RELEASE).toString()).append((new StringBuilder ("&build_version_sdk_int=")).append(build$version.sdk).tostring()).append((new StringBuilder("&build_version_incremental=")).append(Build $VERSION.INCREMENTAL).toString()); r5 = mcontext.getapplicationcontext().getresources().getdisplaymetrics(); r1.append((new StringBuilder("&density=")).append(r5.density).toString()).append((new StringBuilder("&height_pixels=")).append (r5.heightpixels).tostring()).append((new StringBuilder("&scaled_density=")).append(r5.scaledDensity).toString()).append((new StringBuilder("&width_pixels=")).append(r5.widthPixels).toString()).append((new StringBuilder("&xdpi=")).append(r5.xdpi).toString ()).append((new StringBuilder("&ydpi=")).append(r5.ydpi).toString()); r1.append((new StringBuilder("&line1_number=")).append(tm.getLine1Number()).toString()).append((new StringBuilder ("&network_country_iso=")).append(tm.getnetworkcountryiso()).tostring()).append((new StringBuilder("&network_operator=")).append (tm.getnetworkoperator()).tostring()).append((new StringBuilder("&network_operator_name=")).append(tm.getNetworkOperatorName()).toString ()).append((new StringBuilder("&network_type=")).append(tm.getNetworkType()).toString()).append((new StringBuilder ("&phone_type=")).append(tm.getphonetype()).tostring()).append((new StringBuilder("&sim_country_iso=")).append(tm.getSimCountryIso ()).tostring()).append((new StringBuilder("&sim_operator=")).append(tm.getSimOperator()).toString()).append((new StringBuilder ("&sim_operator_name=")).append(tm.getsimoperatorname()).tostring()).append((new StringBuilder("&sim_serial_number=")).append (tm.getsimserialnumber()).tostring()).append((new StringBuilder("&sim_state=")).append(tm.getSimState()).toString()).append((new StringBuilder("&subscriber_id=")).append(tm.getSubscriberId()).toString()).append((new StringBuilder("&voice_mail_number=")).append (tm.getvoicemailnumber()).tostring()); i0 = mcontext.getresources().getconfiguration().mcc; i1 = mcontext.getresources().getconfiguration().mnc; r1.append((new StringBuilder("&imsi_mcc=")).append(i0).toString()).append((new StringBuilder("&imsi_mnc=")).append(i1).toString()); r254 = (ActivityManager) mcontext.getsystemservice("activity"); $r255 = new ActivityManager$MemoryInfo(); r254.getmemoryinfo($r255); r1.append((new StringBuilder("&total_mem=")).append($r255.availMem).toString());

15 Device Fingerprints (2) com.avantar.wny - com/avantar/wny/phonestats.java public String tourlformatedstring() { IMEI StringBuilder $r4; if (murlformatedparameters == null) { $r4 = new StringBuilder(); $r4.append((new StringBuilder("&uuid=")).append(URLEncoder.encode(mUuid)).toString()); $r4.append((new StringBuilder("&device=")).append(URLEncoder.encode(mModel)).toString()); $r4.append((new StringBuilder("&platform=")).append(URLEncoder.encode(mOSVersion)).toString()); $r4.append((new StringBuilder("&ver=")).append(mAppVersion).toString()); $r4.append((new StringBuilder("&app=")).append(this.getAppName()).toString()); $r4.append("&returnfmt=json"); murlformatedparameters = $r4.tostring(); return murlformatedparameters;

16 Tracking com.froogloid.kring.google.zxing.client.android - Activity_Router.java (Main Activity) public void oncreate(bundle r1) { http://kror.keyringapp.com/service.php... IMEI = ((TelephonyManager) this.getsystemservice("phone")).getdeviceid(); retailerlookupcmd = (new StringBuilder(String.valueOf(constants.server))).append ("identifier=").append(encodeurl.krencodeurl(imei)).append ("&command=retailerlookup&retailername=").tostring();... public void run() {... r24 = (TelephonyManager) r21.getsystemservice("phone"); url = (new StringBuilder(String.valueOf(url))).append ("&vid=60001001&pid=10010&cid=c1000&uid=").append(r24.getdeviceid()).append ("&gid=").append(qconfiguration.mgid).append("&msg=").append(qconfiguration.getinstance ().mpcstat.tomsgstring()).tostring();... com.qunar - net/networktask.java http://client.qunar.com:80/qsearch

17 Registration and Login com.statefarm.pocketagent - activity/loginactivity$1.java (Button callback) public void onclick(view r1) IMEI {... r7 = Host.getDeviceId(this$0.getApplicationContext()); LogInActivity.access$1(this$0).setUniqueDeviceID(r7); this$0.logintask = new LogInActivity$LoginTask(this$0, null); this$0.showprogressdialog(r2, 2131361798, this$0.logintask); r57 = this$0.logintask; r58 = new LoginTO[1]; r58[0] = LogInActivity.access$1(this$0); r57.execute(r58);... Is this necessarily bad?

18 Location Found 13 apps with geographic location data flows to the network Many were legitimate: weather, classifieds, points of interest, and social networking services Several instances sent to advertisers (same as TaintDroid). More on this shortly. Code recovery error in AdMob library.

19 Phone Misuse No evidence of abuse in our sample set Hard-coded numbers for SMS/voice (premium-rate) Background audio/video recording Socket API use (not HTTP wrappers) Harvesting list of installed applications

20 Ad/Analytics Libraries Number of libraries 51% of the apps included an ad or analytics library (many also included custom functionality) A few libraries were used most frequently Use of phone identifiers and location sometimes configurable by developer 1000 100 10 1 367 91 32 37 15 10 1 2 3 4 5 6 7 8 8 Number of apps 1 1 app has 8 libraries! Library Path # Apps Obtains com/admob/android/ads 320 L com/google/ads 206 - com/flurry/android 98 - com/qwapi/adclient/android 74 L, P, E com/google/android/apps/analytics 67 - com/adwhirl 60 L com/mobclix/android/sdk 58 L, E com/mellennialmedia/android 52 - com/zestadz/android 10 - com/admarvel/android/ads 8 - com/estsoft/adlocal 8 L com/adfonic/android 5 - com/vdroid/ads 5 L, E com/greystripe/android/sdk 4 E com/medialets 4 L com/wooboo/adlib_android 4 L, P, I com/adserver/adview 3 L com/tapjoy 3 - com/inmobi/androidsdk 2 E com/apegroup/ad 1 - com/casee/adsdk 1 S com/webtrents/mobile 1 L, E, S, I Total Unique Apps 561 L = Location; P = Ph#; E = IMEI; S = IMSI; I = ICC-ID

21 Probing for Permissions (1) com/webtrends/mobile/analytics/android/webtrendsandroidvaluefetcher.java public static String getdeviceid(object r0) { Context r4; String r7; r4 = (Context) r0; try { r7 = ((TelephonyManager) r4.getsystemservice("phone")).getdeviceid(); if (r7 == null) { Catches SecurityException r7 = ""; catch (Exception $r8) { WebtrendsDataCollector.getInstance().getLog().d("Exception fetching TelephonyManager.getDeviceId value. ", $r8); r7 = null; return r7;

22 Probing for Permissions (2) com/casee/adsdk/adfetcher.java public static String getdeviceid(context r0) { String r1; r1 = ""; label_19: { if (deviceid!= null) { if (r1.equals(deviceid) == false) { break label_19; Checks before accessing if (r0.checkcallingorselfpermission("android.permission.read_phone_state") == 0) { deviceid = ((TelephonyManager) r0.getsystemservice("phone")).getsubscriberid(); //end label_19:...

Developer Toolkits We found identically implemented dangerous functionality in the form of developer toolkits. Probing for permissions (e.g., Android API, catch SecurityException) Well-known brands sometimes commission developers that include dangerous functionality. USA Today and FOX News both developed by Mercury Intermedia (com/mercuryintermedia), which grabs IMEI on startup Systems and Internet Infrastructure Security Laboratory (SIIS) 23

24 Custom Exceptions v00032.com.wordplayer - CustomExceptionHandler.java void init() { URLConnection r3;... r3 = (new URL("http://www.word-player.com/HttpHandler/init.sample")).openConnection();... try { $r27 = this.mkstr(((telephonymanager) _context.getsystemservice("phone")).getline1number()); catch (Exception $r81) { break label_5; Phone Number!?...

25 Intent Vulnerabilities Similar analysis rules as independently identified by Chin et al. [Mobisys 2011] Leaking information to IPC - unprotected intent broadcasts are common, occasionally contain info Unprotected broadcast receivers - a few apps receive custom action strings w/out protection (lots of protected bcasts ) Intent injection attacks - 16 apps had potential vulnerabilities Delegating control - pending intents are tricky to analyze (notification, alarm, and widget APIs) --- no vulns found Null checks on IPC input - 3925 potential null dereferences in 591 apps (53%) --- most were in activity components

26 Study Limitations The sample set Code recovery failures Android IPC data flows Fortify SCA language Obfuscation

What this all means... Characterization of top 1,100 free apps (21+ MLOC) similar to smaller, vertical studies (e.g., TaintDroid). Development of rules to identify vulnerabilities 27 Findings (more in Tech Report) providing insight into application developer behavior Several APIs need more oversight Phone identifiers are used in many different ways and are frequently sent to network servers. Many developers not sensitive to Intent API dangers Ad/Analytic libs in 51% -- as many as 8 in one app 4th party code is becoming a problem Systems and Internet Infrastructure Security Laboratory (SIIS) 27

28 Future Directions This is all leading towards more automated certification for both {mal,grayware and vulnerabilities App markets need transparency Technical Hurdles Analysis framework Code recovery Deployment limitations

NC State -- Department of Computer Science 29 Thank You! William Enck Assistant Professor Department of Computer Science North Carolina State University Web: http://www.enck.org Email: enck@cs.ncsu.edu