Android安全机制探讨

来源:互联网 发布:新概念英语软件 编辑:程序博客网 时间:2024/05/22 14:39

Android安全机制探讨

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

近几年,Android操作系统的发展极其迅猛,基于Android终端市场占有率和出货量节节攀升。随着互联网时代的到来,Andr oid已经融入了我们的生活。与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 {  *;}

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" />

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" />

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、数字证书
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

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  

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

jarsigner -verify -verbose -certs demo.apk

再看看网络安全问题:
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:permissionandroid:readPermissionandroid:writePermission

4、读写权限示例

<providerandroid:name=".provider.AttachmentProvider"          android:authorities="com.android.email.attachmentprovider"android:multiprocess="true"android:grantUriPermissions="true“  android:readPermission="com.android.email.permission.READ_ATTACHMENT"/>

5、数据库安全–搜索

<provider android:name="SuggestionsProvider"android:readPermission="android.permission.READ_SMS"    android:authorities="com.android.mms.SuggestionsProvider" > <path-permissionandroid:pathPrefix="/search_suggest_query"android:readPermission="android.permission.GLOBAL_SEARCH" /><path-permissionandroid:pathPrefix="/search_suggest_shortcut"android:readPermission="android.permission.GLOBAL_SEARCH" /></provider>

再看看我们的虚拟机:
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。
以上就是文章的全部内容,这是从大范围的角度来看,在以后的文章中,我会通过代码来具体呈现。谢谢大家的阅读。

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 被上司强行换了一个岗位该怎么办 上司要调整我岗位我该怎么办 我被别人打伤了警察不管怎么办 郑州共享汽车小黄车路上坏了怎么办 爱跟别人聊朋友的事怎么办 任职履历上学历写错了怎么办 六个月的宝宝老长婴儿湿疹怎么办 入伍前驾照没考完退伍后过期怎么办 在电脑上玩英雄联盟没有声音怎么办 梦幻西游新区抢不到副本积分怎么办 倒车时遇上机动车碰瓷的怎么办 电瓶车相撞对方全责但不赔偿怎么办 轻微刮蹭逃逸对方想多要钱怎么办 正常开车撞伤了闯红灯的人怎么办 发现小事故要保持现场堵车怎么办 私处刮毛外面皮肤不小心弄伤怎么办 老婆骂孩子不准老公带饿小孩怎么办 结婚3年妻子不让丈夫碰怎么办 老婆出轨现在没证据他要离婚怎么办 结婚后老婆不让碰分房睡离婚怎么办 电动车调速把手变速挡坏了怎么办 路边车辆贴条了超过15天了怎么办 违停交警拍照了没贴条 照片怎么办 支付宝违章缴费罚单输错了怎么办 交警查酒驾跑了把警车撞了怎么办 禁止进入待行区的时候进入了怎么办 今天开车把72岁老太婆撞了怎么办 在这种路口遇到行人突然横穿怎么办 在左拐车道却直行了怎么办 路边简易房让拆除不想拆怎么办 英国护照的名和姓印颠倒了怎么办 加热圈功率小加不到设定温度怎么办 本田飞度05年车尾气不好怎么办 文件在lr中打开后找不到了怎么办 手机安装软件成功屏幕上没有怎么办 脸过敏发红痒怎么办用什么药膏 脸上又红又肿又痒怎么办 宝宝把皮革咬烂吃掉了怎么办 自动档皮革挡把防尘套烂了怎么办 pu包用酒精擦坏了怎么办 白色的面料被84弄黄了怎么办