安全编译选项

1 文件系统加密

FBE 文件级加密 (FBE)

文件级加密;

/dev/block/platform/soc/soc:ap-ahb/20600000.sdio/by-name/userdata /data f2fs noatime,nosuid,nodev,discard,inline_xattr,inline_data wait,check,fileencryption=aes-256-xts,reservedsize=128M

文件级加密  |  Android 开源项目  |  Android Open Source Project

2 启用文件级加密

如需在设备上启用文件级加密 (FBE),就必须在内部存储设备 (userdata) 上启用 FBE。这也会自动为可合并的存储设备启用 FBE;但是,如有必要,可以覆盖可合并的存储设备的加密格式。

内部存储设备

通过将 fileencryption=contents_encryption_mode[:filenames_encryption_mode[:flags]] 选项添加到 userdata 的 fstab 行 fs_mgr_flags 列,可启用 FBE。此选项用于定义内部存储设备的加密格式。它最多包含三个以英文冒号分隔的参数:

  • contents_encryption_mode 参数指定将哪种加密算法用于加密文件内容,可为 aes-256-xts 或 adiantum。从 Android 11 开始,它也可以留空以指定默认算法,即 aes-256-xts
  • filenames_encryption_mode 参数指定将哪种加密算法用于加密文件名,可为 aes-256-ctsaes-256-heh 或 adiantum。如果不指定,则当 contents_encryption_mode 为 aes-256-xts 时该参数默认为 aes-256-cts,当 contents_encryption_mode 为 adiantum 时该参数默认为 adiantum
  • Android 11 中新增的 flags 参数是以 + 字符分隔的一个标记列表。支持以下标记:
    • v1 标记用于选择第 1 版加密政策;v2 标记用于选择第 2 版加密政策。第 2 版加密政策使用更安全、更灵活的密钥派生函数。如果设备搭载的是 Android 11 或更高版本(由 ro.product.first_api_level 确定),则默认选择第 2 版;如果设备搭载的是 Android 10 或更低版本,则默认选择第 1 版。
    • inlinecrypt_optimized 标记用于选择针对无法高效处理大量密钥的内嵌加密硬件进行了优化的加密格式。其具体做法是仅为每个 CE 或 DE 密钥派生一个文件内容加密密钥,而不是为每个文件派生一个。IV(初始化向量)的生成也会相应地进行调整。
    • emmc_optimized 标记与 inlinecrypt_optimized 类似,但它还选择了将 IV 限制为 32 位的 IV 生成方法。此标记应仅在符合 JEDEC eMMC v5.2 规范的内嵌加密硬件上使用,因此仅支持 32 位 IV。在其他内嵌加密硬件上,请改用 inlinecrypt_optimized。此标记一律不得在基于 UFS 的存储设备上使用;UFS 规范允许使用 64 位 IV。
    • 在支持硬件封装密钥的设备上,wrappedkey_v0 标记允许为 FBE 使用硬件封装的密钥。此标记只能与 inlinecrypt 装载选项以及 inlinecrypt_optimized 或 emmc_optimized 标记结合使用。

如果不使用内嵌加密硬件,则建议对大多数设备采用设置 fileencryption=aes-256-xts。如果使用的是内嵌加密硬件,则建议对大多数设备采用设置 fileencryption=aes-256-xts:aes-256-cts:inlinecrypt_optimized(或等效的 fileencryption=::inlinecrypt_optimized)。在没有采用任何形式的 AES 加速的设备上,可以设置 fileencryption=adiantum,从而用 Adiantum 代替 AES。

在搭载 Android 10 或更低版本的设备上,也可以使用 fileencryption=ice 来指定使用 FSCRYPT_MODE_PRIVATE 文件内容加密模式。Android 通用内核未实现该模式,但供应商可使用自定义内核补丁程序实现该模式。该模式生成的磁盘格式因供应商而异。在搭载 Android 11 或更高版本的设备上,不允许再使用该模式,而必须使用标准加密格式。

三、安全编译项

1. Hardening the heap

 系统dlmalloc版本 2.8.6。堆溢出,unlink的利用,针对这种攻击,dlmalloc 添加了对unlink的校验功能。

assert(P !=B);\

assert(P !=F);\

assert(chunksize(P)==small_index2size(I));\   检测“卸下”的chunk的前向指针指向的内存块,保证其后向指针指向当前块,检查前向指针指向内存块,保证其前向指针指向当前块。

2 Preventing Data Execution

       在build/core/combo/TARGET_linux-arm.mk 文件中,TARGET_GLOBAL_LDFLAGS 已经包含--noexecstack 参数。攻击者利用栈溢出,改写函数的返回地址,执行shellcode将变得不可行。因为使用该机制后,系统利用CPU的硬件特性,把栈设置为不可执行,也就让攻击者的注入的shellcode 无法得到执行。链接选项加入 noexecstack 参数截图如下:

       例如:

      去掉-Wl -z noexecstack 参数,加上 -z execstack 编译出来的可执行文件通过readelf 工具,读出GNU_STACK 项的flg 为RWE;

    而使用 -Wl -z noexecstack 参数后,读出的Flg 为 RW。

