博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android 安全攻防(二): SEAndroid bionic
阅读量:4246 次
发布时间:2019-05-26

本文共 1805 字,大约阅读时间需要 6 分钟。

Android 安全攻防(二):SEAndroid  bionic 

最近研究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 :

[cpp] 
  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:

[cpp] 
  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水很深,推荐鸟哥的文章一读:

原文地址:

转载地址:http://melhi.baihongyu.com/

你可能感兴趣的文章
JavaWeb之filter&listener&文件上传
查看>>
JavaWeb之Ajax&json
查看>>
BUFG,IBUFG,BUFGP,IBUFGDS等含义以及使用
查看>>
转载:在 Windows 10 下遇到移动硬盘不自动分配盘符的问题
查看>>
DDR2 SSTL_18标准
查看>>
DDR3的DQS_p/n信号电平摆幅变化不一致现象
查看>>
北大旁听生中的历史名人
查看>>
大唐凌烟阁开国廿四将
查看>>
Access数据库出现"Selected collating sequence not supported by the operating system."错误
查看>>
逻辑思维测试题
查看>>
如何用Easy CHM制作CHM格式电子书(帮助文档)
查看>>
为什么学习python
查看>>
华为进不了美国,并不是贸易保护这么简单
查看>>
markdown文件的基本常用编写语法(图文并茂)
查看>>
java变量简介
查看>>
Shell十分钟入门
查看>>
nginx 配置 upstream backup 报错
查看>>
Linux执行 wget命令:提示command not found的两种解决方法
查看>>
openssl实现md5加rsa签名
查看>>
史上最全的前端学习路线图,干货满满
查看>>