Android安全机制探讨

与Android市场繁荣同时存在的,是Android的安全问题。各种隐私泄露,信息丢失,恶意扣费,系统入侵屡见不鲜。

今天我们不聊代码,聊聊我们的安卓本身。

近几年,Android操作系统的发展极其迅猛,基于Android终端市场占有率和出货量节节攀升。随着互联网时代的到来,Android已经融入了我们的生活。与Android市场繁荣的同时存在的,是Android的安全问题日益突出,各种隐私泄露,信息丢失,恶意扣费,系统入侵屡见不鲜。针对Android安全的研究十分紧迫和必要。

 

 

Android的安全范畴主要包括硬件、通信、软件、信息四大方面。本文将在Android框架的基础之上,重点对软件进行探讨。

 

先看看Andrid的框架,如图:

这是一个经典的Android框架图,很多人都见过,我先简要的概括一下这些信息,Android采用分层的系统架构,由下往上分别是linux内核层、硬件抽象层、系统运行时库层、应用程序框架层和应用程序层。

Android以Linux操作系统内核为基础,实现硬件设备驱动、进程和内存管理、网络协议栈、电源管理等核心系统功能。除此以外,Android还增加了一些面向移动设备的特有功能,如低内存管理LMK(Low Memory Killer)、匿名共享内存(Ashmem: Anonymous Shared Memory),以及进程间通信Binder机制。这些功能的增强进一步提升了Android在内存管理、进程间通信等方面的安全性。

Android之前的版本并不存在硬件抽象层。鉴于硬件厂商并不希望公开其设备驱动的源代码,Google对此将Linux内核驱动程序进行封装,屏蔽掉底层的实现细节,向上提供统一的接口,这就是硬件抽象层。

接下来进入今天的主题。

首先说说应用层安全问题:

1.代码安全

a、Java不同于C/C++,java是解释性语言,存在代码被反编译的隐患;

b、默认混淆器为proguard,最新版本为4.7; proguard还可用来压缩、优化java字节码,删除无用的类、字段、方法、属性、注释等。

c、配置方法为在Android.mk中设置:LOCAL_PROGUARD_FLAG_FILES := proguard.flags

