Android安全机制
Android权限管理之Permission权限机制及使用详解

Android权限管理之Permission权限机制及使⽤详解前⾔:最近突然喜欢上⼀句诗:“宠辱不惊,看庭前花开花落;去留⽆意,望天空云卷云舒。
” 哈哈~,这个和今天的主题⽆关,最近只要不学习总觉得⽣活中少了点什么,所以想着围绕着最近⾯试过程中讨论⽐较多的⼀个知识点Android 6.0 权限适配问题来进⾏学习,不过我不想直接进⼊这个主题,所以选择先去了解⼀下Android的Permission权限机制及使⽤Android权限机制:权限是⼀种安全机制。
Android权限主要⽤于限制应⽤程序内部某些具有限制性特性的功能使⽤以及应⽤程序之间的组件访问。
Android权限列表:访问登记属性android.permission.ACCESS_CHECKIN_PROPERTIES ,读取或写⼊登记check-in数据库属性表的权限获取错略位置android.permission.ACCESS_COARSE_LOCATION,通过WiFi或移动基站的⽅式获取⽤户错略的经纬度信息,定位精度⼤概误差在30~1500⽶获取精确位置android.permission.ACCESS_FINE_LOCATION,通过GPS芯⽚接收卫星的定位信息,定位精度达10⽶以内访问定位额外命令android.permission.ACCESS_LOCATION_EXTRA_COMMANDS,允许程序访问额外的定位提供者指令获取模拟定位信息android.permission.ACCESS_MOCK_LOCATION,获取模拟定位信息,⼀般⽤于帮助开发者调试应⽤获取⽹络状态android.permission.ACCESS_NETWORK_STATE,获取⽹络信息状态,如当前的⽹络连接是否有效访问Surface Flinger android.permission.ACCESS_SURFACE_FLINGER,Android平台上底层的图形显⽰⽀持,⼀般⽤于游戏或照相机预览界⾯和底层模式的屏幕截图获取WiFi状态android.permission.ACCESS_WIFI_STATE,获取当前WiFi接⼊的状态以及WLAN热点的信息账户管理android.permission.ACCOUNT_MANAGER,获取账户验证信息,主要为GMail账户信息,只有系统级进程才能访问的权限验证账户android.permission.AUTHENTICATE_ACCOUNTS,允许⼀个程序通过账户验证⽅式访问账户管理ACCOUNT_MANAGER相关信息电量统计android.permission.BATTERY_STATS,获取电池电量统计信息绑定⼩插件android.permission.BIND_APPWIDGET,允许⼀个程序告诉appWidget服务需要访问⼩插件的数据库,只有⾮常少的应⽤才⽤到此权限绑定设备管理android.permission.BIND_DEVICE_ADMIN,请求系统管理员接收者receiver,只有系统才能使⽤绑定输⼊法android.permission.BIND_INPUT_METHOD ,请求InputMethodService服务,只有系统才能使⽤绑定RemoteView android.permission.BIND_REMOTEVIEWS,必须通过RemoteViewsService服务来请求,只有系统才能⽤绑定壁纸android.permission.BIND_WALLPAPER,必须通过WallpaperService服务来请求,只有系统才能⽤使⽤蓝⽛android.permission.BLUETOOTH,允许程序连接配对过的蓝⽛设备蓝⽛管理android.permission.BLUETOOTH_ADMIN,允许程序进⾏发现和配对新的蓝⽛设备变成砖头android.permission.BRICK,能够禁⽤⼿机,⾮常危险,顾名思义就是让⼿机变成砖头应⽤删除时⼴播android.permission.BROADCAST_PACKAGE_REMOVED,当⼀个应⽤在删除时触发⼀个⼴播收到短信时⼴播android.permission.BROADCAST_SMS,当收到短信时触发⼀个⼴播连续⼴播android.permission.BROADCAST_STICKY,允许⼀个程序收到⼴播后快速收到下⼀个⼴播WAP PUSH⼴播android.permission.BROADCAST_WAP_PUSH,WAP PUSH服务收到后触发⼀个⼴播拨打电话android.permission.CALL_PHONE,允许程序从⾮系统拨号器⾥输⼊电话号码通话权限android.permission.CALL_PRIVILEGED,允许程序拨打电话,替换系统的拨号器界⾯拍照权限android.permission.CAMERA,允许访问摄像头进⾏拍照改变组件状态android.permission.CHANGE_COMPONENT_ENABLED_STATE,改变组件是否启⽤状态改变配置android.permission.CHANGE_CONFIGURATION,允许当前应⽤改变配置,如定位改变⽹络状态android.permission.CHANGE_NETWORK_STATE,改变⽹络状态如是否能联⽹android.permission.CHANGE_WIFI_MULTICAST_STATE,改变WiFi多播状态改变WiFi多播状态改变WiFi状态android.permission.CHANGE_WIFI_STATE,改变WiFi状态清除应⽤缓存android.permission.CLEAR_APP_CACHE,清除应⽤缓存清除⽤户数据android.permission.CLEAR_APP_USER_DATA,清除应⽤的⽤户数据底层访问权限android.permission.CWJ_GROUP,允许CWJ账户组访问底层信息android.permission.CELL_PHONE_MASTER_EX,⼿机优化⼤师扩展权限⼿机优化⼤师扩展权限控制定位更新android.permission.CONTROL_LOCATION_UPDATES,允许获得移动⽹络定位信息改变删除缓存⽂件android.permission.DELETE_CACHE_FILES,允许应⽤删除缓存⽂件删除应⽤android.permission.DELETE_PACKAGES,允许程序删除应⽤电源管理android.permission.DEVICE_POWER,允许访问底层电源管理应⽤诊断android.permission.DIAGNOSTIC,允许程序到RW到诊断资源禁⽤键盘锁android.permission.DISABLE_KEYGUARD,允许程序禁⽤键盘锁转存系统信息android.permission.DUMP,允许程序获取系统dump信息从系统服务状态栏控制android.permission.EXPAND_STATUS_BAR,允许程序扩展或收缩状态栏⼯⼚测试模式android.permission.FACTORY_TEST,允许程序运⾏⼯⼚测试模式使⽤闪光灯android.permission.FLASHLIGHT,允许访问闪光灯强制后退android.permission.FORCE_BACK,允许程序强制使⽤back后退按键,⽆论Activity是否在顶层android.permission.GET_ACCOUNTS,访问GMail账户列表访问账户Gmail列表获取应⽤⼤⼩android.permission.GET_PACKAGE_SIZE,获取应⽤的⽂件⼤⼩获取任务信息android.permission.GET_TASKS,允许程序获取当前或最近运⾏的应⽤允许全局搜索android.permission.GLOBAL_SEARCH,允许程序使⽤全局搜索功能硬件测试android.permission.HARDWARE_TEST,访问硬件辅助设备,⽤于硬件测试注射事件android.permission.INJECT_EVENTS,允许访问本程序的底层事件,获取按键、轨迹球的事件流安装定位提供android.permission.INSTALL_LOCATION_PROVIDER,安装定位提供安装应⽤程序android.permission.INSTALL_PACKAGES,允许程序安装应⽤内部系统窗⼝android.permission.INTERNAL_SYSTEM_WINDOW,允许程序打开内部窗⼝,不对第三⽅应⽤程序开放此权限访问⽹络android.permission.INTERNET,访问⽹络连接,可能产⽣GPRS流量结束后台进程android.permission.KILL_BACKGROUND_PROCESSES,允许程序调⽤killBackgroundProcesses(String).⽅法结束后台进程管理账户android.permission.MANAGE_ACCOUNTS,允许程序管理AccountManager中的账户列表管理程序引⽤android.permission.MANAGE_APP_TOKENS,管理创建、摧毁、Z轴顺序,仅⽤于系统⾼级权限android.permission.MTWEAK_USER,允许mTweak⽤户访问⾼级系统权限社区权限android.permission.MTWEAK_FORUM,允许使⽤mTweak社区权限软格式化android.permission.MASTER_CLEAR,允许程序执⾏软格式化,删除系统配置信息修改声⾳设置android.permission.MODIFY_AUDIO_SETTINGS,修改声⾳设置信息修改电话状态android.permission.MODIFY_PHONE_STATE,修改电话状态,如飞⾏模式,但不包含替换系统拨号器界⾯格式化⽂件系统android.permission.MOUNT_FORMAT_FILESYSTEMS,格式化可移动⽂件系统,⽐如格式化清空SD卡挂载⽂件系统android.permission.MOUNT_UNMOUNT_FILESYSTEMS,挂载、反挂载外部⽂件系统允许NFC通讯android.permission.NFC,允许程序执⾏NFC近距离通讯操作,⽤于移动⽀持永久Activity android.permission.PERSISTENT_ACTIVITY,创建⼀个永久的Activity,该功能标记为将来将被移除处理拨出电话android.permission.PROCESS_OUTGOING_CALLS,允许程序监视,修改或放弃播出电话读取⽇程提醒android.permission.READ_CALENDAR,允许程序读取⽤户的⽇程信息读取联系⼈android.permission.READ_CONTACTS,允许应⽤访问联系⼈通讯录信息屏幕截图android.permission.READ_FRAME_BUFFER,读取帧缓存⽤于屏幕截图com.android.browser.permission.READ_HISTORY_BOOKMARKS,读取浏览器收藏夹和历史记录读取收藏夹和历史记录读取输⼊状态android.permission.READ_INPUT_STATE,读取当前键的输⼊状态,仅⽤于系统读取系统⽇志android.permission.READ_LOGS,读取系统底层⽇志读取电话状态android.permission.READ_PHONE_STATE,访问电话状态读取短信内容android.permission.READ_SMS,读取短信内容读取同步设置android.permission.READ_SYNC_SETTINGS,读取同步设置,读取Google在线同步设置读取同步状态android.permission.READ_SYNC_STATS,读取同步状态,获得Google在线同步状态重启设备android.permission.REBOOT,允许程序重新启动设备开机⾃动允许android.permission.RECEIVE_BOOT_COMPLETED,允许程序开机⾃动运⾏接收彩信android.permission.RECEIVE_MMS,接收彩信接收短信android.permission.RECEIVE_SMS,接收短信接收Wap Push android.permission.RECEIVE_WAP_PUSH,接收WAP PUSH信息录⾳android.permission.RECORD_AUDIO,录制声⾳通过⼿机或⽿机的麦克排序系统任务android.permission.REORDER_TASKS,重新排序系统Z轴运⾏中的任务结束系统任务android.permission.RESTART_PACKAGES,结束任务通过restartPackage(String)⽅法,该⽅式将在外来放弃发送短信android.permission.SEND_SMS,发送短信android.permission.SET_ACTIVITY_WATCHER,设置Activity观察器⼀般⽤于monkey测试设置Activity观察其设置闹铃提醒com.android.alarm.permission.SET_ALARM,设置闹铃提醒设置总是退出android.permission.SET_ALWAYS_FINISH,设置程序在后台是否总是退出设置动画缩放android.permission.SET_ANIMATION_SCALE,设置全局动画缩放设置调试程序android.permission.SET_DEBUG_APP,设置调试程序,⼀般⽤于开发设置屏幕⽅向android.permission.SET_ORIENTATION,设置屏幕⽅向为横屏或标准⽅式显⽰,不⽤于普通应⽤设置应⽤参数android.permission.SET_PREFERRED_APPLICATIONS,设置应⽤的参数,已不再⼯作具体查看addPackageToPreferred(String) 介绍设置进程限制android.permission.SET_PROCESS_LIMIT,允许程序设置最⼤的进程数量的限制设置系统时间android.permission.SET_TIME,设置系统时间设置系统时区android.permission.SET_TIME_ZONE,设置系统时区设置桌⾯壁纸android.permission.SET_WALLPAPER,设置桌⾯壁纸设置壁纸建议android.permission.SET_WALLPAPER_HINTS,设置壁纸建议发送永久进程信号android.permission.SIGNAL_PERSISTENT_PROCESSES,发送⼀个永久的进程信号状态栏控制android.permission.STATUS_BAR,允许程序打开、关闭、禁⽤状态栏访问订阅内容android.permission.SUBSCRIBED_FEEDS_READ,访问订阅信息的数据库写⼊订阅内容android.permission.SUBSCRIBED_FEEDS_WRITE,写⼊或修改订阅内容的数据库显⽰系统窗⼝android.permission.SYSTEM_ALERT_WINDOW,显⽰系统窗⼝更新设备状态android.permission.UPDATE_DEVICE_STATS,更新设备状态使⽤证书E_CREDENTIALS,允许程序请求验证从AccountManager使⽤SIP视频E_SIP,允许程序使⽤SIP视频服务使⽤振动android.permission.VIBRATE,允许振动唤醒锁定android.permission.WAKE_LOCK,允许程序在⼿机屏幕关闭后后台进程仍然运⾏写⼊GPRS接⼊点设置android.permission.WRITE_APN_SETTINGS,写⼊⽹络GPRS接⼊点设置写⼊⽇程提醒android.permission.WRITE_CALENDAR,写⼊⽇程,但不可读取写⼊联系⼈android.permission.WRITE_CONTACTS,写⼊联系⼈,但不可读取写⼊外部存储android.permission.WRITE_EXTERNAL_STORAGE,允许程序写⼊外部存储,如SD卡上写⽂件写⼊Google地图数据android.permission.WRITE_GSERVICES,允许程序写⼊Google Map服务数据写⼊收藏夹和历史记录com.android.browser.permission.WRITE_HISTORY_BOOKMARKS,写⼊浏览器历史记录或收藏夹,但不可读取读写系统敏感设置android.permission.WRITE_SECURE_SETTINGS,允许程序读写系统安全敏感的设置项读写系统设置android.permission.WRITE_SETTINGS,允许读写系统设置项编写短信android.permission.WRITE_SMS,允许编写短信写⼊在线同步设置android.permission.WRITE_SYNC_SETTINGS,写⼊Google在线同步设置Android权限使⽤:1.)在 AndroidManifest.xml <manifest>标签内使⽤<uses-permission>声明使⽤某⼀个权限<uses-permission android:name="string"/>例如申请使⽤⽹络权限<uses-permission android:name="android.permission.INTERNET"/>如果特定的权限必须申明使⽤,如果没有申请使⽤就会报出Permission Denial错误,例如访问通讯录报出如下错误Caused by: ng.SecurityException: Permission Denial: reading com.androintacts.ContactsProvider2 uricontent://contacts/data/phones from pid=23763, uid=10036 requires android.permission.READ_CONTACTS解决此类错误我们只需根据提⽰添加对应的权限即可<uses-permission android:name="android.permission.READ_CONTACTS" />2.)⾃定义权限permission虽然这种使⽤场景不多见,但是在有些特定的场景下出于安全考虑就需要⾃定义权限了,⽐如两个APP之间需要共享数据⽽采⽤了ContentProvider,此时我们需要对⼀个app访问另外⼀个app的数据时需要添加权限申请。
android 钛备份实现机制

