顺德职业技术学院 龙子学 钟军强
目前Android平台并没有严格的应用权限审核机制,仅仅将应用的权限请求在安装时展示给用户,这样的模式会导致恶意软件的植入留下了隐患;另一方面在Android平台的访问控制是静态的,无法根据控制策略库的动态定制,而且Android平台上所有软件都是平级执行,这造成了一般的安全软件只能通过应用基本信息与库的比对来判定其危害程度;Android系统不提供软件行为监控的接口,这也阻碍了以行为检测为基础的杀毒软件无法移植。
针对上述问题,本文以Android系统为平台,在Android的操作系统开发中如何制定和实施数据库防御策略。
Android是基于linux内核,所以android核心部分是c语言编写的。但是android提供的sdk是基于java语言的,也就是说大部分用户所使用的应用程序是用java编写的。java是解释性语言,存在代码被反编译的隐患;建议用混淆器为proguard,proguard还可用来压缩、优化java字节码,删除无用的类、字段、方法、属性、注释等。
配置方法:
在Android.mk中设置LOCAL_PROGUARD_FLAG_FILES:=proguard.flags
packages/apps/Launcher2/proguard.flags的特定方法:
-keep class com.android.launcher2.Launcher{
public void previousScreen(android.view.View);
public void nextScreen(android.view.View);
public void launchHotSeat(android.view.View);}
-keep class com.android.launcher2.AllApps3D$Defines{
*;}
-keep class com.android.launcher2.ClippedImageView{
*;}
权限主要用来对应用的操作增加限制,防止恶意应用进行非法操作给用户造成敏感数据泄漏和设备被非法控制,防止恶意收费等;所以在Android的Normal、Dangerous、signatureOrSystem、Signature接入权限,它框架层权限定义位置是:frameworks/base/core/res/AndroidManifest.xml权限可用于整个应用、Activity、Service等。
android:permissionGroup=“android.permission-group.ACCOUNTS” android:protectionLevel="normal“ android:description=“@string/permdesc_getAccounts” android:label="@string/permlab_getAccounts"/> android:label="@string/permgrouplab_storage“ android:description="@string/permgroupdesc_storage"/> 因共享用户ID即共用一个进程Android源代码树携带的系统证书包括“media”、“platform”、“shared”、“testkey”等,其中“media”证书用于多媒体、下载场景中;“platform”证书用于系统场景中;“shared”证书用于启动器、电话簿场景中;“testkey”证书用于开发场景中,这些证书位于build/target/product/security目录下; 目前支持的“sharedUserId”属性包括“com.android.cts.shareduid”、“com.android.cts.process.uidpid_test”、“android.uid.phone”等。常用的包括“android.uid.system”、“android.media”、“android.uid.shared”等。 设置应用权限: Android提供了多个方法可用于验证调用方是否具有相应的权限。如果调用方拥有相应的权限,则权限验证的返回值为PackageManager.PERMISSION_GRANTED否则返回PackageManager.PERMISSION_DENIED,如下示例: private int enforceAccessPermission(){ int ret= mContext.checkCallingOrSelfPermissio n("android.permission.BIND_WALLPAPER"); return ret;} Android的数字证书分调试模式和发布模式两种,通过命令行和Eclipse可以生成发布模式的数字证书,在命令行方式下利用Keytool来生成数字证书,并利用Jarsigner来为APK进行数字签名,使用ADT Export Wizard进行签名,只有同一包名且采用同一数字证书的应用才被认为是同一个应用,数字证书的确保系统用升级和设置应用间通信的权限的安全。 keytool-genkey-v -keystore android.keystore-alias miaozl-keyalg RSA-validity 20000“keystore android.keystore”表示生成的证书为“android.keystore”,可以加上路径(默认在用户主目录下);“alias miaozl”表示证书的别名是“miaozl”;“keyalg RSA”表示采用的RSA算法;“validity 20000”表示证书的有效期是20000天。另外通过keypass可以设置数字证书私钥的密码,通过keysize可以设置算法的位长,默认为1024比特,推荐2048比特及更长,通过storepass可以设置证书的密码。 jarsigner-verbose-keystore android.keystore demo.apk接下来jarsigner会提示输入密钥库的口令和证书别名的口令,全部输入后,即可完成签名。 Android加密算法有DES(对称)、3DES(对称)、RSA(非对称)、MD5、RC2/RC4(对称)、IDEA、AES、BLOWFISH等,而Web服务(HTTP层),三种手段WS-Security、SSL、数字签名。 Android采用的SQLite目前采用明文存储数据;安全涉及加密、读写、搜索等。 读写权限示例: android:name=".provider.AttachmentPr ovider"android:authorities="com.android.email.attachmentprovider" android:multiprocess="true" android:grantUriPermissions="true“ android:readPermission="com.android.email.permission.READ_ATTACHMENT"/> 数据库安全--搜索例: android:readPermission="android.permission.READ_SMS" android:authorities="com.android.mms.SuggestionsProvider"> android:pathPrefix="/search_suggest_query" android:readPermission="android.permission.GLOBAL_SEARCH"> android:pathPrefix="/search_suggest_shortcut"android:readPermission="android.permission.GLOBAL_SEARCH"/> Android在权限管理上应用了Linux的ACL(Access Control List)权限机制,而非早期Unix采用的UGO权限机制。 在系统运行时,最外层安全保护是由Linux系统提供的,其中system.img所在的分区是只读的,不允许用户写入,而data.img所在的分区是可读写的,用于存放用户数据。 分区的用户权限在init.rc中定义。 单独文件访问权限控制分群组、用户、权限,权限分可读、可写、可执行,命令:chownchgrpchmod。 随着智能手机的超速发展,Android智能手机操作系统越来越被人们所关注及使用,数据安全性已经成为使用者的关心问题,本文通过对Android系统的各种安全机制进行了阐述,并针对不同的安全机制提供其解决方案,希望能为开发者提高Android系统安全性提供一点帮助。 [1]陈益强.简析Android系统的安全性能[A].信息系统工程,2011(9). [2]雷灵光.Android系统代码签名验证机制的实现及安全性分析[A].信息网络安全,2012(8). [3]符易阳,周丹平.Android安全机制分析[J].信息网络安全,2011(9).2.应用权限的设置
3.权限验证
三、数字证书实现
1.Keytool生成数字证书
2.实现Jarsigner进行数字签名
四、网络及数据安全
1.网络数据加密算法
2.数据安全
五、文件访问控制
1.分区层面
2.单独文件
六、结语