Broken Access Control

存取控制缺陷

OWASP Top 10 #1 漏洞

網頁安全實務課程

深入了解攻擊手法與防禦策略

課程大綱

基礎概念

  • 存取控制原理
  • 漏洞定義與分類
  • OWASP Top 10 地位

攻擊手法

  • IDOR 攻擊
  • 權限提升
  • 參數篡改
  • 強制瀏覽

危害分析

  • 真實案例研究
  • 潛在危害評估
  • 經濟損失分析

防禦策略

  • 檢測方法
  • 防禦機制
  • 最佳實務

存取控制基礎

存取控制是確保只有授權使用者才能存取特定資源的安全機制

身份驗證

Authentication

確認「你是誰?」

授權

Authorization

決定「你能做什麼?」

權限檢查

Access Control

驗證「現在可以存取嗎?」
重要原則:存取控制必須在伺服器端實施,不能僅依賴前端驗證!

Broken Access Control 定義

存取控制缺陷發生在應用程式無法正確實施權限檢查,導致使用者能夠存取或操作超出其權限範圍的資源

常見後果

  • 存取不屬於自己的資料
  • 執行超出權限的操作
  • 修改其他使用者的資訊
  • 提升自己的權限等級
  • 繞過業務邏輯限制

簡單範例

正常請求:GET /profile?user_id=123
惡意請求:GET /profile?user_id=456
↑ 只需修改參數就能查看他人資料
統計顯示:94% 的應用程式都存在某種形式的存取控制問題

OWASP Top 10 地位

#1

2021 年 OWASP Top 10 排名第一

從第五名躍升至第一名

普遍性高

94% 的應用程式都有存取控制問題

影響嚴重

可能導致完整的資料洩露

容易利用

攻擊者不需要特殊工具

難以檢測

自動化工具難以發現邏輯缺陷

相關 CWE:平均每個應用程式有 3.81 個存取控制相關的弱點

常見攻擊手法概覽

水平權限提升

存取同等級使用者的資源
  • IDOR - 不安全直接物件參考
  • 參數篡改 - 修改請求參數
  • Session 劫持 - 盜用他人會話
  • Cookie 操作 - 修改身份識別

垂直權限提升

獲得更高權限等級
  • 管理功能未保護 - 直接存取後台
  • 角色權限繞過 - 偽造管理員身份
  • API 權限缺陷 - 呼叫特權 API
  • URL 操作 - 猜測管理路徑

其他常見問題

強制瀏覽 - 直接存取未授權 URL
資料洩露 - API 回傳過多資訊
CORS 錯誤配置 - 跨域存取控制失效
業務邏輯繞過 - 跳過驗證流程

IDOR - 不安全直接物件參考

Insecure Direct Object Reference 是最常見的存取控制缺陷之一

攻擊原理

應用程式直接使用使用者提供的輸入來存取物件,而沒有進行適當的權限檢查。攻擊者可以透過修改參數值來存取其他使用者的資源。

實際攻擊示例

1

正常請求

GET /api/orders/12345
Authorization: Bearer user_token

使用者查看自己的訂單

2

惡意嘗試

GET /api/orders/12346
GET /api/orders/12347
GET /api/orders/12348

嘗試存取其他人的訂單

3

成功攻擊

如果沒有適當的權限檢查,攻擊者可以存取所有訂單資料!
危險程度:攻擊者可以透過枚舉 ID 來存取整個資料庫的資料

參數篡改攻擊

攻擊者修改 HTTP 請求中的參數來繞過存取控制機制

URL 參數篡改

正常轉帳請求

POST /transfer
from_account=123&to_account=456&amount=1000

惡意篡改

POST /transfer
from_account=999&to_account=456&amount=1000

↑ 修改來源帳戶,從他人帳戶轉帳

POST 資料篡改

原始請求

{
"user_id": 123,
"role": "user",
"action": "view_profile"
}

惡意修改

{
"user_id": 123,
"role": "admin", ← 提升權限
"action": "delete_user"
}
防禦重點:永遠不要相信來自客戶端的任何參數,必須在伺服器端重新驗證所有權限

垂直權限提升攻擊

一般使用者嘗試存取管理員或更高權限的功能和資源

管理頁面未保護

常見管理路徑

/admin/
/administrator/
/manage/
/control-panel/
/wp-admin/
/dashboard/