android 钛备份实现机制Android 钛备份是一款备份软件,可以帮助用户轻松备份和恢复手机上的数据。
在这篇文章中,我们将深入探讨Android钛备份的实现机制,以及它是如何保护用户数据的。
第一步:备份数据的选择Android钛备份允许用户选择要备份的数据项。
这些数据项可以是联系人、短信、通话记录、应用程序数据等。
用户可以根据自己的需求勾选想要备份的内容,并排除不需要备份的内容。
这样,用户可以根据自己的需要自定义备份内容,确保备份过程高效且精确。
第二步:数据的导出和存储一旦用户选择了要备份的数据项,Android钛备份将开始导出所选数据。
导出的数据将被转换为一种通用格式,以便在任何支持的设备上进行恢复。
这种通用格式可以是XML格式、csv格式或其他格式,这取决于钛备份的设置和用户的选择。
导出数据将存储在设备的内部存储器或外部SD卡上,以确保数据的安全性和可靠性。
第三步:加密和安全性Android钛备份在导出数据的同时,还会对数据进行加密和压缩处理。
这样可以确保用户的数据在备份过程中不会被他人访问或泄露。
加密使用了高级的加密算法,如AES(高级加密标准),以确保数据的隐私和安全。
压缩处理可以减少备份文件的大小,节省存储空间,并加快备份和恢复的速度。
第四步:云备份和同步Android钛备份还提供了云备份和同步功能,使用户可以将其备份数据存储在云端服务器上。
用户可以选择将备份数据上传到Google云端硬盘、Dropbox或其他支持的云服务中。
这样,即使用户的设备丢失或损坏,他们仍然可以通过登录并下载云备份的数据来恢复它们。
同时,用户还可以使用不同设备上的Android钛备份进行同步,以确保数据始终保持最新和一致。
第五步:还原数据当用户需要还原备份的数据时,Android钛备份提供了相应的还原功能。
用户可以从备份列表中选择要还原的数据项,并选择还原到当前设备还是其他设备。
一旦用户确认恢复操作,Android钛备份将自动解密和恢复备份数据。
Android系统权限提升攻击检测技术

