出于安全性的考慮,很多網絡應用可能用比較強的安全算法加密傳輸的數據,從而導致抓包這一強大的網絡分析工具成為雞肋,SNMP v3就是這么個例子。
Wireshark自帶有配置usmUser的例子,可以自動調用netsnmp的庫來完成揭秘,但對于Unix程序而言,GUI的工具本身還是有諸多不便,沒有CLI工具來的舒服自然,另外的一個問題是,通過自己配置usmUser,似乎一直無法成功解碼。
翻看Wireshark的文檔的時候,發現一個強大的小工具很適合配合腳本發揮威力:tshark;想到Python,馬上實現了一個不錯的小工具。
tshark本身可以支持很多選項,幾乎涵蓋了wireshark大部分常用功能,個人發現特別適合二次分析。這里最關鍵的是 -T pdml選項,
可以生成一個完整的xml格式的分析報告。
假設實現用tcpdump或者snoop抓取了一個加密的包test.pcap,那么接下來,可以用其作二次分析:
snoop -d <dev> -o test.pcap <filter>
tshark -r test.pcap -V -T pdml > test.xml
接下來可借助腳本的威力來解析這個xml文件了,python的xml.sax很適合干這個了,自己寫一個ContentHandler, 將感興趣的字段抓下來,存儲在一個相關的結構里邊。這里對于SNMP而言,只需要將對應的scopedPDU加密數據保存下來,同時保存其它必要的數據,放置于索引的dict中,便于下一步分析。
利用C/C++寫一個小程序,接收加密參數、字段內容等參數完成實際解碼工作,由于是API的簡單調用和變換,所以比較簡單;生成可執行文件即可。
最后,將上述通過python的 Popen建立I/O管道,將各個部分串聯起來,并格式化每一步分析產生的輸出結果,生成結果報告。
以上的方式可以不需要寫dissector就完成自定義的報文分析,缺點是,運行效率比較低一些;優點也很明顯,很容易定制和腳本自動化。
對于私有協議而言,上述方式也是一個不錯的選擇。