AL2023 内核强化 - Amazon Linux 2023

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

AL2023 内核强化

AL2023 中的 6.1 Linux 内核配置和构建时包含多个强化选项和功能。

内核强化选项(与架构无关)

CONFIG 选项 AL2023/6.1/aarch64 AL2023/6.1/x86_64
CONFIG_ACPI_CUSTOM_METHOD n n
CONFIG_BINFMT_MISC m m
CONFIG_BUG y y
CONFIG_BUG_ON_DATA_CORRUPTION y y
CONFIG_CFI_CLANG 不适用 不适用
CONFIG_CFI_PERMISSIVE 不适用 不适用
CONFIG_COMPAT y y
CONFIG_COMPAT_BRK n n
CONFIG_COMPAT_VDSO 不适用 n
CONFIG_DEBUG_CREDENTIALS n n
CONFIG_DEBUG_LIST y y
CONFIG_DEBUG_NOTIFIERS n n
CONFIG_DEBUG_SG n n
CONFIG_DEBUG_VIRTUAL n n
CONFIG_DEBUG_WX n n
CONFIG_DEFAULT_MMAP_MIN_ADDR 65536 65536
CONFIG_DEVKMEM 不适用 不适用
CONFIG_DEVMEM n n
CONFIG_EFI_DISABLE_PCI_DMA n n
CONFIG_FORTIFY_SOURCE y y
CONFIG_HARDENED_USERCOPY y y
CONFIG_HARDENED_USERCOPY_FALLBACK 不适用 不适用
CONFIG_HARDENED_USERCOPY_PAGESPAN 不适用 不适用
CONFIG_HIBERNATION y y
CONFIG_HW_RANDOM_TPM 不适用 不适用
CONFIG_INET_DIAG m m
CONFIG_INIT_ON_ALLOC_DEFAULT_ON n n
CONFIG_INIT_ON_FREE_DEFAULT_ON n n
CONFIG_INIT_STACK_ALL_ZERO 不适用 不适用
CONFIG_IOMMU_DEFAULT_DMA_STRICT n n
CONFIG_IOMMU_SUPPORT y y
CONFIG_IO_STRICT_DEVMEM 不适用 不适用
CONFIG_KEXEC y y
CONFIG_KFENCE n n
CONFIG_LDISC_AUTOLOAD n n
CONFIG_LEGACY_PTYS n n
CONFIG_LOCK_DOWN_KERNEL_FORCE_CONFIDENTIALITY n n
CONFIG_MODULES y y
CONFIG_MODULE_SIG y y
CONFIG_MODULE_SIG_ALL y y
CONFIG_MODULE_SIG_FORCE n n
CONFIG_MODULE_SIG_HASH sha512 sha512
CONFIG_MODULE_SIG_KEY certs/signing_key.pem certs/signing_key.pem
CONFIG_MODULE_SIG_SHA512 y y
CONFIG_PAGE_POISONING n n
CONFIG_PAGE_POISONING_NO_SANITY 不适用 不适用
CONFIG_PAGE_POISONING_ZERO 不适用 不适用
CONFIG_PANIC_ON_OOPS y y
CONFIG_PANIC_TIMEOUT 0 0
CONFIG_PROC_KCORE y y
CONFIG_RANDOMIZE_KSTACK_OFFSET_DEFAULT n n
CONFIG_RANDOM_TRUST_BOOTLOADER y y
CONFIG_RANDOM_TRUST_CPU y y
CONFIG_REFCOUNT_FULL 不适用 不适用
CONFIG_SCHED_CORE 不适用 y
CONFIG_SCHED_STACK_END_CHECK y y
CONFIG_SECCOMP y y
CONFIG_SECCOMP_FILTER y y
CONFIG_SECURITY y y
CONFIG_SECURITY_DMESG_RESTRICT y y
CONFIG_SECURITY_LANDLOCK n n
CONFIG_SECURITY_LOCKDOWN_LSM y y
CONFIG_SECURITY_LOCKDOWN_LSM_EARLY y y
CONFIG_SECURITY_SELINUX_BOOTPARAM y y
CONFIG_SECURITY_SELINUX_DEVELOP y y
CONFIG_SECURITY_SELINUX_DISABLE n n
CONFIG_SECURITY_WRITABLE_HOOKS 不适用 不适用
CONFIG_SECURITY_YAMA y y
CONFIG_SHUFFLE_PAGE_ALLOCATOR y y
CONFIG_SLAB_FREELIST_HARDENED y y
CONFIG_SLAB_FREELIST_RANDOM y y
CONFIG_SLUB_DEBUG y y
CONFIG_STACKPROTECTOR y y
CONFIG_STACKPROTECTOR_STRONG y y
CONFIG_STATIC_USERMODEHELPER n n
CONFIG_STRICT_DEVMEM n n
CONFIG_STRICT_KERNEL_RWX y y
CONFIG_STRICT_MODULE_RWX y y
CONFIG_SYN_COOKIES y y
CONFIG_VMAP_STACK y y
CONFIG_WERROR n n
CONFIG_ZERO_CALL_USED_REGS n n