Android系统权限提升攻击检测技术王聪;张仁斌;李钢【期刊名称】《传感器与微系统》【年(卷),期】2017(036)001【摘要】权限机制是Android安全机制的核心,在对权限提升攻击原理分析的基础上,给出了一种权限提升攻击检测方案.充分利用组件间权限传递、通信连接的特点,从动态和静态两方面实现,其中基于缺陷的检测率高达78.7%,基于组件检测率也超过50%.实验结果表明:该方法能实现对提权攻击的有效检测,为解决提权攻击检测模型的可靠性问题提供了可行的解决途径.%Privilege mechanism is the core of Android security mechanism.On the basis of analysis on principle of privilege escalation,a scheme of privilege escalation attack detection is presented.The scheme makes full use of characteristics of permission transfer and communication connection between components,realize from dynamic and static states,detection rate based on defect is 78.7 %,and based on component is more than 50 %.Experimental results show that the detection method can effectively detect privilege escalationattack,which provides a feasible solution for solving problems of reliability of privilege escalation attack detection model.【总页数】3页(P146-148)【作者】王聪;张仁斌;李钢【作者单位】合肥工业大学计算机与信息学院,安徽合肥230009;合肥工业大学计算机与信息学院,安徽合肥230009;合肥工业大学计算机与信息学院,安徽合肥230009【正文语种】中文【中图分类】TP393【相关文献】1.Android权限提升漏洞攻击的检测 [J], 沈才樑;唐科萍;俞立峰;樊甫伟2.Android系统基于提升优先权限的攻击 [J], 张会先3.基于Pi演算的Android App权限提升攻击检测 [J], 王涛;马川4.融合特征选择的Android恶意逃避攻击研究 [J], 陈镭;杨章静;黄璞5.服务器集群网络攻击中非确定攻击检测技术研究 [J], 蒋华因版权原因,仅展示原文概要,查看原文内容请购买。
binder机制原理

