PathScope 操作手册
本手册按界面顺序说明如何用 PathScope 找出这台设备的薄弱之处,并确认应该先从哪里修复。界面操作部分尽量不使用专业术语,命令集中放在“使用命令行”一章。
1. PathScope 是什么
PathScope 会找出这台设备上普通用户能够到达 root(管理员权限)或敏感数据的“路径”,并按优先级显示从哪里修复效果最大。它适用于检查您自己管理的设备和测试环境。
分析是只读的。它不会修改设置或文件,也不会自动进行修复。虽然会显示修复命令示例,但是否执行由您决定。
pathscope)。PathScope 是与 RoamSwitch 独立的应用,许可证为 Apache License 2.0,不适用 RoamSwitch 的使用许可协议(EULA)。2. 安装与启动
PathScope 作为带有独立图标的单独应用安装。启动方法如下。
| 环境 | 启动方法 |
|---|---|
| Mac | 打开发行文件(DMG)中的 PathScope.app,然后点击“开始分析”。 |
| Linux | 在应用列表中打开“PathScope”,然后点击“开始分析”。在终端中则运行 pathscope-gui。界面显示需要 WebKitGTK 4.1,deb 和 rpm 会自动安装。在 Arch(AUR)上,请将 webkit2gtk-4.1 作为可选依赖安装。 |
| 命令行 | 在终端中运行 pathscope。在 Mac 上是 PathScope.app/Contents/MacOS/pathscope。 |
启动后会打开一个窗口,顶部排列着“开始分析”“历史记录”“LLM 辅助”“用 LLM 解读”“设置”按钮。显示分析结果之前,“用 LLM 解读”无法点击。PathScope 不会开启监听端口,界面也不会加载外部网站。
3. 运行分析并查看结果
点击“开始分析”后,PathScope 会以当前用户为出发点收集这台设备的状态并进行分析,可能需要几秒到几十秒。完成后,结果会自动作为一条记录保存到历史记录中。
操作步骤
- 点击“开始分析”。
- 在“提权路径图”和“提权路径列表”中查看哪个用户通过哪些步骤到达 root 或敏感数据。圆形和方形代表用户或终点,线条代表一次提升权限的步骤。线上的编号对应图下方表格中的“该步骤成立的原因”。
- 在“修复点(按修复先后顺序)”中确认优先修复效果最大的位置。每一项都会显示优先级(紧急、高、中、低及分数)、受影响的路径数量、修复方案以及相近的 MITRE ATT&CK 技术。
- 点击“修复后会怎样?”,会假设按修复方案修复该位置,重新分析此时的路径。“全部修复后会怎样?”则是假设修复当前显示的全部修复点。两者都不会修改这台设备。
- 阅读显示在修复点下方的、未能检查的范围列表。
会找出哪些路径
- 属于 docker 组(可以执行与 root 相同的操作)
- 利用以 root 权限运行的可执行文件(SUID)来获得 root、改写文件或读取文件
- 可以改写以 root 运行的服务、root 监听的程序,或 root 定期执行的文件所对应的可执行文件
- 无需密码即可使用 sudo 的设置(sudo 和 cron 的配置文件在通过“LLM 辅助”读取后才会成为检查对象)
- 在 Mac 上,被授予访问所有文件权限的应用可以被改写
- 已安装的软件、内核或 macOS 版本中仍存在已在实际攻击中被利用、或极有可能被利用的已知漏洞(在 CISA KEV 中,或不在 KEV 但 FIRST 的 EPSS 很高,且能让普通用户成为 root 的那些)
已知漏洞的检查使用随应用附带的数据。检查对象是 macOS,以及有数据的 Debian、Ubuntu、RHEL 系列、SUSE、Arch、Alpine 的版本,其他(Debian 11 及更早版本、Fedora 等)会显示为“未确认”。它不是用来全面排查漏洞的功能。
4. 历史记录、导出、持续检查
分析结果会自动作为历史记录保存在这台设备中。点击“历史记录”会打开列表,可以打开某条记录、添加标签(例如“修复前”)或删除。选择两条记录并点击“比较所选的两条”,即可看到消失的路径、新增的路径以及修复点的变化。比较修复前后的情况时可以使用。
在其他设备上保存的 JSON 格式分析结果,可通过“导入分析结果”导入到历史记录中。在历史记录中选择两条以上并点击“汇总所选记录”,即可看到风险较高的设备排序以及多台设备共有的弱点。
可以将当前显示的分析结果保存为“分析结果(JSON 格式)”“监视对象(JSON)”或“auditd 规则(用于 Linux 的审计功能)”。保存位置在选择保存位置的窗口中指定。它只负责导出,不会应用设置,也不会修改这台设备。
导出一个配置文件,用于定期分析,并在路径比上次增多时发出通知。
- 先显示一个分析结果,然后点击“保存为对比基准”。
- 设置“间隔(分钟)”(5 到 10080)。
- Mac 上点击“保存 launchd 设置…”,Linux 上点击“保存 systemd 设置…”,然后选择保存位置。
- 确认导出的内容后,由您自己进行注册(例如 launchctl load)。PathScope 不会进行注册。
5. 使用 LLM 的功能(可选)
启用方法
- 勾选“启用 LLM 联动”。
- 选择“使用的 LLM”。可选的是 claude、opencode、codex、agy 这几个命令,列表中“状态”为“已安装”的可以使用。如果显示“未找到”,请先安装该命令。
- 选择“读取配置时发送给 LLM 的范围”(见下表)。
- 点击“保存”。
列表中的“模型”和“超时(秒)”可以针对每个 LLM 分别修改。claude 启动时会关闭命令执行和文件读取。opencode、codex、agy 被视为无法关闭,只有勾选“我已了解,无法禁用此 LLM 的命令执行和文件读取功能”后才能使用。无法限制的 LLM 可能在运行过程中自行决定读取文件,其内容可能被发送到该 LLM 的服务。
用 LLM 解读
显示分析结果后点击“用 LLM 解读”,LLM 会撰写整体评估、修复的优先顺序及理由、未能检查的范围的含义等内容。传递的只有路径、修复点和未能检查的范围的摘要,不会传递收集到的原始信息(如文件所有者和权限列表)。不过摘要中包含路径里出现的用户名和文件路径。LLM 的回答仅供参考,内容的确认和处理的判断由人来做,不会根据回答自动更改任何内容。
LLM 辅助(读取配置文件)
sudoers、cron、脚本等配置文件的写法各不相同,仅靠程序有时无法读懂。LLM 辅助会让 LLM 阅读这类文件,找出与 root 权限有关的内容。
- 点击“LLM 辅助”。待读取的候选文件会连同理由一起列出(起初全部处于选中状态)。候选包括 sudoers、cron、systemd 和 launchd 的设置,以及以 root 运行的服务所加载的可执行文件等。不想发送的文件请取消勾选。
- 点击“将所选 ○ 个文件发送给 LLM”。会出现关于发送内容的确认文字,阅读后点击“发送(已确认)”。
- 在结果中查看“找到的内容”“已读取的文件”和“未读取的文件(这些仍为未确认)”。
- 点击“应用并重新分析”,找到的内容就会加入分析。不想再使用时,可在“已保存”中删除。
只会使用 LLM 列出的内容中,已确认在原文件中确实存在该行的部分。未能确认的内容只会显示在“仅供参考”中,不用于分析。每次分析时都会重新确认,因此原始行已消失的内容将不再被使用。
| 发送范围 | 内容 |
|---|---|
| 标准 | 疑似密码或密钥的值会替换为“[REDACTED]”后再发送。不发送私钥等文件。较大的文件只发送包含路径或命令的行。 |
| 无限制 | 适用于本地运行的 LLM 等内容不会流出到外部的情况(风险自负)。密码哈希等也会被发送。 |
6. 使用命令行
也可以用 pathscope 命令执行与界面相同的分析。不加任何选项运行时,会分析从当前用户到 root 的路径。收集过程是只读的,不会改变设备的状态。
pathscope
pathscope --json-out=report.json
pathscope --what-if-fix=all
pathscope --baseline=base.json --fail-on=new --notify
pathscope --print-schedule=systemd --interval-min=60
pathscope --export-watch=watch.json --export-auditd=pathscope.rules
pathscope --plain
pathscope --version
pathscope --lang=en
| 选项 | 内容 |
|---|---|
--json-out=<file> | 将结果保存为 JSON。 |
--what-if-fix=all | 假设按所有修复方案修复,重新分析此时的路径。指定编号时,只针对该修复点。 |
--baseline=<file> --fail-on=new | 与上次的 JSON 比较,路径增多时以退出码 1 结束。加上 --notify 还会显示桌面通知(仅含数量)。 |
--fail-on=any|new|critical|high|medium | any 表示只要有 1 条路径,critical、high、medium 表示存在该优先级及以上的修复点时,以退出码 1 结束。 |
--print-schedule=launchd|systemd | 显示定期运行的配置示例,不会进行注册。可用 --interval-min 指定间隔(分钟)。 |
--plain | 不使用 Markdown,而以以往的纯文本形式输出。分析前提不再放在结果中,而是输出到标准错误。 |
--help / --version | --help(-h)显示所有选项的说明、退出码和使用示例。--version(-V)显示版本。 |
输出为 Markdown。标题之后依次是摘要表、路径、修复点(优先级、步骤、原因和受影响路径的表,以及按编号列出的详情:ATT&CK 对应、修复命令和注意事项)、收集范围、分析前提。修复点仅在发现路径时出现,分析前提仅在有内容可写时出现。加上 --what-if-* 会接着列出假设分析,加上 --baseline 会接着列出与上次相比的变化。可以直接粘贴到备忘或工单中。想以以往的纯文本形式输出时,加上 --plain。
退出码为 0 表示正常,为 1 表示满足了 --fail-on 的条件,为 2 表示用法或输入输出错误。以 root 运行时,还会直接收集 root 正在监听的监听器。通过 LLM 辅助保存的读取结果也会纳入命令的分析。
7. 保存位置与更新
| 内容 | 保存位置 |
|---|---|
| 分析结果的历史记录 | Mac 上是 ~/Library/Application Support/net.lafine.pathscope/history.sqlite3,Linux 上是 ~/.local/share/net.lafine.pathscope/history.sqlite3 |
| LLM 联动设置 | ~/.config/pathscope/settings.json(以仅限您本人读写的权限保存) |
| 通过 LLM 辅助保存的内容 | ~/.local/share/pathscope/facts.json |
| 持续检查的“对比基准” | ~/.local/share/pathscope/baseline.json |
历史记录可以在历史记录界面通过“全部删除”清除。分析结果包含与这台设备配置相关的敏感信息(用户名、文件路径、权限),请限制其保管和共享的范围。想使用 LLM 列表中没有的命令时,请手动在设置文件的 profiles 中添加。无法在界面中更改。
更新应用
Mac 版 PathScope 独立于 RoamSwitch,自行更新。只有在您点击“检查更新”时,才会为获取最新版本信息而连接 lafine.net(不会发送这台设备或分析结果的信息)。如果有新版本,点击“安装 v○○”,完成后点击“重启以生效”。下载的更新会先验证签名以确认未被篡改,只有通过验证的才会替换。
在 Linux 上,它包含在 RoamSwitch 的安装包中,因此通过更新该安装包来更新。“更新”标签中也会显示这一说明。
已知漏洞等用于分析的数据随应用一起提供。在此之后发现的内容,要等更新 PathScope 后才会被检查。当随附数据变旧时,分析结果中会提示。
8. 不能做的事
- 不会修改设置或文件,也不会自动执行修复。它只做到显示修复方案为止。
- “未发现路径”只是在能够收集到的范围内的结果,并不能证明安全。
- 不会全面检查漏洞。检查的只有在实际攻击中被利用过、并且能让普通用户成为 root 的已知漏洞。
- “修复后会怎样?”只能用于刚刚分析得到的结果,不能用于从历史记录中打开的结果。
9. 遇到问题时
| 现象 | 处理方法 |
|---|---|
| 在 Mac 上,未能检查的范围中出现“隐私设置数据(TCC.db)” | 在“设置”的“权限”标签中点击“打开‘完全磁盘访问权限’设置”,在系统设置中打开 PathScope,然后重启 PathScope 并重新分析。即使不授权,其他分析也能使用。 |
| 出现“无法使用 LLM”,或无法保存 | 在“设置”的“LLM 联动”中启用,并选择要使用的 LLM。如果列表中显示“未找到”,请安装该命令。选择 opencode、codex、agy 时,还需要勾选确认项。 |
| LLM 因“超时”而中止 | 在“设置”的“LLM 联动”列表中,把该 LLM 的“超时(秒)”调大(1 到 900),然后保存。 |
| 无法使用“修复后会怎样?” | 从历史记录中打开的结果无法使用。请再次点击“开始分析”后再使用。 |
| 无法使用应用内更新 | 在 Linux 上通过 RoamSwitch 安装包安装的,请通过更新安装包来更新。如果不是通过安装包(.deb、.rpm、AppImage)安装的,则无法使用应用内更新,请重新安装发行的安装包。 |