簡體   English   中英

將 Api 密鑰安全地存儲在 Flutter 中或將付款詳細信息發送到我的服務器?

[英]Storing Api Keys Securely in Flutter or Sending Payment Details to my Server?

我正在構建一個 flutter 應用程序,我將在其中獲取用戶的卡詳細信息並對其進行標記。 目前,我的支付提供商的 API 密鑰位於客戶端應用程序中。 這樣做的原因是為了防止必須將信用卡詳細信息發送到我的服務器,然后將它們發送到支付提供商。 一切都以 PCI 合規為名。

但是,據我所知,您永遠不想在客戶端應用程序中存儲任何 API 密鑰。 問題是,關於這個問題,go 的最佳方法是什么? 我的直覺說將 API 密鑰移動到服務器,只需發送一次卡詳細信息以進行標記化。 然而,這是否會讓 PCI 合規之路變得更加艱難?

對此的任何指導將不勝感激。

謝謝

您應該實施私鑰/公鑰方法..其中服務器和客戶端都只有一個密鑰,因此如果不配對,則任何一個都不能做任何事情。

或嘗試查看 jwt 令牌 api 驗證

在這里可以做三件事。

  1. 使用 RemoteConfig 存儲您的所有配置信息。 並且,將其存儲在 Flutter 安全存儲中。 缺點:僅在 App 啟動時獲取 RemoteConfig。

  2. 首先使用 JWT 令牌對用戶進行身份驗證,然后在令牌本身中發送用戶所需的數據。 缺點:用戶必須首先通過身份驗證才能接收數據。

  3. 授予用戶權限。 因此,身份驗證和授權都得到處理,沒有密鑰就不需要做任何事情。

#3 是我們現在使用的方法。 當然,您也可以使用 OpenIDConnect 協議將應用程序、服務器和客戶端置於一個生態系統中。

在所有這些情況下,持有物理設備的人在通過身份驗證后始終可以訪問您的服務器。 確保在訪問期間檢查設備 ID。 最后,除了授權的細節之外,用戶仍然可以偽造所有這些。

你的問題

但是,據我所知,您永遠不想在客戶端應用程序中存儲任何 API 密鑰。 問題是,關於這個問題,go 的最佳方法是什么? 我的直覺說將 API 密鑰移動到服務器,只需發送一次卡詳細信息以進行標記化。

你的直覺是正確的,我已經寫了為什么第三方機密應該保存在你可以控制的后端的原因,你可以在我的文章使用反向代理保護第三方 API中閱讀更多內容:

在本文中,您將首先了解第三方 API 是什么,以及為什么不應該直接從移動應用程序中訪問它們。 接下來,您將了解什么是反向代理,以及何時以及為何使用它來保護對移動應用程序中使用的第三方 API 的訪問。

然而,這是否會讓 PCI 合規之路變得更加艱難?

我在這里無法為您提供幫助,因為我不精通 PCI 合規性,但我的直覺認為這會使它變得更加困難,因為您現在正在處理后端用戶的個人身份信息 (PII)。

您的問題的可能解決方案

對此的任何指導將不勝感激。

任何在客戶端的東西都必須被認為是公開的,因為它們可以在運行時被靜態或動態地逆向工程,你猜怎么着,我也寫了一些關於它的文章。

正如我在我的文章中展示的那樣,存在開源工具可以使所有這些變得更容易,甚至可以由非開發人員完成。

讓我們從學習如何用 static 二進制分析提取 API 密鑰開始:

如何使用 Static 二進制分析從移動應用程序中提取 API 密鑰

可用於逆向工程的開源工具范圍很廣,我們在本文中確實無法觸及這個主題的表面,但我們將專注於使用移動安全框架 (MobSF)來演示如何逆向工程我們的移動應用程序的 APK。 MobSF 是一組開源工具,它們在一個有吸引力的儀表板中顯示其結果,但在 MobSF 和其他地方使用的相同工具可以單獨使用以實現相同的結果。

在本文中,我們將使用Android Hide Secrets研究存儲庫,它是一個虛擬移動應用程序,使用幾種不同的技術隱藏了 API 密鑰。

在這篇文章中,令人敬畏的 MobSF 工具用於輕松地從二進制文件中提取 API 密鑰,但如果攻擊者無法從二進制文件中提取它,因為它隱藏在本機 C 代碼中,或者是通過應用程序啟動時的遠程配置提供的,那么攻擊者可能會使用中間人攻擊為您的信用卡提供商提取 API 密鑰,是的,我有一篇文章向您展示它是如何完成的:

使用中間人攻擊竊取 Api 密鑰

In order to help to demonstrate how to steal an API key, I have built and released in Github the Currency Converter Demo app for Android, which uses the same JNI/NDK technique we used in the earlier Android Hide Secrets app to hide the API key .