binder机制原理Binder机制原理。
Binder机制是Android系统中的一种进程间通信(IPC)方式,它允许不同进程之间进行数据交换和通信。
在Android系统中,各个应用程序运行在自己的进程中,它们需要进行数据共享和通信,而Binder机制就是为了解决这个问题而设计的。
Binder机制的原理可以简单概括为,Binder驱动程序、Binder通信线程和Binder通信的数据结构。
在Android系统中,Binder驱动程序负责管理Binder通信,它将用户空间的Binder通信请求转发到内核空间,并在内核空间中完成通信操作。
Binder通信线程则是在用户空间和内核空间之间进行通信的桥梁,它负责将用户空间的通信请求传递给Binder驱动程序,并将内核空间的通信结果返回给用户空间。
而Binder通信的数据结构则是用来传递和存储通信数据的,它包括Binder引用、Binder节点和Binder死亡通知等。
在Android系统中,每个进程都有一个Binder驱动程序和一个Binder通信线程,它们负责处理进程内部的Binder通信。
当一个进程需要和另一个进程进行通信时,它会通过Binder驱动程序向目标进程发送一个Binder引用,目标进程接收到Binder引用后,就可以通过Binder通信线程和目标进程进行通信。
这样,就实现了不同进程之间的数据共享和通信。
Binder机制的原理虽然看起来比较复杂,但在实际使用中,开发者只需要使用Android提供的Binder API就可以轻松实现进程间通信。
Android系统已经封装了Binder机制的底层实现,开发者只需要关注业务逻辑即可。
在Android开发中,常用的Binder通信方式包括AIDL(Android Interface Definition Language)和Messenger等,它们都是基于Binder机制实现的。
总的来说,Binder机制是Android系统中非常重要的一部分,它为不同进程之间的数据共享和通信提供了良好的解决方案。
Android安全性分析

