SNMP(Simple Network Management Protocol,簡單網路管理協定)的前身是簡單閘道監控協議(SGMP),用來對通信線路進行管理。隨後,人們對SGMP進行了很大的修改,特別是加入了符合Internet定義的SMI和MIB:體系結構,改進後的協定就是著名的SNMP。SNMP的目標是管理互聯網Internet上眾多廠家生產的軟硬體平臺,因此SNMP受Internet標準網路管理框架的影響也很大。現在SNMP已經出到第三個版本的協議,其功能較以前已經大大地加強和改進了。
SNMP的通信字串主要包含兩類命令:
GET命令,SET命令。
GET命令從設備讀取資料,這些資料通常是指令引數,例如連接狀態、介面名稱等。
SET命令允許設置設備的某些參數,這類功能一般有限制,例如關閉某個網路介面、修改路由器參數等功能。但很顯然,GET、SET命令都可能被用於拒絕服務攻擊(DoS)和惡意修改網路參數。
最常見的預設通信字串是public(讀/寫)和private(唯讀),除此之外還有許多廠商私有的預設通信字串。幾乎所有運行SNMP的網路設備上,都可以找到某種形式的預設通信字串。
SNMP2.0和SNMP1.0的安全機制比較脆弱,通信不加密,所有通信字串和資料都以明文形式發送。攻擊者一旦捕獲了網路通信,就可以利用各種嗅探工具直接獲取通信字串,即使使用者改變了通信字串的預設值也無濟於事。
近幾年才出現的SNMP3.0解決了一部分問題。為保護通信字串,SNMP3.0使用DES(DataEncryptionStandard)演算法加密資料通信;另外,SNMP3.0還能夠用MD5和SHA(SecureHashAlgorithm)技術驗證節點的識別字,從而防止攻擊者冒充管理節點的身份操作網路。
雖然SNMP3.0出現已經有一段時間了,但目前還沒有廣泛應用。如果設備是2、3年前的產品,很可能根本不支援SNMP3.0;甚至有些較新的設備也只有SNMP2.0或SNMP1.0。
即使設備已經支援SNMP3.0,許多廠商使用的還是標準的通信字串,這些字串對駭客組織來說根本不是秘密。因此,雖然SNMP3.0比以前的版本提供了更多的安全特性,如果配置不當,其實際效果仍舊有限。
SNMP一般使用的是UDP埠161,使用Nessus或者是X-scan等工具可以很方便地找出存在SNMP預設口令的主機,字串一般都是public或者是private。發現了漏洞之後,我們需要一個工具來進行資訊的刺探。
snmputil是一個命令列下的SNMP資訊獲取工具,使用命令格式為:
snmputil [get|getnext|walk] agent community oid [oid ...]
snmputil trap
第一行命令用於刺探資訊,第一個參數為字串方式,有三個可選,walk為顯示所有的資訊,getnext表示取下一個snmp資訊,第二個參數為目標的IP位址 第三個為使用的密碼,一般為public,第四個為命令參數,也即所請求的資訊,使用oid來表示,是一串數位。典型的命令如下:
snmputil walk 對方ip public .1.3.6.1.2.1.25.4.2.1.2 列出系統進程 snmputil walk 對方ip public .1.3.6.1.4.1.77.1.2.25.1.1 列系統使用者清單 snmputil get 對方ip public .1.3.6.1.4.1.77.1.4.1.0 列出功能變數名稱 snmputil walk 對方ip public .1.3.6.1.2.1.25.6.3.1.2 列出安裝的軟體 snmputil walk 對方ip public .1.3.6.1.2.1.1 列出系統資訊
snmputil還有一個trap的參數,主要用來陷阱捕捉,它可以接受代理進程上主動發來的資訊。如果我們在命令列下面輸入snmputil trap後回車,然後用錯誤的團體名來訪問代理進程,這時候就能收到代理進程主動發回的報告。