「簡約是終極的精緻。」——達文西

「這裡沒有安全——繼續往前走!」——Richard Clayton

周界正在消失,還是正在重建?#

本章試圖把安全的網路面向拉進一個連貫的框架。這並不直截了當,因為網路安全有很大一部分是實務工程;一位電腦科學的純粹主義者可能會把這個領域看成一個補丁疊著另一個補丁。

但許多組織必須注意網路安全,而且有一些明顯的策略趨勢。

有些產業沒有可行的替代方案。 例如工業控制系統所用的協定(DNP3 與 Modbus)不支援加密或認證,因為它們演化於專線與私有無線電的年代。

到 1990 年代末,控制系統工程師開始把感測器與致動器接上 IP 網路(因為比較便宜)——然後才意識到,世上任何知道感測器 IP 位址的人都能讀它,任何知道致動器 IP 位址的人都能啟動它。

一座典型變電所可能有來自多家廠商的兩百台裝置,位在一個效能很關鍵的區網上,所以事後加裝密碼學不切實際;但它只有一條對外連線,所以那就是你必須放保護的地方。這叫「重新周界化(re-perimeterization)」。 車輛採取同樣的取徑:內部的 CANBUS 無法被保護,所以必須保護與外界的無線介面。

一個思想領袖是 Google,推廣一套它稱為「零信任安全模型」的無防火牆架構:「藉由把存取控制從網路周界移到個別使用者與裝置,BeyondCorp 讓員工、承包商與其他使用者能從幾乎任何地點更安全地工作,而不需要傳統 VPN。」

Google 的經驗是:轉向行動與雲端技術讓網路周界越來越難定義(遑論管制),而如果一家公司大到某種程度的內部淪陷無論如何都不可避免,那麼周界就是放置主要保護的錯誤位置。

仍有一些周界防禦(最顯著的是對抗阻斷服務攻擊),但內部網路在其他方面沒有特權,重點放在對使用者與裝置的嚴格認證與授權:每項服務都有一個面向網際網路的存取代理。

你也需要真的很好的人資資料,好把員工與承包商綁到裝置以及他們被允許使用的服務上。

網路協定與服務阻斷#

最基本的顧慮之一是預防與緩解阻斷服務(DoS)攻擊。這有幾種樣態:

  • 對手可能試圖偷走你的部分 IP 位址空間或網域以發送垃圾郵件;即使你拿回來,也可能發現它已被大量列入黑名單。
  • 對手可能從一個由眾多被攻陷機器組成的殭屍網路,送給你巨量流量(分散式阻斷服務,DDoS)。
  • 他們可能濫用 DNS 這類線上服務,向你送出封包洪流。

BGP 安全#

網際網路是網路的互連網路:其元件是自治系統(AS)(如 ISP、電信商與大型組織),各自控制一段 IP 位址範圍。把它們黏在一起的、網際網路的核心路由協定,是邊界閘道協定(BGP)。

然而網際網路正緩慢地變得更集中(第一層業者整併的結果),並易受共模失效(如停電)與破壞性攻擊之害。

已經有數次警告,以事件與意外的形式出現:

  • 2008 年 YouTube 有數小時無法連上,因為巴基斯坦政府試圖在當地審查它而宣告了假路由,結果傳播到全球。
  • 2010 年中國電信宣告超過十萬條無效路由,在 18 分鐘內劫持了 15% 的網際網路位址。 有人說那是意外,也有人暗示中國一直在測試一枚「網路核彈」,而部分落塵逸出。
  • 也有犯罪濫用,從垃圾郵件商劫持 IP 位址空間,到 2018 年一起八位數的廣告詐欺——其行為人藏在從美國空軍偷來的位址空間裡。

這擋不住有能力的攻擊者(惡意的路由宣告只要在攻擊者的路由中間之後、末端接上正確的 AS 就行),但它能偵測造成多數斷線的「胖手指」失誤。

DNS 安全#

網域名稱系統(DNS)讓人類可讀的名稱能映射到 IP 位址。 它偶爾會被攻擊(Mirai 殭屍網路 2016 年 10 月攻擊 DynDNS,讓美國東岸的 Twitter 掛掉五小時),但 DNS 已成為一個由許多很快的機器接在很高容量網路上的大規模分散式系統,所以對它的阻斷服務攻擊很罕見。

有些國家攔截並重導 DNS 查詢作為審查手段;有些 ISP 這麼做以把網頁廣告換成自己能抽成的廣告;而 ISP 的 DNS 伺服器可能被駭,把客戶導向惡意網站——這稱為「網址嫁接(pharming)」。

在一個叫「路過式嫁接」的變體中,騙子誘你到一個含 JavaScript 的網頁,把你家用路由器的 DNS 伺服器從 ISP 的換成他們控制的。 下次你想去 www.citibank.com 時,可能被導向一個模仿它的釣魚網站。這是為什麼該改掉家用路由器預設密碼的一個理由——即使它只能從你的網路內部存取。

然而像 Google 這樣的大公司不簽自己的 DNS 紀錄,因為擔心密碼學讓系統更脆弱:一旦出任何差錯,你可能就直接消失了。其他公司避開 DNSSEC 則是因為不想讓競爭者「走遍區域」列舉出他們所有的子網域。

