Name |
Date |
Size |
#Lines |
LOC |
||
---|---|---|---|---|---|---|
.. | - | - | ||||
include/ | 12-May-2024 | - | 141 | 81 | ||
src/ | 12-May-2024 | - | 375 | 296 | ||
Kconfig | D | 12-May-2024 | 813 | 30 | 26 | |
Makefile | D | 12-May-2024 | 1 KiB | 38 | 25 | |
README_zh.md | D | 12-May-2024 | 3.3 KiB | 83 | 55 | |
apply_hideaddr.sh | D | 12-May-2024 | 668 | 31 | 17 | |
module.c | D | 12-May-2024 | 436 | 22 | 14 |
README_zh.md
1## 背景 2 3当前linux内核在内存安全方面还有需要加固的空间,memory_security模块为内存安全定制相应的功能来增强安全能力。 4 5## MEMORY_SECURITY 模块 6 7memory_security模块定制化内存的安全增强能力 8 9### MEMORY_SECURITY/hideaddr 模块 10 11MEMORY_SECURITY/hideaddr模块通过检查渲染进程映射的匿名内存是否具有可执行的权限,来针对性的将映射后的内存地址的start和end值设置为NULL,以此达到隐藏内存地址的目的 12 13#### 1. 进程类型检查 14 15通过进程的selinux安全上下文来判定当前proc/[pid]/maps中的pid对应的进程是否为渲染进程 16 17#### 2. 匿名内存区域权限检查 18 19内存区域的权限由vm_flags_t结构体的 flags成员呈现,通过检查flags是否具有-x-权限来决定是否将其所对应的地址隐藏起来。 20 21### MEMORT_SECURITY/jit_memory 模块 22 23MEMORT_SECURITY/jit_memory模块禁止渲染进程直接申请匿名可执行内存,以及限制将已申请的内存变更为可执行的内存,渲染进程在申请匿名可执行内存前首先需要在`mmap`时携带`flag &= MAP_JIT`,然后该段内存才可以在之后通过`mprotect`变更为可执行的内存。 24 25#### 1. 进程类型检查 26 27通过进程的selinux安全上下文来判定当前proc/[pid]/maps中的pid对应的进程是否为渲染进程 28 29#### 2. 可执行内存预申请 30进程在申请匿名可执行内存前首先需要在`mmap`时携带`flag &= MAP_JIT`,即预先声明该段内存之后会被用于存储可执行的代码段,在之后运行时才可使用`mprotect`将其更改为可执行的内存。 31 32## 目录 33 34## MEMORY_SECURITY执行权限管控的主要代码目录结构如下: 35 36``` 37# 代码路径 /kernel/linux/common_modules/memory_security 38│ module.c # memory_security 模块初始化 39│ apply_hideaddr.sh 40│ README_zh.md 41│ Kconfig 42│ Makefile 43│ 44├─src 45│ jit_memory.c # jit_memory 接口 46│ jit_process.c # jit_memory 进程相关 47│ hideaddr.c # hide_addr 挂载与实现 48│ jit_space_list.c # jit_memory 进程所拥有内存相关 49│ jit_memory_module.c # jit_memory 模块挂载 50│ 51└─include 52 jit_memory.h 53 jit_memory_log.h 54 jit_process.h 55 hideaddr.h 56 jit_memory_module.h 57 jit_space_list.h 58 59``` 60 61## MEMORY_SECURITY配置指导 621. MEMORY_SECURITY使能:`CONFIG_MEMORY_SECURTIY=y` 63 64 **只有在启用MEMORYSECURITY后,HIDEADDR与JIT_MEMORY才可以被正常使能。** 652. MEMORY_SECURITY禁用:`CONFIG_MEMORY_SECURTIY=n` 66 673. MEMORY_SECURITY/JIT_MEM_CONTROL使能: `CONFIG_JIT_MEM_CTRL=y` 684. MEMORY_SECURITY/JIT_MEM_CONTROL禁用: `CONFIG_JIT_MEM_CTRL=n` 695. MEMORY_SECURITY/HIDEADDR禁用: `CONFIG_HIDE_MEM_ADDRESS=y` 706. MEMORY_SECURITY/HIDEADDR禁用: `CONFIG_HIDE_MEM_ADDRESS=n` 71 72## 相关仓 73 74[内核子系统](https://gitee.com/openharmony/docs/blob/master/zh-cn/readme/%E5%86%85%E6%A0%B8%E5%AD%90%E7%B3%BB%E7%BB%9F.md) 75 76[kernel_linux_5.10](https://gitee.com/openharmony/kernel_linux_5.10) 77 78[kernel_linux_config](https://gitee.com/openharmony/kernel_linux_config) 79 80[device_board_hihope](https://gitee.com/openharmony/device_board_hihope) 81 82[security_selinux_adapter](https://gitee.com/openharmony/security_selinux_adapter) 83