进 而得 出 A n d r o i d面 临的 安 全 隐 患与 攻 击 行 为 。 为 增 强 An d r o i d的 安 全 性 , 针 对 应 用 程 序 级 攻 击 与 内 核 级 攻击行为 . 研究了X Ma n D r o i d框 架 与 基 于 l o g c a t 模 式 的 内核 行 为 分 析 框 架 , 检 测 并 阻止 针 对 A n d r o i d
Ke y wo r d s:An d r o i d OS ;s e c u i r t y me c h a n i s m;p r i v i l e g e e s c a l a t i o n a t t a c k ;l o g c a t
A n d r o i d是 一 种 源 码 开 放 的 操 作 系 统 , 为 应 用 开 发 者 提 供 了更 多 的 功 能 接 口 , 任 何 人 都 可 以书 写 并 发 布 自 己
厂]
I 1 . . . . . . . . . . . . . . . . J
回 架 构 看 ,采 用 了 分 层 的 体 系 结 构 , 自 上 到 下 依次 是 应 用程 序 层 、 应 用程 序 框 架 层 、 系 统 运 行 库层和 L i n u x内 核 层 , 如 图 1所 示 。 ( 1 ) 应用 程 序层 。A n d r o i d的 应 用 程 序 层 主 要 是 用 户 界面 , 包括 系 统 捆绑 的各种 资 源 文件 , 如 联 系人 、 电话 、 浏 览器 和第 三 方应 用程 序等 。 ( 2 ) 应 用程 序框 架层 。 该 层 实 际 上 是 一 个 应 用 程 序 的
Re vi e w an d Com men t
Android 包管理(APK管理)机制详细解析

一 、APK安装方式
adb install/push *.apk shell install 文件浏览器双击
APK
installation
Android market
PackageManagerService
scanPackageLI()
packageinstaller.apk SD卡安装
building in system img
… ...
二、PackageManagerService启动过程
PackageManagerService.main() PackageManagerService m = new PackageManagerService(); ServiceManager.addService("package", m); 建立installer与installd的socket联接
4.检查/data/system/packages.xml是否存在,这个文件是在解析apk时由 writeLP()创建的,里面记录了系统的permissions,以及每个apk的name ,codePath,flags,ts,version,uesrid等信息,这些信息主要通过apk的 AndroidManifest.xml解析获取,解析完apk后将更新信息写入这个文件并保 存到flash,下次开机直接从里面读取相关信息添加到内存相关列表中。当有apk 升级,安装或删除时会更新这个文件。
Jar to Dex Conversion
一个应用,一个进程,一个虚拟机实例
每一个Android应用都运行在一个 Dalvik虚拟机实例里,而每一个虚拟机实例都是一个独立 的进程空间。虚拟机的线程机制,内存分配和管理,Mutex等等都是依赖底层操作系统实现 的。所有 Android 应用的线程都对应一个 Linux 线程,虚拟机因而可以更多的依赖操作系统 的线程调度和管理机制。不同的应用在不同的进程空间里运行,加之对不同来源的应用都使 用不同的Linux用户来运行,可以最大程度的保护应用的安全和独立运行。
浅探制定Android系统安全机制