Android系统支持ASLR,并且在init.rc启动脚本中,有echo 2 > proc/sys/kernel/randomize_va_value。 所以Android ASLR 机制更加强大,支持mmap基地址,栈基地址,so加载基地址和堆地址随机化。 在 build/core/binary.mk文件中  -fpie的选项。

例如:picc_service 是在系统编译出来的可执行文件,通过readelf -h picc_service,类型是DYN,如下图红框部分。

Stack-smashing Protection  在运行时,就可以检测到这种破话,从而对栈进行保护。Stack-samshing protection 使用canaries 探测,在缓冲区在保护函数返回地址的同时,还有意将局部变量的数组放在函数栈的高地址,而将其他变量放在低地址,这样使得通过数组溢出来修改其他变量(函数指针)会更为困难。编译时,GCC 编译器 传入 -fstack-proctector 标志,会启用 stack-smashing proctection (即propolice)栈保护机制。 如下图,在系统的android.mk文件中,已经传入该标注

支持,build/core/combo/TARGET_linux-arm.mk 中定义。

整体策略禁止non-firmware application使用的permissions Android protectionLevel属性是system/signature权限等.

1) 第三方应用安装过程检查申请的permissions属性level是否属于system/signature,同时使用platform证书签名,定制后的代码片段部分如下:

RSA 密钥位宽可选 1024、 2048、 3072 及 4096。根据 RSA 算法原理,明文和密文都
必须比公钥 N 小
,所以待加解密的数据长度必须小于或等于密钥的长度,惯用作法是
在待加解密的数据的高位补 0 等,使其长度和公钥 N 相等,但其值比公钥 N 小,
PKCS#1 标准定义了几种填充数据的方式,分别是 Block Type 0, Block Type 1,
Block Type 2, RSAES-OAEP 和 RSAES-PKCS1-v1_5 等。
 

Android GKI 架构简介

相关术语:

ACK:Android Common Kernel

AOSP:Android Open Source Project

GKI:Generic Kernel Image

KMI:Kernel Module Interface

LTS:Long Term Supported

DLKM:Dynamically loadable kernel module

GSI:Generic System Image

VTS:Vendor Test Suite

CTS:Compatibility Test Suite

chattr +i jenkins_test/ #加上i权限,让它无法写入

1.可执行文件设置成不可写

2.可执行文件(如二进制文件、引导脚本和系统脚本)的权限应为r-xr-xr-x(555)或更严格的限制。说明:只允许小于等于555的设置,例如  r-xr-xr-x  (555)、r-xr--r--  (544)、或 r-x------  (500)。

3.共享库文件和配置文件的权限应该是rw-r--r--(644)或更严格的限制。

【数据安全】4. Android 文件级加密(File-based Encryption)之密钥管理-pudn.com

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Code maturity level options 代码成熟度选项 Prompt for development and/or incomplete code/drivers 显示尚在开发中或尚未完成的代码与驱动.除非你是测试人员或者开发者,否则请勿选择 General setup 常规设置 Local version - append to kernel release 在内核版本后面加上自定义的版本字符串(小于64字符),可以用"uname -a"命令看到 Automatically append version information to the version string 自动在版本字符串后面添加版本信息,编译时需要有perl以及git仓库支持 Support for paging of anonymous memory (swap) 使用交换分区或者交换文件来做为虚拟内存 System V IPC System V进程间通信(IPC)支持,许多程序需要这个功能.必选,除非你知道自己在做什么 IPC Namespaces IPC命名空间支持,不确定可以不选 POSIX Message Queues POSIX消息队列,这是POSIX IPC中的一部分 BSD Process Accounting 将进程的统计信息写入文件的用户级系统调用,主要包括进程的创建时间/创建者/内存占用等信息 BSD Process Accounting version 3 file format 使用新的第三版文件格式,可以包含每个进程的PID和其父进程的PID,但是不兼容老版本的文件格式 Export task/process statistics through netlink 通过netlink接口向用户空间导出任务/进程的统计信息,与BSD Process Accounting的不同之处在于这些统计信息在整个任务/进程生存期都是可用的 Enable per-task delay accounting 在统计信息中包含进程等候系统资源(cpu,IO同步,内存交换等)所花费的时间 UTS Namespaces UTS名字空间支持,不确定可以不选 Auditing support 审计支持,某些内核模块(例如SELinux)需要它,只有同时选择其子项才能对系统调用进行审计 Enable system-call auditing support 支持对系统调用的审计 Kernel .config support 把内核的配置信息编译进内核中,以后可以通过scripts/extract-ikconfig脚本来提取这些信息 Enable access to .config through /proc/config.gz 允许通过/proc/config.gz访问内核的配置信息 Cpuset support 只有含有大量CPU(大于16个)的SMP系统或NUMA(非一致内存访问)系统才需要它 Kernel->user space relay support (formerly relayfs) 页码,1/28 2009-12-25 file://C:\DOCUME~1\WENXIA~1\LOCALS~1\Temp\NOVDYLQW.htm

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值