Skip to the content.

← 回到說明文件首頁 · English | 繁體中文

資安檢測結果

工具鏈文件 寫的是「應該跑什麼」。這一頁是實際跑了什麼、跑出什麼

只有數量的報告不值得提交。下面每一條發現都附上判定與理由, 因為審查者真正想知道的不是「幾個」,而是「每一個為什麼可以接受」。

   
日期 2026-08-27
版本 jt-snmpd 1.1.3
掃描範圍 deploy/tools/packaging/,共 14 個檔案、4,967 行

摘要

檢查項目 工具 結果
原始碼靜態分析(SAST) Bandit 1.9.4 HIGH 0、MEDIUM 3、LOW 12,全部逐條交代於下
相依弱點(SCA) pip-audit 2.10.1 70 個套件,0 個已知弱點
個資與機密 tools/check-privacy.py HIGH 0,每次推送都跑
測試套件 pytest 963 通過、1 略過,每次推送都跑
安裝檔產物檢查 直接讀 Windows Installer 表格 5 項,每次推送都跑

執行時期的相依只有兩個套件。 pysnmp 7.1.29 依賴 pyasn1 0.6.4, 而 pyasn1 不依賴任何東西。70 個裡的其餘全是建置與測試工具, 不會進到客戶的機器。這是刻意的:相依愈少,這一節就愈短。


靜態分析:逐條交代

Bandit 沒有 HIGH。以下十五條為 MEDIUM 與 LOW,每一條不是誤判就是有紀錄的決定。

SNMPv3 那批程式一條都沒有。 deploy/usm.py,也就是金鑰 localization、 DPAPI 保護的儲存區、演算法允許清單所在的檔案,是最新的一個檔案, 也是唯一經手機密資料的,掃出來是乾淨的。這件事值得直接寫出來, 而不是留給讀者從一個總數去推。

B104,「可能綁定到所有介面」(MEDIUM ×3)

位置 判定
deploy/jt_agent.py:3441:3716 接受,這是設計。 agent 刻意綁 0.0.0.0。綁定位址不會篩選發送端,它只決定哪些本機位址收得到封包。來源限制由另外兩處把關,而且是把在對的地方:Windows 防火牆規則只開放管理網段,前置解析閘門在 pysnmp 讀到任何一個位元組之前就檢查來源位址。綁單一位址會讓多網路卡主機失效,而且不會增加任何安全性。見安全性評估 §1
tools/check-privacy.py:163 誤判。 "0.0.0.0" 出現在 IP 規則的排除清單裡,用意正是不要把萬用位址報成外洩。

B105,「可能寫死的密碼」(LOW ×2)

deploy/diskhealth.py:314:317誤判。 那兩個值是 {"health_pass": True} 裡的布林值。Bandit 的啟發式規則會比對任何含 pass 的名稱,而 health_pass 是 SMART 的判定結果,不是憑證。

B110 / B112,try/except pass 與 continue(LOW ×3)

位置 判定
deploy/jt_agent.py:220 接受。 寫入 Windows 事件記錄可能因權限或事件來源未註冊而失敗。一個因為「記不了錯誤」就掛掉的監控 agent,比繼續跑的更糟;同一則訊息已經寫進記錄檔了。
deploy/jt_agent.py:1613 接受。 這是在一條已經失敗的路徑裡的最後手段:讀取 engine 身分時拋了例外,外層已經把原因記下來,這裡是第二次嘗試取得 machine GUID。這裡再失敗就留下 "unknown",會產生一個不穩定的 engine ID,比穩定的差,但遠比整個 agent 起不來好。
deploy/diskhealth.py:413 接受。 不回應 SMART 指令的磁碟會被略過,而不是捏造數值。一個沒反應的 USB 橋接器不該讓其餘所有磁碟從快照裡消失。

三處都是窄範圍、每一處都只攔一種預期得到的失敗,而且都有註解說明原因。

B404 / B603 / B607,使用 subprocess(LOW ×7)

tools/check-privacy.pytools/prepare-public-repo.pytools/check-terminology.py 呼叫 git 取得已追蹤的檔案清單。 接受。 三者都以固定的參數陣列呼叫,不經 shell、不帶使用者輸入, 而且都不會出貨到客戶機器,它們是 repo 的工具。B607 是同一個呼叫再被挑一次, 理由是寫 git 而不是絕對路徑。 agent 本身完全不開子處理程序,那是專案的硬性規則。


相依弱點

pip-audit 對照 PyPI Advisory Database 與 OSV,在 70 個已安裝套件中 未發現任何已知弱點。

70 這個數字會高估暴露面,值得分開看:

  套件 會不會進到客戶機器
執行時期 pysnmppyasn1 會,包在 MSI 裡
打包 pyinstallerpywin32 它們的產物會,它們本身不會
測試與工具 其餘 不會

還沒跑的項目

把這件事寫清楚也是報告的一部分。工具鏈文件列的比實際跑過的多:

項目 狀態
Semgrep,含本專案自訂規則 未跑
gitleaks 掃完整 git 歷史 未跑
CycloneDX SBOM 產生過一次,未定期更新
boofuzz 對 UDP/161 跑 24 小時 未跑
PROTOS c06-snmpv1 未跑
Windows 平台檢查(signtoolaccesschk、PrivescCheck) 未成批執行;sc qprivs 已人工驗過
HVCI / WDAC 端點存活 受阻,沒有這種端點可用

除了最後一項,其餘都不是被什麼卡住,只是還沒做。列在這裡是為了避免有人讀了 工具鏈文件就以為那些全都做過了。


如何自行重跑

pip install bandit pip-audit
bandit -r deploy/ tools/ packaging/ -f json -o reports/bandit.json
pip-audit --format json -o reports/pip-audit.json
python3 tools/check-privacy.py
python3 -m pytest tests/ -q

reports/ 不公開:原始 JSON 含本機檔案系統路徑。這一頁才是可提交的形式。


相關文件