d: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 {
  *;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

2、接入权限

a、权限主要用来对应用的操作增加限制,防止恶意应用进行非法操作给用户造成敏感数据泄漏和设备被非法控制,防止恶意收费等;

b、Android的接入权限

(1)Normal权限 
(2)Dangerous权限 
(3)signatureOrSystem权限 
(4)Signature权限

c、框架层权限定义位置 
(1)frameworks/base/core/res/ AndroidManifest.xml

d、权限可用于整个应用、Activity、Service等。

3、创建接入权限和权限组

<permission android:name=“android.permission.GET_ACCOUNTS”    
android:permissionGroup=“android.permission-group.ACCOUNTS”
android:protectionLevel="normal“
android:description=“@string/permdesc_getAccounts”
android:label="@string/permlab_getAccounts" />

<permission-group 
android:name=“android.permission-group.STORAGE”
android:label="@string/permgrouplab_storage“
android:description="@string/permgroupdesc_storage" />

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

4、应用权限的设置

a、共享用户ID即共用一个进程 
(1)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.system”、“com.android.uid.test”、“android.uid.calendar”、“android.media”、“com.android.framework.externalsharedpermstestapp”、“android.uid.shared”、“android.uid.phone”等。常用的包括“android.uid.system”、“android.media”、“android.uid.shared”等。

b、设置应用权限

<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

5、权限验证

a、Android提供了多个方法可用于验证调用方是否具有相应的权限。

b、如果调用方拥有相应的权限,则权限验证的返回值为PackageManager. PERMISSION_GRANTED否则返回PackageManager.PERMISSION_DENIED。

c、示例

private int enforceAccessPermission() {
int ret = 
mContext.checkCallingOrSelfPermission("android.permission.BIND_WALLPAPER ");
return ret;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

聊完了应用层的内容,再看看应用框架层的内容。

1、数字证书

a、Android的数字证书是免费的,分调试模式和发布模式两种;

b、通过命令行和Eclipse可以生成发布模式的数字证书;在命令行方式下利用Keytool来生成数字证书,并利用Jarsigner来为APK进行数字签名;使用ADT Export Wizard进行签名;

c、只有同一包名且采用同一数字证书的应用才被认为是同一个应用;

d、数字证书的最大用途是应用升级和设置应用间通信的权限;

2、Keytool生成数字证书

keytool -genkey -v -keystore android.keystore -alias miaozl-keyalg RSA -validity 20000
  • 1
  • 2
  • 1
  • 2

a、“keystore android.keystore”表示生成的证书为“android.keystore”,可以加上路径(默认在用户主目录下);“alias miaozl”表示证书的别名是“miaozl”;“keyalg RSA”表示采用的RSA算法;“validity 20000”表示证书的有效期是20000天。另外通过keypass可以设置数字证书私钥的密码,通过keysize可以设置算法的位长,默认为1024比特,推荐2048比特及更长,通过storepass可以设置证书的密码。

3、Jarsigner进行数字签名

jarsigner -verbose -keystore android.keystore demo.apk  
  • 1
  • 1

接下来jarsigner会提示输入密钥库的口令和证书别名的口令,全部输入后,即可完成签名

4、查看数字证书签名

#jarsigner -verify -verbose -certs demo.apk
  • 1
  • 2
  • 1
  • 2

再看看网络安全问题:

1、加密算法(敏感数据)

a、DES(对称)、3DES(对称)、RSA(非对称)、MD5、RC2/RC4(对称)、IDEA、AES、BLOWFISH等

2、Web服务(HTTP层)

a、三种手段WS-Security、SSL、数字签名。目前ksoap不支持WS-Security

3、TCP层

a、SSL、TSL

4、数据链路层

a、WAPI

然后及时数据库的安全问题:

1、Android采用的SQLite目前采用明文存储数据;安全涉及加密、读写、搜索等。

2.加密方法

a、加密算法(实现方法参考网上) 
b、权限设置

3、权限设置

android:permission
android:readPermission
android:writePermission
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

4、读写权限示例

<provider
android:name=".provider.AttachmentProvider"          android:authorities="com.android.email.attachmentprovider"
android:multiprocess="true"
android:grantUriPermissions="true“  
android:readPermission="com.android.email.permission.READ_ATTACHMENT"/>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

5、数据库安全–搜索

<provider 
android:name="SuggestionsProvider"
android:readPermission="android.permission.READ_SMS"    android:authorities="com.android.mms.SuggestionsProvider" > 

<path-permission
android:pathPrefix="/search_suggest_query"
android:readPermission="android.permission.GLOBAL_SEARCH" />

<path-permission
android:pathPrefix="/search_suggest_shortcut"
android:readPermission="android.permission.GLOBAL_SEARCH" />
</provider>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

再看看我们的虚拟机:

1、通常情况下,每个应用均拥有一个虚拟机。

2、通常情况下,应用间无法相互访问私有数据。

3、访问数据的方法为: 
a、文件方式 
b、数据库权限开放 
c、配置文件开放 
d、Intent通信

还有最后一个内容:

文件访问控制

1、Android在权限管理上应用了Linux的ACL(Access Control List)权限机制,而非早期Unix采用的UGO权限机制。

2、分区层面 
a、在系统运行时,最外层安全保护是由Linux系统提供的,其中system.img所在的分区是只读的,不允许用户写入,而data.img所在的分区是可读写的,用于存放用户数据。 
分区的用户权限在init.rc中定义。

3、单独文件 
a、单独文件访问权限控制分群组、用户、权限。 
b、权限分可读、可写、可执行。 
c、命令:chown\chgrp\chmod。

以上就是文章的全部内容,这是从大范围的角度来看,在以后的文章中,我会通过代码来具体呈现。谢谢大家的阅读。

 

原文链接:http://blog.csdn.net/qq_25193681/article/details/52160308

最新文章
1客户案例研究:专家安全扫描,守护金融银行小程序安全和私密性 WeTest私有化部署的定制扫描平台让金融银行客户能无成本接入扫描系统并迅速上手使用。客户能方便快捷地根据定制手册进行自助扫描,根据生成的扫描报告,详细洞察漏洞,快速识别并准确定位问题根源。
2客户案例研究:专家渗透测试,洞察电子商务小程序重大交易漏洞 通过WeTest渗透测试服务,某知名零售公司旗下的在线购物类小程序中发现了8处安全风险,我们的安全专家为客户提供了详细的漏洞报告,提供了较为清晰完整的安全加固方案。在回归测试中,中危以上风险均被解决。
3自查小程序4大安全隐患!文末免费赠送小程序安全扫描专业版! 腾讯WeTest现面向小程序开发者开放免费申请使用小程序安全扫描专业版,助您提前发现全面的安全漏洞。扫描文中问卷二维码或点击问卷链接,即可报名参与免费领取活动。
4浅谈渗透测试服务在泛互行业带来的价值 在泛互联网行业中,渗透测试服务对于保障企业的网络安全至关重要。
5云手机卡顿/无特定设备/商店登录受限怎么办?WeTest专有云帮您解决! 公有云满足了大量小微企业、个人的测试需求;随着客户深入使用,也遇到了一系列新问题。本篇将对几个常见问题予以解答
购买
客服
反馈