本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
AL2023 内核强化
AL2023 中的 6.1 Linux 内核配置和构建时包含多个强化选项和功能。
内核强化选项(与架构无关)
允许在运行时插入/替换 ACPI 方法 (CONFIG_ACPI_CUSTOM_METHOD)
Amazon Linux 禁用了此选项,因为它允许 root
用户写入任意内核内存。
此选项是内核自我保护项目推荐设置
其他二进制格式 (binfmt_misc
)
尽管此选项是内核自我保护项目 (KSPP) 的推荐设置
BUG()
支持
此选项是内核自我保护项目推荐设置
如果内核在检查内核内存结构的有效性时遇到数据损坏,则执行 BUG()
Linux 内核的某些部分会检查数据结构的内部一致性,并在检测到数据损坏执行 BUG()
。
此选项是内核自我保护项目推荐设置
COMPAT_BRK
此选项禁用后(这就是 Amazon Linux 配置内核的方式),则 randomize_va_space
sysctl
设置会默认为 2
,这也会在 mmap
基础地址、堆栈和 VDSO 页面随机化之上启用随机掩码。
此选项存在于内核中,目的是提供与 1996 年及更早版本的一些古老 libc.so.5
二进制文件的兼容性。
此选项是内核自我保护项目推荐设置
COMPAT_VDSO
此配置选项与 x86-64
有关,与 aarch64
无关。将此设置为 n
,Amazon Linux 内核不会在可预测的地址上显示 32 位虚拟动态共享对象 (VDSO)。自 2004 年以来,已知因该选项设置为 n
而被损坏的最新 glibc
版本是 glibc
2.3.3。
此选项是内核自我保护项目推荐设置
CONFIG_DEBUG
门控强化
受 CONFIG_DEBUG
限制的 Linux 内核配置选项通常设计用于为调试问题而构建的内核,性能之类的东西不是优先事项。AL2023 启用了CONFIG_DEBUG_LIST
硬化选项。
在配置 IOMMU 之前,禁用 EFI 存根中 PCI 设备的 DMA
尽管此选项是内核自我保护项目 (KSPP) 的推荐设置
用于在内核和用户空间之间复制内存的强化功能
当内核需要将内存复制到用户空间或从用户空间复制内存时,此选项会启用一些检查,可防范某些类别的堆溢出问题。
CONFIG_HARDENED_USERCOPY_FALLBACK
选项存在于内核 4.16 到 5.15 中,可帮助内核开发人员通过 WARN()
发现任何缺失的允许列表条目。由于 AL2023 附带了 6.1 内核,因此此选项与 AL2023 不再相关。
该CONFIG_HARDENED_USERCOPY_PAGESPAN
选项主要作为开发人员的调试选项存在于内核中,不再适用于 AL2023 中的 6.1 内核。
此选项是内核自我保护项目推荐设置
休眠支持
尽管此选项是内核自我保护项目 (KSPP) 的推荐设置
随机数生成
AL2023 内核的配置是为了确保有足够的熵可供在 EC2 中使用。
CONFIG_INET_DIAG
尽管此选项是内核自我保护项目 (KSPP) 的推荐设置
在分配和取消分配时,将所有内核页和 slab 分配器内存设置为零
尽管此选项是内核自我保护项目 (KSPP) 的推荐设置CONFIG_INIT_ON_ALLOC_DEFAULT_ON
行为可以通过将 init_on_alloc=1
添加到内核命令行来启用,CONFIG_INIT_ON_FREE_DEFAULT_ON
行为可以通过添加 init_on_free=1
来启用。
将所有堆栈变量初始化为零 (CONFIG_INIT_STACK_ALL_ZERO
)
尽管此选项是内核自我保护项目 (KSPP) 的推荐设置
内核模块签名
AL2023 对内核模块的签名进行签名和验证。为了保持构建第三方模块的用户的兼容性,尚未启用要求模块具有有效签名的 CONFIG_MODULE_SIG_FORCE
选项。对于想要确保所有内核模块都经过签名的用户,可以配置 锁定 Linux 安全模块 (LSM) 以强制执行此操作。
kexec
尽管此选项是内核自我保护项目 (KSPP) 的推荐设置kdump
功能。
IOMMU
Support
AL2023 启用 IOMMU 支持。默认情况下,CONFIG_IOMMU_DEFAULT_DMA_STRICT
选项未启用,但可以通过将 iommu.passthrough=0 iommu.strict=1
添加到内核命令行来配置此功能。
kfence
尽管此选项是内核自我保护项目 (KSPP) 的推荐设置
传统 pty
支持
AL2023 使用现代PTY界面 (devpts
)。
此选项是内核自我保护项目推荐设置
锁定 Linux 安全模块 (LSM)
AL2023 构建 lockdown
LSM,它将在使用安全启动时自动锁定内核。
CONFIG_LOCK_DOWN_KERNEL_FORCE_CONFIDENTIALITY
选项未启用。尽管此选项是内核自我保护项目 (KSPP) 的推荐设置
页面中毒
尽管此选项是内核自我保护项目 (KSPP) 的推荐设置
堆栈保护器
AL2023 内核是使用堆栈保护器功能构建的,可通过该GCC选项启用。-fstack-protector-strong
此选项是内核自我保护项目推荐设置
seccomp BPF API
诸如 systemd
和容器运行时之类的软件使用 seccomp 强化功能来强化用户空间应用程序。
此选项是内核自我保护项目推荐设置
panic()
超时
AL2023 内核配置此值设置为0
,这意味着内核在死机后不会重新启动。尽管此选项是内核自我保护项目 (KSPP) 的推荐设置sysctl
、/proc/sys/kernel/panic
和在内核命令行上进行配置。
安全模型
默认情况下,AL2023 在宽容模式下启用 SELinux。有关更多信息,请参阅 为 AL2023 设置 SELinux 模式。
锁定 Linux 安全模块 (LSM) 和 yama
模块也已启用。
/proc/kcore
尽管此选项是内核自我保护项目 (KSPP) 的推荐设置
在系统调用进入时进行内核栈偏移随机化
尽管此选项是内核自我保护项目 (KSPP) 的推荐设置randomize_kstack_offset=on
来启用。
引用计数检查 (CONFIG_REFCOUNT_FULL
)
尽管此选项是内核自我保护项目 (KSPP) 的推荐设置
调度程序对 SMT 内核的感知 (CONFIG_SCHED_CORE
)
AL2023 内核是用它构建的CONFIG_SCHED_CORE
,允许用户空间应用程序使用prctl(PR_SCHED_CORE)
。此选项是内核自我保护项目推荐设置
在调用 schedule()
时检查是否存在栈损坏 (CONFIG_SCHED_STACK_END_CHECK
)
AL2023 内核是在CONFIG_SCHED_STACK_END_CHECK
启用状态下构建的。此选项是内核自我保护项目推荐设置
内存分配器强化
AL2023 内核允许使用CONFIG_SHUFFLE_PAGE_ALLOCATOR
、CONFIG_SLAB_FREELIST_HARDENED
和选项对内核内存分配器进行强化。CONFIG_SLAB_FREELIST_RANDOM
此选项是内核自我保护项目推荐设置
SLUB 调试支持
AL2023 内核启用CONFIG_SLUB_DEBUG
,因为此选项为分配器启用了可选的调试功能,这些功能可以在内核命令行上启用。此选项是内核自我保护项目推荐设置
CONFIG_STATIC_USERMODEHELPER
尽管此选项是内核自我保护项目 (KSPP) 的推荐设置CONFIG_STATIC_USERMODEHELPER
需要该发行版的特殊支持,而 Amazon Linux 中目前没有这种支持。
只读内核文本和 rodata(CONFIG_STRICT_KERNEL_RWX
和 CONFIG_STRICT_MODULE_RWX
)
AL2023 内核配置为将内核和内核模块的文本和rodata内存标记为只读,将非文本内存标记为不可执行。此选项是内核自我保护项目推荐设置
TCP syncookie 支持 (CONFIG_SYN_COOKIES
)
AL2023 内核是在支持 TCP 同步 cookie 的情况下构建的。此选项是内核自我保护项目推荐设置
带有保护页面的虚拟映射栈 (CONFIG_VMAP_STACK
)
AL2023 内核是用构建的CONFIG_VMAP_STACK
,允许使用保护页进行虚拟映射的内核堆栈。此选项是内核自我保护项目推荐设置
使用编译器警告作为错误进行构建 (CONFIG_WERROR
)
尽管此选项是内核自我保护项目 (KSPP) 的推荐设置
在函数退出时进行寄存器清零 (CONFIG_ZERO_CALL_USED_REGS
)
尽管此选项是内核自我保护项目 (KSPP) 的推荐设置
用户空间分配的最小地址
此强化选项可以帮助减少内核 NULL 指针错误的影响。此选项是内核自我保护项目推荐设置
clang
特定的强化选项
AL2023 内核是使用GCC而不是构建的clang,因此无法启用CONFIG_CFI_CLANG
强化选项,这也使得它CONFIG_CFI_PERMISSIVE
不适用。尽管此选项是内核自我保护项目 (KSPP) 的推荐设置
x86-64 特定的内核强化选项
CONFIG 选项 |
AL2023/6.1/aarch64 | AL2023/6.1/x86_64 |
---|---|---|
CONFIG_AMD_IOMMU | 不适用 |
y
|
CONFIG_AMD_IOMMU_V2 | 不适用 |
y
|
CONFIG_IA32_EMULATION | 不适用 |
y
|
CONFIG_INTEL_IOMMU | 不适用 |
y
|
CONFIG_INTEL_IOMMU_DEFAULT_ON | 不适用 |
n
|
CONFIG_INTEL_IOMMU_SVM | 不适用 |
n
|
CONFIG_LEGACY_VSYSCALL_NONE | 不适用 |
n
|
CONFIG_MODIFY_LDT_SYSCALL | 不适用 |
n
|
CONFIG_PAGE_TABLE_ISOLATION | 不适用 |
y
|
CONFIG_RANDOMIZE_MEMORY | 不适用 |
y
|
CONFIG_X86_64 | 不适用 |
y
|
CONFIG_X86_MSR | 不适用 |
y
|
CONFIG_X86_VSYSCALL_EMULATION | 不适用 |
y
|
CONFIG_X86_X32 | 不适用 | 不适用 |
CONFIG_X86_X32_ABI | 不适用 |
n
|
x86-64 支持
基本 x86-64 支持包括物理地址扩展 (PAE) 和不执行 (NX) 位支持。此选项是内核自我保护项目推荐设置
AMD 和 Intel IOMMU 支持
AL2023 内核构建时支持 AMD 和英特尔IOMMUs。此选项是内核自我保护项目推荐设置
CONFIG_INTEL_IOMMU_DEFAULT_ON
选项未设置,但可以通过将 intel_iommu=on
传递到内核命令行来启用。尽管此选项是内核自我保护项目 (KSPP) 的推荐设置
该CONFIG_INTEL_IOMMU_SVM
选项目前未在 AL2023 中启用。尽管此选项是内核自我保护项目 (KSPP) 的推荐设置
支持 32 位用户空间
重要
对 32 位 x86 用户空间的支持已弃用,在未来的主版本 Amazon Linux 中,可能会取消对运行 32 位用户空间二进制文件的支持。
注意
虽然 AL2023 不再包含任何 32 位软件包,但内核仍将支持运行 32 位用户空间。请参阅32 位 x86 (i686) 软件包了解更多信息。
为了支持运行 32 位用户空间应用程序,AL2023 不启用该CONFIG_X86_VSYSCALL_EMULATION
选项,而是启用CONFIG_IA32_EMULATION
CONFIG_COMPAT
、和CONFIG_X86_VSYSCALL_EMULATION
选项。尽管此选项是内核自我保护项目 (KSPP) 的推荐设置
未启用 64 位处理器的 x32 本机 32 位 ABI(CONFIG_X86_X32
和 CONFIG_X86_X32_ABI
)。此选项是内核自我保护项目推荐设置
x86 型号特定寄存器 (MSR) 支持
启用 CONFIG_X86_MSR
选项是为了支持 turbostat
。尽管此选项是内核自我保护项目 (KSPP) 的推荐设置
modify_ldt
系统调用
AL2023 不允许用户程序使用 syscall 修改 x86 本地描述符表 (LDT)。modify_ldt
此调用是运行 16 位或分段代码所必需的,缺少这个调用可能会破坏 dosemu
等软件,在 WINE 下运行一些程序以及一些非常旧的线程库。此选项是内核自我保护项目推荐设置
在用户模式下移除内核映射
AL2023 配置内核,使大多数内核地址不会映射到用户空间。此选项是内核自我保护项目推荐设置
随机化内核内存部分
AL2023 将内核配置为随机化内核内存部分的基本虚拟地址。此选项是内核自我保护项目推荐设置
aarch64 特定的内核强化选项
CONFIG 选项 |
AL2023/6.1/aarch64 | AL2023/6.1/x86_64 |
---|---|---|
CONFIG_ARM64_BTI |
y
|
不适用 |
CONFIG_ARM64_BTI_KERNEL | 不适用 | 不适用 |
CONFIG_ARM64_PTR_AUTH |
y
|
不适用 |
CONFIG_ARM64_PTR_AUTH_KERNEL |
y
|
不适用 |
CONFIG_ARM64_SW_TTBR0_PAN |
y
|
不适用 |
CONFIG_UNMAP_KERNEL_AT_EL0 |
y
|
不适用 |
分支目标识别
AL2023 内核支持分支目标识别 (CONFIG_ARM64_BTI
)。此选项是内核自我保护项目推荐设置
在 AL2023 中未启用 CONFIG_ARM64_BTI_KERNEL
选项,因为它是使用 GCC 构建的,而由于 gcc 错误
指针身份验证 (CONFIG_ARM64_PTR_AUTH
)
AL2023 内核构建时支持指针身份验证扩展(ARMv8.3 扩展的一部分),该扩展可用于帮助缓解面向返回的编程 (ROP) 技术。Graviton 3 引入了在 Graviton
CONFIG_ARM64_PTR_AUTH
选项已启用,并支持针对用户空间的指针身份验证。由于该CONFIG_ARM64_PTR_AUTH_KERNEL
选项也已启用,所以 AL2023 内核可以自行使用返回地址保护。
此选项是内核自我保护项目推荐设置
使用 TTBR0_EL1
切换的 Emulate Privileged Access Never
此选项可防止内核直接访问用户空间内存,TTBR0_EL1
只由用户访问例程临时设置为有效值。
此选项是内核自我保护项目推荐设置
在用户空间中运行时取消内核映射
AL2023 内核配置为在用户空间 (CONFIG_UNMAP_KERNEL_AT_EL0
) 中运行时取消内核映射。此选项是内核自我保护项目推荐设置