CS KAIROS · LEARNING LIBRARY

M04-09 · SNMP 列舉

先記住一句:SNMP 能揭露設備的管理資訊;讀得到資料、能修改設定與取得管理員權限,是不同的事。

10/26 早間:一次學一個核心概念

1. SNMP 是什麼?

SNMP(Simple Network Management Protocol,簡易網路管理協定)讓管理系統監看交換器、路由器或伺服器的名稱、介面狀態與流量等資訊。

像設備旁的管理櫃檯,你可以詢問資料,但櫃檯會依你的身分與權限決定回答多少。SNMP 列舉就是有系統地整理這些回應,用於授權的設備盤點與資訊揭露檢查,不是看到服務開著就可以任意操作。

2. 四個必要角色

  • Manager(管理端):提出查詢的管理工具。
  • Agent(代理程式):設備上接收並處理管理要求的程式。
  • MIB(管理資訊庫):定義可管理物件的名稱、型別與意義,像欄位說明書;不等於可直接下載的整份設備資料。
  • OID(物件識別碼):管理物件在階層樹中的識別。例如 1.3.6.1.2.1.1.5.0 對應 sysName.0,也就是系統名稱這個純量物件的實例。

白話說:管理端拿著 OID 問代理程式,代理程式依權限回傳值,MIB 幫你理解這個值代表什麼。

3. GET、WALK 與 SET 差在哪?

GET:取得指定物件實例的值。

GETNEXT:取得依 OID 排序的下一個可存取實例,不是把最後一個數字加一。

WALK:工具反覆查詢,走訪指定子樹。Net-SNMP 的 snmpwalk 使用 GETNEXT;WALK 不是獨立的協定訊息。

SET:嘗試修改物件的值,需要物件支援且具備相應寫入權限。本課只討論唯讀查詢,不實際修改設備。

因此,「能列出資料」不能直接跳成「能設定設備」。Net-SNMP 查詢教學;RFC 3416

4. 連接埠與安全版本

常見情況是 Agent 在 UDP 161 接收查詢;Trap/Inform 等通知送到接收端的 UDP 162。這是常見配置,不代表 SNMP 只能使用 UDP 或這兩個連接埠。

v1/v2c 使用 community string,傳統協定本身不提供它的加密保護。唯讀或可寫取決於設備設定,不是由字串名稱決定。

v3 也不等於一定加密,要看安全層級:

  • noAuthNoPriv:沒有訊息認證,也沒有加密。
  • authNoPriv:有認證與完整性保護,沒有加密。
  • authPriv:有認證、完整性與加密保護。

訊息有加密,仍不代表這個身分可以讀取所有資料或修改設定,授權範圍要另外確認。RFC 3417;RFC 3411

5. 一個合成例子

假設隔離實驗室裡有一台交換器,管理員只授權你讀取 system 子樹。

你用 GET 查詢 sysName.0,收到 lab-switch-01;再用 WALK 取得允許讀取的系統描述與名稱。

這份證據只能支持:「這個身分,在這個時間與設定下,能讀到這些物件。」

它不能證明你可以使用 SET,更不能證明你能登入設備管理介面。沒有回應時,也不能直接判定服務不存在,可能是防火牆、認證或設定問題。

網頁補充:一次 GET 的請求與回應

合成案例;讀取結果不代表寫入或登入權限。

  1. Manager → Agent|提出查詢

    GET sysName.0

  2. Agent|檢查存取範圍

    依身分、設定與 MIB view 處理。

  3. Agent → Manager|回覆值

    lab-switch-01:本次讀取證據。

下載 SVG 圖解

6. 防護與證據判讀

限制管理來源與網段,採最小權限及受限的 MIB view;不需要的 SNMP 停用,需要時優先採合適演算法與金鑰設定的 v3 authPriv。

報告記錄時間、來源、版本/安全層級、查詢 OID 與必要回應,但不記錄 community 或金鑰。設備回傳的版本字串是調查線索,不足以單獨證明漏洞存在。

小檢核:

你成功讀到交換器名稱,能不能因此判定自己可以修改設定?還要確認哪一類權限?

用一兩句回答就好。

概念 Q&A

待補:收到相關問題後,會整理為匿名教學版。