常見手法是:Alice 藉由送給 Charlie 一則訊息來攻擊 Bob——「嘿,能不能告訴我這個短問題的超長答案?Bob 敬上」。 由於已簽章的 DNS 紀錄大得多,DDoS 出租服務能把 DNSSEC 當放大器:Alice 能把偽稱來自 Bob IP 位址的封包送給許多 DNS 伺服器,讓它們用回覆轟炸目標。(臉皮厚的罪犯拿 FBI 當 Charlie,因為 fbi.gov 有兩把很大的金鑰。

主要瀏覽器維護者提議:DNS 流量不再明文送出,而是加密經 https 送到一個 DoH 解析器。這被宣稱有利隱私(你的 ISP 會有較少關於你瀏覽的資訊)。

缺點是許多企業安全產品靠監控 DNS 來偵測濫用。 若惡意程式攻陷了你機隊中的一台機器,你可能在它試圖聯絡命令與控制伺服器時察覺;系統管理員也喜歡監控 DNS 劫持、封鎖某些不適合工作的網域。DoH 會讓這一切更難,而且是可疑的架構——把核心網路服務跑在一個應用之上,意味著它「不再是網際網路」了。

SYN 洪流、SYN 反射與其他放大器

TCP 三方握手:

A --> B:  SYN;  我的號碼是 X
B --> A:  ACK;  現在 X + 1
          SYN;  我的號碼是 Y
A --> B:  ACK;  現在 Y + 1
          (開始對話)

技術修補是「SYN cookie」:Bob 不保留進來之 SYN 封包的副本,而是把 X 的加密版本當作 Y 送出去。這樣 Bob 就不必為半開的工作階段保留大量狀態。

現在更常見的攻擊是 SYN 反射:Alice 送給 Bob 一個偽稱來自 Charlie 的封包,Bob 回覆 Charlie;而實務上系統為了穩健會對每個 SYN 回最多五個 ACK,所以仍有有用的放大效果。

除了 DNS 與 TCP,還有許多協定被用在阻斷服務攻擊中。

更徹底的修補隨後而來:多數可用的放大器使用 UDP 封包,所以從 2000 年代中期起,寬頻 ISP 開始過濾掉來源位址被偽造的 UDP 封包。微軟也修改了網路堆疊,讓被感染的機器更難送出偽造 IP 位址的封包——現在你得駭作業系統,而不只是隨便一個應用程式。

所以利用 UDP 放大器的攻擊必須從託管中心的伺服器發動。2010 年代末,這類攻擊越來越成為 DDoS 出租業者的專利,而對付他們最有效的反制是突襲並逮捕他們。

話雖如此,別忘了線上行動主義。 如果十萬人寄電郵到白宮抗議某項政策,這算是 DDoS 攻擊嗎?抗議者不該被當成重罪犯;但抗議很容易滑向濫用,而在立法上劃出區別可能很難。

電子郵件:從間諜到垃圾郵件#

電郵預設既未加密也未認證,數十年來任何能監看網路或存取郵件伺服器的人都能取得。

第一,這類程式用起來很痛苦;第二,有強烈的網路效應——如果你的朋友都不用,你用郵件加密就沒意義。更甚者,如果只有一小群人用加密,這可能只是把他們帶到當局面前;顛覆團體、間諜等真正需要的是匿名性,而不只是機密性。

對抗大規模攔截有兩個主要對策:

  1. 多數郵件伺服器用 starttls 在交換郵件時與其他郵件伺服器建立加密通訊(尤其在史諾登揭密之後)。加密交換能被中間人攻擊封鎖,而目前的對策 MTA-STS 讓郵件服務商能指定郵件只能經由「以正確憑證認證的 TLS 工作階段」投遞給他們。
  2. 如今約 95% 的個人電郵帳號在五大網頁郵件業者那裡,許多企業也用它們。在此情況下,電郵的機密性由 TLS 保證。但雖然大規模存取可能被封鎖,網頁郵件仍受制於有令狀的存取。

大量不請自來的郵件(垃圾郵件)有兩個成分:

第二是主要由殭屍網路送出、且往往有明確犯罪意圖的流量洪流。 這在某些方面類似 DDoS 攻擊:正如 DDoS 機器人可能偽造 IP 位址,垃圾郵件機器人也可能偽造寄件者郵件位址。

大型業者對抗垃圾郵件的四個機制
  1. DKIM(網域金鑰識別郵件):用一把「其公開驗證金鑰放在寄件網域 DNS 紀錄中」的簽章金鑰簽署郵件,把郵件綁到寄件網域。被簽的材料經過挑選,好在傳輸中標頭被增添的情況下仍能明確識別訊息,但阻止壞人加上額外的「From: PayPal」標頭。 有一種重播攻擊:垃圾郵件商透過 Gmail 送出垃圾郵件、讓 Gmail 簽章,然後事後轉發;所以郵件伺服器會快取 DKIM 簽章,並丟棄帶有「已見過幾次之簽章」的郵件。
  2. SPF(寄件者政策框架):類似,但把郵件綁到來源 IP 位址,同樣可對網域 DNS 紀錄中的金鑰驗證。SPF 不允許郵件轉發;郵件論壇伺服器該用一個叫 ARC 的相關協定來重新簽署其轉發的郵件。
  3. DMARC:網域的 DNS 也能含有一筆 DMARC 紀錄,讓其擁有者能建議收件方如何處理「看似來自該網域、但 DKIM 與 SPF 認證都失敗」的郵件。
  4. 機器學習系統依認證結果與其他準則過濾郵件,其真值大多來自使用者是否把郵件回報為垃圾。 這又因使用者對行銷材料的偏好(因人而異、也隨時間變化)而更複雜。

以 2020 年而言,幫派通常用惡意的 BGP 路由宣告偷走 IP 位址空間、註冊數千個網域,並從每個網域送出幾百封垃圾郵件,趕在機器學習過濾器啟動封鎖之前。

惡意程式動物園#

最早的惡意程式例子是特洛伊木馬。 多年來關於命名有過宗教戰爭,這也是為什麼許多人偏好只用「惡意程式(malware)」這個詞。

  • 木馬(Trojan):一個在被毫無戒心的使用者執行時做壞事(例如擷取密碼)的程式。
  • 蠕蟲(worm):一個在其他系統上自我複製的惡意程式;若它是靠把自己勾進其他程式的程式碼來複製,就是病毒(virus)。
  • 遠端存取木馬(RAT):可能以 root 執行、也可能不以 root 執行,但讓遠端一方能存取它所在裝置的軟體。
  • rootkit:以 root 安裝在裝置上、並隱蔽地讓第三方能控制它的軟體。
  • 潛在不受歡迎軟體(PUS):可能是公開安裝或靠欺騙安裝,但做了使用者不想要的事。

這些類別並不互斥,而邊界可能取決於脈絡。 例如「跟蹤軟體(stalkerware)」——讓一個人能追蹤另一人手機位置與使用的軟體——依「是被隱蔽安裝、是被控制欲強的男人霸凌伴侶而安裝、還是法院命令作為交保條件」而落入不同類別。

惡意程式的演化史:從偷 CPU 時間到 Mirai

1960 年代初,機器很慢、CPU 週期是配給的——學生往往排在隊伍尾端。 學生發明了各種把戲,例如寫一個內含木馬的電腦遊戲,檢查程式是否以 root 執行,若是就建立一個已知密碼的特權帳號。

1984 年 Ken Thompson 在領取圖靈獎時發表了經典論文〈對信任的反思(Reflections On Trusting Trust)〉。

他展示:即使一個系統的原始碼被仔細檢查、並確知沒有漏洞,暗門仍可能被插入。

他的把戲是把暗門建進編譯器:若編譯器辨識出自己正在編譯登入程式,就插入一個對任何帳號都有效的主密碼。當然,有人可能檢視編譯器的原始碼、再從頭編譯一次。所以若編譯器辨識出自己正在編譯自己,它就無論如何都插入那個漏洞——即使原始碼中並不存在。

所以即使你能買到硬體、作業系統與應用程式都可驗證安全的系統,編譯器二進位檔仍可能含有木馬。

教訓是:要完全信任一個系統,光是「建置(build)」它全部(意即從原始碼編譯)並不夠。你必須創造它全部,包括工具鏈,以及硬體。

惡意程式接著變得可移動:

  • 第一個野生的電腦病毒是 1981 年由一位九年級生為 Apple II 寫的。
  • 1984 年 Fred Cohen 以此為題做了博士研究,其在不同作業系統上的實驗展示了程式碼如何從一台機器傳播到另一台。
  • 1987 年 12 月的「Christma」病毒在 IBM 大型主機間傳播:它有個標頭寫著「別讀我,執行我」,若被執行就在螢幕上畫一棵聖誕樹——然後把自己送給使用者聯絡檔中的每一個人。它是作為惡作劇寫的,而靠著用網路傳播並邀請使用者執行它,它超前了時代。

媒體與公眾在 1988 年 11 月因「網際網路蠕蟲」而意識到惡意程式。

那是 Robert Morris Jr 寫的程式,利用若干漏洞從一台機器傳到另一台:它做了 432 個常見密碼的猜測攻擊、尋找任何被感染機器所信任的機器,也試圖利用 Unix 的漏洞。它還採取偽裝步驟:它叫做 sh,並把資料字串加密(雖然用的是凱撒密碼)。

作者宣稱其程式碼並非對網際網路的蓄意攻擊,只是一個「程式碼能否從一台機器複製到另一台」的實驗。但它有個 bug:它本該辨識出已被感染的機器而不再感染,但這個功能沒作用。結果是完全塞爆網際網路的巨量流量,儘管它只影響了當時 Arpanet 上六萬台機器中的約 10%。

一個教訓是:保持鎮定、沒有拔掉網路連線的站點復原得更快,因為他們能弄清楚發生了什麼並取得修補。

下一階段的演化是把使用者納入為傳播機制:

一家有 8.5 萬名員工的加拿大公司在防火牆剝除了所有 Windows 執行檔,但許多員工有個人網頁郵件帳號,所以愛蟲還是進來了。該公司給了每位員工一份公司通訊錄放在通訊簿裡,結果就是 8.5 萬個郵件客戶端各自試圖對 8.5 萬個位址說「我愛你」,系統熔毀。

接著是「閃電蠕蟲」,靠掃描整個網際網路尋找對某個漏洞脆弱的機器並接管它們;Code Red 與 Slammer 這類例子在數小時甚至數分鐘內感染了所有脆弱的機器。

在業餘時代,多數病毒很不穩定,很少真的在野外傳播。 若程式碼傳染性不夠就傳不開;但若你讓它太有傳染性,那麼幾小時內全球防毒廠商就會升級產品來偵測並移除它。如今惡意程式作者聚焦於錢而非吹噓權,因而傾向避開自我複製的蠕蟲,改用更可控的漏洞利用行動。主要例外是利用無法修補的 IoT 裝置。

惡意程式如何運作#

惡意程式通常有兩個元件——複製機制(或投放器)與酬載。

  • 外洩你的機密資料
  • 用銀行惡意程式或間諜軟體直接攻擊你
  • 加密你的資料並勒索贖金
  • 攻擊他人(例如 GCHQ 的「社會主義者行動」顛覆了 Belgacom,並在其中安裝軟體以監控經比利時前往他國的行動電話流量);
  • 執行其他邪惡任務,例如用 CPU 挖加密貨幣;
  • 安裝 rootkit 或遠端存取木馬,讓其控制者能做以上任何事、與其他機器上的惡意程式協同攻擊、並針對任何對策更新自己。

攻擊者一旦控制了目標網路上的一台裝置,就會想橫向移動、繪製網路地圖,並找出認證伺服器與郵件伺服器這類關鍵資產,好擴大淪陷範圍並安裝遠端存取木馬以取得永久據點。

  • 過去攻擊者會安裝封包嗅探軟體採集密碼、攻陷其他帳號,最終包括系統管理員的。如今的良好實務是用雙因子認證、或用 Kerberos、SSH 這類協定確保明文密碼不會在區網上流動來封鎖這類攻擊。
  • 其他技術鎖定檔案伺服器這類共享資源。 例如 Linux 伺服器可能用 NFS 協定;磁區首次掛載時,客戶端會從伺服器取得一個 root 檔案控制碼——一張不依賴時間、也無法撤銷的存取票券。
  • SSH 這類安全機制帶來進一步的漏洞:大型組織中的機器可能有數千把彼此通訊的 SSH 金鑰,入侵者能利用它們及其創造的信任結構四處移動。

這是「不要信任本地網路,而要在任何時候都堅持客戶端與伺服器之間的強認證」的論據之一。

對策的軍備競賽#

掃描器搜尋執行檔中的「淪陷指標(IoC)」,典型是某特定病毒的一串位元組。惡意程式開發者以各種方式回應,而主流技術成了「多型(polymorphism)」:想法是每次複製時都改變程式碼,讓穩定的 IoC 更難找。通常的技術是加密程式碼,並有一個含解密程式碼的小標頭;每次複製時,惡意程式用不同金鑰重新加密自己,並用等價的指令序列替換來微調解密程式碼。

現代惡意程式可能被半打這樣的封裝器依序處理過,並在執行時遞迴地自我解封。防毒公司則在虛擬機中執行程式碼反擊,於是惡意程式開發者加入偵測虛擬機的程式碼。

校驗和器保存系統上所有授權執行檔的白名單,連同原始版本的校驗和。惡意程式開發者的主要對策是隱形(stealth):惡意程式監看校驗和器所用的那類作業系統呼叫,並在檢查進行時把自己藏起來。

殭屍網路與機器利用的商業化意味著惡意程式作者像公司一樣運作,有研發與測試部門。幾乎所有漏洞利用在剛推出時都無法被當時的防毒產品偵測(如果作者好好測試過的話),而其中許多在防毒業注意到之前就已招募到目標數量的機器。

淨效果是:雖然防毒軟體在 2000 年代初或許能偵測到流通中幾乎所有的漏洞利用,到 2010 年典型產品可能只偵測到三分之一,而到 2020 年你只能預期事後偵測到感染、然後收拾殘局。

更甚者,rootkit 廠商提供售後服務:若某個移除工具被推出,rootkit 廠商就會迅速推出對策。而如今許多攻擊者(尤其是有能力的那些)不留下惡意程式檔案,而是「就地取材」——他們可能只是把自己的 ssh 金鑰加進你某台伺服器的授權金鑰清單,好在想來的時候順道進來,什麼都不留給傳統防毒去找。

防禦網路攻擊#

2008 年第二版的觀點是:你需要三樣東西——夠好的管理來讓系統保持修補與正確設定;防火牆來擋掉已知木馬與網路漏洞利用;以及入侵偵測來監控網路與機器上的淪陷指標。

  1. 每個端點上的代理程式,回報給雲端服務,讓你完整看見什麼軟體跑在哪裡,並讓你能推送更新;
  2. 漏洞掃描器,持續探測你的網路尋找已知漏洞;
  3. 各種邊界控制裝置,可能包括防火牆、過濾員工造訪網站 URL 的代理伺服器,以及關鍵應用的代理;
  4. 給遠距工作員工的 SSL 閘道
  5. 自帶裝置(BYOD)管理器,控制員工使用但公司不擁有的筆電、手機與其他裝置;
  6. 資料外洩防護(DLP)系統,辨識試圖帶走公司文件或程式碼的員工;
  7. 威脅情報平台,整合多家業者的饋送,就各種淪陷指標(包括壞的 DNS 名稱與 IP 位址)向你示警;
  8. 日誌分析工具,讓你能回頭查出淪陷最早何時發生、擴散多遠;
  9. 安全編排與回應(SOAR)系統,在你注意到網路中某些裝置正與惡名昭彰的位址通訊時,幫你快速回應。

要讓這一切協同運作需要系統整合,否則你的網路安全中心會有幾十名員工,工作就是把壞網域、壞 IP 位址等淪陷指標的清單從一個工具抄到另一個工具。

但這種策略比看起來難,它帶來若干困難的子問題,例如維護一份網路上所有裝置的準確清冊。若你為登記新裝置加上僵化的官僚程序,人們就得想辦法繞過它才能把工作做完。

而即使勤勉的組織也可能發現「一次修好所有安全漏洞」太貴:修補可能弄壞關鍵應用,而一個組織最關鍵的系統往往跑在最不安全的機器上,因為管理員不敢升級它們,怕失去服務。

我們從史諾登得知這是 NSA 2013 年攻擊一家公司的標準做法:他們會監控外部流量以辨識系統管理員、做些背景研究以鎖定個別目標、然後精心製作一個有說服力的釣餌。

你可以試圖教育員工不要點可疑郵件中的連結,但有能力的攻擊者會製作看起來不可疑的郵件。 而且太多企業預期其客戶與供應商會點連結,所以你的員工也得點一些連結才能把工作做完。

責怪受害者是適應不良的;如果你的安全系統不可用,你得去修它,而不是責怪可憐的使用者。

過濾:防火牆、審查軟體與監聽#

防火牆是一台站在私有網路與網際網路之間、過濾掉可能有害流量的機器。

非常相似的系統也被用於網際網路審查與執法監聽;本節談的幾乎一切都能轉移到那些應用上。任一領域的發展都可能影響其他領域,而實際系統可能有重疊的功能。

過濾器基本上有三種,取決於它們是在 IP 封包層、TCP 工作階段層、還是應用層運作:

  1. 封包過濾:最簡單的過濾器只檢視封包位址與埠號。這在路由器、Linux 與 Windows 中是標準功能。你能靠確保「只有『本地』封包離開網路、只有『外來』封包進入」來封鎖 IP 偽造,也能輕易封鎖往返「已知壞」IP 位址的流量。 例如 IP 過濾是中國防火長城審查機制的主要元件;一份壞 IP 位址清單能放在路由器硬體中,讓封包過濾能以極高速度進行。
  2. 電路閘道:重組並檢視每個 TCP 工作階段中的所有封包。這比簡單的封包過濾昂貴,但也能提供虛擬私有網路(VPN)的附加功能。 然而這類過濾器無法在應用層篩掉壞東西。
  3. 應用代理:理解一或多種服務。例如試圖剔除垃圾郵件的郵件過濾器,以及封鎖或移除不良內容的網頁代理。經典目標是剝除程式碼,不論是直接的執行檔、網頁中的主動內容、還是收到的 Word 文件中的巨集。

先驅是軍用郵件系統,監控外送流量以確保沒有機密資料以明文外流。2020 年出口過濾成長最快的用途是資料外洩防護(DLP):不論為了著作權執行還是行銷目的而「回家通報」的軟體,都可能揭露高度敏感的材料。

網路安全架構的六個考量

另一個極端,一家國防承包商的認真防火牆系統,可能包含一個把外界連到「屏蔽子網路」(也叫非軍事區,DMZ)的封包過濾器,其中含有若干應用伺服器或代理來過濾郵件、網頁與其他服務。你也可能預期看到資料二極體分隔不同密級的網路。

另一種取徑是「更多網路,但每個更小」。 在作者的大學,他們用防火牆分隔各系所,雖然共用網路骨幹與一些中央服務。學生與財務部門沒有理由在同一個網路上,而資工系的需求與神學系相當不同。讓每個網路保持小規模,能限制任何淪陷的範圍,也有助於激勵系統管理員去防守它。

網路安全架構設計的考量包括:

  1. 簡約:由於防火牆只做少數幾件事,可以把它們做得很簡單以移除漏洞與錯誤的來源。如果你的組織有異質的機器群,把盡量多的安全任務加載到少數幾個簡單的盒子上是合理的。反之,如果你經營的是客服中心、有一千台設定相同的 PC,那就該把力氣放在讓這個設定保持嚴密。
  2. 可用性:精緻的中央裝置不只帶來更高的運作成本,還可能礙事到讓人裝上後門(例如繞過防火牆的纜線數據機)才能把工作做完。 許多經營良好的公司有開放的訪客網路;總得有個能用的東西。而審慎的系統管理員會監控實際的網路設定,而不只是倚賴「政策」。
  3. 防火牆只在人們找到繞過方法之前有效:早期防火牆只讓郵件與網頁流量通過,所以從電腦遊戲到匿名代理的應用作者重新設計其協定,讓客戶端-伺服器流量盡量看起來像一般網頁流量。
  4. 去周界化:如 Google 的 BeyondCorp 所指出,由於手機與 PDA 大量取代桌機的功能、以及商業方法轉向更多外包,把所有保護放在周界正變得越來越難。 若你組織中某些部分無法被控制(如業務團隊與研發實驗室),而其他部分必須被控制(財務部),你可能需要分開的架構。
  5. 接收者操作特性曲線:沒有任何過濾機制有完美的精確度,所以在「封鎖不足」與「過度封鎖」之間無可避免有取捨。 如果你在跑一套阻止孩子在公共圖書館看色情的審查系統,你要封鎖不足、在有圖片漏過去時惹惱家長與教會,還是過度封鎖、然後因侵犯言論自由被告?
  6. 誘因:一位照看「由他認識的一百人使用、且任何入侵或設定錯誤都得他親自收拾」之部門網路的系統管理員,比一位「僅是照看數千台機器之大團隊成員之一」的人有動機得多。

入侵偵測#

攻擊會發生,而「防住一些、偵測其餘」往往比「試圖防住一切」便宜。

  • 一台機器試圖聯絡「已知壞」的服務(例如用來控制殭屍網路的 IRC 頻道)、或已知壞的 IP 位址、或試圖解析已知壞的 DNS 名稱;
  • 來源位址被偽造的封包——例如宣稱來自某子網路之外、但實際源自其內的封包;
  • 來自你網路中某台機器的垃圾郵件。
  • 誤用偵測(misuse detection)系統用「入侵者可能行為」的模型運作。簡單的誤用偵測系統(如防毒掃描器)尋找特徵碼——某特定攻擊的已知特性;較複雜的則把若干特徵碼當成訊號,然後訓練一個機器學習分類器來做決定。
  • **異常偵測(anomaly detection)**系統試圖做難得多的工作:在沒有攻擊者行事手法之清晰模型的情況下,尋找異常行為。 希望是能偵測到先前未被辨識與編目的攻擊。

憑空編數字做假帳的黑心職員(甚至是不知道班佛定律而使用亂數產生器的人),常因此被抓。

另一個邊界案例是蜜罐(honeypot)——留下來吸引注意的誘餌。在網路脈絡中,蜜罐模擬多種裝置,好讓掃描網際網路的攻擊者找到一台可以攻擊的(比方說某個特定升級狀態的 DSL 數據機)。結果是蜜罐營運者能看見誰在攻擊什麼、以及怎麼攻擊。

為什麼偵測網路入侵比偵測支付詐欺難

病毒先驅 Fred Cohen 證明:偵測病毒(在「判斷一個程式會不會做壞事」的意義上)與停機問題一樣難,所以我們永遠不能期待完整的解法。

網路入侵比支付詐欺更難察覺。網路入侵偵測產品的漏警率與誤警率仍然很高,實務上常常只能事後才偵測到真正的入侵。原因包括:

  • 網際網路是個非常吵的環境——不只在內容層次,在封包層次也是。任何有規模的站點都會收到大量隨機垃圾,其中夠多能被解讀為敵意的,足以造成顯著的誤警率。
  • 「攻擊太少」。 若每一百萬個工作階段有十次真實攻擊(那幾乎確定是高估),那麼即使系統誤警率低到 0.1%,誤警與真警的比例也會是 100 比 1。 這與防盜警報的問題類似,也是醫界執行 HIV 這類疾病篩檢時(檢驗錯誤率超過疾病盛行率)眾所周知的問題。訊號遠低於雜訊時,警衛會累,而真警報會被漏掉。
  • 雖然銀行失竊會造成不正確的狀態(錢在錯的地方,且稽核軌跡上有證據),許多網路入侵的目標卻是避免這點(例如任務是外洩機密資料)。寫軟體偵測錯誤,比偵測「略微古怪的行為」容易。
  • 許多網路攻擊專屬於特定軟體版本,所以你需要一個龐大且不斷變化的攻擊特徵碼庫。然而許多公司買入侵偵測系統是為了滿足保險公司或稽核員,而產品並不總是保持最新。
  • 隨著越來越多流量被加密,它們無法輕易接受內容分析或被過濾惡意程式碼。若 DNS-over-https 成為常態,倚賴分析你 DNS 流量的工具會變得沒那麼有效。
  • 你可能得同時在本地與全域做入侵偵測:由於加密網頁工作階段,越來越多事得在本地機器上做;但有些攻擊是隱形的——對手每天對十萬台主機各送一兩個封包,而你需要一個依來源與目的位址、依埠號計數封包的中央監控器。

密碼學:參差不齊的邊界#

網路安全以許多方式與密碼學交互作用。

同時,問題中最集中的部分——PKI——常被政府命令顛覆。

SSH#

SSH(安全外殼)在 Unix 與 Windows 主機之間提供加密連結。 它 1995 年由赫爾辛基理工大學研究者 Tatu Ylönen 在一次密碼嗅探攻擊後寫成。

要從筆電連到實驗室的伺服器,你把筆電公鑰裝進該伺服器的相關檔案。登入時你被要求輸入通行詞;兩台機器建立一把 Diffie-Hellman 金鑰;私鑰被用來簽署暫態公鑰以阻止中間人攻擊;其後的流量因而既加密又認證。

手動裝金鑰很直覺,但特別不易規模化。

然而最糟的大概是:多數用於伺服器對伺服器通訊的 SSH 金鑰是以明文儲存的,完全沒有密碼保護。所以若一台伺服器被攻陷,每一台信任其上所裝 SSH 金鑰的機器也會遭殃。

周邊的無線網路#

WiFi、藍牙與 HomePlug:都難以完全修好的本地攻擊

WiFi 支援無線區域網路。它自 1997 年推出以來有一系列加密協定。

WiFi 網路該被視為不可信嗎? 設密碼的理由更多是防止第三方使用你的頻寬或流量額度,而非嫁接風險。許多英美的人覺得留一個開放網路給訪客用、並讓你與鄰居能互相當備援,是方便的。

把金鑰放在一張卡片上,是可用安全設計的漂亮例子:屋主能靠把卡片釘在牆上或鎖起來,來讓網路依需要而開放或安全。

修補是個議題。 例如 2020 年 3 月我們得知 Broadcom WiFi 晶片的 Kr00k 漏洞,它會在 Mac 與 iPhone 上被修補,但大概不會在無線路由器或較舊的 Android 手機上。至於絕大多數 IoT 裝置,從玩具到家電,它們永遠不會被修補。

藍牙是另一種短距無線協定,瞄準個人區域網路。

然而由於裝置之一或兩者可能沒有鍵盤或螢幕(或都沒有),也可能由一台裝置產生數字、在另一台輸入為通行碼;而且還有一個未防護中間人攻擊的「直接就用(just works)」模式。

更甚者,資料可能簽章也可能不簽章,總共約有十種機密性、完整性與抗中間人的組合,而已有若干攻擊被發現。

HomePlug 是用於電力線通訊的協定,廣泛用於 WiFi 延伸器。(作者是該協定的設計者之一。)

  • 安全模式:使用者手動把印在裝置標籤上的唯一 AES 金鑰輸入其網路控制器;
  • 「簡單連接」模式:金鑰在未經認證的情況下交換。這個模式中金鑰甚至沒有加密;其目的不是提供安全,而是防止錯誤的關聯(例如裝置誤與隔壁的網路配對)。

然而許多廠商只支援「簡單連接」模式,結果變成「首次使用即信任」的政策。加上廠商以各種方式客製產品使其與競爭者不相容,這團混亂的結果是:金鑰管理幾乎無法被倚賴。

VPN 通常在 IP 層用一套叫 IPsec 的協定做加密與認證。

它定義「安全關聯」為用來保護某特定封包串流的金鑰、演算法與參數的組合。受保護的封包可能只被認證,也可能被加密。

還有一個網際網路金鑰交換(IKE)協定用來建立金鑰與協商參數,而我們可以從史諾登的揭露推斷:它的標準預設設定(1024 位元 Diffie-Hellman)是不安全的。

CA 與 PKI#

公開金鑰密碼學的先驅們發展出一個願景:憑證會把公鑰綁到「控制對應私鑰之組織、人或裝置」的名稱或角色上。

起初人們以為政府或電話公司會做這件事,但它們太慢了。網路泡沫期間,創業者設立了憑證機構(CA),而微軟、Netscape 這類軟體公司把它們的公鑰嵌進瀏覽器。

接著是一場淘金熱:投資人希望每台裝置都需要公鑰憑證,所以你每兩年得付 Verisign 十塊錢替你的烤麵包機更新憑證,否則它就不跟你的冰箱說話。

隨著人們轉向 Gmail 這類網路服務,安全機關開發了做中間人攻擊的工具;由於 TLS 被用來加密密碼輸入(後來是整個工作階段),這意味著要有一個 CA 願意為安全機關的公鑰簽發一張 www.gmail.com 的憑證,好讓目標的瀏覽器接受。

作者在 2011 年金融密碼學會議的一場座談上,問 Mozilla 的人:為什麼他前一天更新 Firefox 時,它把他移除掉的一張 Tubitak(一個土耳其情報組織)憑證又放回去了? 此時聽眾中有人站起來大喊:「你竟敢侮辱我的國家!Tubitak 不是情報機關——它是研究組織!」Mozilla 的人聳聳肩,苦笑著說:「現在你們知道憑證治理有多難了。」

Mozilla 與 Google 迅速移除其根憑證,把 DigiNotar 判了死刑,微軟與 Apple 很快跟進。這在荷蘭造成真實的混亂,因為許多線上政府服務用的是 DigiNotar 憑證,只好手忙腳亂地去換別的。

開放 PKI 與封閉 PKI、憑證的信任問題,以及三個當前議題
  • 前者中,基礎設施能被任何新來的應用使用——稱為開放 PKI
  • 後者中不行——稱為封閉 PKI

如果你在建一項政府機關可能會攻擊的服務,把 PKI 保持封閉、用一個跑在自家場所的 CA,可能是個好主意——這樣你就會知道有任何令狀。作者建議「維護裝在數百萬台機器上之軟體」的公司,用私有 CA 來簽程式碼。

你有時能靠移除不必要的名稱來簡化事情:與其一張憑證說「Ross Anderson 的金鑰是 KR」、另一張說「Ross Anderson 有權管理 x.foo.com」,不如直接說「KR 有權管理 x.foo.com」。

這是「一把金鑰還是多把」辯論的一個面向。多把金鑰保護客戶:我不想用一把「能把房子二胎抵押」的金鑰去買午餐三明治。

這又導向信任的問題,而問題有很多:

  • 若你從 Firefox 移除數百張根憑證中的一張,Mozilla 會默默把它放回去;Windows 附帶的根憑證更多——而你根本刪不掉。 兩種情況下,你都得知道如何把一張憑證標記為不受信任。
  • 許多公司用過期的、或對應到錯誤公司的憑證,往往是因為公司行銷部門找了外包做某個促銷活動。結果是使用者被訓練成忽略安全警告,過去只有極少數人會理會。
  • 憑證把公司名稱綁到 DNS 名稱,但其銷售商通常對兩者都不是權威;他們在確認申請者能回覆一封寄到該網域的郵件、或在網頁上放一個 CA 挑戰之後就發憑證。
  • 在其「認證實務聲明」中,CA 不遺餘力地否認一切責任。
  • 憑證撤銷是個議題。 原本的想法是任何倚賴憑證的人都能從 CA 下載憑證撤銷清單(CRL)來檢查。然而這需要連線才能有高保證,因而抵銷了公開金鑰密碼學的許多好處。 自 2013 年左右,人們轉向更有效率的線上憑證狀態協定(OCSP)。

1990 年代網路泡沫期間,SSL 協定(當時的 TLS)勝過了一個更複雜笨重的協定 SET,因為它給開發者的負擔較小。合規的成本被丟給使用者——而他們往往應付不來。此後圍繞 CA 與憑證的工程,很多都是在追趕。

撰稿時的三大議題是:憑證壽命、LetsEncrypt,以及憑證透明度。

  • 憑證的最長允許壽命(若要被主要瀏覽器接受)已從 8 年穩定縮短到 3 年、再到 27 個月。 2020 年 Apple 逼出了結果:宣告從 9 月起,其裝置不再接受任何有效期超過 398 天的憑證。
  • 過去取得憑證很麻煩。改變者是非營利的網際網路安全研究小組(ISRG),它免費提供憑證,到 2020 年 2 月已簽發十億張。 讓憑證免費使得完全自動化成為可能,把成本壓低:其「LetsEncrypt」CA 用每年 300 萬美元的預算支撐一億個站點。 影響是真實的:仍有 20% 的瀏覽器連線是明文,但這比四年前的 60% 好多了。 它有一份透明度日誌、且系統沒有人工覆寫,所以有某種程度的保證:他們從未被強迫簽發過憑證。
  • 在 Comodo 與 DigiNotar 的攻擊之後,人們開始研究封鎖惡意簽發憑證的機制。「憑證透明度」的做法是為每個網域維護一份「野外所見全部憑證」的日誌,好讓網域擁有者能迅速發現不該為其網域簽發的憑證。 Google 2013 年推出第一份憑證透明度日誌;Google 發現 Symantec 曾在網域擁有者不知情的情況下為若干網域(包括 Google 自己的)簽發憑證,並在 2018 年對所有 CA 強制要求憑證透明度。

拓樸#

網路的拓樸是其節點連接的模式,而這可能是安全架構的重要成分。

  • 一家公用事業可能有若干「孤島」,各含一座發電機或變電所、有數十到數百台裝置在一個受信任的網路上,再經由專用防火牆與 VPN 連到網路控制中心。
  • 一家雲端服務商可能在資料中心有數萬台機器,由業者與其租戶所簽發的憑證層級決定哪些虛擬機或容器能彼此通訊。而雖然內部網路可能不受信任(意即網路位置在存取控制決策中不起作用),它可能被前端系統屏蔽以防 DDoS 攻擊。

社會網路能用「頂點階數呈冪律分布」的圖來建模:少數連結良好的節點有助於讓網路對隨機失效有韌性、也容易導航。然而它們也讓這類網路易受針對性攻擊:移除連結良好的節點,網路就容易被切斷。

獨裁者憑直覺就知道這點:史達林靠殺掉較富裕的農民鞏固統治,波布殺知識分子,而征服者威廉殺撒克遜仕紳。

如今我們有了量化模型,它們有助於解釋為什麼革命者傾向把自己組織成「細胞」:只要對少數幾個連結良好的組織者做流量分析,警方就能辨識出數量驚人的異議組織成員——除非異議者一開始就以細胞結構組織。

小結#

不太可能有任何魔法解方,雖然很多東西都有幫助。每一項新進展都開啟新的擔憂:例如雲端服務可能把大部分網路安全任務移交給業者,卻讓組態管理更為關鍵。

整體而言,問題複雜又混亂到「管理它們需要一套帶自動化的全系統取徑」。

研究問題#

到 2010 年,關於經濟與政策的討論多了很多:關於改變責任規則可能如何讓事情變好。

到 2020 年,關於「度量」的工作多了很多:關於量測實際發生了多少壞事。