权限提升

**特權提升**（英語：**Privilege escalation**）是指利用作業系統或應用軟體中的程式錯誤、設計缺陷或組態疏忽來取得對應用程式或使用者來說受保護資源的進階存取權限。其結果是，應用程式可以取得比應用程式開發者或系統管理員預期的更高的特權，從而可以執行授權的動作。

## 背景

大多數電腦系統的設計是面向著多個使用者。特權表示使用者被允許執行的操作。常見的特權包括檢視、編輯或修改系統檔案。

特權提升表示使用者設法得到本不應該有的權限。這些權限可能用於刪除檔案、檢視私人資訊或者安裝非法程式（如電腦病毒或惡意軟體）等，也可能用來解除製造商或管理員的某些特殊限制。它的發生通常是因為系統存在一個允許繞過安全措施的程式錯誤，或者利用了設計上的缺陷。特權提升有兩種形式：

* **垂直特權提升**，是通常所指的特權提升（privilege elevation），其中較低特權的使用者或應用程式將能存取為較高特權使用者或應用程式保留的功能或內容（例如，網上銀行使用者存取到網站管理功能，或者繞過密碼認證措施）
* **水平特權提升**，指普通使用者存取到本應不能存取的為其他普通使用者保留的功能或內容（例如網上銀行使用者 A 存取了使用者 B 的網上銀行帳戶）

## 垂直特權提升

當使用者或行程取得比管理員或系統開發者預期的更高存取級別時，這種特權提升則已發生，這可能以執行核心級操作表現。

### 例子

在某些範例中，高特權應用程式假定它只是提供與介面規範匹配的輸入，並且不會驗證輸入。然後，攻擊者可以利用這一假設，使未經授權的代碼以應用程式的特權執行：

* 有些 Windows 服務是組態為在 Local System 使用者帳戶下執行。諸如緩衝區溢位等隱患可能被用來執行特權提升，從而在本地系統級別執行任意代碼。除此之外，如果類比使用者時的錯誤處理不正確（例如，使用者引入一個惡意的錯誤處理程式），採用較低使用者特權的系統服務也可能被提升使用者特權。
* 在部分舊版 Microsoft Windows 作業系統中，All Users 的螢幕保護裝置在 Local System 帳戶下執行 —— 任何帳戶都可以替換檔案系統中或登錄檔中的當前螢幕保護裝置的執行檔，從而提升特權。
* 在特定版本的 Linux 核心中，可以編寫一個將當前目錄設定為 `/etc/cron.d` 的程式，然後設法使當前應用被另一個行程 kill 並產生一個核心轉儲。核心轉儲檔案被放置到程式的當前目錄，即 `/etc/cron.d`，然後 `cron` 將會視它為一個文字檔案並按它的指示執行程式。因為該檔案的內容可能受到攻擊者的控制，因而攻擊者將能以 root 特權執行任意程式。
* 跨區域指令碼是一種特權提升攻擊，其中網站擊破了網頁瀏覽器的安全模型，從而可以在客戶端的電腦上執行惡意代碼。
* 還有一種情況是，應用程式可能使用其他高特權服務，並對客戶端操控這些服務的用法有著不正確的假設。如果應用程式使用未經檢查的輸入作為執行的一部分，則它可能出現代碼注入問題，從而執行使用者提供的命令列或 shell 命令。攻擊者因而可以使用應用程式的權限執行系統命令。
* 德州儀器計算機（特別是 TI-85 和 TI-82）最初被設計為僅解釋以 TI-BASIC 的方言編寫的程式。但是，在使用者發現可利用漏洞允許在計算機硬體上執行 Z-80 代碼後，TI 發布了編程資料以支援第三方開發。（此做法並未延伸到基於 ARM 架構的 TI-Nspire，在使用 Ndless 的越獄方法被發現後，此做法仍被德州儀器積極打擊。）
* 部分 iPhone 版本允許未授權的使用者在已鎖定時存取手機。

#### 越獄

