移动应用的安全性与防范机制•Android安全模型•应用组件安全•防敏感数据泄漏•防逆向破解•Android安全开发规范•Linux内核提供基于用户的权限模型,进程隔离,安全的IPC•userId,应用运行时拥有自己的虚拟机,文件,数据库等资源•特性功能文件系统加密,手机设备访问的密码保护,安全的内存管理(ASLR,基于硬件的堆、栈代码执行阻断)系统层安全模型系统层安全模型应用层安全模型•开发定义,用户授权AndroidManifest.xml应用也可以对自己的开放组件进行访问权限控制•数字签名可以是自签名证书,并不⼀一定需要CA程序升级访问权限控制(signature或signatureOrSystem)模块化设计和开发(允许相同数字签名的程序运行在同⼀一个进程中)•Android安全模型•应用组件安全•防敏感数据泄漏•防逆向破解•Android安全开发规范•Activity,BroadcastReceiver,Service,ContentProvider•Inter-ComponentCommunication(ICC)•Intent显式intent,隐式intent•公共组件应用组件安全ICC安全风险发送隐式intent的风险•Broadcast窃听恶意应用系统支付宝淘宝广播广播窃听ICC安全风险发送隐式intent的风险•Broadcast截获恶意应用支付宝淘宝AppOrderbroadcast被截获ICC安全风险Activity劫持恶意应用支付宝淘宝恶意应用支付宝淘宝ICC安全风险Service劫持•无界面,更隐蔽ICC安全风险特殊intent的使用风险•Pendingintent•FLAG_GRANT_READ_URI_PERMISSIONFLAG_GRANT_WRITE_URI_PERMISSION接收intent的风险恶意广播注入支付宝恶意应用恶意intent接收intent的风险恶意启动Activity•风险破坏数据存储,造成数据泄露•身份校验•权限控制signature,signatureOrSystem接收intent的风险恶意启动Service•身份校验•权限控制ICC基本规范•显式intent,不携带敏感数据密码,token,卡号•避免导出组件•指定所需权限,对接收到的intent做合法性检查•Broadcast发送者,指定接受者权限.接受者,定义发送者权限.避免stickybroadcast.•Contentprovider指定read权限manifest•Android安全模型•应用组件安全•防敏感数据泄漏•防逆向破解•Android安全开发规范•文件创建模式MODE_PRIVATE,MODE_WORLD_READABLE,MODE_WORLD_WRITEABLEgetSharedPreferences,openFileOutput,openOrCreateDatabase•强加密存储,存储hash值密钥不能同时存储在移动设备中数据的本地存储文件访问控制数据的本地存储防SQL注入“SELECT*FROMtable_nameWHEREid=‘“+userId+“‘”数据的本地存储防SQL注入“SELECT*FROMtable_nameWHEREid=‘“++“‘”1’orid’数据的本地存储防SQL注入•参数化查询CursorrawQuery(Stringsql,String[]selectionArgs);Cursorquery(Stringtable,String[]columns,Stringselection,String[]selectionArgs,StringgroupBy,Stringhaving,StringorderBy);•对输入进行类型和格式检查网络传输•https•重要数据,业务层数据加密和签名•日志输出•数据输入、展示•Android安全模型•应用组件安全•防敏感数据泄漏•防逆向破解•Android安全开发规范•暴露关键代码,业务逻辑•注入恶意代码后重新编译,打包,签名Apk逆向破解风险Apk逆向破解过程应用编译过程AndroidprojectCompilationandpackaging.dexfilesresources.arscuncompiledresourcesAndroidManifest.xmlAndroidPackage(.apk)signingDeviceoremulatorApk逆向破解过程Apk反编译过程.apk安装包unzip或winrardex2jar.jarAXMLPrinter2.jar原AndroidManifest.xmlclasses_dex2jar.jarJD-GUI反编译的.java源文件证书,资源文件等classes.dex二进制的AndroidManifest.xml•Proguard•关键业务逻辑代码c+jni对so文件加壳UPXso对调用它的应用进行签名校验代码混淆保护•Android安全模型•应用组件安全•防敏感数据泄漏•防逆向破解•Android安全开发规范•默认私有(除对外公开的Activities)android:exported=”false”•公开的Activities必须声明权限标签permissionandroid:name=权限名android:description=详细描述android:label=简介android:protectionLevel=signature/android:permission=权限名android:protectionLevel=”dangerous”Activity/ServiceBroadcast•关键的广播信息只能由公司私钥签名的应用接收•公开的广播信息的接收必须声明接收权限voidsendBroadcast(Intentintent,StringreceiverPermission);可公开给第三方应用程序访问,可声明为dangerous,只允许自己公司的应用程序访问指定signature.ContentProvider•Providerandroid:grantUriPermission=”false”android:readPermission=”权限名”android:writePermission=”权限名”•子Urigrant-uri-permissionandroid:path=”string”android:pathPrefix=”string”android:pathPattern=”string”关键控件•TaphijackingvoidsetFilterTouchesWhenObscured(booleanenabled);android:filterTouchesWhenObscured=”false”