API的安全性探討

羅心妤/國立臺灣科技大學資訊管理學系

API介紹[1]

應用程式介面(Application Programming Interface,API)是一種計算介面,用於定義多個軟體之間的互動方式,以及可以進行的呼叫(call)或請求(request)的類型、方法、資料格式,以及應遵循的慣例等。API 的主要目標之一是將系統的內部運作細節隱藏起來,只向程式設計師公開他們認為有用的部分,同時確保這些部分的一致性。API 可以是為特定系統專門設計的,也可以是一種共享標準,允許多個系統之間進行互通。

API的類型

依照使用範圍可以將API分為以下四類:

  1. 私有 API:是為組織內部使用而設計的,通常不對外公開。它們用於存取內部資源,如公司內部資料庫、應用程序或服務。內部人員可以使用私有API來快速、安全地存取組織內的資源,這有助於內部協作和業務流程的自動化。
  2. 公有 API:是一種公共可用的API,允許任何人使用,通常無需特殊授權。它們用於共享資訊、服務或功能,並可用於建立第三方應用程式、整合外部系統或提供資料給外部用戶。公有API可以促進創新並擴展產品的生態系統。
  3. 合作夥伴 API:是針對特定商業合作夥伴而設計的,通常需要授權和身份驗證。這些API用於與特定合作夥伴共享資料、服務或功能,同時提供了更高級的監控和安全性,以確保合作夥伴在使用資源時符合合約內容。
  4. 複合 API:是通過組合多個單一API來實現複雜功能或滿足多個需求的API。開發人員可以使用複合API來簡化業務流程,減少對不同API的調用,提高效率。例如,一個複合API可以結合支付API、地圖API和通知API,以創建一個支援訂單付款、位置跟蹤和通知的應用程序。

API被破壞的安全性

API被破壞的安全性涉及到各種不當使用和攻擊情境,其中包括以下一些常見的情況[2]

  1. 物件授權失效(Broken Object Level Authorization,BOLA):
    • BOLA是一種常見的API安全漏洞,攻擊者可以利用它來存取或操縱未經授權的使用者帳戶或敏感資訊。這種情況可能導致用戶之間的資料混淆,並危害系統的完整性。
    • 舉例:使用者A和B分別上傳了兩張照片,它們的ID分別是123和456。然而,應用程式並未正確地驗證使用者A是否有權限來存取這張照片。使用者B通過修改URL或請求中的參數,將請求的照片ID從456改為123。由於應用程式未進行適當的授權檢查,因此它顯示了照片ID為123的照片。現在,使用者B可以查看、編輯或刪除使用者A的照片。
  2. 使用者身分驗證失效(Broken Authentication):
    • 當應用程式未能正確實施使用者身分驗證和會話管理功能時,攻擊者有可能捕獲有效的會話令牌,從而獲得未經授權的存取權限。這可能導致未經授權的存取和資源濫用。
  3. 無限制消耗資源(Unrestricted Resource Consumption):
    • 如果API未能實施適當的速率限制控制,惡意行為者可以以高頻率不斷地發送請求,導致伺服器過度負載。這種行為可能導致API伺服器的性能下降,最終甚至可能引發拒絕服務(Denial-of-Service Attack,DoS)情況。
  4. 無效功能權限控管(Broken Function Level Authorization):
    • 複雜的存取控制策略可能導致功能權限控管失效,使攻擊者能夠存取未授權存取的端點,執行未經授權的操作。
    • 以銀行轉帳API為例,該應用程式進行身份驗證後才允許執行轉帳操作。然而,若該API未能確認已通過身份驗證的使用者是否擁有執行轉帳所需的權限,將導致已通過身份驗證的攻擊者,即使未經授權,也能執行未經授權的轉帳操作。
  5. 偽造伺服器請求(Server Side Request Forgery,SSRF):
    • SSRF漏洞使攻擊者能夠誘導伺服器發出未經授權的請求,存取不應存取的資源。這可能危害伺服器內部資源,並對其他系統進行攻擊。
    • 舉例:當一個網站允許使用者輸入URL,但未對這些URL進行任何檢查或驗證時,攻擊者可以利用此漏洞輸入惡意的URL。隨後,伺服器會存取該惡意網站並擷取其內容。攻擊者可以進一步利用此漏洞對網站所在的內部網路進行掃描或發起攻擊行動。
  6. 庫存管理不當(Improper Inventory Management):
    • 良好的庫存管理與API安全密切相關,因為API本質上是一種資源,也需要適當的管理和監控。如果組織在其API資源上有管理不善的問題,那麼就可能存在不當使用或可能會導致安全風險的漏洞。
    • 舉例: 如果庫存管理不當,可能會導致未被記錄的API端點或廢棄的API仍然處於活動狀態,而這些API可能具有已知的漏洞或未經充分保護,使它們容易受到攻擊者的利用。因此,維護準確的API清單和確保廢棄的API得到適當的停用皆極度重要。
  7. 批量配置不當(Mass Assignment)[3]
    • 當API未能適當地篩選和驗證客戶提供的資料時,攻擊者可以利用Mass Assignment漏洞修改和調整敏感資料。這可能導致資料泄露和不正當的資源存取。簡單來說,這個漏洞就是指 API 存在可以由使用者控制的參數,被攻擊者用來實施攻擊。
    • 舉例:使用者A登入其帳號並輸入信用卡資訊,包括卡號和到期日。攻擊者B發現了一個可以透過API來修改個人資料的漏洞,因此攻擊者B使用特殊的請求,將自己的信用卡資訊替換為使用者A的信用卡資訊。現在,攻擊者B擁有了使用者A的信用卡資訊,並可能使用它們進行不當的交易或盜竊行為。

