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 初探

  • 相关阅读:
    (BFS 二叉树) leetcode 515. Find Largest Value in Each Tree Row
    (二叉树 BFS) leetcode513. Find Bottom Left Tree Value
    (二叉树 BFS DFS) leetcode 104. Maximum Depth of Binary Tree
    (二叉树 BFS DFS) leetcode 111. Minimum Depth of Binary Tree
    (BFS) leetcode 690. Employee Importance
    (BFS/DFS) leetcode 200. Number of Islands
    (最长回文子串 线性DP) 51nod 1088 最长回文子串
    (链表 importance) leetcode 2. Add Two Numbers
    (链表 set) leetcode 817. Linked List Components
    (链表 双指针) leetcode 142. Linked List Cycle II
  • 原文地址:https://www.cnblogs.com/LCGIS/p/3341564.html
Copyright © 2011-2022 走看看