本書正文已經示範過幾樣工具與函式庫,但作者平常還會用到許多沒機會細談的東西。以下就是那份清單:作者在分析、調查與利用網路協定時覺得真正好用的工具,依主要用途分類——儘管有些工具其實同時適用於好幾個類別。

本附錄的工具資訊、授權與網址皆為原書出版時(2018 年)的狀態。經過多年,部分專案可能已停止維護、更換授權、搬遷網址或被後繼工具取代,使用前請先確認該專案的現況。

被動網路協定擷取與分析工具#

如第 2 章所述,被動擷取(passive network capture) 指的是在不干擾流量流動的前提下監聽並擷取封包。

Microsoft Message Analyzer#

Windows 上可擴充的網路流量分析工具,內建大量協定剖析器(parser),並可用自訂程式語言擴充。功能大致與 Wireshark 相近,額外之處是支援 Windows 事件(Windows events)。

TCPDump 與 LibPCAP#

TCPDump 是眾多作業系統預裝的封包擷取工具,可說是這類工具的老祖宗,適合做基本的網路資料分析。搭配的 LibPCAP 開發函式庫則讓你能自行撰寫工具來擷取流量、操作 PCAP 檔。

Wireshark#

最普及的被動封包擷取與分析工具。GUI 加上龐大的協定分析模組庫,讓它比 TCPDump 更強大也更容易上手。Wireshark 幾乎支援所有知名的擷取檔格式,因此就算你用別的工具擷取流量,仍可交給 Wireshark 分析;它甚至支援 USB、序列埠通訊這類非傳統協定。

多數 Wireshark 發行版還附帶 tshark——一個可取代 TCPDump 的命令列工具,具備 Wireshark GUI 的大部分功能(例如協定解析器),讓你在命令列上就能檢視更廣泛的協定。

主動網路擷取與分析#

要像第 2 章與第 8 章那樣修改、分析與利用網路流量,就得用上主動擷取(active network capture) 技術。以下是作者分析與測試網路協定時每天都在用的工具。

Canape#

作者開發的通用網路協定中間人(man-in-the-middle)測試、分析與利用工具,具備堪用的 GUI。Canape 內含可用來開發協定剖析器的工具、C# 與 IronPython 腳本擴充機制,以及多種類型的中間人代理。自 1.4 版起開源,使用者可參與開發。

Canape Core#

Canape Core 函式庫是原始 Canape 程式碼的精簡分支(fork),專為命令列使用而設計,也是本書各範例採用的函式庫。它保有原始 Canape 大部分的能力,卻不再侷限於 Windows,凡 .NET Core 支援的作業系統皆可執行。

Mallory#

可擴充的中間人工具,扮演網路閘道(gateway)角色,讓擷取、分析與修改流量的過程對受測應用程式而言是透明的。可用 Python 函式庫或 GUI 除錯器來設定,但需要另外準備一台 Linux 虛擬機。實用的安裝說明見 https://bitbucket.org/IntrepidusGroup/mallory/wiki/Mallory_Minimal_Guide/

網路連線與協定測試#

在測試未知協定或網路裝置時,基本的網路測試往往非常有用。本節工具可協助你探索並連上目標裝置上對外開放的網路服務。

Hping#

類似傳統的 ping,但支援的不只是 ICMP echo 請求。你可以用它打造自訂封包、送往目標並顯示回應,是工具箱中很值得備著的一把。

Netcat#

命令列工具,可連上任意 TCP 或 UDP 連接埠並收送資料,也支援建立主動連線或監聽的 socket,大概是網路測試裡最簡單的做法了。

Netcat 有非常多變體,惱人的是它們的命令列選項各不相同——不過功能上大同小異,換一個版本時記得先查一下對應的參數。

Nmap#

要掃描遠端系統上開放的網路介面,沒有比 Nmap 更好的選擇。它支援多種手法誘出 TCP 與 UDP socket 伺服器的回應,還提供各式分析腳本,在面對未知裝置時價值極高。

Web 應用程式測試#

本書雖然不特別著重 Web 應用程式測試,但那仍是網路協定分析的重要一環。HTTP 是網際網路上使用最廣泛的協定之一,甚至常被用來代理其他協定(例如 DCE/RPC)以繞過防火牆。以下是作者使用並推薦的工具。

Burp Suite#

  • 網址https://portswigger.net/burp/
  • 授權:商業授權;提供功能受限的免費版
  • 平台:支援 Java 的平台(Linux、macOS、Solaris、Windows)

商業 Web 應用程式測試工具的黃金標準。以 Java 撰寫以取得最大的跨平台能力,提供測試 Web 應用程式所需的一切功能,包括內建代理、SSL 解密支援與便利的擴充機制。免費版功能比商業版少不少,如果你打算大量使用,值得考慮直接購買商業版。

Zed Attack Proxy(ZAP)#

若 Burp Suite 的價格超出預算,ZAP 是很好的免費選擇。由 OWASP 開發,以 Java 撰寫,可撰寫腳本,且因為開源而容易擴充。

