零信任
最近在研究一個東西,越挖越覺得有趣,想先寫一篇科普當鋪陳。
主題是「零信任」。
朋友聽到的第一反應是:「這是什麼?聽起來很邊緣人欸,誰都不信任?」
欸!不是啦,但⋯⋯其實你也沒說錯XD
邊界防禦:把系統當成一座城堡
先講傳統的資安思維。
以前我們保護系統,就像蓋一座城堡。
外面挖護城河、架高牆、城門派士兵站崗。只要你通過城門的檢查,進到城裡,恭喜,你就是自己人了。
城裡的酒館、糧倉、金庫,你想去哪就去哪,沒人再攔你。
這就是所謂的「邊界防禦」。VPN 就是那道城門,內網就是城裡。
聽起來很合理吧?
但問題來了。
城牆早就不存在了,你還在守城門
現在的系統早就不是一座城堡了。
微服務架構下,一個產品背後可能是幾十個、上百個服務,散落在不同的雲、不同的 cluster,彼此瘋狂通訊。
人在咖啡廳、在家裡、在高鐵上,用自己的手機、公司的筆電輪流連線。
城牆早就不存在了,你還在守城門,守個寂寞。
更慘的是,只要有一個壞人混進城門——偷了通行證也好、內部叛變也好——整座城對他來說就是吃到飽。
他可以在「可信任」的內網裡自由掃描,一台打穿再打下一台,這招叫「橫向移動」。
這幾年一堆重大資安事件,都不是城牆被轟破,而是有人拿著合法的鑰匙走進來,然後在裡面橫著走。
內網 ≠ 安全,這件事大家終於痛過才學會。
零信任的核心:Never trust, always verify
零信任(Zero Trust)的核心就一句話:
Never trust, always verify.
永不信任,持續驗證。
我不管你人在城裡還是城外,我不管你昨天有沒有驗證過,你每一次要拿東西,都給我重新證明你是誰、你有沒有資格。
飯店房卡:每一道門都是一次驗證
我覺得最貼切的比喻是飯店房卡。
你入住的時候,櫃檯驗你的證件,給你一張房卡。
這張房卡只能開你自己的房間,只能搭到你住的樓層,只能在退房日之前使用。
你想去頂樓行政酒廊?抱歉,你的卡刷不進去。
每一道門,都是一次驗證。這就是最小權限:你的工作只需要碰 A 服務,那就只給你 A 服務的門禁,多一分都不給。沒被明確允許的,一律拒絕。
更狂的一招:讓整棟飯店直接隱形
但零信任玩到極致,還有更狂的一招。
不只是每道門都要刷卡——
是讓整棟飯店直接隱形。
——
什麼意思?
傳統的服務要對外提供功能,就得在網路上開一個 port,像是在路邊開一扇門。
門開在那裡,路過的人都看得到。壞人拿著掃描工具在網路上晃一圈,馬上知道你家有幾扇門、哪扇門看起來比較舊、哪扇門的鎖有已知漏洞。
而零信任的進階做法是:服務不開任何門。
對,一個 port 都不開。
所有連線都是由服務自己「從裡面往外撥出去」的,外面沒有任何入口可以敲。
沒有憑證的人來掃描,得到的結果是——什麼都沒有。不是「拒絕連線」,是連這個服務存在的痕跡都找不到。
你不能攻擊一個你看不見的東西。
判斷依據從「你從哪裡來」換成「你是誰」
那授權的人怎麼連?
關鍵在於,判斷依據從「你從哪裡來」變成「你是誰」。
以前的網路世界,IP 位置就是你的身份證。但 IP 會變、會被偽造、會共用,拿地址當身份,本來就很荒謬。
零信任改用密碼學的身份:每個服務、每台裝置、每個使用者,都有自己的憑證。連線的兩端互相亮出憑證驗明正身,中間再由一套規則決定「這個身份能不能碰這個服務」。
你要連的不再是某個 IP 加 port,而是一個「有名字的服務」。整段路徑端對端加密,中間經過誰都拆不開。
爆炸半徑:就算他進來了,也走不了多遠
這樣設計最爽的地方在哪?
爆炸半徑。
假設最壞的狀況真的發生了,某台服務被打穿。攻擊者興奮地環顧四周,準備開始橫向移動——
然後發現,什麼都看不到。
他能碰的,只有這台服務原本被授權存取的那幾扇門。其他服務對他來說根本不存在。
與其賭壞人進不來,不如設計成「就算他進來了,也走不了多遠」。
這才是成熟的資安態度。
導入零信任,最難的其實是心智模型
也許有人會說,這樣不是很麻煩嗎?
老實說,導入確實是一場長期抗戰。
最難的不是技術,是心智模型的轉換——整個團隊要從「IP 思維」轉到「身份思維」,一堆老系統等著你去踩坑,開防火牆 port 的工單文化也要跟著改。
但體感上反而常常更順:使用者不用再連那個慢到懷疑人生的 VPN,工程師不用再為了開一個 port 跑流程,權限用宣告式的規則管理,誰能連誰,一目瞭然。
——
寫到這裡先收個尾。
最近和朋友把上面講的這一整套——隱形服務、憑證身份、細粒度授權、端對端加密——全部包好了,甚至可以直接嵌進應用程式裡,讓你的服務天生就活在這個看不見的網路上。
我最近就在玩這個,踩了一些坑,也挖到一些寶。
這篇先當個鋪陳,到底實際故事發生什麼,之後找時間再寫吧