AccessChk 学习笔记(9.2):最小权限体检利器——文件/注册表/服务/进程统一权限可视化

适用读者:Windows 运维/安全/开发、域管/审计、应急响应工程师
目标:用一条命令看清“谁对什么有何种权限”,支撑最小权限与合规审计。


你将收获

  • AccessChk 能力全览:一次性盘点文件/目录、注册表、服务、进程、对象管理器命名对象、共享的访问权限。 (learn.microsoft.com)
  • 正确的命令行语法与高频开关清单(含读取/写入筛选、递归、显式 DACL、整型权限详情)。 (learn.microsoft.com)
  • 10 条即用即拷的典型场景命令;外加排错与最佳实践。

1. 工具定位与运行原理(速读)

AccessChk 是 Sysinternals 的只读权限体检工具:给定对象(文件/注册表/服务/进程/共享/内核对象等)与账户(或默认列出 DACL 中的账户),它计算并展示有效权限(R/W/X 等)与可选的完整安全描述符(SD)。无需代理、解压即用。 (learn.microsoft.com)

安装:将二进制放入 PATH;首次运行可用 -nobanner-accepteula(任一 Sysinternals 工具首次运行需接受 EULA)。语法输入 accesschk 可查看帮助。 (learn.microsoft.com)


2. 命令行语法与高频参数

基本用法(简化版)

accesschk [对象修饰] [过滤/显示] [递归/详细] [账户] <对象路径或名称>

对象修饰(告诉它你查什么)

开关 说明 示例
-k 目标是注册表键 -k hklm\software
-c 目标是服务(值为服务名或 *scmanager 检查 SCM 自身) -c spooler-c *-c scmanager
-p 目标是进程(名或 PID;* 为所有) -p lsass.exe-p *
-h 目标是文件/打印共享 -h *
-o 目标是对象管理器命名对象(可加 -t section/event/... 过滤类型) -o \BaseNamedObjects -t section

过滤/显示选项(最常用)

开关 作用 备注
-r 仅显示授予读取的对象 读矩阵快速排查
-w 仅显示授予写入的对象 高风险聚焦
-x 仅显示授予执行的对象 可执行路径核查
-e 只看显式完整性级别/显式 DACL 噪音降维
-n 仅显示无访问对象 封禁验证
-l 输出完整 SD(配合 -i 忽略继承 ACE) 深度审计
-f -p 模式下显示令牌组与特权;或作为账户过滤列表 进程令牌体检
-s 递归子目录/子键/子对象 目录/注册表树漫游
-v 详情(含完整权限位/完整性级别) 精准取证
-u 抑制错误 扫描大范围更清爽
-nobanner 不显示工具横幅 批处理更干净

官方参数释义与完整语法参见 Microsoft Learn:AccessChk 文档。本文表格据其整理。 (learn.microsoft.com)


3. 快速上手:看懂输出

  • 不指定账户:默认按对象 DACL 中引用到的账户逐一计算有效访问,以 R/W 标记展示;-v 可展开为权限位清单。 (learn.microsoft.com)
  • 指定账户[username] 路径):仅计算该账户的有效权限(包含组聚合)。 (learn.microsoft.com)

4. 十条「即用即拷」命令(覆盖 80% 场景)

  1. 盘点某账户对 System32 的权限矩阵
accesschk "Power Users" C:\Windows\System32

报告 Power Users 对目录与文件的有效访问位。 (learn.microsoft.com)

  1. 找出 Users 组可写的服务(高风险点)
accesschk users -cw *

列出普通用户可写的服务,重点排查“服务可被普通用户改写二进制/重启劫持”。 (learn.microsoft.com)

  1. 审计注册表键安全性(查看 SD)
accesschk -l -k hklm\software

输出 HKLM\Software 的完整安全描述符(可配 -i 忽略继承)。 (learn.microsoft.com)

  1. 找出某账户在 HKLM\Software 下“无访问”的键
accesschk -k -n -s corp\alice hklm\software

-n 只显示无访问项,-s 递归。 (learn.microsoft.com)

  1. 巡检用户目录中设置了显式完整性级别的文件(兼容 Vista+)
accesschk -e -s C:\Users\Alice

快速发现被显式标记 IL 的对象。 (learn.microsoft.com)

  1. 定位 Everyone 可修改的全局对象(对象管理器)
accesschk -w -u -o everyone \BaseNamedObjects

结合 -o-t 可只看 section/event/mutex 等类型。 (learn.microsoft.com)

  1. 进程令牌体检(组与特权)
accesschk -p -f lsass.exe

-p 模式下的 -f 会显示完整令牌信息。 (learn.microsoft.com)

  1. 批量导出所有进程可访问性快照
accesschk -p -v * > proc_access.txt

用于基线对比与异常溯源。 (learn.microsoft.com)

  1. 审计共享(文件/打印)权限
accesschk -h *

一次性列出本机共享与对应访问。 (learn.microsoft.com)

  1. 查看服务控制管理器(SCM)自身权限
accesschk -c scmanager

确认谁有操作服务控制器能力。 (learn.microsoft.com)


5. 常见问题与排错

  • 结果与“属性-安全”界面不一致?
    请确认你是在 指定账户模式 下评估(例如 accesschk corp\alice <对象>),并开启 -v 查看合并后有效权限(继承、显式 ACE、拒绝 ACE 叠加)。 (learn.microsoft.com)
  • 输出很吵/太多继承项
    -e(显式)、-i(忽略继承 ACE)、-r/-w/-x(权限聚焦)与 -s(递归)组合。
  • 注册表路径写不对
    使用 hklm\...hkcu\... 简写;WOW64 重定向与 32/64 位视图差异要在路径上明确。
  • 对象管理器看不到内容
    访问 \BaseNamedObjects 等命名空间需本地管理员或等效权限;配合 -t 过滤类型。

6. 最佳实践清单(运维/安全双维度)

  • 最小权限与差距分析:先跑基线(金标准主机),再对比偏差(可写服务、Everyone 可写对象等)。
  • 高风险优先:优先巡检 -w(可写)、-x(可执行)授权对象。
  • 变更前后留痕:导出基线文本(如 > before.txt),变更后再导(> after.txt)做 diff
  • 结合 Sysmon/Procmon:发现“可写服务/目录”后,用 Sysmon 订阅规则或 Procmon 验证利用链。
  • 批量与自动化:结合 PsExec/PowerShell 对 OU/资产清单并发巡检,统一入库做报表。

7. 学到就能用:两段脚本模板

A. 巡检“普通用户可写服务”(本机)

:: 列出 Users 组可写服务(高危)
accesschk users -cw * > writable_services.txt

(对域环境,将 users 换成你的低权限组或特定账号) (learn.microsoft.com)

B. 递归审计某目录对 Everyone 的写权限

:: 只显示授予写入的项,并递归
accesschk -w -s everyone D:\AppData > everyone_write_d_appdata.txt

(变更 ACL 前务必评估业务影响)


8. 参考与延伸

  • 官方文档:AccessChk - Sysinternals | Microsoft Learn(含完整语法、示例) 。建议收藏为权威对照。 (learn.microsoft.com)

到这里,你已经能用 AccessChk 进行“定点+批量”的权限体检。下一篇我们进入 PsLogList(9.3) 或你指定的工具,继续把“远程取证 + 合规审计”的链路打通。

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