0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Android安全机制介绍及实践

哆啦安全 来源:虎哥Lovedroid 2023-11-14 09:35 次阅读

Android安全机制介绍及实践

Android框架基础

289ccc16-828b-11ee-939d-92fbcf53809c.png

上图是我们熟知的Android系统架构图,分层的结构有利于权限的分级管理,对系统安全提供了一定的保障。Android系统采用分层的架构,由底层到上层依次为Linux内核层、HAL层、Native Lib及Runtime lib层、JNI层、framework层和应用程序层组成。Android应用程序组件是Android应用程序的基本组成单元,组件类型有Activity、Service、Broadcast Receiver、Content Provider等。Android内核本质上是增强版的LInux内核,低内存管理LMK(Low Memory Killer)、匿名共享内存(Ashmem),Binder通信机制等。这些内核增强使得Android在继承LInux内核安全机制的同时,进一步提升了内存管理、进程通信等方面的安全性。

28bb93e4-828b-11ee-939d-92fbcf53809c.png

上图是Android系统启动流程图,具体说明如下:Android系统运行于Linux内核之上,init进程是用户空间启动的第一个进程,职责主要为fork出系统关键进(Daemons)、servicemanager、zygote等;提供属性服务管理系统属性等。Zygote由init进程根据init.rc文件配置项创建,Zygote是一个虚拟机进程,同时也是一个虚拟机孵化器。负责虚拟机初始化、预置库的加载及初始化等。每当系统要求执行一个Android应用程序时,Zygote就会创建一个进程来执行该应用程序。SystemSever是Zygote第一个子进程,由Zygote进程孵化出来,作为Android框架的核心,主要负责Android系统初始化并启动其他服务运行于该进程空间。

Android 安全机制

28da61a2-828b-11ee-939d-92fbcf53809c.png

目前Android系统智能终端设备占据了全球智能终端设备的大部分份额,随之而来安全问题也越来越多,安全问题是Android开发中一个重要的课题。从技术架构角度来看,Android安全模型基于强健的Linux操作系统内核安全性,通过进程沙箱机制、独特的内存管理与安全高效的进程通信机制、应用程序签名机制、应用权限管理机制等进一步提升系统安全性。

Android系统安全机制主要包括以下几方面:

1. 代码安全机制。

2. 进程沙箱机制。

3. 应用权限机制。

4. 应用签名机制。

5. 文件访问控制机制。

6. 其他安全机制。

代码安全机制

java不同于C/C++,java是解释性语言,存在代码被反编译的隐患;Android引入了代码混淆技术默认混淆器为proguard, proguard还可用来压缩、优化java字节码,删除无用的类、字段、方法、属性、注释等。配置方法 在Android.mk中设置 LOCAL_PROGUARD_FLAG_FILES := proguard.flags include $(BUILD_PACKAGE) 原则 SDK API相关的不要混淆、native方法不要混淆、model不要混淆其他不需要混淆的类及方法。混淆语法

-keepclasscom.android.launcher3.CellLayout{
publicfloatgetBackgroundAlpha();
publicvoidsetBackgroundAlpha(float);
}
-keepclasscom.android.launcher3.DragLayer$LayoutParams{
publicvoidsetWidth(int);
publicintgetWidth();
publicvoidsetHeight(int);
publicintgetHeight();
publicvoidsetX(int);
publicintgetX();
publicvoidsetY(int);
publicintgetY();
}

混淆之后代码反编译后得到的class文件

28f19340-828b-11ee-939d-92fbcf53809c.png

进程沙箱隔离机制

Android将linux多用户隔离机制应用到应用程序隔离,一个用户标识(UID)识别一个给定用户,应用程序权限不同允许或者限制了应用程序对设备资源的访问。应用权限的设置共享用户ID即共用一个进程 Android源代码树携带的系统证书括“media”、“platform”、“shared”、 “testkey”等,其中“media”证书用于多媒体、下载场景中;“platform”证书用于系统场景中;“shared”证书用于启动器、电话簿场景中;“testkey”证书用于开发场景中,这些证书位于build/target/product/security目录下;目前支持的“sharedUserId”属性包括“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”等。

应用权限机制

权限主要用来对应用的操作增加限制,防止恶意应用进行非法操作给用户造成敏感数据泄漏和设备被非法控制,防止恶意收费等。权限级别如下:Normal权限、 Dangerous权限 、signatureOrSystem权限 、Signature权限 。框架层权限定义位置

frameworks/base/core/res/ AndroidManifest.xml



android:permissionGroup="android.permission-group.STORAGE"

android:label="@string/permlab_mediaStorageWrite"
android:description="@string/permdesc_mediaStorageWrite"
android:protectionLevel="signature|system"/>

设置应用权限


权限验证Android提供了多个方法可用于验证调用方是否具有相应的权限。如果调用方拥有相应的权限,则权限验证的返回值为PackageManager. PERMISSION_GRANTED否则返回PackageManager.PERMISSION_DENIED。

示例代码

if(permission!=null){
if(mContext.checkCallingOrSelfPermission(permission)
!=PackageManager.PERMISSION_GRANTED){
returnWindowManagerGlobal.ADD_PERMISSION_DENIED;
}
}

数据库安全

Android采用的SQLite目前采用明文存储数据;安全涉及加密、读写、搜索等。权限设置android:permission android:readPermission android:writePermission

android:authorities="contacts;com.android.contacts"
android:label="@string/provider_label"
android:multiprocess="false"
android:exported="true"
android:readPermission="android.permission.READ_CONTACTS"
android:writePermission="android.permission.WRITE_CONTACTS">




应用签名机制

Android签名机制其实是对APK包完整性和发布机构唯一性的一种校验机制。只有同一包名且采用同一数字证书的应用才被认为是同一个应用;数字证书的最大用途是应用升级和设置应用间通信的权限;

文件访问控制机制

Android在权限管理上应用了Linux的ACL(Access Control List)权限机制。

分区层面

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

单独文件

单独文件访问权限控制分群组、用户、权限。权限分可读、可写、可执行。命令:chownchgrpchmod。

其他安全机制

网络安全 加密算法(敏感数据) DES(对称)、3DES(对称)、RSA(非对称)、MD5、RC2/RC4(对称)、IDEA、AES、BLOWFISH等 Web服务(HTTP层) 三种手段WS-Security、SSL、数字签名。目前ksoap不支持WS-Security TCP层 SSL、TSL 数据链路层 WAPI

SEAndroid

SE Android(Security-Enhanced Android)是Android与SE Linux的结合,由美国NSA在2012年推出的Android os的安全强化套件,以支持在Android平台上使用的SE Linux。DAC和MACDAC(Discretionary Access Control)自主访问控制 进程理论上所拥有的权限与执行它的用户的权限相同。比如,以root用户启动Browser,那么Browser就有root用户的权限,在Linux系统上能干任何事情。

MAC(Mandatory Access Control)强制访问控制 即任何进程想在SELinux系统中干任何事情,都必须先在安全策略配置文件中赋予权限。凡是没有出现在安全策略配置文件中的权限,进程就没有该权限。

说明:在MAC访问控制下,有root权限并不能读写访问任何文件;任何进程访问特定的资源都需要遵循一定的控制策略。

29011edc-828b-11ee-939d-92fbcf53809c.png

开启selinux后的文件上下文

290bfdfc-828b-11ee-939d-92fbcf53809c.png

开启selinx后的进程上下文

分析工具

调试工具logcat 、adb 、 dumpsyslogcat

logcat[options][filterspecs]#打印log

选项介绍

-b查看日志类型,比如radio,main,events等,默认为main
-c清空日志
-s#设置过滤器
logcat-scallMode:V#tag为callMode,级别为V的log
-f#输出到文件
-v#设置log的打印格式,是下面的一种:brief process tag thread raw time threadtime long
logformat形式如下:
-vprocess#D(4816)volumestatechangedfor/mnt/usbhost3(unmounted->removed)(MountService)
-vbrief#I/SystemServer(4816):EnteredtheAndroidsystemserver!....
-g#得到环形缓冲区的大小并退出
130|root@mars-200:/#logcat-g
/dev/log/main:ringbufferis256Kb(255Kbconsumed),maxentryis5120b,maxpayloadis4076b
/dev/log/system:ringbufferis256Kb(111Kbconsumed),maxentryis5120b,maxpayloadis4076b

adb常用命令

adb devices adb shell adb install / uninstall adb pull/push adb shell service list

dumpsys介绍

dumpsys工具用于显示Android系统详细信息,dumpsys是强大的系统分析工具,可以查看设备信息、进程内存使用信息、应用程序包信息、服务信息、权限设置信息、电源管理状态信息及activity信息。工具格式:dumpsys [option]

dumpsys|grepDUMP获取dump支持的命令;
dumpsysactivity:显示activity的相关信息,包括任务栈等;
dumpsyswindow:显示键盘,窗口和它们的关系;
dumpsysdiskstats:磁盘相关信息

安全问题相关实践

Android逆向工程

在学习Android开发的过程你,你往往会去借鉴别人的应用是怎么开发的,那些漂亮的动画和精致的布局可能会让你爱不释手,作为一个开发者,你可能会很想知道这些效果界面是怎么去实现的,这时,你便可以对改应用的APK进行反编译查看。

反编译的目的不是去搞破坏,主要目的是为了促进开发者学习,借鉴好的代码,提升自我开发水平。

反编译工具dex2jar apktool jd-gui