浅探制定Android系统安全机制作者:龙子学钟军强来源:《电子世界》2013年第06期【摘要】随着网络与通信技术的不断发展,智能手机逐渐成为人们的日常消费品,除了基本的通话功能以外,智能手机还具备PDA设备的主要功能,尤其包括个人信息管理以及无线接入互联网的功能。
目前智能手机的主流操作系统有Android、Symbian和Windows Mobile,由于Android系统源代码的开放性,令到Android得到了飞速发展。
但恶意程序威胁着Android系统的安全,攻击者利用计算系统的漏洞在目标Android安装恶意程序;智能手机通过无线接入设备进入互联网的同时,也成为恶意程序的攻击对象,智能手机信息安全已成为了Android系统开发者的重要工作。
【关键词】Android系统;权限;数字证书目前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.flagspackages/apps/Launcher2/proguard.flags的特定方法:-keep class uncher{public void previousScreen(android.view.View);public void nextScreen(android.view.View);public void launchHotSeat(android.view.View);}-keep class uncher2.AllApps3D$Defines{*;}-keep class uncher2.ClippedImageView{*;}二、权限安全设置权限主要用来对应用的操作增加限制,防止恶意应用进行非法操作给用户造成敏感数据泄漏和设备被非法控制,防止恶意收费等;所以在Android的Normal、Dangerous、signatureOrSystem、Signature接入权限,它框架层权限定义位置是:frameworks/base/core/res/AndroidManifest.xml权限可用于整个应用、Activity、Service等。
安卓系统安全设置及控制措施探究(全文)

