API安全技術

  自己在日常工作中會涉及到些安全的概念,但是沒有成體系,因此最近研讀了《API安全技術與實戰》一書,在此做些文章記錄。

  API安全是從安全的角度關注API領域的安全問題和這些問題的解決方案,從技術和管理兩個層面提高API自身和API周邊生態的安全性。

1)OWASP API 安全漏洞類型

  OWASP(Open Web Application Security Project)是一個開源的、非盈利的全球性安全組織,主要致力於應用軟件的安全研究,它有很多開源項目,OWASP API安全Top 10就是其中的一個。

  1. 失效的對象級授權:攻擊者通過破壞對象級別授權的API,來獲得未經授權的或敏感的數據,比如通過可預測訂單ID值來查詢所有訂單信息。
  2. 失效的用戶認證:開發者對API身份認證機制設計存在缺陷或無保護設計,導致身份認證機制無效,比如弱密碼、無鎖定機制而被暴露破解、Token未校驗或Token泄露導致認證機制失效等。
  3. 過度的數據暴露:在API響應報文中,未對應答數據做適當的過濾,返回過多的、不必要的敏感信息。比如查詢用戶信息接口時卻返回了身份證號、密碼信息;查詢訂單信息時也返回了付款銀行卡號、付款人地址信息等。
  4. 缺乏資源和速率控制:在API設計中,未對API做資源和速率限制或保護不足,導致被攻擊。比如用戶信息接口未做頻次限制,導致所有用戶數據被盜;文本翻譯接口沒有速率限制導致大量文件上傳耗盡翻譯服務器資源。
  5. 失效的功能級授權:與第一條類似,只不過此處主要指功能級的控制,比如修改HTTP方法,從GET改成DELETE便能訪問一些非授權的API;普通用戶可以訪問api/userinfo的調用,直接修改爲api/admininfo,即可調用管理類API。
  6. 批量分配:在API的業務對象或數據結構中,通常存在多個屬性,攻擊者通過篡改屬性值的方式,達到攻擊目的。比如通過設置user.is_admin和user.is_manager的值提升用戶權限等級;假設某API的默認接口調用參數爲{"user_name":"user","is_admin":0},而惡意攻擊者修改請求參數,提交值爲{"user_name":"attacker","is_admin":1},通過修改參數is_admin的值來提升爲管理員權限。
  7. 安全性配置錯誤:系統配置錯誤導致API的不安全,比如傳輸層沒有使用TLS導致中間人劫持;異常堆棧信息未處理直接拋給調用端導致敏感信息泄露。
  8. 注入:與OWASP Web安全注入類型相似,主要指SQL注入、NoSQL注入、命令行注入、XML注入等。
  9. 資產管理不當:對於API資產的管理不清,比如測試環境的、已過期的、低版本的、未升級補丁的、影子API等接口暴露,從管理上沒有梳理清楚,導致被黑客攻擊。
  10. 日誌記錄和監控不足:對API缺失有效的監控和日誌審計手段,導致被黑客攻擊時缺少告警、提醒,未能及時阻斷。比如沒有統一的API網關、沒有SEIM平臺、沒有接入Web應用防火牆等。