加強API安全性的解決方案

在解決API安全性問題方面,以下是一些重要的做法:

  1. API 設計和開發標準:
    • 制定針對API設計和開發的標準,包括資料驗證、錯誤處理以及會話管理的準則,以預防在API開發過程中常見的安全問題。
  2. 版本控制和定期更新:
    • 使用API版本控制可以確保在引入新的安全更新時,API仍然能夠與以前的版本兼容,同時減少了舊版本中的潛在漏洞。
    • 確保API定期的更新,以納入最新的安全補丁和更新。這些措施將有助於確保API在整個生命周期中保持安全,並有效應對安全風險。
  3. 強化API的授權和安全性措施:
    • 實施資料加密、存取控制、令牌身份驗證和多重身份驗證(MFA)等安全措施,以確保只有授權的使用者能夠存取API。
  4. API 監控:
    • 透過觀察各種指標,如不尋常的流量峰值、多次失敗的登錄嘗試或異常的資料提取模式,及早識別潛在的安全漏洞。
  5. 多層次的API測試:[4]
    • 安全測試用於確保API不受配置錯誤或人為錯誤的威脅。這包括授權處理、存取機制以及資料傳輸過程中使用的加密算法,以確保提供正確的內容。
    • 滲透測試旨在預防威脅進入內部系統。這項測試通常會運用各種自動化工具和手動技術來模擬攻擊,以確保API在實際環境中運行時是安全的。測試的結果通常包括潛在風險的報告以及改進安全性的建議措施。
    • 模糊測試通過中斷整個API來測試其性能,用於確保API能夠適當處理超出限制的請求,以防止服務被拒絕攻擊。

結語

2023年的國際資訊安全會議(RSA Conference,RSAC)明確指出:API風險是風險管理的一個關鍵焦點。雖然API為我們帶來了極大的便利,但也伴隨著潛在的風險。隨著科技不斷前進,API攻擊不斷演進,攻擊手法變得越來越複雜。因此,持續關注並不斷努力提高API的安全性已然成為重要議題。組織應該積極確保採用正確的最佳實踐並實施適當的安全措施,以保護其API,從而確保使用者的隱私和系統的安全。

本文內容純屬筆者個人意見,並不代表TWNIC立場

[1] Wikipedia (2023) API 檢自:https://en.wikipedia.org/wiki/API (Sep. 29, 2023)

[2] Paul Wagenseil (2023) What is the OWASP API Security Top 10? 檢自:https://www.scmagazine.com/resource/what-is-the-owasp-api-security-top-10  (Sep. 29, 2023)

[3]OWASP API Security Top 10 (2019) API6:2019 – Mass Assignment 檢自:https://owasp.org/API-Security/editions/2019/en/0xa6-mass-assignment/ (Oct 14, 2023)

[4] SSL2BUY (2023) API Security: Understanding Types, Challenges, and Best Practices 檢自:https://www.ssl2buy.com/cybersecurity/api-security-types-challenges-best-practices#Types_of_API (Sep. 29, 2023)

Scroll to Top