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 :
int fsetxattr(int, const char *, const void *, size_t, int)
ssize_t fgetxattr(int, const char *, void *, size_t)
ssize_t flistxattr(int, char *, size_t)
int fremovexattr(int, const char *)
int setxattr(const char *, const char *, const void *, size_t, int)
int lsetxattr(const char *, const char *, const void *, size_t, int)
ssize_t getxattr(const char *, const char *, void *, size_t)
ssize_t lgetxattr(const char *, const char *, void *, size_t)
ssize_t listxattr(const char *, char *, size_t)
ssize_t llistxattr(const char *, char *, size_t)
int removexattr(const char *, const char *)
int lremovexattr(const char *, const char *)
2.linker增加AT_SECURE
SELinux为加载的应用程序设置AT_SECUREauxv 标志,具体在bionic/linker/linker.c:
/* Initialize environment functions, and get to the ELF aux vectors table */
vecs = linker_env_init(vecs);
/* Check auxv for AT_SECURE first to see if program is setuid, setgid,
has file caps, or caused a SELinux/AppArmor domain transition. */
for (v = vecs; v[0]; v += 2) {
if (v[0] == AT_SECURE) {
/* kernel told us whether to enable secure mode */
program_is_setuid = v[1];
goto sanitize;
}
}
/* Kernel did not provide AT_SECURE - fall back on legacy test. */
program_is_setuid = (getuid() != geteuid()) || (getgid() != getegid());
综上所述,bionic差异并不大,主要是AT_SECURE的加入, SELinux水很深,推荐鸟哥的文章一读:
鳥哥的 Linux 私房菜-第十七章、程序管理與 SELinux 初探
分享到:
相关推荐
libc from google android even smaller than uclibc
Lubuntu-VirtualBox:Lubuntu Bionic 18.04.5最小和完整虚拟机。 VirtualBox OVA文件分别小于400 MB和1GB
Android C++高级编程:使用NDK_Onur Cinar, 于红PDF电子书下载 带书签目录 完整版 原书名:Pro Android C++ with the NDK 原出版社: Apress 作者: (美)Onur Cinar 译者: 于红 佘建伟 冯艳红 丛书名: 移动开发...
《Android C++高级编程——使用NDK》提供了Java原生接口(JNI)的概述、Bionic API、POSIX 线程和套接字、C++支持、原生图形和声音API以及NEON/SIMD优化,在一个游戏应用案例的帮助下,你将学到很多关键技能。...
LegoBionicFusion.github.io Lego Bionic Fusion 官方网站,第一乐高联盟团队 #818
32位android中bionic是32位的,其中的mutex只有一半也就是16位能够存储pid,当通过docker运行android时,大概率pid会超过16位的范围,就可能会导致android中mutex死锁,表现为应用卡住黑屏。 [32-bit ABI bugs]...
Pro Android C++ with the NDK Copyright ? 2012 by Onur Cinar ISBN-13 (pbk): 978-1-4302-4827-9 ISBN-13 (electronic): 978-1-4302-4828-6 Content: Chapter 1: Getting Started with C++ on Android Chapter 2: ...
《android技术内幕:系统卷》 前言 第1章 准备工作 /1 1.1 深入认识android /2 1.1.1 android的系统构架 /2 1.1.2 android的初始化流程 /5 1.1.3 各个层次之间的相互关系 /8 1.1.4 android系统开发(移植)和应用...
Bionic
Bionic - 谷歌的C标准库,为Android开发
全文详细介绍了源生应用开发,可用的原生API以及故障排除技术,并且本书还提供了大量的java原生接口的概论,如Bionic APIK、POSIX线程和套接字等等。在你熟读本书后,你将可以轻松的将你的原生代码移植到Android平台...
bionic:系统C库源代码,Android改造的C或C++库.pdf bootable:启动引导相关代码,适合各种bootloader的通用代码,包括一个recovery目录 .pdf build:存放系统编译规则及generic等基础开发包配置,包括原有的GNU make...
资源分类:Python库 所属语言:Python 资源全名:bionic-0.8.1-py2.py3-none-any.whl 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
bionic libc from google android even smaller than uclibc
原网址和安装教程https://github.com/ansh/bionic-reading 可以用来看英语网页,自动首字母加粗。 安装出错可以看博客https://blog.csdn.net/qq_15514379/article/details/124982268?spm=1001.2014.3001.5501
android 内存回收中引用的bionic 代码,资源引用自lenky,转载请声明。
Android并没有采用glibc作为C库,而是采用了Google自己开发的Bionic Libc,它的官方Toolchain也是基于Bionic Libc而并非glibc的。与glibc相比,Bionic Libc有如下一些特点: Ø 采用BSD License,而不是glibc的GPL ...
Android系统源码 1G大小,txt文本里有360网盘地址,本人Ubuntu下解压文件目录为:bionic bootable build cts dalvik device external frameworks hardware libcore packages prebuilt sdk system 。 希望对你用的着~...
Bionic:用于Blazor项目的Ionic CLI克隆 现在可用。 快速开始 在开始之前,请确保您的系统中提供以下工具: NodeJS已安装并在您的终端路径中可用 您可以从安装节点。 通过执行node命令来确保可用性: node --...