攻擊者直接在 URL 輸入這些路徑嘗試存取

API 權限繞過

攻擊示例

POST /api/admin/delete-user
POST /api/admin/change-permissions
GET /api/admin/all-users
GET /api/users/delete/123 ← 繞過 DELETE 限制
PUT /api/users/123/role/admin ← 直接修改角色
嚴重後果:攻擊者可能獲得完整的系統控制權,包括刪除資料、修改設定、存取所有使用者資訊

強制瀏覽攻擊

攻擊者直接存取應該受保護的 URL 或資源,繞過正常的導航流程

目錄遍歷

隱藏目錄

/backup/ /test/ /dev/ /staging/

備份檔案

config.php.bak database.sql users.txt passwords.xlsx

版本控制

/.git/ /.svn/ /CVS/ /.hg/

API 探測

/api/v1/ /rest/ /graphql /swagger

常用工具

DirBuster - 目錄暴力破解
Gobuster - 快速目錄掃描
Burp Suite - 手動測試
Wordlists - 常見路徑字典
防禦策略:實施白名單機制,只允許明確授權的路徑存取,並定期檢查是否有敏感檔案暴露

真實案例分析 - Facebook 資料洩露

Cambridge Analytica 事件

2018年爆發,影響 8700 萬用戶

漏洞詳情

  • API 權限過度授權:第三方應用可存取超出需要的用戶資料
  • 朋友資料洩露:應用不僅能存取用戶資料,還能存取其朋友的資料
  • 缺乏有效監控:Facebook 未能及時發現大量資料被濫用
  • 權限檢查不足:API 沒有適當限制資料存取範圍

影響範圍

8700萬
受影響用戶
50億美元
FTC 罰款
36%
股價下跌

關鍵教訓

API 權限必須遵循最小權限原則
需要持續監控第三方應用的資料使用
用戶同意機制必須明確且可撤回
定期審查和更新 API 權限設定

真實案例分析 - 台灣銀行 API 漏洞

某大型銀行行動 APP 漏洞

2020年發現,IDOR 漏洞導致客戶資料外洩風險

攻擊流程

1

正常登入

攻擊者使用自己的帳號正常登入銀行 APP

2

攔截請求

使用 Burp Suite 攔截 API 請求,發現帳戶 ID 參數

3

修改參數

將帳戶 ID 修改為其他數字,嘗試存取他人資料

4

成功存取

成功獲取其他客戶的帳戶餘額和交易記錄

技術細節

正常 API 請求

GET /api/account/balance
Headers:
Authorization: Bearer user_token
Account-ID: 1234567890

惡意請求

GET /api/account/balance
Headers:
Authorization: Bearer user_token
Account-ID: 1234567891 ← 他人帳戶
修復方案:在伺服器端驗證 token 與帳戶 ID 的對應關係,確保使用者只能存取自己的資料

潛在危害分析

直接危害

資料洩露

個人隱私、商業機密、客戶資料完全暴露

財務損失

未授權交易、資金盜用、虛假轉帳

身份盜用

個資被惡意使用、偽造身份、信用詐騙

系統破壞

惡意修改、資料刪除、系統癱瘓

間接危害

法律責任

違反個資法、GDPR、資安法等法規

商譽損失

客戶信任度下降、品牌形象受損

營運中斷

系統停機修復、業務流程中斷

競爭劣勢

商業資訊外洩、市場地位下降

CIA 三元組影響評估

機密性 (Confidentiality)

高風險

敏感資料可能完全暴露給未授權人員

完整性 (Integrity)

高風險

資料可能被惡意修改或刪除

可用性 (Availability)

中風險

可能導致服務中斷或效能下降

經濟損失統計

$4.35M
2022年全球資料洩露平均成本

成本組成分析

27%
$1.17M
檢測與調查
28%
$1.22M
通知與法遵
27%
$1.17M
事後回應
18%
$0.78M
商譽損失

台灣相關法規罰則

個人資料保護法

最高 200 萬元罰金

違反個資蒐集、處理、利用規定

資通安全管理法

最高 100 萬元罰鍰

未依規定通報資安事件

民事賠償

每人 500-20,000 元

個資外洩造成當事人損害

檢測方法

手動測試方法

參數枚舉

修改 ID、token 等參數值,測試是否能存取他人資料

