capability-based-security

6 posts

你的依賴能讀取環境變數。JavaScript允許它們這麼做

Ambient Authority意味著Node.js程序中的任何程式碼都能觸碰檔案系統、網路和執行環境。本文將講解如何透過lockdown、compartment和顯式capability傳遞來剝除它。

一個被攻破的傳遞依賴就能外洩你的 、寫入你的檔案系統、開啟出站連線。它不需要你的程式碼存在漏洞。它只需要存在於同一個程序裡。在JavaScript中,每個模組預設繼承執行時的全部權限。這就是Ambient Authority,而移除它是你能對Node.js應用程式做的最有效的安全性升級之一。 Ambient…

網路鄰近性不等於身份:服務如何在不依賴環境權威的情況下完成認證

大多數服務間信任來自網路位置,而非密碼學證明。本文介紹能力權杖、mTLS 和 SPIFFE 如何讓服務在不依賴環境權威的前提下完成認證,以及為何這做起來比想像中困難。

你的微服務共享同一個 VPC,因此彼此信任。這種信任就是環境權威:呼叫服務的權限不是由密碼學證明授予的,而是由網路拓撲決定的。一旦攻擊者突破邊界,就會繼承所有這些權限。 服務絕對可以在沒有環境權威的情況下完成認證。更難回答的問題是:為什麼你的平台讓你覺得這是在背叛既有架構。…

你的依賴項目可以讀取磁碟上的任何檔案。cap-std 讓它們必須先取得權限。

Rust 的標準函式庫將環境檔案系統權限授予每一個依賴項目。cap-std 以權能式 API 取而代之,強制程式碼在開啟路徑之前先證明自己擁有存取權。

依賴樹中的任何 crate 都可以開啟 、寫入你的 目錄,或是列舉專案中的每一個檔案。Rust 的標準函式庫不會要求任何權限。它預設任何有能力呼叫 的程式碼,都有權碰觸作業系統允許的任何路徑。 cap-std 改變了這個預設。它是 Rust I/O module…

你的服務是無心的共犯:Confused Deputy 攻擊的原理

Confused deputy 攻擊會誘騙具有高權限的服務,使其利用自身權限對自己造成傷害。以下是攻擊者如何利用隱性信任,以及為什麼 capability-based security 是解方。

你的服務持有雲端儲存空間的 API key。一名使用者發出請求,你的服務盡責地寫入一個檔案。結果檔案卻落在攻擊者的 bucket,而不是你的,現在他們擁有了你的資料。你剛剛成為了一名無心的共犯。 這就是 confused deputy 攻擊。攻擊者本身無法寫入目標…

你的權限檢查正在欺騙你

Capability-based security 用不可偽造的權限 token 取代散落各處的 role 檢查。以下是如何在 TypeScript 中實作它,同時不讓你的程式碼變得難以閱讀。

事後來看,每個權限漏洞都長得一模一樣。呼叫堆疊深處的某個函式假設呼叫者已經檢查過 。結果沒有。或者新增了一個角色,你在 47 個檔案裡用 grep 搜尋 ,祈禱自己沒有漏掉任何一處。 Capability-based security…

如果每個函式都必須被賦予權限,而不是預設擁有呢?

大多數程式碼在 ambient authority 下執行:每個函式都能碰觸一切。Capability-based security 顛覆了這個模式,強制函式必須接收明確且受範圍限制的權限。

你的 函式能夠存取資料庫、payment gateway與審計紀錄,只因為它恰好執行在同一個程序裡。如果攻擊者在某個 HTTP handler 中發現注入漏洞,他們就能繼承這一切權限。這個函式從未要求過這些能力,它僅僅因為被部署在這裡,就理所當然地預設擁有。 這就是 ambient…