zoukankan      html  css  js  c++  java
  • Android 安全攻防(二): SEAndroid bionic

    转自: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(intconst char *, const void *, size_tint)  
    2. ssize_t fgetxattr(intconst char *, void *, size_t)  
    3. ssize_t flistxattr(intchar *, size_t)  
    4. int fremovexattr(intconst char *)  
    5. int setxattr(const char *, const char *, const void *, size_tint)  
    6. int lsetxattr(const char *, const char *, const void *, size_tint)  
    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.   
    4.   
    5. /* Check auxv for AT_SECURE first to see if program is setuid, setgid, 
    6. has file caps, or caused a SELinux/AppArmor domain transition. */  
    7. for (v = vecs; v[0]; v += 2) {  
    8.     if (v[0] == AT_SECURE) {  
    9.     /* kernel told us whether to enable secure mode */  
    10.         program_is_setuid = v[1];  
    11.         goto sanitize;  
    12.     }  
    13. }  
    14.   
    15. /* Kernel did not provide AT_SECURE - fall back on legacy test. */  
    16. program_is_setuid = (getuid() != geteuid()) || (getgid() != getegid());  



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

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

  • 相关阅读:
    asp.net Forms验证跨域页面不能访问的问题
    JavaScript创建命名空间
    DataTable转换成JSON字符串的函数
    javascript 正确截取单字节和双字节混和字符串的方法
    异常详细信息: 不能通过已删除的行访问该行的信息
    HttpUtility.ParseQueryString直接从字符串URL中提取参数
    支持函数,变量的算术表达式计算(三、加入函数)
    mp3 分类管理工具
    我好累
    电饭煲是如何知道饭已熟了的
  • 原文地址:https://www.cnblogs.com/LCGIS/p/3341564.html
Copyright © 2011-2022 走看看