沈阳职业技术学院辽宁省沈阳市110045
对于安卓系统的安全设置而言,这些控制措施主要是在安卓3.0版本的系统中被体现出来的,而在安卓4.0版本的系统中增加了摄像功能。所以,对于IT管理的人员而言,通常情况下只能进行安卓3.0版本系统或者以上版本系统的设备运行。但是对于运行安卓系统设备而言,IT管理人员还需要仔细的对设备的模块与型号进行检查,这是由于一些比较老的手机设备虽然将系统版本升到最高,但是可能还不能够进行数据的加密,系统不能够进行该功能的安全设置。除此之外,安卓系统的安全设置还能够对设备进行锁定、重新设置设备到出厂默认状态及密码修改提示等。
安卓系统安全设置及控制措施探究(全文)
随着科学技术的不断发展,安卓系统(Android)所覆盖的范围越来越大,并且运行安卓系统的设备数量正在直线上升。安卓系统主要分为内核、函数库和运行环境、应用程序框架、应用程序集合四个层次。安卓系统的快速发展使得它本身也存在一定的问题,并且影响着安卓系统的使用。因此,文章从安卓系统安全设置和控制措施两个方面对其进行了详细分析。
3同安卓系统上的恶意软件做斗争
对于安卓系统而言,有很多的安全设置控制是由MDM产品为设备进行提供的,这些产品主要包括查询被列为黑名单的应用和侦测和隔离被植入恶意软件的安卓设备应用等。通过这些产品协助IT管理人员进行相关应用安装的远程控制。这些软件能够对存在安卓系统上的一些恶意软件进行检测和排除,更好的维护安卓系统的安全。近年来,一些恶意软件在安卓系统上运行的非常的频繁,为了防止安卓系统受到这些恶意软件的影响,就必须加强对安卓系统安全设置和相关的控制措施的研究,提高安卓系统的安全性。IT管理人员可以将第三方安全工具设置到安卓系统中,这些工具主要包括防病毒扫描器、钓鱼URL检查器、远程锁定/寻找/擦除工具、和SMS反垃圾邮件过滤器等。除此之外,IT管理人员还可以创设一个属于自己的沙箱来进行相关的操作。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
关键词:Sandbox(沙盒机制)Permission(权限机制)SELinux MAC机制(强制访问控制机制)ALSR(地址空间分配随机化)PIE(独立位置的可执行区域(position-independent executables))FORTIFY_SOURCE(内存溢出检查)Encrypt(加密)Certificate(证书验证,签名机制)●签名机制apk文件在发布时必须被签名(用私钥)。
签名标识应用的作者,建立应用之间的信任关系。
比如微信和qq是同一个开发者,是一个私钥,所以两者相互信任,可以相互获取信息。
使用相同私钥签名的应用,将会具备相同的UID。
关于签名的安全机制还有,如果两个应用包名相同,但是签名不同,是无法覆盖安装的。
比如你修改了qq,原先的正版没卸载,修改版是安不上去的。
在安装应用程序APK时,系统安装程序首先检查APK是否被签名,有签名才能够安装。
当应用程序升级时,需要检查新版应用的数字签名与已安装的应用程序的签名是否相同,否则,会被当作一个全新的应用程序。
通常,由同一个开发者设计的多个应用程序可采用同一私钥签名,在manifest文件中声明共享用户ID,允许它们运行在相同的进程中,这样一来,这些应用程序可以共享代码和数据资源。
Android开发者们有可能把安装包命名为相同的名字,通过不同的签名可以把它们区分开,也保证了签名不同的包不被替换掉,同时有效地防止了恶意软件替换安装的应用。
弊端:Android自签名机制允许开发人员发布未经应用市场验证的APP,从而导致应用市场鱼龙混杂。
●沙盒机制多应用模型不同应用分配不同的UID不同应用运行不同的进程系统应用的沙盒机制Dalvik虚拟机为每个应用提供一个虚拟机实例运行一个进程。
为每个应用创建一个对应于Linux底层的用户名。
应用是虚拟机实例,相互独立(沙盒的意义),当应用出现问题,可以通过消除该虚拟机实例来保证系统的安全运行。
可通过设置AndroidManifest文件中manifest标签内的ShareUserID属性。
拥有同一UserID,被认为是同一应用程序,只有两个具有相同签名的应用程序而且请求相同的shareUserID属性的时候,才会分配相同的UserID。
弊端:仍然没有办法避免某些恶意应用程序通过自签名和更改相同shareUserID 属性获得相同UserID。
●权限机制1、PermissionAndroid 应用程序安全的核心机制是权限控制。
应用程序必须在系统给予的权限中运行,不得访问未被赋予权限的其它任何内容。
程序安装时由包管理器赋予权限,运行时由应用程序框架层执行权限控制。
Android内置大约有一百多种行为或服务的权限控制,包括打电话、发短信息、访问互联网等。
应用程序在安装时必须申明其运行时需获得的权限,Android 通过检查签名和与用户的交互赋予相应权限。
权限的申请只能在安装时得到批准或拒绝,在运行过程中不得再申请任何权限。
弊端:应用程序可以自由地命名一个新的权限,无须遵循一定的命名规则和限制。
权限一经被授权给应用程序后,在应用程序的生命期间,它将不会被移除,即使声明此权限的源程序被删除。
一个系统内两个不同的权限可以共用相同的名字,以至于他们中的其中一个权限可以在未声明的前提下正常使用。
2、Android 文件(包括应用程序文件和系统文件)管理属于Linux 权限机制。
每个文件与用户ID 和用户组ID 以及三组Read / Write / eXecute(RWX)权限密切相关。
文件在创建时将被赋予不同应用程序ID,从而只能被特定的应用程序所访问,非授权的其他应用程序则是不能访问,除非它们拥有相同的ID或者该文件的访问属性设置为在全局下都是可以读写的。
另一个增强安全的设计:将镜像挂载为只读。
比较重要的可执行程序和配置文件,只有在系统初始化的时候加载。
弊端:一般来说,无论是“system”还是“root”用户都拥有整个系统中文件访问权限,而一个特定的应用程序用户则拥有本身应用程序文件访问权限。
仍然没有办法避免某些获取root权限的用户恶意访问文件系统。
3、组件封装:exported属性一个Android系统中的应用可以在其程序内将其某些组成部分的内容封装,这样可以防止其他不同的用户ID的应用程序访问他们。
这种功能实现主要是通过定义组件的“exported”属性。
如果“exported”属性设置为“假”,则组件只能被通过应用程序本身所访问,或拥有同一个user工D的其他程序通过使用sharedUserId的特征来访问。
反之,如果设置为“真”,则外部的实体可以调用或访问它。
弊端:用户设置错误导致组件被非授权访问。
●SEAndroid(MAC策略)在Linux系统中,文件的权限控制在所有者的手中。
因此,这种权限控制方式就称为自主式的,正式的英文名称为Discretionary Access Control,简称为DAC。
在理想情况下,DAC机制是没有问题的。
然而,在现实中,会产生严重的安全问题。
例如,一个用户可能会不小心将自己创建的文件的权限位错误地修改为允许其它用户访问。
如果这个用户是一个特权用户,并且它错误操作的文件是一个敏感的文件,那么就会产生严重的安全问题。
这种误操作的产生方式有三种:1. 用户执行了错误的命令2. 负责执行用户命令的程序有BUG3. 负责执行用户命令的程序受到攻击引入MAC机制:MAC的全称是Mandatory Access Control,翻译为强制访问控制。
在MAC机制中,用户、进程或者文件的权限是由管理策略决定的,而不是由它们自主决定的。
例如,我们可以设定这样的一个管理策略,不允许用户A将它创建的文件F授予用户B访问。
这样无论用户A如何修改文件F的权限位,用户B都是无法访问文件F的。
这种安全访问模型可以强有力地保护系统的安全。
SEAndroid就是一种MAC 机制。
内核中的资源在访问的过程中,一般需要获得三次检查通过:1. 一般性错误检查,例如访问的对象是否存在、访问参数是否正确等。
2. DAC检查,即基于Linux UID/GID的安全检查。
3. SELinux检查,即基于安全上下文和安全策略的安全检查。
在SEAndroid中,每一个进程和文件都会关联有一个安全上下文。
这个安全上下文由用户、角色、类型、安全级别四个部分组成,每一部分通过一个冒号来分隔。
例如,u:r:t:s0描述的就是一个SEAndroid安全上下文。
当每一个进程和文件都关联上一个安全上下文之后,系统管理员就可以基于这些安全上下文制定一个安全访问策略,用来规定什么样的进程可以访问什么样的文件。
弊端:SEAndroid安全机制并不能完全阻止我们的设备被root,但是它能保证我们的设备被root之后,一些敏感的文件仍然是不可访问,这样就可以最大程度地保护我们的设备。
内存安全相关机制:Android 1.5版本之后:1.使用ProPolice的-fstack-protector选项可以有效防止栈缓冲区溢出攻击。
ProPolice:源自IBM的stack-smashing保护程序SSP,实现类似于StackGuard的功能。
ProPolice使用编译器选项在函数调用中插入探测以检测堆栈溢出,同时对存储局部变量的位置进行重新排序,复制函数参数中的指针,使它们在数组之前。
如此,即使缓冲区溢出也不会修改指针值,防止能够控制指针的攻击者使用指针来控制程序保存数据的位置。
ProPolice嵌入gcc之中,更易于运用。
2.使用safe_iop防止整数运算溢出。
3.使用OpenBSD的dlmalloc()可以防止重复free()漏洞及防范针对堆的内存区域重组攻击。
(内存管理器,使程序不直接操作内存,分配和回收都经过内存管理器暂存)4.使用OpenBSD的calloc()防范内存分配时的整数溢出攻击。
(calloc可以在动态分配内存时对内存块进行初始化0)Android 2.3之后:1.-Wformat-security 编译选项:实现对格式描述字符串漏洞攻击的防护。
像是printf/scanf这类用到字符串的函数中,可针对非字符串格式的参数进行警告。
添加编译参数:“-Werror=format-security”,让属于format-security 的警告在编译过程中以Error的方式呈现。
2.–noexecstack编译选项:基于硬件的NX(No eXecute)机制,防范运行堆与栈中的代码。
3.使用Linux内核的内存映射mmap_min_addr()函数减少释放空指针引起的权限升级攻击(例如PPPoX socket中ops的初始化中,sendpage函数指针默认为NULL,在socket传输中,若执行到sendpage(),会对NULL指针解引用,引起内核态访问NULL指针,出现Oops。
如果用户态将0地址(通常NULL 为0)设置为可执行,那么内核代码就会顺利的执行0地址的指令。
如果0地址被恶意注入了修改当前进程ID的代码,那么当前进程就有可能从普通用户的身份变为root用户。
)。
避免低特权级用户进程在非许可的低内存空间产生映射。
这个低地址可以进行设定。
Android 4.0之后:1.地址空间分布随机化(ASLR)机制随机分配地址空间中关键区域的位置,比如代码、堆栈、库的位置。
在Ret2libc(通常用于攻击有“栈不可执行”保护措施的目标系统)攻击方式中,最为关键的一点是攻击者事先预知了特定函数。
在当一个应用程序或动态链接库,被加载时,如果其选择了被ASLR 保护,那么系统就会将其加载的基址随机设定。
这样,攻击者就无法事先预知动态库的基址,也就无法事先确定特定函数的入口地址了。
Android 4.1之后:1.PIE:position-independent executable针对代码段的地址随机化。
编译选项,用于编译共享库。
PIE是Binutils,glibc和gcc的一个功能,用于编译能像共享库一样可重分配地址的程序,这种程序必须连接到Scrt1.o。
标准的可执行程序需要固定的地址,并且只有被装载到这个地址时,程序才能正确执行。
PIE能使程序像共享库一样在主存任何位置装载,这需要将程序编译成位置无关,并链接为ELF共享对象。
2.(-Wl,-z,relro -Wl,-z,now)编译选项:只读重定位/立即绑定(Read-onlyrelocations/immediate binding)。
一般来说,.plt属性是RELRO (RELocation Read-Only),在加载到内存后会放在只读的分页中,但.got.plt 却是Read/Writeable以便支持Linker Lazy Loading,加速程序载入效率。