權限測試

使用低權限帳號測試高權限功能和頁面

路徑探測

嘗試存取管理頁面和隱藏的 API 端點

HTTP 方法測試

嘗試不同的 HTTP 動詞繞過權限檢查

自動化工具

滲透測試工具

Burp Suite Professional 全功能 Web 安全測試平台
OWASP ZAP 免費開源安全掃描工具
Postman API 測試和權限驗證

程式碼分析

SonarQube 靜態程式碼品質分析
Checkmarx 商業級 SAST 解決方案
GitHub CodeQL 語義程式碼分析引擎
建議:結合手動測試和自動化工具,定期進行安全評估,並建立持續的安全測試流程

防禦策略概覽

技術防禦

伺服器端權限驗證
最小權限原則
安全的 API 設計
輸入驗證與過濾
日誌記錄與監控

管理防禦

安全開發流程
程式碼審查
滲透測試
安全培訓
事件回應計畫

核心防禦原則

預設拒絕

除非明確允許,否則拒絕所有存取請求

深度防禦

建立多層次的安全控制機制

最小權限

只給予完成工作所需的最小權限

持續監控

即時偵測和回應異常行為

伺服器端權限驗證實作

錯誤做法(僅前端驗證)

// 前端 JavaScript - 容易被繞過
if (user.role === 'admin') {
showAdminPanel();
// 直接呼叫 API,沒有後端驗證
fetch('/api/delete-user/' + userId);
}
攻擊者可以直接呼叫 API 繞過前端檢查

正確做法(後端驗證)

// 後端 API - 每次都驗證權限
app.delete('/api/delete-user/:id', (req, res) => {
// 1. 驗證使用者身份
const user = authenticateToken(req.headers.authorization);

// 2. 檢查權限
if (!user || user.role !== 'admin') {
return res.status(403).json({error: 'Forbidden'});
}

// 3. 執行操作
deleteUser(req.params.id);
res.json({success: true});
});

最佳實務原則

永不信任客戶端:所有權限檢查都在伺服器端進行
使用安全 Token:JWT 或 Session 進行身份驗證
Token 過期機制:設定合理的過期時間
白名單機制:明確定義允許的操作

安全 API 設計與最小權限原則

使用不可預測的 ID

不安全的 ID

/api/orders/1
/api/orders/2
/api/orders/3
# 容易被枚舉攻擊

安全的 ID

/api/orders/a7b9c2d4-e5f6-7890
/api/orders/x1y2z3w4-m5n6-p7q8
/api/orders/k9l8m7n6-p5q4-r3s2
# 使用 UUID 或隨機 ID

資源擁有權檢查

// 檢查使用者是否擁有該資源
app.get('/api/orders/:id', (req, res) => {
const user = authenticateUser(req);
const order = getOrder(req.params.id);

// 關鍵:檢查擁有權
if (order.userId !== user.id && user.role !== 'admin') {
return res.status(403).json({error: 'Access denied'});
}

res.json(order);
});

權限矩陣範例

角色
讀取
建立
修改
刪除
管理
訪客
一般用戶
✓*
管理員
超級管理員

* 只能修改自己的資料

實作練習與檢查清單

練習環境

DVWA

Damn Vulnerable Web Application

基礎漏洞練習 難度分級

OWASP Juice Shop

現代化的漏洞練習平台

真實應用場景 進階挑戰

PortSwigger Academy

線上安全實驗室

專業指導 認證課程

安全檢查清單

設計階段

開發階段

測試階段

部署階段

記住:安全是一個持續的過程,不是一次性的任務!

課程總結與參考資源

關鍵要點回顧

1

Broken Access Control 是 OWASP Top 10 #1 漏洞

影響廣泛且危害嚴重,可能導致完整的資料洩露

2

常見攻擊手法包括 IDOR、參數篡改、權限提升

攻擊者不需要特殊工具,容易利用但難以檢測

3

防禦的核心是伺服器端權限驗證

永遠不要相信客戶端的權限資訊

4

最小權限原則是基本的安全實務

只給予完成工作所需的最小權限

下一步行動

開始實作練習,親自體驗攻擊和防禦技術
檢查現有專案是否存在存取控制漏洞
實施安全開發流程和定期安全評估
與團隊分享知識,建立安全意識

感謝聆聽!

有任何問題歡迎討論