• Home
Name
Date
Size
#Lines
LOC

..--

include/12-May-2024-14181

src/12-May-2024-375296

KconfigD12-May-2024813 3026

MakefileD12-May-20241 KiB3825

README_zh.mdD12-May-20243.3 KiB8355

apply_hideaddr.shD12-May-2024668 3117

module.cD12-May-2024436 2214

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
38module.c                      # memory_security 模块初始化
39apply_hideaddr.sh
40README_zh.md
41│  Kconfig
42│  Makefile
4344├─src
45jit_memory.c              # jit_memory 接口
46jit_process.c             # jit_memory 进程相关
47hideaddr.c                # hide_addr 挂载与实现
48jit_space_list.c          # jit_memory 进程所拥有内存相关
49jit_memory_module.c       # jit_memory 模块挂载
5051└─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