允许在运行时插入/替换 ACPI 方法 (CONFIG_ACPI_CUSTOM_METHOD)

Amazon Linux 禁用了此选项,因为它允许 root 用户写入任意内核内存。

此选项是内核自我保护项目推荐设置之一。

其他二进制格式 (binfmt_misc)

尽管此选项是内核自我保护项目 (KSPP) 的推荐设置之一,但 AL2023 并未将此配置选项设置为 KSPP 建议的选项。在 AL2023 中,此功能是可选的,是作为内核模块构建的。

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) 的推荐设置之一,但 AL2023 并未将此配置选项设置为 KSPP 建议的选项。

用于在内核和用户空间之间复制内存的强化功能

当内核需要将内存复制到用户空间或从用户空间复制内存时,此选项会启用一些检查,可防范某些类别的堆溢出问题。

CONFIG_HARDENED_USERCOPY_FALLBACK 选项存在于内核 4.16 到 5.15 中,可帮助内核开发人员通过 WARN() 发现任何缺失的允许列表条目。由于 AL2023 附带了 6.1 内核,因此此选项与 AL2023 不再相关。

CONFIG_HARDENED_USERCOPY_PAGESPAN选项主要作为开发人员的调试选项存在于内核中,不再适用于 AL2023 中的 6.1 内核。

此选项是内核自我保护项目推荐设置之一。

休眠支持

尽管此选项是内核自我保护项目 (KSPP) 的推荐设置之一,但 AL2023 并未将此配置选项设置为 KSPP 建议的选项。需要启用此选项才能支持将休眠按需型实例并支持休眠中断的竞价型实例

随机数生成

AL2023 内核的配置是为了确保有足够的熵可供在 EC2 中使用。

CONFIG_INET_DIAG

尽管此选项是内核自我保护项目 (KSPP) 的推荐设置之一,但 AL2023 并未将此配置选项设置为 KSPP 建议的选项。在 AL2023 中,此功能是可选的,是作为内核模块构建的。

在分配和取消分配时,将所有内核页和 slab 分配器内存设置为零

尽管此选项是内核自我保护项目 (KSPP) 的推荐设置之一,但 AL2023 并未将此配置选项设置为 KSPP 建议的选项。这些选项在 AL2023 中处于禁用状态,因为默认情况下启用此功能可能会对性能产生影响。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 并未将此配置选项设置为 KSPP 建议的选项。此选项需要 GCC 12 或更高版本,而 AL2023 随附 GCC 11。

内核模块签名

AL2023 对内核模块的签名进行签名和验证。为了保持构建第三方模块的用户的兼容性,尚未启用要求模块具有有效签名的 CONFIG_MODULE_SIG_FORCE 选项。对于想要确保所有内核模块都经过签名的用户,可以配置 锁定 Linux 安全模块 (LSM) 以强制执行此操作。