因此,在本文中,您將學習如何在您控制的移動設備中設置和運行中間人攻擊以攔截 https 流量,從而竊取 API 密鑰。 最后,您將了解如何緩解中間人攻擊。

加強對中間人攻擊的安全性的下一步是使用證書固定,我也有一篇關於如何做到這一點的文章:

使用證書固定保護 HTTPS

為了演示如何使用證書固定來保護您的移動應用程序和 API 服務器之間的 https 流量,我們將使用我在上一篇文章中使用的相同 貨幣轉換器演示移動應用程序。

在本文中,我們將了解什么是證書固定、何時使用、如何在 Android 應用程序中實現它,以及它如何防止中間人攻擊。

在本文中,您將了解如何使用移動證書固定生成器免費工具輕松生成 Android 和 iOS 配置。

現在,您有一個針對中間人攻擊的移動應用程序,但是作為軟件中的所有內容,您經常會找到繞過的方法,不幸的是,這不是一個例外,因為可以在攻擊者控制的設備中繞過證書固定,是的,我可以告訴你怎么做:

如何在 Android 應用程序上繞過 Frida 的證書鎖定

今天我將展示如何使用 Frida 檢測框架在運行時掛鈎到移動應用程序並檢測代碼以執行成功的中間人攻擊,即使移動應用程序已經實現了證書鎖定。

繞過證書鎖定並不太難,只是有點費力,並且允許攻擊者詳細了解移動應用程序如何與其 API 通信,然后使用相同的知識來自動化攻擊或圍繞它構建其他服務。

Frida 是一個非常強大的工具,當熟練的攻擊者使用它時,他甚至可以連接到您的應用程序代碼以從中提取任何秘密,而無需禁用 pinning 來執行 MitM 攻擊。 攻擊者只需要弄清楚使用或檢索秘密的 function 的名稱,以便在運行時掛鈎並提取該秘密。 為了找到 function 的名稱,攻擊者將靜態反轉移動應用程序二進制文件並讀取您的源代碼,即使代碼被混淆。

雖然可以繞過證書鎖定,但它是對您的移動應用安全性的重要安全補充,因為它提高了攻擊者需要繞過的防御級別並增加了所需的技能集。 您的移動應用程序必須使用盡可能多的安全防御措施,就像在中世紀城堡中所做的那樣。

到目前為止,您已經了解了如何逐步增強移動應用程序的安全性,使提取卡提供商 API 密鑰變得更加困難,但您仍然容易受到其提取的攻擊。

您現在需要找到一種解決方案,允許您在運行時檢測 MitM 攻擊、被篡改的二進制文件、Frida,同時可以向通過移動應用程序證明的移動應用程序提供運行時秘密,該證明以非常高的程度保證相信不存在此類威脅。 不幸的是,我不知道任何可以提供所有這些功能的開源項目,但是存在商業解決方案(我在那里工作),如果您想了解更多信息,可以閱讀這篇文章:

動手移動應用程序和 API 安全 - 運行時機密保護

在上一篇文章中,我們了解了如何通過使用移動應用證明並將 API 請求委托給代理來保護 API 密鑰。 這篇博文將介紹您無法將 API 請求委托給代理的情況,但您希望刪除 API 密鑰(密鑰)以防止在移動應用程序中硬編碼以減少使用 ZA81259CEF1 二進制文件分析456E959C6274E和/或運行時檢測技術來提取這些秘密。

我們將展示如何通過使用移動應用程序證明來確保即時運行時秘密交付,將您的秘密動態傳送到不受攻擊的移動應用程序的正版和未修改版本。 我們將演示如何使用上一篇文章中相同的 Astropiks 移動應用程序來實現這一點。 該應用程序使用 NASA 當天的圖片 API 來檢索圖像和描述,這需要一個已注冊的 API 密鑰,該密鑰最初將硬編碼到應用程序中。

您想要額外的里程嗎?

在回答安全問題時,我總是喜歡參考 OWASP 基金會的出色工作。

對於 APIS

OWASP API 安全前 10 名

OWASP API 安全項目旨在通過強調不安全 API 中的潛在風險並說明如何減輕這些風險,為軟件開發人員和安全評估人員提供價值。 為了促進實現這一目標,OWASP API 安全項目將創建和維護前 10 名 API 安全風險文檔,以及創建或評估 API 時最佳實踐的文檔門戶。

對於移動應用

OWASP 移動安全項目 - 十大風險

OWASP 移動安全項目是一個集中資源,旨在為開發人員和安全團隊提供構建和維護安全移動應用程序所需的資源。 通過該項目,我們的目標是對移動安全風險進行分類並提供開發控制以減少其影響或被利用的可能性。

OWASP - 移動安全測試指南

移動安全測試指南 (MSTG) 是移動應用安全開發、測試和逆向工程的綜合手冊。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM