转自:http://blog.csdn.net/yiyaaixuexi/article/details/8490886

最近研究SEAndroid,会陆续对各个模块做对比分析,学习移植SELinux至Android,学习程序管控策略。

bionic 作为第一个分析的模块,在此之前,先简单叙述一下SEAndroid,便于后续理解。

SEAndroid 与 Android 的区别

 
一句话概括:SEAndroid = SElinux + Android , 通过MAC的方式管控应用程序,从而提升原生Android系统的安全性。

SEAndroid 如何管控程序

一句话概括:程序向SEAndroid(确切的说是SELinux)发送请求,SEAndroid根据策略数据库进行策略分析,比对安全上下文,控制应用程序的资源存取。

SEAndroid  bionic

SEAndroid在架构和机制上与SELinux完全一样,考虑到移动设备的特点,所以移植到SEAndroid的只是SELinux的一个子集。

1.增加系统调用

对比Android,SEAndroid bionic下增加了12个 system call :

  1. int fsetxattr(int, const char *, const void *, size_t, int)
  2. ssize_t fgetxattr(int, const char *, void *, size_t)
  3. ssize_t flistxattr(int, char *, size_t)
  4. int fremovexattr(int, const char *)
  5. int setxattr(const char *, const char *, const void *, size_t, int)
  6. int lsetxattr(const char *, const char *, const void *, size_t, int)
  7. ssize_t getxattr(const char *, const char *, void *, size_t)
  8. ssize_t lgetxattr(const char *, const char *, void *, size_t)
  9. ssize_t listxattr(const char *, char *, size_t)
  10. ssize_t llistxattr(const char *, char *, size_t)
  11. int removexattr(const char *, const char *)
  12. int lremovexattr(const char *, const char *)

2.linker增加AT_SECURE

SELinux为加载的应用程序设置AT_SECURE  auxv 标志,具体在bionic/linker/linker.c:

  1. /* Initialize environment functions, and get to the ELF aux vectors table */
  2. vecs = linker_env_init(vecs);
  3. /* Check auxv for AT_SECURE first to see if program is setuid, setgid,
  4. has file caps, or caused a SELinux/AppArmor domain transition. */
  5. for (v = vecs; v[0]; v += 2) {
  6. if (v[0] == AT_SECURE) {
  7. /* kernel told us whether to enable secure mode */
  8. program_is_setuid = v[1];
  9. goto sanitize;
  10. }
  11. }
  12. /* Kernel did not provide AT_SECURE - fall back on legacy test. */
  13. program_is_setuid = (getuid() != geteuid()) || (getgid() != getegid());

综上所述,bionic差异并不大,主要是AT_SECURE的加入,  SELinux水很深,推荐鸟哥的文章一读:

鳥哥的 Linux 私房菜-第十七章、程序管理與 SELinux 初探

Android 安全攻防(二): SEAndroid bionic的更多相关文章

  1. Android trap攻防思路整理

    Android trap攻防                                                                      图/文 h_one 0x01 反 ...

  2. Android仿微信二维码扫描

    转载:http://blog.csdn.net/xiaanming/article/details/10163203 了解二维码这个东西还是从微信中,当时微信推出二维码扫描功能,自己感觉挺新颖的,从一 ...

  3. Android Fragment使用(二) 嵌套Fragments (Nested Fragments) 的使用及常见错误

    嵌套Fragment的使用及常见错误 嵌套Fragments (Nested Fragments), 是在Fragment内部又添加Fragment. 使用时, 主要要依靠宿主Fragment的 ge ...

  4. Android反编译(二)之反编译XML资源文件

    Android反编译(二) 之反编译XML资源文件 [目录] 1.工具 2.反编译步骤 3.重新编译APK 4.实例 5.装X技巧 6.学习总结 1.工具 1).反编译工具  apktool http ...

  5. Android进阶笔记06:Android 实现扫描二维码实现网页登录

    一. 扫描二维码登录的实现机制: 详细流程图: (1)PC端打开网页(显示出二维码),这时候会保存对应的randnumber(比如:12345678). (2)Android客户端扫码登录,Andro ...

  6. android利用zbar二维码扫描-(解决中文乱码及扫描区域定义)

    写在最前(这是对上一篇博文的问题做的更新[android利用zbar二维码扫描]) project下载   zbarLib编译project  project下载0积分 bug 在2.3的系统中Hol ...

  7. ANDROID Porting系列二、配置一个新产品

    ANDROID Porting系列二.配置一个新产品 详细说明 下面的步骤描述了如何配置新的移动设备和产品的makefile运行android. 1.         目录//vendor/创建一个公 ...

  8. 【转】android 电池(二):android关机充电流程、充电画面显示

    关键词:android 电池关机充电 androidboot.mode charger关机充电 充电画面显示 平台信息:内核:linux2.6/linux3.0系统:android/android4. ...

  9. android Graphics(二):路径及文字

    前言:今天项目进入攻关期,他们改Bug要改疯掉了,主管为了激励大家,给大家发了一封邮件,讲到他对项目和学习的理解,一个很好的图形模型,分享给大家,如图在下面给出:(不便给出原文,我仅做转述)无论是学习 ...

随机推荐

  1. Winform中实现ZedGraph滚轮缩放后自动重新加载数据

    场景 Winforn中设置ZedGraph曲线图的属性.坐标轴属性.刻度属性: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/10 ...

  2. Implement Custom Business Classes and Reference Properties实现自定义业务类和引用属性(EF)

    In this lesson, you will learn how to implement business classes from scratch. For this purpose, the ...

  3. WordPress疑难问题以及解决方案汇总

    版权声明:本文为xing_star原创文章,转载请注明出处! 本文同步自http://javaexception.com/archives/101 WordPress疑难问题以及解决方案汇总: 最近这 ...

  4. 北航软件学院Java历届期末考题整理

    文章目录 abstract static Thread finally package Exception I/O 子类和父类 关键字 标识符 垃圾收集 数据类型 环境配置 网路编程 initial ...

  5. python字典中列表追加数据

    dict = {} for i in range(1, 6): if i not in dict: dict[i] = [] for j in range(101, 106): dict[i].app ...

  6. sqlserver刷新视图

    sqlserver 用于刷新当前数据库所有视图的存储过程 create procedure dbo.proc_refreshview as begin ) declare cur_view curso ...

  7. linux 系统下Anaconda的安装【安装python3.6环境首选】

    如果你不想使用python3.6的源码安装包,不想各种繁琐的配置命令,那Anacoda里边自带的python3.6环境就最合适不过了,下面来介绍下anacoda的安装过程,~so easy~Anaco ...

  8. docker 私有registry harbor安装

    一,harbor安装: 参考:Installation and Configuration Guide 1,安装docker 2,安装docker compose sudo curl -L " ...

  9. [日常] 解决mysql localhost可以连接但是127.0.0.1不能连接

    在测试mysql的过程中遇到使用localhost可以连接但是127.0.0.1不能连接,原因是localhost使用的本地socket连接,127.0.0.1使用使用的tcp连接 在mysql库的u ...

  10. idea代码模板配置

    1. 在settings中配置 配置快捷键和模板内容 输入syso然后按enter键就会自动生成代码