kexec

尽管此选项是内核自我保护项目 (KSPP) 的推荐设置之一,但 AL2023 并未将此配置选项设置为 KSPP 建议的选项。启用此选项是为了便于使用 kdump 功能。

IOMMU Support

AL2023 启用 IOMMU 支持。默认情况下,CONFIG_IOMMU_DEFAULT_DMA_STRICT 选项未启用,但可以通过将 iommu.passthrough=0 iommu.strict=1 添加到内核命令行来配置此功能。

kfence

尽管此选项是内核自我保护项目 (KSPP) 的推荐设置之一,但 AL2023 并未将此配置选项设置为 KSPP 建议的选项。

传统 pty 支持

AL2023 使用现代PTY界面 (devpts)。

此选项是内核自我保护项目推荐设置之一。

锁定 Linux 安全模块 (LSM)

AL2023 构建 lockdown LSM,它将在使用安全启动时自动锁定内核。

CONFIG_LOCK_DOWN_KERNEL_FORCE_CONFIDENTIALITY 选项未启用。尽管此选项是内核自我保护项目 (KSPP) 的推荐设置之一,但 AL2023 并未将此配置选项设置为 KSPP 建议的选项。不使用安全启动时,可以启用锁定 LSM 并根据需要进行配置。

页面中毒

尽管此选项是内核自我保护项目 (KSPP) 的推荐设置之一,但 AL2023 并未将此配置选项设置为 KSPP 建议的选项。与此类似 在分配和取消分配时,将所有内核页和 slab 分配器内存设置为零 ,由于这可能会影响性能,因此在 AL2023 内核中禁用了该功能。

堆栈保护器

AL2023 内核是使用堆栈保护器功能构建的,可通过该GCC选项启用。-fstack-protector-strong

此选项是内核自我保护项目推荐设置之一。

seccomp BPF API

诸如 systemd 和容器运行时之类的软件使用 seccomp 强化功能来强化用户空间应用程序。

此选项是内核自我保护项目推荐设置之一。

panic() 超时

AL2023 内核配置此值设置为0,这意味着内核在死机后不会重新启动。尽管此选项是内核自我保护项目 (KSPP) 的推荐设置之一,但 AL2023 并未将此配置选项设置为 KSPP 建议的选项。这可以通过 sysctl/proc/sys/kernel/panic 和在内核命令行上进行配置。

安全模型

默认情况下,AL2023 在宽容模式下启用 SELinux。有关更多信息,请参阅 为 AL2023 设置 SELinux 模式

锁定 Linux 安全模块 (LSM) yama 模块也已启用。

/proc/kcore

尽管此选项是内核自我保护项目 (KSPP) 的推荐设置之一,但 AL2023 并未将此配置选项设置为 KSPP 建议的选项。

在系统调用进入时进行内核栈偏移随机化

尽管此选项是内核自我保护项目 (KSPP) 的推荐设置之一,但 AL2023 并未将此配置选项设置为 KSPP 建议的选项。这可以通过在内核命令行上设置 randomize_kstack_offset=on 来启用。

引用计数检查 (CONFIG_REFCOUNT_FULL)

尽管此选项是内核自我保护项目 (KSPP) 的推荐设置之一,但 AL2023 并未将此配置选项设置为 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_ALLOCATORCONFIG_SLAB_FREELIST_HARDENED和选项对内核内存分配器进行强化。CONFIG_SLAB_FREELIST_RANDOM此选项是内核自我保护项目推荐设置之一。

SLUB 调试支持

AL2023 内核启用CONFIG_SLUB_DEBUG,因为此选项为分配器启用了可选的调试功能,这些功能可以在内核命令行上启用。此选项是内核自我保护项目推荐设置之一。

CONFIG_STATIC_USERMODEHELPER

尽管此选项是内核自我保护项目 (KSPP) 的推荐设置之一,但 AL2023 并未将此配置选项设置为 KSPP 建议的选项。这是因为 CONFIG_STATIC_USERMODEHELPER 需要该发行版的特殊支持,而 Amazon Linux 中目前没有这种支持。

只读内核文本和 rodata(CONFIG_STRICT_KERNEL_RWXCONFIG_STRICT_MODULE_RWX

AL2023 内核配置为将内核和内核模块的文本和rodata内存标记为只读,将非文本内存标记为不可执行。此选项是内核自我保护项目推荐设置之一。

TCP syncookie 支持 (CONFIG_SYN_COOKIES)

AL2023 内核是在支持 TCP 同步 cookie 的情况下构建的。此选项是内核自我保护项目推荐设置之一。

带有保护页面的虚拟映射栈 (CONFIG_VMAP_STACK)

AL2023 内核是用构建的CONFIG_VMAP_STACK,允许使用保护页进行虚拟映射的内核堆栈。此选项是内核自我保护项目推荐设置之一。

使用编译器警告作为错误进行构建 (CONFIG_WERROR)

尽管此选项是内核自我保护项目 (KSPP) 的推荐设置之一,但 AL2023 并未将此配置选项设置为 KSPP 建议的选项。

在函数退出时进行寄存器清零 (CONFIG_ZERO_CALL_USED_REGS)

尽管此选项是内核自我保护项目 (KSPP) 的推荐设置之一,但 AL2023 并未将此配置选项设置为 KSPP 建议的选项。

用户空间分配的最小地址

此强化选项可以帮助减少内核 NULL 指针错误的影响。此选项是内核自我保护项目推荐设置之一。

clang 特定的强化选项

AL2023 内核是使用GCC而不是构建的clang,因此无法启用CONFIG_CFI_CLANG强化选项,这也使得它CONFIG_CFI_PERMISSIVE不适用。尽管此选项是内核自我保护项目 (KSPP) 的推荐设置之一,但 AL2023 并未将此配置选项设置为 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) 的推荐设置之一,但 AL2023 并未将此配置选项设置为 KSPP 建议的选项。

CONFIG_INTEL_IOMMU_SVM选项目前未在 AL2023 中启用。尽管此选项是内核自我保护项目 (KSPP) 的推荐设置之一,但 AL2023 并未将此配置选项设置为 KSPP 建议的选项。

支持 32 位用户空间

重要

对 32 位 x86 用户空间的支持已弃用,在未来的主版本 Amazon Linux 中,可能会取消对运行 32 位用户空间二进制文件的支持。

注意

虽然 AL2023 不再包含任何 32 位软件包,但内核仍将支持运行 32 位用户空间。请参阅32 位 x86 (i686) 软件包了解更多信息。

为了支持运行 32 位用户空间应用程序,AL2023 不启用该CONFIG_X86_VSYSCALL_EMULATION选项,而是启用CONFIG_IA32_EMULATIONCONFIG_COMPAT、和CONFIG_X86_VSYSCALL_EMULATION选项。尽管此选项是内核自我保护项目 (KSPP) 的推荐设置之一,但 AL2023 并未将此配置选项设置为 KSPP 建议的选项。

未启用 64 位处理器的 x32 本机 32 位 ABI(CONFIG_X86_X32CONFIG_X86_X32_ABI)。此选项是内核自我保护项目推荐设置之一。

x86 型号特定寄存器 (MSR) 支持

启用 CONFIG_X86_MSR 选项是为了支持 turbostat。尽管此选项是内核自我保护项目 (KSPP) 的推荐设置之一,但 AL2023 并未将此配置选项设置为 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 错误,针对使用此选项构建内核的支持当前在上游内核中已禁用。尽管此选项是内核自我保护项目 (KSPP) 的推荐设置之一,但 AL2023 并未将此配置选项设置为 KSPP 建议的选项。

指针身份验证 (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) 中运行时取消内核映射。此选项是内核自我保护项目推荐设置之一。