簡單網絡管理協議或 SNMP 是最不為人所知的協議之一,但對于網絡的成功運行至關重要。如果攻擊者能夠破壞 SNMP,他們可能能夠揭開您加密的 VPN 通信的掩碼并查看并可能控制連接到您網絡的每臺設備。
簡單網絡管理協議使用 UDP 端口 161 和 162 來管理網絡設備。網絡設備使用此協議相互通信,管理員可以使用它來管理設備。作為黑客,如果我們能夠訪問 SNMP 協議,我們就可以在目標網絡上獲取大量信息資源,甚至可以禁用和更改這些設備上的設置。想象一下,通過更改路由器和交換機的設置可能造成的破壞!
SNMP 背景
簡單網絡管理協議 (SNMP) 是 Inte.NET 協議套件的一部分,旨在管理計算機和網絡設備。思科將其描述為“一種促進網絡設備之間信息交換的應用層協議”。簡潔正確,但缺少SNMP也提供的管理功能。
SNMP 是一種無狀態的、面向數據報的協議。它涉及一臺或多臺稱為管理器的管理計算機。這些管理器監視和管理一組計算機。每臺受管計算機都安裝了一個與管理器通信的代理。請參見下圖了解 SNMP 如何運行的示意圖。
受管計算機上的代理向管理計算機提供管理數據。管理者可以承擔管理任務,包括修改和應用新配置。
每臺受管機器上的代理公開的管理數據存儲在稱為管理信息庫或 MIB的分層數據庫中。我們將在這里尋找的正是 MIB 中的這些信息。此 MIB 包含有關網絡上每個設備的大量信息,包括用戶、安裝的軟件、操作系統、開放端口等。所有這些信息對于開發針對目標的利用策略都是非常寶貴的。
SNMP 協議在 UDP 端口 161 上進行通信。通信發生在協議數據單元或 PDU 上。這些 PDU 有七 (7) 種類型。
1.獲取請求
2.設置請求
3.獲取下一個請求
4.獲取批量請求
5.回復
6.統計
7.通知請求
SNMP 具有三 (3) 個版本。
版本 1 或 SNMPv1,安全性很差。客戶端的身份驗證以明文形式進行,默認情況下,使用設置為“ public ”的“community string ”。該字符串的操作類似于密碼,并且對網絡上的每個節點都有效。經身份驗證也是一個管理名稱字符串設置為“私人",默認情況下。使用這些管理名稱字符串,攻擊者可以從 MIB 中收集所有信息(使用公共管理名稱字符串),甚至可以在設備上設置配置(使用私有管理名稱字符串)。雖然它廣為人知并且了解到 SNMPv1 是不安全的,它仍然被廣泛使用(我最近在紐約一家主要銀行進行了安全評估,他們仍在使用 SNMPv1)。即使網絡管理員更改了默認的管理名稱字符串,因為通信是明文的,攻擊者可以從網絡上嗅探身份驗證字符串。
SNMPv2 在性能和安全性方面對 SNMPv1 進行了改進,但由于不能向后兼容 SNMPv1,因此沒有被廣泛采用。SNMPv3 比 SNMPv1 或 v2 安全得多。SNMPv3 增加了加密、消息完整性和身份驗證,但仍未在所有網絡上使用。
SNMPv1的Wireshark分析
下面我們可以看到Wireshark通過 LAN 捕獲的 SNMPv1 通信。
請注意上方窗口中的 Get-Request、Get-Response 和 Get-Next-Request 以及下方窗口中的管理名稱字符串。
濫用 SNMP 進行信息收集
現在我們對 SNMP 協議有了一些背景知識,讓我們使用它來收集有關目標的信息。打開 Kali 并轉到Applications --> Kali linux -->Information Gathering --> SNMP Analysis -->snmpcheck,如下面的屏幕截圖所示。
當您這樣做時,您將看到如下所示的snmpcheck幫助屏幕。
Snmpcheck是一個 Perl 腳本,用于查詢 SNMP MIB 以獲取有關目標 IP 的信息。它的語法相當簡單;
kali >snmpcheck -t <目標IP>
當然,一些選項可用,例如管理名稱字符串(默認使用“public”)、SNMP 版本(默認使用 1 或 2 是另一個選項。注意,它不適用于更安全的 SNMP v3 ) 和其他幾個。我們將在此處針對我們網絡上的 2003 服務器使用它,以查看 SNMP 可以為我們提供有關目標的哪些信息。
正如您在下面的屏幕截圖中看到的,我們運行了snmpcheck,它開始從 MIB 中收集有關目標的信息并將其顯示在我們的屏幕上。最初,它提供有關硬件的信息,然后是操作系統和正常運行時間(正常運行時間對于確定系統是否已打補丁非常有用)。
接下來,它顯示設備信息。
其次,存儲信息。
然后,用戶帳戶(這在以后嘗試破解用戶密碼時很有用。它消除了猜測用戶帳戶名稱的需要)。
最后,在系統上安裝軟件。當我們開始開發利用策略時,這可能特別有用,因為利用特定于應用程序及其版本。
破解 SNMP 符串
正如上面所看到的,如果我們可以訪問 SNMP,SNMP 可以為我們提供有關目標的大量信息。我們假設管理員將管理名稱字符串設置為“public”。如果管理員更加謹慎和安全并更改了管理名稱字符串怎么辦?我們如何找到管理名稱字符串?
Kali 內置了一個名為oneixtyone的優秀工具(大概以 SNMP 運行的默認端口命名)。本質上,它是一個 SNMP 管理名稱字符串破解器。像大多數“密碼”破解者一樣,它依靠字典或詞表來嘗試對服務進行攻擊,直到找到匹配項。
讓我們通過轉到Applications --> Kali Linux --> Information Gathering -->SNMP Analysis -->onesixtyone打開onesixtyone。它應該會打開一個如下所示的幫助屏幕。
oneixtyone的語法非常簡單明了。
kali >oneixtyone [options]
與基于字典的密碼破解程序一樣,與oneixtyone一起使用的字典至關重要。在oneixtyone的情況下,它有一個內置的字典。它很小,但包含許多 SNMP 常用的字符串。如果您正在為 SNMP 破解創建自己的字典,這是一個很好的起點,但您可能希望使用域名或公司名稱的變體來擴展它,因為網絡管理員通常不會花太多精力為 SNMP 創建復雜的字符串.. 例如,如果公司是 Microsoft,您可以嘗試懶惰的管理員可能使用的字符串,例如microsoft-public、microsoft-private、microsoft-snmp、microsoft-network 等。
讓我們通過鍵入來查看字典文件;
kali>cat/usr/share/doc/onesixtone/dict.txt它包含一個廣泛使用的 SMNP 管理名稱字符串的簡短列表。我們將使用這個簡短的字典來查看是否可以在我們的網絡上找到該管理名稱字符串,然后在snmpcheck中使用它來收集有關目標的所有信息。
在我們的例子中,我們將在與以前相同的系統上使用它,所以我們的命令是;
kali>onesixtyone 192.168.1.102 -c /usr/share/doc/onesixtyone/dict.txt
正如您在上面的屏幕截圖中看到的,它能夠找到私有管理名稱字符串(仍設置為默認的“private”)和公共管理名稱字符串(仍設置為默認的“public”)。然后可以將這些管理名稱字符串與snmpcheck一起使用,以從 MIB 中獲取有關目標系統的信息。
NSA 利用 SNMP 來揭露 VPN 通信
我們知道 NSA 已經利用 SNMP 從 Edward Snowden 發布的文件中揭露 VPN 通信。有關此NSA ExtraBacon 漏洞利用的教程,請單擊此處。盡管該漏洞已被 Cisco 修補,但 NSA 很可能還有另一個 SNMP 漏洞利用來查看加密通信。
結論
如果我們可以訪問它,SNMP 可以成為目標網絡上的豐富信息源。snmpcheck將從 MIB 中提取信息,oneixtyone幫助我們破解 SNMP“密碼”。兩者對于利用 SNMP 進行偵察都至關重要。