linux漏洞缓解机制介绍
发布网友
发布时间:2024-10-16 02:28
我来回答
共1个回答
热心网友
时间:2024-10-16 09:34
一、应用层安全防护
1. ASLR (Address Space Layout Randomization)
ASLR 通过随机化数据区域的地址空间来防止攻击者定位到特定内存地址进行攻击。Windows系统上,ASLR 包括堆栈随机化、PEB与TEB随机化、映像随机化。ASLR在Linux上主要包括栈地址随机化、LIBS/MMAP随机化、EXEC随机化、BRK随机化、VDSO随机化。
栈地址随机化:从2.6.15内核开始支持。
LIBS/MMAP随机化:程序每次执行动态库加载到不同内存位置。从2.6.15内核开始支持。
EXEC随机化:程序每次执行加载到不同内存位置。从2.6.25内核开始支持。
BRK随机化:Linux系统中brk和mmap系统调用来分配内存。当brk ASLR关闭时,start_brk和brk指向bss段尾部;开启时,位置随机化。
VDSO随机化:将内核态调用映射到用户态地址空间,减少调用开销。
Linux中ASLR等级:0(关闭)、1(共享库、栈、mmap随机化)、2(在1的基础上,brk内存空间也随机化)。
2. NX (Non-Executable Memory)
NX类似于Windows的DEP,禁止程序执行不可执行内存。通过gcc编译选项--noexecstack或链接选项-z noexecstack来设置程序是否具有可执行堆栈权限。在Ubuntu中,从11.04版本开始默认启用NX。
二、编译器安全防护
1. Built as PIE (Position Independent Executables)
PIE使程序可以在任意内存位置运行,需要同时开启ASLR和-fpie选项。从Ubuntu 17.10和Fedora 23开始,所有架构都启用PIE。
2. Built with RELRO (RELocation Read-Only)
RELRO限制重定位表为只读,减少GOT覆写攻击。从Fedora 23开始,全软件包启用Full RELRO。启用-Wl,-z,relro或-Wl,-z,relro,-z,now来开启。
3. Stack Protector
Stack Protector通过设置gcc编译参数-fstack-protector、-fstack-protector-all或-fstack-protector-strong提供栈保护功能。
三、内核安全防护
1. 某些发行版中特有的安全机制
1.1 dmesg restrictions:从Ubuntu 12.04 LTS开始,通过设置/proc/sys/kernel/dmesg_restrict为1,将dmesg输出视为敏感信息。
1.2 Kernel Address Display Restriction:从Ubuntu 11.04和RHEL 7开始,设置/proc/sys/kernel/kptr_restrict为1,阻止通过读取kallsyms泄露内核地址。
2. 所有发行版中都有的安全机制
2.1 KPTI (Kernel PageTable Isolation):为防止用户程序访问内核数据,内核地址空间和用户地址空间使用两组页表集。从Ubuntu 12.04开始启用。
2.2 KASLR (Kernel Address Space Layout Randomization):内核命令行中加入nokaslr关闭KASLR,提高安全。
2.3 SMAP/SMEP:SMAP和SMEP分别禁止内核访问用户空间数据和执行用户空间代码。从ARM架构开始,启用对应保护。
2.4 Stack Protector:编译内核时设置CONFIG_CC_STACKPROTECTOR选项,提供栈保护功能。从2.6.24版本开始实现。
3. Address protection:防止用户空间mmap内存从0开始分配,缓解NULL解引用攻击。Windows系统从win8开始禁止在零页分配内存。
从2.6.22内核版本开始,可以使用sysctl设置mmap_min_addr实现保护。从Ubuntu 9.04版本开始,内置mmap_min_addr设置(x86为64k,ARM为32k)。