簡體   English   中英

如何防止 Mac 應用程序用戶窺探?

[英]How to prevent snooping by user of Mac app?

我正在創建一個基於 Chromium/Electron 的 Mac 應用程序。 該應用程序本質上是一個瀏覽器,供我的客戶使用我無法控制的 web 服務。 我的要求是我的應用程序的用戶(可能在他們的 Mac 上具有 root 訪問權限)不應該能夠查看應用程序正在訪問的 URL,並且應該無法訪問應用程序正在存儲的 cookies。 通常,自己進行 MITM 或將調試器附加到應用程序並轉儲 memory 以查看 URL 和 cookies 並不難。

如何防止這些類型的泄漏給用戶? 如果不可能,可以將其變得非常困難,從而需要非常高水平的復雜性。

您的用戶可以完全控制他們的設備,無法安全地阻止他們代理或探索您的客戶端應用程序的功能。 混淆似乎是一種選擇,但最終,離開您的應用程序的 http 請求將通過不同的層遍歷整個操作系統,您的用戶可以很容易地觀察到這一點,如果不是這樣的話,那么在網絡數據包中(但通常更容易)。

防止用戶知道發生了什么的唯一方法是您擁有自己的后端。 前端應用程序 (Electron) 會向您的后端發出請求,而后端又可以在用戶不知情的情況下發出任何帶有任何參數的請求。

請注意,您的后端仍然可以用作代理或 oracle,就像用戶連接到真實服務一樣。 在您的情況下,這可能是也可能不是問題,具體取決於您實際想要實現的目標以及原因。

該應用程序本質上是一個瀏覽器,供我的客戶使用我無法控制的 web 服務。 我的要求是我的應用程序的用戶(可能在他們的 Mac 上具有 root 訪問權限)不應該能夠查看應用程序正在訪問的 URL,並且應該無法訪問應用程序正在存儲的 cookies

基本上,您不能(您可以使用適當的基礎設施。但您缺乏該基礎設施)。

在某種程度上,使用 HTTPS 可以保護網絡通信(如果您甚至不能使用,那么您完全不走運 - 用戶甚至不需要對 Mac 進行 root 訪問來嗅探流量)。 您需要驗證服務器證書以確保您連接到正確的服務器。

您可能會做的一件事 - 恐怕只對想要的人有效 - 首先在某個隨機服務器上運行測試 API 調用並驗證連接是否完全成功,具有正確的服務器標識和匹配的 IP,如果服務器存在,或者如果服務器從未存在,它會正確失敗。 其他任何事情都表明有人已經接管了網絡層,此時您可以連接到不同的服務器,進行不同的調用,並感嘆服務器沒有正確應答。

memory 中的字符串可以通過使它們僅在最短的時間內可用來受到(空中報價)保護(結束空中報價),或者以不同的形式存儲 - 例如,您可以擁有 URL 和具有相同長度的隨機字節序列,然后存儲URL和序列的序列和XOR。 然后,您可以在每次需要時重建 URL,記住將其從可能進入的任何應用程序緩存中清除。 此外,只是為了大聲笑,您可以在整個代碼中清晰地保留面包師的十幾個不同的 URL。 那時的 memory 轉儲將毫無用處。

當然,文件可以使用多種方案中的任何一種進行加密——駐留在必須知道如何解碼它們的同一台機器上的文件使得所有此類方案最終容易受到攻擊,但同樣,您可以嘗試混淆事物。 我曾經將一些信息存儲在 ZIP 文件中 - 但它只是加密 ZIP 文件的 header 文件,並在末尾粘貼了適當的目錄條目塊。 數據實際上只是明文壓縮,沒有任何密碼。 試圖解碼文件的人認為這是一個普通加密的 Zip 文件,擴展名已更改,浪費了大量時間使用幾個 Zip 破解工具,最后欠我一杯啤酒。

不僅如此,實際上可以做的事情並不多。

一個很大的優勢是將 API 調用和“cookie”維護外包給控制的外部服務,例如在 Amazon AWS 或 Azure 或類似服務上。 然后,您可以使用各種保護方案(例如:所有出站 API 調用都可以存儲在不透明的 object 中,使用服務器的公鑰加時間戳、隨機化和加密,並使用客戶端的唯一密鑰加密發送的響應)。 由於這相對簡單且具有成本效益,因此也是我的建議。

暫無
暫無

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

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