2)5A原則

  5A原則是由5個首字母爲A的單詞構成的:

  分別是Authentication(身份認證)、Authorization(授權)、AccessControl(訪問控制)、Auditable(可審計性)、AssetProtection(資產保護),其含義是當做安全設計時,需要從這5個方面考量合理性。

  1. 身份認證:身份認證的目的是爲了知道誰在與API服務進行通信,是否是API服務允許的客戶端請求。在普通的Web應用程序中,通常會提供註冊、登錄的功能,沒有註冊、登錄的用戶無法訪問某些系統功能。其認證方式主要有用戶名/密碼認證、動態口令、數字證書認徵、生物特徵認證等。
  2. 授權:授權通常發生在身份認證之後,身份認證是解決“你是誰”的問題,即對服務來說,誰在請求我。而授權解決的是“你能訪問什麼”的問題,即通過了身份認證之後,訪問者被授予可以訪問哪些API。某些API只有特定的角色纔可以訪問,比如只有內網的IP纔可以調用某些服務、只有管理員用戶纔可以調用刪除用戶的API。賦予某個客戶端調用權限的過程,通常爲授權操作的過程。
  3. 訪問控制:訪問控制是對授權後的客戶端訪問時的正確性驗證。授權就是用戶→角色→菜單這三個實體對象間建立相互關係的過程。如果這個相互關係設置正確,用戶是不具備訪問這個功能菜單的權限的,但如果用戶訪問這個功能菜單時,因訪問控制沒有限制,仍可以訪問,這就是訪問控制的缺陷。
  4. 可審計性:審計的目的對於API來說,主要是爲了記錄接口調用的關鍵信息,以便通過審計手段及時發現問題,並在發生問題時通過審計日誌進行溯源,找出問題的發生點。日誌審計在API技術中通常是結合已有的日誌服務一起使用,其目的是通過審計策略和日誌分析,發現系統在某一時間段內發生的異常事件,通過事件關聯和追溯,分析與事件相關聯的內外部人員、系統、事件涉及的範圍等。主要的產品有Elasticsearch、Logstash、Kibana等。
  5. 資產保護:API安全中的資產保護主要是指對API接口自身的保護,比如限速、限流,防止惡意調用,除此之外,API接口傳輸的數據也是需要保護的一個重點內容。

3)API安全技術棧

  當用戶通過瀏覽器或移動終端調用API訪問後端服務時,除了通信鏈路使用HTTPS之外,由前端向後端依次通過速率控制、身份鑑別、授權訪問控制、消息保護、審計監控等安全機制。

  雖然與實際應用中各個安全機制雜糅在一起使用的情況不相符,但基本能表述清楚其中涉及的安全機制,把這些安全機制對應到具體的安全技術上,統稱爲API安全技術棧。

  對常用的API安全技術進行了總結:

  1. 最上面的WAF、API網關是API安全的基礎套件,爲API安全提供綜合的安全支撐能力。
  2. 認證與授權以OpenID Connect套件、OAuth 2.0套件爲代表,提供API的身份認證和鑑權解決方案。
  3. 而審計套件、JSON套件、XML套件爲API的消息保護和安全審計提供技術支持。

4)身份認證

  身份認證,是對於身份的認證或鑑別,在業務流程中結合技術手段,完成對某種身份的確認。

  這裏的某種身份可能是基於真實的自然人信息的用戶身份,也可能是服務器、硬件設備、移動終端的身份,還有可能是運行的應用程序或服務的身份。

  在計算機領域,身份認證的方式有很多,比較常見的有靜態密碼、動態口令、短信碼、數字證書、生物特徵等。典型的身份認證技術有OpenID Connect、WS-Security、JWT等。

  1. 以API KEY簽名認證作爲身份認證技術的具體實現在API使用中出現較早,通常被稱爲HMAC認證。在API KEY簽名認證中,API的接口調用是融入API的生命週期中去管理,任何客戶端想調用API接口,都需要開發者先從API管理平臺中申請接入密鑰AccessKey(AK)和加密密鑰SecretKey(SK)。然後在發起客戶端API請求時,將參數和AK一起,使用SK簽名後發送到服務端。使用API KEY簽名認證的好處是在API客戶端和服務器端使用了相同的簽名算法,若傳輸過程中數據被篡改,則簽名校驗無法通過,有效地解決了請求參數被篡改的安全隱患。
  2. 使用消息頭作爲身份認證技術在以XML爲數據傳輸格式的API接口中較爲常見,典型的如SOAP API中的Web Services服務安全規範WS-Security。在WS-Security安全規範中,詳細地描述瞭如何將簽名和加密頭加入SOAP消息,以及在消息中加入安全令牌、X.509認證證書或Kerberos票據等,通過在應用層處理消息頭信息,以保證端到端的API安全。
  3. 基於Token系列認證,以OpenID Connect、JWT(JSON Web Token)、OAuth等技術爲代表。