Mitmproxy#

以 Python 撰寫的命令列式 Web 應用程式測試工具。標準功能就包含請求的攔截、修改與重放(replay),也可以當作獨立函式庫嵌進你自己的應用程式。

模糊測試、封包產生與漏洞利用框架#

開發漏洞利用程式或尋找新漏洞時,通常得重複實作一堆共通功能。以下工具提供了框架,讓你少寫這些樣板程式碼。

American Fuzzy Lop(AFL)#

別被可愛的名字騙了——AFL 雖然取自一種兔子的品種,卻是極出色的模糊測試(fuzz testing)工具,尤其適合能重新編譯以加入特殊插樁(instrumentation)的應用程式。它有一種近乎神奇的能力:從極少量的樣本輸入,就能生出對程式有效的輸入。

Kali Linux#

  • 網址https://www.kali.org/
  • 授權:依所含套件而異,涵蓋多種開源與非自由授權
  • 平台:ARM、Intel x86 與 x64

專為滲透測試設計的 Linux 發行版,預裝 Nmap、Wireshark、Burp Suite 以及本附錄提到的其他多樣工具。可原生安裝,也可當 live 發行版執行,在測試與利用網路協定漏洞時非常好用。

Metasploit Framework#

需要一套通用的漏洞利用框架時,Metasploit 幾乎是唯一選擇——至少在你不想付費的前提下。它開源、持續更新新漏洞,且幾乎能在所有平台執行,因此很適合用來測試新裝置。

Metasploit 幫你省掉的那些雜事

Metasploit 提供大量內建函式庫來處理典型的利用工作,例如:

  • 產生與編碼 shell code
  • 生成反向 shell(reverse shell)
  • 提權(gaining elevated privileges)

這讓你可以專心開發自己的 exploit,而不必陷在各種實作細節裡。

Scapy#

Python 的網路封包產生與操作函式庫。從乙太網路封包到 TCP 或 HTTP 封包,幾乎任何封包型別都能組出來;你也可以重放封包,觀察網路伺服器收到後的反應。這種彈性讓它同時適合測試、分析與模糊測試網路協定。

Sulley#

以 Python 為基礎的模糊測試函式庫與框架,目的是簡化資料表示、傳輸與插樁。從檔案格式到網路協定,都可以拿它來 fuzz。

網路欺騙與重導#

為了擷取網路流量,有時你必須把流量重導到一台負責監聽的機器。本節列出幾個不需太多設定就能實作網路欺騙(spoofing)與重導的工具。

DNSMasq#

設計用來快速架起 DNS、DHCP 等基礎網路服務,省去繁瑣的服務設定。DNSMasq 本身並非為網路欺騙而生,但你可以拿它來重導某台裝置的網路流量,以便擷取、分析與利用。

Ettercap#

第 4 章討論過的中間人工具,設計目的是監聽兩台裝置之間的網路流量。它可以偽造 DHCP 或 ARP 位址,藉此重導網路上的流量。

可執行檔逆向工程#

要弄清楚一個網路協定怎麼運作,直接看應用程式的原始碼往往是最省事的路。但當你拿不到原始碼,或協定複雜、屬於專有格式時,單靠網路流量分析就很吃力。這時就輪到逆向工程工具上場:它們能把應用程式反組譯(disassemble),有時甚至反編譯(decompile)成你能檢視的形式。更多細節、範例與說明可參考第 6 章。

Java Decompiler(JD)#

  • 網址http://jd.benow.ca/
  • 授權:GPLv3
  • 平台:支援 Java 的平台(Linux、macOS、Solaris、Windows)

Java 使用帶有豐富中繼資料(metadata)的位元組碼(bytecode)格式,因此用 Java Decompiler 這類工具把位元組碼還原成 Java 原始碼相當容易。JD 有獨立的 GUI 版本,也提供 Eclipse IDE 外掛。

IDA Pro#

最知名的可執行檔逆向工程工具。它能反組譯與反編譯多種處理器架構,並提供互動環境來調查與分析反組譯結果;加上支援自訂腳本與外掛,堪稱逆向工程可執行檔的首選。

完整專業版價格相當高。免費版僅供非商業用途,且限制在 32 位元 x86 執行檔,另有其他功能限制。

Hopper#

能力很強的反組譯器兼基本反編譯器,許多功能足以和 IDA Pro 分庭抗禮。截至原書寫作時,Hopper 支援的處理器架構不如 IDA Pro 廣,但它支援 x86、x64 與 ARM,多數情況下已綽綽有餘。完整商業版比 IDA Pro 便宜不少,值得一試。

ILSpy#

介面近似 Visual Studio,是免費 .NET 反編譯工具中維護支援最好的一款。

.NET Reflector#

最早的 .NET 反編譯器。它會把 .NET 執行檔或函式庫轉換成 C# 或 Visual Basic 原始碼,在產出可讀原始碼與讓你輕鬆瀏覽執行檔結構這兩件事上都很有一套,是值得納入軍火庫的好工具。