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 上,被授予存取所有檔案權限的 App 可以被改寫
- 已安裝的軟體、核心或 macOS 版本中仍存在已遭實際攻擊利用、或極有可能被利用的已知漏洞(在 CISA KEV 中,或不在 KEV 但 FIRST 的 EPSS 很高,且可讓一般使用者成為 root 的那些)
已知漏洞的確認使用隨應用程式附帶的資料。對象是 macOS,以及有資料的 Debian、Ubuntu、RHEL 系列、SUSE、Arch、Alpine 的版本,其他(Debian 11 以前的版本、Fedora 等)會顯示為「未確認」。它不是用來全面檢查弱點的功能。
4. 歷史紀錄、匯出、持續檢查
分析結果會自動以歷史紀錄的形式保存在這台裝置中。按一下「歷史紀錄」會開啟清單,可以開啟某筆紀錄、加上標籤(例如「修正前」)或刪除。選擇兩筆紀錄並按一下「比較所選的 2 筆」,即可看到消失的路徑、新增的路徑,以及修補點的變化。比較修補前後的情況時可以使用。
在其他裝置上儲存的 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)安裝的,則無法使用應用程式內更新,請重新安裝發行的套件。 |