5)授權與訪問控制

  API的授權與訪問控制技術可以歸爲兩大類:

  1. 基於使用者身份代理的授權與訪問控制技術,典型的以OAuth 2.0。對於API的授權和可訪問資源的控制依賴於使用者的身份,使用者可能是某個自然人用戶,也可能是某個客戶端應用程序,當得到使用者的授權許可後,即可訪問該使用者授權的資源。
  2. 基於使用者角色的授權與訪問控制,典型的以RBAC(Role-Based Access Control)爲代表。對於API的授權和資源訪問依賴於使用者在系統中被授予的角色和分配的權限,不同的角色擁有不同的權限,比如功能權限、數據權限,訪問資源時依據此角色分配的權限的不同可以訪問不同的資源。

  在API安全技術領域,功能級權限管理是指不同的用戶或不同的角色對不同的API端點具備的權限的管理。

  數據級權限管理是指不同的用戶或不同的角色對不同的API端點中涉及的數據、圖片、視頻等資源,對於可操作資源的範圍、範圍內資源的增刪改查的操作權限管理。

  授權管理中很重要的一個設計原則是最小特權原則,即對用戶和和API點授權時,在滿足功能的前提下僅授予最小的權限,同時,不同的用戶或角色,授權之間相互獨立,否則會出現權限過大或違背業務獨立性的要求。

  訪問控制是在授權正確的前提下,通過訪問控制機制,保證用戶或角色所訪問的內容和資源與所授權範圍一致。訪問控制通常有三個要素組成:主體、客體、控制策略。

  1. 主體是指訪問動作的發起者,一般是某個用戶、應用程序以及API端點。
  2. 客體是指被訪問的對象,一般是模塊、功能、菜單、按鈕、鏈接、資源、API端點等。
  3. 控制策略是指爲了滿足授權要求而制訂的控制規則。

  假設存在着這樣一條訪問控制規則:外包人員只允許在13:00點之後纔可以進入機房進行維護操作。那麼這裏的外包人員是主體,客體是機房及機房中的資源,控制策略是13:00點之後可以訪問。

  授權作爲權限管理的決策機制,明確了權限與用戶、角色的關係。訪問控制作爲執行單元,將權限管理落實到位。它們共同協作,維護着信息系統的穩定。

  在RBAC模型中,定義了三條主要規則,其基本含義如下。

  1. 角色分配:是指只有爲某個用戶(用戶是指真實自然人或應用程序)分配了該角色後,才具有該角色對應的權限。
  2. 角色授權:對應於安全設計原則中的最小特權原則,即用戶被授予某個角色之後,僅能完成所授予權限內的活動。
  3. 權限授權:是指僅當某個角色被授予權限後,該角色被分配的用戶才具有此角色所授予的權限。

6)API的消息保護

  針對API的消息保護一般從以下兩個方面來實現安全保護機制。

  1. 通信鏈路保護:主要是傳輸層保護,使用mTLS/SSL來提高通信鏈路的安全性。
  2. 應用層消息加密和簽名:在應用層,除了使用HTTPS、SFTP、SSH等安全協議外,還會對消息體進行加密和簽名。加密用來保護數據的機密性,簽名用來保護數據的防劫持和防篡改。

  由於應用層API交互技術的不同,對消息體的保護更多是圍繞具體的交互細節去實現,比如對認證令牌的保護、對訪問令牌的保護、對敏感信息的保護等。

  而JSON和XML作爲消息傳遞的數據格式,其相關的技術標準(如JWT、JWE、JWS、WS-Security等)爲消息保護提供了可操作指南。

  JWT是RFC 7519標準爲使用JSON數據格式作爲傳輸對象的多方通信所提供的解決方案,通常以字符串形式表示,由標頭、有效載荷、簽名三部分組成,各個組成部分之間以點號(.)分隔。

