歡迎!該存儲庫是有關實用API安全技術的一系列博客文章的一部分。該系列將為您提供捍衛移動API後端的過程,以抵禦攻擊者可能用來訪問其持有數據的各種漏洞。在這種演示情況下,攻擊使系統的真實用戶可以以犧牲公司為代價獲得不公平的業務優勢。
該存儲庫保存所有三個組件,用於描述船舶快速故事:
我們將所有3個項目都保存在同一存儲庫中,並構建了代碼,以包括博客系列進步的所有步驟。我們希望這使整個理解變得更容易。
在第一篇博客文章中設置了場景後,連續的條目顯示瞭如何在適當的情況下使用該GitHub存儲庫中的代碼鏈接來加強(或繞過)安全措施。博客系列可以通過參考每種討論的主要安全方法來概括:
我們提供兩種服務和APK的免費部署,供您下載和安裝,因此您可以在閱讀博客時與它們合作。以下各節簡要摘要了我們部署的服務,我們提供的應用程序,在此存儲庫中找到相關代碼的位置以及每個博客文章的更改所在的位置。
可以在服務器/Shipfast-API文件夾中找到Shipfast API代碼。該代碼已部署在雲中,並在https://shipfast.demo.approov.io上提供。
ShipFast API從v1到v4版本以遵循博客故事,您可以使用以下URL訪問每個階段:
此存儲庫的版本頁麵包含每個階段的APK。它們是設置的,以便您可以在Android設備上一次安裝所有這些設備(對不起,目前沒有iOS)。
應用程序的代碼全部是一個AndroidStudio項目:App/Android/Kotlin/Shipfast。
我們在該應用程序的每個版本中都使用了不同的配色方案,因此您可以快速識別正在運行的配色方案:
顏色沒有任何特殊的含義,但是顯然,綠色是最好的。
Rogue Web服務Shipraider是由邪惡的海盜設置的,以幫助船舶快速駕駛員利用Ship Fast客戶的滿意度。該代碼可以在服務器/Shipraider-Rogue-Web文件夾中找到。
該網站的每個版本都是從不同的域提供的:
Shipraider網站遵循與移動應用程序相同的配色方案,以區分版本。
在下面,我們簡要概述了博客系列中用於鎖定API的技術,並鏈接到相關的代碼和相關博客文章。
開發人員用來確定對API服務器的請求的最常見方法是在請求標題中使用長字符串(通常稱為Api-Key ,請參見第一篇博客文章。
API密鑰非常易於在服務器和客戶端中實現。此應用程序代碼將密鑰添加到每個請求中,並且服務器使用簡單的標頭檢查驗證請求,如本代碼所示。
不幸的是,繞過API密鑰保護也很容易,因為這是每個請求都傳達的秘密。該系列中的第二個博客首先顯示瞭如何使用MITM(中間)攻擊提取API鍵。然後將鑰匙添加到Shipraider網站中,以用於對ShipFast API的請求中使用。
為了改善保護,第二篇博客文章引入了HMAC,以數字簽名API請求,從而防止它們被劫持或篡改。它比API密鑰更好,因為秘密部分永遠不會從客戶端明確發送到服務器,並且在此版本中,它靜態地嵌入了代碼中。
HMAC實現比API密鑰實現更加詳盡,但仍然很簡單。您可以查看此代碼的API服務器實現,以及用於移動應用程序實現的代碼。
但是,如果HMAC秘密是硬編碼的,那麼攻擊者仍然很容易提取。第三篇博客文章通過使用開源二進制分析工具來揭示HMAC秘密和用於簽署請求的相關算法來證明這一點。一旦將它們複製到Shipraider代碼中,Rogue網站就可以重新啟動並運行。
第二個攻擊情況表明,使用靜態秘密進行HMAC算法是一個弱點。下一個防禦是使用動態秘密。一個在運行時計算的。第三篇博客文章說明瞭如何將靜態秘密與動態數據相結合,以產生一個動態秘密,以初始化HMAC算法。
在這些代碼行中可以看到移動應用程序的實現,而在此處可以看到API服務器等效的實現。
在運行時計算HMAC秘密會使繞過更難,但並非不可能。攻擊者現在需要了解更大的代碼部分,以便在Shipraider網站中重現該行為。第四個博客文章列出了幾種方法,使用應用程序重新包裝和Android Studio調試器提供了一個更詳細的示例。同樣,攻擊者可以在Shipraider中編寫等效的代碼,以繼續使用Shipfast API。
第四篇博客文章介紹了該系列中的最終安全措施。移動應用證明是批准中實現的API安全概念。簡而言之,批准檢查整個應用程序及其在啟用API之前運行的環境 -應用程序是密鑰。它使您對您的API訪問已鎖定到您的應用程序的合法實例中有很高的信心。在我們的產品概述頁面和相關的白皮書中,更詳細地描述了這種方法。
對於移動應用程序開發人員而言,批准集成與可能很簡單。希望使用[QuickStart集成示例]](https://approov.io/docs/latest/latest/approov-integration-exampleas/mobile-app/)添加prenooov sdk,希望使用[QuickStart集成示例]](https://approov.io/docs/latest/latest/latest/latest/latest/latest/latest/latest/latest/latest/latest/latest/latest/latest/latest示例),然後致電SDK,以獲取SDK以獲得API請求。您可以在shipfastapp.kt的shipfast應用程序中看到這一點,搜索以下內容的行// *** UNCOMMENT THE CODE BELOW FOR APPROOV *** 。
API服務器集成也很簡單:在響應API請求之前,請使用許多JWT庫之一來驗證批准令牌。 Shipfast API使用Express-JWT節點軟件包用checkApproovToken回調驗證批准令牌。
高級用法文件描述了組成ShipFast和Shipraider服務的每個組件的構建和部署步驟。要遵循博客系列,通常可以使用批准團隊部署和維護的服務和應用程序,在這種情況下,您無需遵循該文檔。但是,如果您嘗試在上一篇博客文章末尾描述的可選五旬節挑戰,則需要它。
總體而言,博客系列通過確保要求僅來自合法來源來逐步提高API安全性。該存儲庫中的博客和代碼用於展示如何輕鬆規避API開發中通常使用的某些保護機制。它最終達到了批准集成,這對Shipfast API收到的驗證請求具有最高的信心。如果您想更深入地探索批准解決方案,那麼為什麼不嘗試以下鏈接之一作為跳躍點: