当前位置:文档之家› Android技术生态系统和安全

Android技术生态系统和安全

Android技术生态系统和安全韩超Android技术生态系统和安全☐一 Android的操作系统层☐二 Android的硬件抽象层☐三 Android的中间件和GUI系统☐四 Android应用程层接口☐五 Android的安全性序 Android的总体技术特点 Android系统的诞生给了嵌入式系统两大方面的突破:第一、Android是一个完备的系统,第二、Android是一个提供了标准化接口的系统。

一 Android的操作系统层Android的内核是用方式:☐遵从标准Linux的结构☐充分利用已有的机制☐尽量使用标准化的内容(如驱动程序)☐做出必要的扩展灵活充分使用内核到用户空间的接口:☐字符设备节点☐ Sys文件系统☐ Proc文件系统☐不增加系统调用一 Android的操作系统层进程调度kernel 进程通信ipc 内存管理mm网络net虚拟文件系统(VFS)各种文件系统系统调用接口(System Call)驱动程序driverAndroid专用组件体系结构和处理器移植Linux 设备驱动ARM GlodFish ARMMSMLinux内核ARMOMAPx86Android的Linux内核一 Android的操作系统层Android的内核组件:☐ binder驱动程序:用于 IPC机制☐ logger驱动程序:用于系统日志☐ timed_output驱动框架☐ timed_gpio驱动程序☐ lowmemorykiller组件☐ ram_console组件☐ Ashmem驱动程序☐ Alarm驱动程序☐ pmem驱动程序☐ ADB Garget驱动程序☐ Android Paranoid网络一 Android 的操作系统层suspendSuspend Statusearly_suspendresumelate_resumeNormal RuningIDLE Statuswake_lockwake_lockAndroid PMINTAndroid 电源管理机制在Linux 电源管理的基础上增加了从用户空间的控制。

wakelock 是Android 提供的一种特殊的机制,用于请求CPU 资源。

earlysuspend 是系统进入休眠前的一个阶段。

二 Android的硬件抽象层Android系统需要运行于在不同的硬件平台上,因此需要具有很好的可移植性。

Android的硬件抽象层负责Android系统和硬件设备的之间的联系。

自下而上经典的模型为Linux驱动、Android硬件抽象层、Android本地框架、Android的JAVA框架、Android的JAVA应用程序。

二 Android 的硬件抽象层硬件抽象层实现Android 本地框架层驱动程序硬件抽象层接口Android Java 框架层Android Java 应用层内核空间用户空间(Android 系统)移植工作二 Android 的硬件抽象层fb driverLinux kernelUserspaceJava Framework Java Application LCDSystem APIHardwareEvent driverTouch /KeyBoardAudioAudio driverCameraCamera driverVideoOut DrviceVideoOut driverCodec driverNative FrameworkHW Codec WIFIGPSBluetoothWIFI driverGPS driverBT driverModem driverModemGPS HAL Codec PlugIn Overlay HAL Camera HAL Audio HAL Native APIOpenGLHW OpenGLOpenGL lib Sensor HALSencor driverSensorsRIL HAL二 Android的硬件抽象层情况一:对于标准化比较高的子系统,使用完全标准Linux的驱动:☐输入设备(Input-Event)☐电池信息(Power Supply)☐无限局域网(Wifi协议和驱动)☐蓝牙(bluetooth协议和驱动)二 Android的硬件抽象层情况二:对于有Linux标准驱动,但是各系统定义情况不同的子系统,可以选择标准驱动或自定义驱动:☐显示(framebuffer)☐背光和指示灯(led驱动)☐警报器和时钟(RTC驱动)☐音频(OSS、ALSA或类似驱动)☐视频输出和照相机(v4l2)☐ GPS和Modem(TTY)二 Android的硬件抽象层情况三:对于没有Linux标准驱动的部件,使用自定义的驱动程序:☐各种传感器☐各种编解码加速☐ 2D 图形加速☐ OpenGL 3D加速三 Android的中间件和GUI系统Android的中间件的特点:☐标准而小巧的C语言库☐实用的基本系统(C工具库、init、uevent)☐纵贯全局的通信机制(属性、套结字、Binder)☐重新实现的Dalvik虚拟机☐大量使用Linux和JAVA标准库☐减少模块间的底层耦合性三 Android的中间件和GUI系统Android的GUI系统的几方面:☐ JAVA层实现结构化☐本地层结合具体硬件☐ Suface处理图层☐ Skia-图形接口处理2D☐ OpenGL标准处理3D三 Android 的中间件和GUI 系统 libpixelflingerSurfaceFlinger libuiSurface 接口事件系统Skia 图形引擎OpenGL3D 引擎android.graphicsandroid.view.Surface Graphic JNI Surface JNIandroid.view.View GLSurfaceView javax.microedition.khronos.opengles各种控件OpenGL JNI com.google.android.gles_jni本地框架JAVA 框架显示和用户输入的底层内容输入事件本地窗口颜色格式四 Android应用程层接口由于Android设备和Android应用程序可以独立开发,因此Android应用层接口至关重要。

Android应用层接口的特点:☐根据API级别的标准化接口(兼容性)☐ JAVA层的隐藏接口和非API接口可调用☐可以使用JNI调用本地程序☐ SDK提供标准化的本地库(兼容性)☐预置应用和第三方应用的权限不同四 Android 应用程层接口 JAVA 应用层JAVA 框架AIDL Android JAVA 类(android.*)源代码开发的Apk 标准平台API @Hide 的接口SDK 开发的Apk Android JAVA 内部类(com.android.*)本地框架JNIAndroid 本地库四 Android应用程层接口JAVA框架层和应用层的技术特点:☐机制<=>策略☐框架层统一管理资源☐框架层提供上层“虚拟解耦合”的API ☐应用层按照包的形式独立存在☐强制应用层具有“组件”结构☐灵活的应用层插件系统五 Android的安全性安全性的限制:[*] 无论JAVA调用,还是通过JNI调用本地库,都受到Linux本身用户权限的限制[*] 使用JAVA调用框架层的方法的时候,将受到框架层许可的限制[*] 调用其它包中组件的时候,将受到组件许可的限制[*] 最终的限制由签名机制完成五 Android 的安全性 应用程序包(*.apk )JNI 及各个本地调用JAVA 调用permission Linux 进程的用户和组JAVA 方法许可检查Linux 用户权限检查安装签名检查获得许可设置用户和组Android 应用包管理器Android 设备安全策略的几个方面包安装阶段的基本用户id逻辑为:第一,根据根据每一个应用程序包AndroidManifest.xml中定义的共享用户信息,为应用程序包指定特殊的用户id;第二,依次调用增加系统的id,默认做法是从10000依次递增。

应用程序包在运行的时候将使用安装时赋予的用户id。

许可机制对安全的控制的几个方面:[*] 某些系统的接口中将检查调用者的许可,如果所调用的应用程序包没有这个许可,调用将失败,并抛出异常;[*] 普通("normal")许可,应用程序包可以直接得到;危险("dangerous")许可,应用程序包在得到的时候具有提示;[*] 签名("signature")许可需要申请者和声明者具有相同的签名[*] 系统声明的许可申请者具有平台(platform)级别的签名,如果应用程序没有这个签名,则得不到这个许可;[*] 用户的程序可以自声明依赖签名的许可,这样同样具有签名的程序,可以得到这些许可;[*] 签名或系统("signatureOrSystem")许可具有特殊性,位于系统映像中的应用将以特殊途径得到这种许可。

安全策略的几个方面一个额外的逻辑为“由于许可增加到额外的用户组”。

其含义为,由于应用程序包获得了某些许可(permission),这个应用程序包可以从Linux进程的角度被增加到特定的组。

并且这是一个各个不同的Android设备可以进行自定义的策略,也就是说哪些许可将获得增加到哪些用户组,这是可以由各个平台自定义的。

谢谢!。

相关主题