網路連線技術剛問世時,只有大型企業與政府用得起。今天幾乎人人口袋裡都有一台全網路化的運算裝置;隨著物聯網(Internet of Things, IoT)興起,冰箱、家用保全系統也一併被拉進這個彼此相連的世界。連網裝置的安全性因此愈來愈重要。
你也許不在意別人知道你買了幾罐優格,但如果你的智慧型手機和冰箱處在同一個網路上而遭到入侵,你可能會把所有個人與金融資訊都交到攻擊者手上。
本書之所以叫《攻擊網路協定》(Attacking Network Protocols),是因為要在連網裝置上找出安全漏洞,你必須採取攻擊者的心態——那個想利用這些弱點的人的心態。網路協定負責與網路上其他裝置溝通;由於它們必須暴露在公開網路上,而且往往不像裝置的其他元件那樣受到同等程度的檢視,它們自然成了明顯的攻擊目標。
本書的立場是攻擊者視角:不是為了診斷網路問題,而是為了找出協定實作中的安全弱點。
為什麼讀這本書#
市面上討論網路流量擷取的書很多,但多半服務於診斷與基本網路分析,並不聚焦在所擷取協定的安全面向。本書的不同之處在於:它專注於分析自訂協定(custom protocol)以找出安全漏洞。
這本書寫給對分析與攻擊網路協定有興趣、卻不知從何下手的人。各章會引導你:
- 學習擷取網路流量的技術
- 對協定進行分析
- 發現並利用其中的安全漏洞
書中同時提供網路與網路安全的背景知識,以及可實際操作的協定分析範例。
不論你的目的是攻擊網路協定並向廠商回報安全漏洞,或只是想知道你最新買的 IoT 裝置到底怎麼通訊,都能在書中找到感興趣的主題。
這本書有什麼#
本書混合了理論章節與實作章節。
為了實作章節,作者開發並公開了一套名為 Canape Core 的網路函式庫,你可以用它打造自己的協定分析與攻擊工具;另外還提供一個名為 SuperFunkyChat 的範例網路應用程式,它實作了一套使用者對使用者的聊天協定。跟著各章的討論操作這個範例程式,就能練習協定分析的技巧,並攻擊這些範例網路協定。
各章重點如下:
- 第 1 章:網路基礎——電腦網路基礎,特別聚焦於 TCP/IP,這是應用層網路協定的基礎;後續章節都假設你已掌握這些基礎。本章也介紹作者用來建模應用協定的方法:把應用協定拆成有彈性的分層並抽象掉複雜的技術細節,讓你能專注在所分析協定中真正客製的部分。
- 第 2 章:擷取應用程式流量——介紹被動與主動擷取網路流量的概念,也是第一個把 Canape Core 網路函式庫用於實作任務的章節。
- 第 3 章:網路協定結構——各種網路協定共通的內部結構,例如數字或人類可讀文字的表示方式。分析已擷取的流量時,這些知識能讓你快速辨識常見結構,加快分析速度。
- 第 4 章:進階應用程式流量擷取——補充第 2 章的進階擷取技術,包括設定網路位址轉換(NAT)以重導感興趣的流量,以及位址解析協定(ARP)欺騙。
- 第 5 章:從線路上做分析——用第 2 章描述的被動與主動技術分析已擷取的流量;本章開始使用 SuperFunkyChat 產生範例流量。
- 第 6 章:應用程式逆向工程——逆向工程連網程式的技術。逆向工程讓你不必先擷取範例流量就能分析協定,也有助於辨識自訂加密或混淆的實作方式,好讓你更能分析已擷取的流量。
- 第 7 章:網路協定安全——用於保護網路協定的技術與密碼學演算法背景知識。流量在公開網路上傳輸時,防止內容被揭露或竄改,是網路協定安全的重中之重。
- 第 8 章:實作網路協定——如何用自己的程式碼實作應用網路協定,以便測試協定行為、找出安全弱點。
- 第 9 章:漏洞的根本成因——網路協定中會遇到的常見安全漏洞。理解漏洞的根本成因,分析時就更容易辨識出它們。
- 第 10 章:發現與利用安全漏洞——依據第 9 章的根本成因來尋找漏洞的流程,並示範多種利用方式,包括自行開發 shell code,以及用返回導向程式設計(return-oriented programming, ROP)繞過漏洞利用緩解機制。
- 附錄:網路協定分析工具箱——作者做網路協定分析時常用的工具說明;其中不少工具在正文中也有簡短介紹。
全書的實作骨幹只有兩個東西:Canape Core(你的工具)與 SuperFunkyChat(你的標靶)。先把這兩者跑起來,後面每一章的練習都有著落。
如何使用這本書#
閱讀路徑#
- 想先複習網路基礎,就從第 1 章開始。
- 熟悉基礎之後,接第 2、3、5 章,取得擷取流量與跑完協定分析流程的實作經驗。
- 掌握擷取與分析的原則後,進入第 7 到 10 章,學習如何實際發現並利用這些協定中的安全漏洞。
- 第 4 章與第 6 章屬於進階內容(額外的擷取技術與應用程式逆向工程),可以留到讀完其他章節之後再看。
環境準備#
實作範例需要安裝 .NET Core(https://www.microsoft.com/net/core/ ↗),這是微軟 .NET 執行環境的跨平台版本,可在 Windows、Linux 與 macOS 上運作。接著下載兩份以 .NET Core 為執行環境的套件:
- Canape Core:https://github.com/tyranid/CANAPE.Core/releases/ ↗
- SuperFunkyChat:https://github.com/tyranid/ExampleChatApplication/releases/ ↗
各站連結也整理在本書資源頁 https://www.nostarch.com/networkprotocols/ ↗。
執行範例 Canape Core 腳本要用 CANAPE.Cli 應用程式,它就在從 Canape Core GitHub repository 下載的釋出套件中。把 script.csx 換成你想執行的腳本名稱:
dotnet exec CANAPE.Cli.dll script.csx實作章節的所有範例程式碼與封包擷取檔(packet capture)都放在本書頁面 https://www.nostarch.com/networkprotocols/ ↗。建議動手之前先下載,才不用手動輸入大量原始碼。
聯絡作者#
作者福肖(James Forshaw)表示,他一向樂於收到對自己作品的回饋,無論正面或負面,本書也不例外。
- Email:
attacking.network.protocols@gmail.com - Twitter:
@tiraniddo - 部落格:https://tyranidslair.blogspot.com/ ↗(他會在此發表部分最新的進階安全研究)
推薦序(Katie Moussouris,Luta Security 創辦人暨執行長,2017 年 10 月)
莫索里斯(Katie Moussouris)初識福肖時,任職於微軟安全回應中心(Microsoft Security Response Center, MSRC)——《Popular Science》2007 年把這份工作列進「科學界十大最糟工作」,理由是源源不絕、永不停歇的安全漏洞回報。MSRC 一年收到來自研究者的漏洞回報超過 20 萬件,而福肖的回報是其中最有意思的幾份:他不只找簡單的 bug,還檢視了 .NET framework 並找出架構層級的問題。這類問題較難用一個簡單的修補程式解決,但對微軟與其客戶的價值也高得多。
2013 年 6 月,莫索里斯在微軟啟動了公司第一批漏洞獎金(bug bounty)計畫,共三個方案,用現金換取研究者回報最嚴重的漏洞。要證明這些計畫有效,就需要高品質的漏洞進來;而當時的競爭對手不只其他防禦方獎金,還包括國家級行為者與犯罪者早已成熟的攻擊面市場。獎金的用意,是把那些友善、利他的漏洞獵人的注意力,集中到微軟最需要幫忙根除的問題上。
MSRC 當時最想要的,是 Internet Explorer 11 beta 的漏洞,以及一件從沒有軟體廠商設過獎金的東西:全新的漏洞利用技術,即當時價值 10 萬美元的「緩解機制繞過獎金」(Mitigation Bypass Bounty)。莫索里斯在倫敦邊喝啤酒邊遊說福肖去看 IE 的漏洞時,福肖說自己幾乎沒研究過瀏覽器安全,要她別抱太大期待。
結果福肖交出了 四個 IE 11 beta 的獨立沙箱逃逸(sandbox escape),全落在內部團隊與外部滲透測試都漏掉的程式碼區域——而沙箱逃逸正是讓其他漏洞更能穩定利用的關鍵。四個都拿到獎金,由 IE 團隊自掏腰包支付,莫索里斯還從自己的獎金預算額外加發 5,000 美元;她事後說,或許該給 5 萬。
幾個月後,莫索里斯打電話告訴福肖:他的緩解機制繞過獎金投件通過了。福肖用當時最新作業系統的架構層級缺陷,找到一種繞過所有平台防禦的全新手法,拿下微軟史上第一筆 10 萬美元獎金。電話中他說,他想像自己在微軟內部 BlueHat 研討會的台上,被遞上一張大得可笑的紀念支票——於是「James and the Giant Check」就此成為微軟與網路歷史的一部分。
莫索里斯的結語:能在一種先進技術中找出漏洞的研究者已經很少,能穩定地在多種技術中都找到的更少;而福肖這樣的人,能以外科醫師般的精準聚焦在更深的架構問題上。她希望讀者把這本書當成一份實用指南,用來在自己的工作中點燃同樣的洞察力與創造力。「對世上所有的漏洞獵人來說,這就是你們的標竿,而且它很高。」
致謝
福肖感謝讀者,並希望本書兼具啟發性與實用價值。
- 妻子 Huayi:督促他持續寫作,讓這本書「只花了四年」就完成;沒有她也許兩年就寫完,但不會這麼有趣。
- 父母:他們的愛與鼓勵,加上小時候買回家的那台 Atari 400,開啟了他對電腦與軟體開發的興趣。
- Sam Shearon:最老的朋友,自信外向的傑出藝術家,讓他看見人生的另一面。
- Richard Neal:好友,也曾是他的主管,給了他發現電腦安全這項興趣的機會。
- Mike Jordon:說服他加入英國 Context Information Security;連同老闆 Alex Church 與 Mark Raeburn,讓他有時間做有影響力的安全研究、累積網路協定分析技能、開發出 Canape 這樣的工具。本書大部分內容,正是建立在攻擊真實世界中那些通常完全客製的網路協定的經驗之上。
- Katie Moussouris:說服他去挑戰微軟緩解機制繞過獎金,大幅提升他在資安圈的能見度,當然還有那張 10 萬美元的巨型紀念支票。
- Will Harris 與 Chris Evans:Google Project Zero 團隊成立時,Will 向時任負責人 Chris 提起他,Chris 說服他來面試,於是他成了 Googler。
- No Starch Press 的 Bill、Laurel 與 Liz:耐心等他寫完,並給了扎實的寫作建議。