**越獄**（**jailbreak**）是用於在類 UNIX 作業系統中擊破 chroot 或 jail 的限制或繞過數位版權管理（DRM）的行為或工具。在前一種情況下，它允許使用者檢視管理員計劃給應用程式或使用者使用的檔案系統部分之外的檔案。在 DRM 情況下，這將允許使用者在具有 DRM 的裝置上執行任意代碼，以及突破類似 chroot 的限制。該術語起源於 iPhone/iOS 越獄社群，並也被用於 PlayStation Portable 破解的術語。這些裝置已一再遭到越獄從而為執行任意代碼，供應商的更新則在封堵這些越獄途徑。

iOS 系統（包括 iPhone、iPad 和 iPod touch）自發布以來都受到過越獄的嘗試，並在隨著每個韌體更新而修正與跟進。iOS 越獄工具包含選項來安裝 Cydia—— 一個第三方的 App Store，作為尋找和安裝系統修改器和二進位檔案的一種方式。為防止 iOS 越獄，蘋果公司已對裝置的啟動程式採用 SHSH blob 執行檢查，從而禁止上傳自訂核心，並防止將軟體降級到較早的可越獄韌體。在未受限制的越獄中，iBoot 環境被更改為執行一個 boot ROM 漏洞，並允許提交對底層 bootloader 的修補程式，或者 hack 核心以在 SHSH 檢查後轉交給越獄核心。

一種類似的越獄方法也存在於 S60 平台的智慧型手機，它涉及到在記憶體或已編輯韌體（類似於 PlayStation Portable 的 M33 破解韌體）中給已載入的特定 ROM 檔案安裝 softmod 式修補程式來規避對未簽章代碼的限制。諾基亞發布了更新以遏制未經授權的越獄，方式與蘋果公司類似。

在遊戲主機上，越獄經常用於執行自製遊戲。在 2011 年，索尼在 Kilpatrick Stockton 律師事務所的協助下起訴了 21 歲的喬治・霍茲以及為 PlayStation 3 越獄的 fail0verflow 小組的成員（見 Sony Computer Entertainment America v.、George Hotz 和 PlayStation 越獄）。

### 緩解措施

作業系統和使用者可以使用以下策略降低特權提升的風險：

* 系統記憶體保護
* 位址空間組態隨機載入（使緩衝區溢位更難在記憶體中找到已知位址來執行特權指令）
* 執行的應用程式採用最小權限原則（例如不使用管理員 SID 執行 Internet Explorer）從而減少緩衝區溢位 exploits 濫用進階使用者特權的可能性。
* 要求核心模式的「程式碼簽章」（Code signing）。
* 使用最新的防毒軟體
* 打修補程式
* 使用防止緩衝區溢位的編譯器
* 軟體和韌體的加密。
* 使用具備強制存取控制的作業系統，例如 SE Linux

## 水平特權提升

當應用程式允許攻擊者存取通常受到應用程式或使用者保護的資源時，則發生了水平特權提升。其結果是，應用程式執行的操作與之相同，但使用或得到了與應用程式開發者或系統管理員預期不同的安全上下文；這是一種有限程度的特權提升（具體來說，未經授權地模仿了其他使用者）。

### 例子

這個問題經常發生在網路應用程式中。考慮下列例子：

* 使用者 A 可以在網上銀行應用中存取自己的銀行帳戶。
* 使用者 B 可以在同一個網上銀行應用中存取自己的銀行帳戶。
* 當使用者 A 通過某種惡意行為能存取使用者 B 的銀行帳戶時，則發生了此問題。

由於常見的 Web 應用程式弱點或漏洞，這種惡意活動經常出現。

可能導致此問題的潛在 Web 應用程式漏洞或情況包括：

* 使用者的 HTTP Cookie 中可預測的對談 ID
* 對談固定
* 跨網站指令碼
* 容易猜到的密碼
* 盜取或劫持對談 Cookie
* 鍵盤監聽

## 參見

* 防禦性編程
* 消費電子產品的 Hack
* 非法數值
* 最小權限原則
* 特權復原 (電腦)
* 特權分離
* Root (Android)
* Row hammer

## 參考資料