步骤如下:

1.将apk文件重命名为.zip文件后解压缩提取classes.dex

2.通过dex2jar工具将classes.dex文件转成jar包./d2j-dex2jar.sh classes.dex

3.apktool还原apk资源文件./apktool.sh -d test.apk

su权限管控

可将相关权限加入Android运行时权限管控,根据签名、配置文件等控制使用

编辑:黄飞

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Android
    +关注

    关注

    12

    文章

    3851

    浏览量

    125642
  • 电源管理
    +关注

    关注

    112

    文章

    6015

    浏览量

    141107
  • Linux
    +关注

    关注

    87

    文章

    10990

    浏览量

    206738
  • 网络安全
    +关注

    关注

    9

    文章

    2946

    浏览量

    58679
  • 虚拟机
    +关注

    关注

    1

    文章

    855

    浏览量

    27378

原文标题:Android安全机制介绍及实践

文章出处:【微信号:哆啦安全,微信公众号:哆啦安全】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    详解Android Handler机制和原理

    Android开发中,Handler机制是一个很重要的知识点,主要用于消息通信。
    的头像 发表于 03-26 14:32 2064次阅读

    如何采用TLF35584的CAN安全机制?

    采用 TLF35584 的 CAN 安全机制
    发表于 01-18 10:03

    安全管家 Android 1.8.58

    Android安全管家是一款集防骚扰和程序管理、木马查杀、上网管家、IP拨号、隐私中心、防盗卫士、系统优化、定时任务等多功能于一身的手机安全软件,给您生活带来贴心的呵护!软件完全免费,使用过程中
    发表于 07-23 09:43

    Android介绍

    Android介绍:HTC G1操作界面Android 是Google开发的基于Linux平台的开源手机操作系统。它包括操作系统、用户界面和应用程序 —— 移动电话工作所需的全部软件,而且
    发表于 08-15 14:10

    [资料分享]+《Android软件安全与逆向分析》

    安全隐患 322  11.2.3  Android手机ROOT原理 322  11.3  Android权限攻击 329  11.3.1  Android权限检查
    发表于 09-26 10:53

    关于无线接入安全机制的汇总

    介绍移动通信中的无线接入安全机制
    发表于 05-28 06:17

    你的应用程序如何保持安全性?

    引言拥有特权的恶意软件或者可以实际访问安卓设备的攻击者是一个难以防范的攻击向量。 在这种情况下,你的应用程序如何保持安全性?本文将讨论 Android keystore 机制以及在尝试实现安全
    发表于 07-28 08:40

    ARM Cortex-M堆栈机制介绍

      大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是ARM Cortex-M堆栈机制。  今天给大家分享的这篇依旧是2016年之前痞子衡写的技术文档,花了点时间重新编排了一下
    发表于 12-16 06:26

    介绍AUTOSAR支持的四种功能安全机制

    1、AUTOSAR的四种功能安全机制虽然AUTOSAR不是一个完整的安全解决方案,但它提供了一些安全机制用于支持
    发表于 06-10 17:33

    深入剖析Android消息机制

    深入剖析Android消息机制
    发表于 01-22 21:11 11次下载

    用户友好的Android隐私监管机制

    针对安卓( Android)应用过度授权导致的隐私泄露问题,提出了一种用户友好的Android隐私监管机制UFMDroid。该机制使用服务代理重定向技术在
    发表于 01-14 13:27 0次下载
    用户友好的<b class='flag-5'>Android</b>隐私监管<b class='flag-5'>机制</b>

    基于Android安全总结与分析

    Android智能手机的日益流行也吸引了黑客,导致Android恶意软件应用的大量增加,从Android体系结构、设计原则、安全机制、主要
    发表于 01-18 16:58 3次下载

    详细解答Android消息机制

    Android程序运行中,线程之间或者线程内部进行信息交互时经常会使用到消息,如果我们熟悉这些基础的东西及其内部的原理,将会使我们的Android开发变的容易、可以更好地架构系统。在学习Android消息
    发表于 04-24 15:30 378次阅读
    详细解答<b class='flag-5'>Android</b>消息<b class='flag-5'>机制</b>

    响应式编程在Android开发中的实践

    Flow 是一种基于流的编程模型,本文我们将向大家介绍响应式编程以及其在 Android 开发中的实践,您将了解到如何将生命周期、旋转及切换到后台等状态绑定到 Flow 中,并且测试它们是否能按照预期执行。
    的头像 发表于 04-02 14:07 1472次阅读

    Linux内核的安全性对Android的影响

    在操作系统级别,Android平台不仅提供Linux内核的安全功能,而且还提供安全的进程间通信 (IPC)机制,以便在不同进程中运行的应用之间安全
    的头像 发表于 09-13 09:09 947次阅读