ACL是阻断本地提权链式攻击的关键控制点,通过锁定高危路径与服务二进制父目录、加固注册表项、约束SUID/SGID文件及临时目录权限,并结合SACL审计实现主动防御。

ACL(访问控制列表)在系统安全加固中不是“配个规则就完事”的静态配置,而是阻断本地提权链式攻击的关键控制点。它不直接修复漏洞,但能切断攻击者利用漏洞所需的权限路径、文件写入条件和进程执行环境——尤其针对像无引号服务路径、注册表符号链接劫持、SUID二进制篡改、页缓存越界写等依赖“可写+可执行+可继承权限”组合的本地提权场景。
锁定高危路径与服务二进制的父目录ACL
无引号服务路径提权(如CVE-2026常见利用)依赖攻击者在服务路径某一级父目录拥有写权限。ACL是第一道拦截线:
- 用icacls "C:\Program Files\MyApp" /verify检查路径中每一级目录是否含(OI)(CI)(W)(对象/容器继承+写入),重点识别Users或Authenticated Users的非必要写权限
- 对含空格的服务路径(如C:\Program Files\App\service.exe),收紧C:\Program Files和C:\Program Files\App两级ACL:移除Users组的Modify和Write,仅保留Read & Execute
- 同步检查服务运行账户(如NT SERVICE\MyService)是否被错误授予了父目录Full Control——这会绕过目录级限制,必须降为Read或Read & Execute
加固关键注册表项ACL,防符号链接劫持类提权
MiniPlasma(CVE-2020-17103)等驱动级提权常通过篡改HKLM\SYSTEM\CurrentControlSet\Control\SymbolicLinks或内核对象路径实现。ACL可阻止普通用户创建/修改关键符号链接:
- 对HKLM\SYSTEM\CurrentControlSet\Control\DeviceClasses、HKLM\SYSTEM\CurrentControlSet\Services等敏感键,右键→“权限”→高级→禁用继承→移除Users和Everyone的Set Value、Create Subkey权限
- 为Administrators和SYSTEM显式设置Full Control,并勾选“仅对本项”避免权限向下蔓延
- 特别关注HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System——此位置控制UAC行为,若被低权限用户写入EnableLUA=0将彻底关闭保护
约束SUID/SGID文件与临时目录的ACL,阻断Linux本地提权链
Linux下SUID配置不当(如/usr/bin/find被设为SUID)或/tmp目录宽松权限,是脏牛、Copy Fail等漏洞的放大器。ACL可补足传统chmod的粒度不足:
- 对高风险SUID文件(find、nmap、vim等),用setfacl -m u:attacker:--- /usr/bin/find显式拒绝特定用户访问,比单纯chmod u-s更精准
- 对/tmp、/var/tmp启用sticky bit + default ACL:setfacl -d -m u::rwx,g::r-x,o::- /tmp,确保新创建文件默认不被其他用户写入
- 检测异常高权限文件:find / -xdev -type f \( -perm -4000 -o -perm -2000 \) -exec ls -la {} \; 2>/dev/null | grep -v "root",对非root拥有的SUID文件立即用ACL锁定
配合审计ACL,让提权前兆行为暴露无遗
ACL本身不记录操作,但结合SACL(系统访问控制列表)可强制审计关键对象的权限变更尝试:
- 对上述加固的注册表键、服务路径目录、SUID文件,右键→“属性”→“安全”→“高级”→“审核”→添加Everyone,勾选Successful和Failed的Set Permissions、Write、Delete
- 事件日志中将捕获Event ID 4670(权限更改)、4662(对象访问失败),这些正是攻击者试探ACL边界的痕迹
- 将此类日志接入SIEM,设置规则:5分钟内同一用户触发3次Failed Set Permissions即告警——这大概率是自动化提权工具在暴力探测可写路径

