7)API網關

  API網關是當今互聯網應用在前後端分離背景下,微服務架構、分佈式架構、多端化服務等架構中重要的組成部分,作爲應用層統一的服務入口,方便平臺管理和維護衆多的服務接口。

  一般來說,API網關由核心控制系統和後臺管理系統兩部分組成。

  1. 核心控制系統:爲了滿足業務需要所對外提供的核心API能力的總稱,比如處理安全策略、流量控制、服務鑑權、熔斷、參數校驗、參數映射、協議轉換、服務生命週期管理等所有核心業務能力。
  2. 後臺管理系統:用於輔助核心控制系統所提供的能力總稱,比如用戶管理、應用接入管理、SDK和API文檔生成、服務授權控制、服務策略綁定等功能的管理能力,爲管理人員提供可視化的操作界面,降低API管理難度。

  在API網關的周邊,與相鄰應用程序的上下文關係如下。

  1. 和後端API服務之間的關係:API提供者在提供穩定的API後,在API網關中註冊併發布API或生成SDK,纔可以被終端業務系統調用。
  2. 和客戶端應用程序之間的關係:不同的客戶端/終端應用程序首先訪問API網關,經過一系列的API控制器、網關路由到目標API。
  3. 和運維監控系統之間的關係:API網關接入運維監控系統,一方面用於監控網關和服務器的運行情況,另一方面也可以監控各個已註冊API的運行健康情況,並在異常時可以觸發告警。
  4. 和日誌平臺之間的關係:API網關接入日誌平臺,用於採集API的調用信息,完成問題分析、調用鏈跟蹤、調用數據統計等。

  使用API網關的系統架構中,API網關層將內部服務和外部調用隔離,客戶端應用程序調用的後端服務都通過網關的映射來完成,很好地隱藏了內部服務數據,保障了服務的私密性和安全性。

  同時,在整個架構上,能讓業務使用者抽出更多的精力來關注核心業務能力建設,而不是通用的安全性、流控等邊界特性的問題。這在快速增加新業務或改變原有應用系統、服務時,對現有架構和應用程序的影響能降低到最小。

  API網關產品除了上節提及的在網絡邊界起到內外部隔離外,還有如下特點。

  1. 減少客戶端與服務端之間的耦合,後端服務可以獨立發展。其主要表現爲:客戶端應用程序調用後端服務都是通過網關的映射完成的,在這樣的場景下,內部服務的變更只需要通過修改網關定義即可,客戶端應用程序不需要做任何變更。API網關通過統一標準的協議來整合現有不同架構、不同語言、不同協議的服務資源,實現業務互聯互動,減少客戶端或服務器端的改變對對方造成的影響。
  2. 集成多種安全機制,保障服務交互的安全性。典型的有通信加密、身份認證、權限管理、流量控制等安全手段。API網關爲每一個應用接入者提供不同的加密密鑰或證書,支持多種加密方式和安全傳輸協議,在保障通信雙方身份可信的前提下,可以防止數據在傳輸過程中被竊取或篡改。同時,依賴於API網關的多種安全保護機制,也爲後端服務技術實現時在安全方面的投入減輕壓力。
  3. 支持服務熔斷設置,根據熔斷規則和熔斷執行自動執行熔斷策略,同時支持線上調試,比如Mock方式,能夠更加方便API服務上線發佈和測試操作。
  4. 提供多種協議的接入、轉換與代理功能,比如常見的接口協議RESTful、WebSocket、Dubbo、WebService、獨立文件傳輸等協議,這也爲後端服務的混合通信協議提供了可選擇性。面向外部合作伙伴或第三方廠商通常提供基於RESTful或WebService形式的API,但後端服務內部可以在不同的業務部門或項目組之間使用不同的技術棧,比如RESTful、GraphQL、Dubbo等,而不用擔心外部調用的不兼容性。
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章