題:
如果可以在模擬器上安裝android應用,則具有安全隱患
Lexi champ
2019-12-16 19:30:46 UTC
view on stackexchange narkive permalink

我正在努力確保公司產品的安全性。我們有該產品的移動版本。這個問題是針對Android版本的

背景-我們的產品是基於SaaS的產品,該應用旨在供租戶組織的不同銷售人員使用。我們已經實現了不同的控制層,以確保我們應用程序的安全(或更像安全)環境-

  • 我們檢查根目錄檢測-(操作系統級別檢查)
  • 已實施SSL固定-(傳輸層級別檢查)
  • 在Android密鑰鏈中存儲機密
  • 最小的本地數據存儲。加密本地數據(需要存儲)

,列表繼續。簡而言之,從設備到通信層再到服務器層,我們正在覆蓋每個角落。

問題是,我們收到一位安全研究人員報告的一個問題,說我們的應用可以從Android Play商店下載,因此可以在模擬器上運行,並且可以在模擬器上繞過根檢測。因此,它增加了巨大的威脅,應立即修復。

我進行了搜索,但是我找不到能夠將應用程序安裝在模擬器上的安全隱患。我還檢查了是否必須修復它,可能是解決方案。有一些檢查,例如查看運行環境是否為SDK,檢查攝像頭或傳感器等功能是否正常運行,但所有這些檢查也可以在模擬器中被忽略。

這對我來說很關鍵,因為如果我接受此問題,我們的客戶將在報告中看到它,並堅持要求對其進行修復。對於要向管理人員和開發人員(如果我接受)和修復(稍後可能需要)進行解釋的含義,我現在是空白。

更新-

  1. 我想澄清一件事,我們從不提倡將根檢測或任何其他客戶端安全控製作為應用程序的優點,因為我們認為可以在某一點或另一點繞過所有客戶端保護
  2. 我們繼續嘗試在服務器級別構建更安全的體系結構。但是由於客戶端也構成了生態系統的一部分,所以我們不能無所顧忌。
  3. 我們甚至嘗試在通信層(TLS之外)實施控件,以確保僅通過輕按即可獲得所有內容
  4. ol>

    整個想法是,如果我們無法控制在某些方面,我們至少可以使惡意團體難以接受。我們的主要重點是確保用戶數據和控件的安全並在進行中。

    Pentester的最新消息-與他討論之後,他說他不了​​解應用程序安全性要求。根據他的說法,所有應用都應具有root用戶檢測功能。我們向他解釋說,這些事情對我們來說是次要的,但是如果任何特定於客戶的數據在眾目sight之下,或者由於應用程序中的配置錯誤或應用程序中的任何漏洞(例如硬編碼的機密)而受到損害,那麼它就是主要的。

    基於提供給大家的信息,我能夠清楚地區分並幫助解決問題。早些時候都是因為這個問題。感謝所有人

如果用戶具有root訪問權限,那麼他們仍然可以繞過您的root檢查檢測。Rootkit甚至可以向root用戶隱藏它們的存在,因此從用戶應用程序中隱藏將容易得多。
您的安全研究人員說,您的應用可以在Play商店中使用是否存在問題?聽起來像[這個人](https://serverfault.com/q/293217/402194)會說的話。
您的應用程序設計得很錯-*“您的後端就是產品,前端就是您足以為用戶建立客戶端”。
此外,是否要生根設備是用戶的事。對於沒有根源的抱怨根源的應用程序,我給予了1星評價。
我不確定您的安全研究人員怎麼了,但是我認為模擬器沒有什麼特別之處,它可以使root和常規設備的隱藏變得更容易。如果您使用Google的官方模擬器,則實際上根本無法植根它們(以及安裝了Play Services的模擬器)。
您知道,有些電話*供應商/運營商*不讓您*擁有*的電話紮根,但聽到軟件開發人員竭盡全力嘗試以這種方式進行區分也讓我沸騰了,這已經夠糟糕了!
您的應用為什麼要嘗試檢測根以及鑰匙串中存儲的秘密是什麼?
您存儲什麼秘密,它們授予什麼權限?
在2019年檢查root?
我不會很快趕上安全檢查員。如果他們提供了一份白皮書/安全策略,其中包括聲稱根檢測是其安全策略的一部分,那麼指出該說法是虛假的是完全合理的。他們不太可能保留他或她足夠的帳單來搜索整個應用程序,以確定它是否真的超出了“您的聲稱根檢測為您的應用程序增加安全性的說法是錯誤的”以外的問題。
我建議您查找“ Magisk”,它實際上是隱藏的根。Google的safetynet無法檢測到它。
可能是安全研究人員做了作業,並遵循了OWASP清單,其中包括“威脅”。不管實際的威脅模型如何,審計師可能只是遵循這些通用準則
如果您的應用程序無法在模擬器上啟動,則該模擬器已損壞,因此必須修復該模擬器。
九 答案:
Steffen Ullrich
2019-12-16 20:09:37 UTC
view on stackexchange narkive permalink

目前尚不清楚您首先具有哪種安全要求,因此也不清楚您的安全措施是否足夠。

無法完全防止使用您的應用程序的惡意用戶只要您不能完全控制用戶的設備。這種風險包括在模擬器上運行應用程序,還包括在有根或其他被篡改的設備上運行該應用程序-並不能通過您使用的任何根檢測方法都檢測到所有這些。

相反,您需要設計應用程序這樣惡意用戶就不會對您或其他用戶造成任何傷害,而只會對自己造成傷害。例如,這意味著在應用程序中具有用戶特定的機密,而不使用全局機密。這也意味著您不應該信任應用程序報告的任何內容,而應驗證這是否有意義(即,不信任遊戲或類似遊戲中任何自我報告的高分)。

除了上述惡意使用方法之外,還可以對apk進行反向工程並刪除您提供的任何保護。
@Nstr10通常也很容易做到。我彈出的很多apk只是將網站打包為一個應用程序,您可以閱讀原始源代碼。
我們有一個要求,因為我們是一個基於雲的平台,所以用戶不能訪問任何其他用戶(尤其是其他租戶)的數據非常重要。正如您提到的應用程序設計一樣,我們實際上在設計安全性時將其作為不可或缺的一部分。但是,根檢測可以防止逆向工程..這些是一些使攻擊者感到困難的措施。即使繞過所有這些措施,我們也會在服務器的應用程序中採用適當的措施,並且它將僅接受基於應用程序中指定的安全控制要求的數據。
@Lexichamp:真正的問題不是,是否存在可以在模擬器中繞過根檢查的問題。真正的問題是,攻擊者是否能夠通過某種方式擺弄您的應用程序(即反向工程,生根...)來訪問其他用戶的數據。__如果攻擊者無法從此繞過中獲得任何好處__,即,如果他無法獲得其他客戶的數據,則是否可以繞過您的根檢測並不重要。
攻擊者甚至可能不需要對應用程序進行逆向工程,他們也可以只使用Wireshark並直接篡改通信。
“至關重要的是,用戶不能訪問任何其他用戶的數據”-這需要在服務器端實現,最常見的是使用用戶名和密碼登錄。修改後的應用將無法繞過正確實施的服務器端登錄系統。@Tomáš,這就是為什麼您具有SSL證書固定功能,因此用戶將需要分解應用程序或將設備植根以能夠查看Wireshark中的流量
@Lexichamp目前最常用的root方法是Magisk。因此,這是無法檢測到的,因此阻止了根的好運。您已經失敗了,root總是比檢測提前1步。如果有root用戶可以訪問另一用戶的數據,這意味著您的安全性很差,請不要阻止root用戶,請確保無論如何人們都無法訪問其他人的數據。
@Tomáš如果應用程序使用證書固定,那應該如何工作?任何鏈接?我懷疑是否可能,但是會很有用。
@Voo我不是安全專家。也許不可能。我所知道的是,我可以使用Wireshark在自己的計算機上看到HTTPS通信內容。大概有一個適用於android或某些虛擬android的Wireshark替代品。如果我想對應用程序進行逆向工程,那將是我推薦的方法。
@Tomáš很少有Deskop應用程序使用證書固定,但是對於那些使用您的方法的應用程序,它們在台式機上都不起作用。當您使用Wireshark偵聽自己計算機上的TLS通信時,將發生以下情況:Wireshark MITM對通信進行通信,並使用其自己的根CA創建虛假證書。證書固定使不可能。如果應用程序未固定其證書,則可以在Android上註冊根CA,然後在某些網關上對流量進行MITM。更複雜,但可行。
@Voo: Wireshark完全是被動的,無法執行您所描述的主動MITM。您將需要使用諸如mitmproxy或Burp之類的東西。在沒有活動的MITM的情況下,您只能看到加密的流量和(大多數是未加密的)TLS握手。
@Steffen是的,我知道-由於尺寸限制,我不得不簡化和簡化說明。這只是解釋為什麼證書固定使MITM攻擊不可能的原因。
Qwertie
2019-12-17 04:48:37 UTC
view on stackexchange narkive permalink

您在這里關心誰的安全性,您想保護什麼?您是要保護用戶免遭其他人訪問他們的數據,還是要保護公司免受反向工程師由於API不安全而試圖查看應用程序工作方式的威脅?純粹是試圖保護用戶的安全,那麼除非您認為用戶將在安全性較差的VM中運行該應用程序並竊取數據,否則在VM中運行該應用程序根本沒有問題,這既極不可能,而且他們的問題,而不是你的問題。這幾乎總是無濟於事的,因為如果應用程序設計得很安全,那麼它就不會對攻擊者有用。

此外,請記住,有時安全測試人員有時只會偽造非問題。他們找不到任何實際問題,因為空白的報告很難證明所花的錢是合理的。如果可能,挑戰他們的陳述,並請他們給出一個實際例子,說明這實際上是一個問題。

我們專注於保護可能駐留在設備上的用戶數據。我們已採取某些措施使反向工程APK變得困難,但這並不是我們的首要考慮。這只是我們正在嘗試實施的另一層縱深防禦方法。我們只是想讓(盡可能)難以在有根設備上運行我們的應用程序。我知道我們不能100%做到這一點,但我們要盡量避免。研究人員試圖在植根設備上運行我們的應用程序,但是當該方法不起作用時,他在模擬器上運行的植根圖像上運行了該應用程序。應用稍後正在開發
我們仍在等待他傾聽模擬器上運行的應用程序的安全隱患。我的直覺說你是對的,這可能只是增加人數的一個問題
@Lexichamp但是,為什麼要保護用戶數據免受用戶侵害?誰在乎用戶是否可以“竊取”自己的數據?只要他們不能竊取別人的數據。
@user253751那是另一個要點。根檢查用於在某些情況下您不信任用戶。主要是在遊戲中實施DRM或防止作弊。我懷疑出現VM問題的部分原因是因為它表明根檢查程序幾乎毫無意義。
Stilez
2019-12-17 07:02:41 UTC
view on stackexchange narkive permalink

對客戶的經典而正確的答案是 NOTANISSUE

任何客戶端軟件* *不應永遠被設計為安全的,從某種意義上說就是您的問題。他們不可能。客戶端軟件-無論是Web還是應用程序-完全受客戶端控制,其環境也是如此,重寫/修改軟件或在無法檢測到的不安全或已修改環境上運行軟件的全部能力也一樣。那不是錯誤。這是該模型的固有特徵 * *。

進行各種檢查的目的是為了降低風險並提高安全門檻(通常如此)。確保客戶端安全或確保客戶端安全的操作未完成,並且您的客戶端在實現該目標方面是錯誤的。

  • * *可能是唯一排除客戶端軟件的情況,在該客戶端軟件中,整個客戶端軟件及其環境的設計和控制均旨在創建高度防篡改和可驗證的環境,例如Trusted Execution或某些YubiKey的固件(一旦刷新就無法輕易下載或修改),或者當客戶端是具有自身安全性的遠程系統時,例如安全可靠的故障轉移服務器通過SSH彼此同步。

    即使如此,也許特定模塊仍被認為是安全的(對於特定威脅模型),但這仍然並不意味著其他任何功能,例如本地應用檢查加密狗的響應無論如何都得到保護。
絕不應該將客戶端軟件* *設計為安全的。好。無論後端設計如何,客戶端軟件絕對是不安全的。例如,將密碼存儲在錯誤的位置。
Jasen
2019-12-17 13:38:50 UTC
view on stackexchange narkive permalink

我對這裡的內容有所了解,但我想我知道研究人員來自哪裡。

您的應用沒有存儲(或使用)任何可能暴露其他人數據的秘密的業務。客戶。

設計您的後端,以使提供給前端的秘密僅使對後端服務的分隔訪問成為可能。那麼如果用戶將自己的設備設為root用戶,則只能破解自己的帳戶。

我會同意這一點,但是聽到同一個人建議**在Play商店中發布該應用程序是一個漏洞**,這使我質疑該研究人員的信譽。
@MechMK1除非對話進行如下:“沒有,我們的應用程序很安全,因為您無法使用有根設備運行它!”研究人員對此回答說:“我可以在模擬器中運行它”
@MechMK1,我認為您過於重視OP表達該句子的方式。A)“根檢測為我們的應用程序增加了安全性” B)“您的應用程序位於公共商店中,而不是在公司託管的環境中,無法進行根檢測,如果需要,您將遇到問題”將是完全合理的交換,OP本來可以重述。如果應用程序設計不良,僅用於沙盒使用,則將其發佈到Play商店是一個漏洞。他們可能向測試人員暗示了這一點。
@Cruncher在下面看到我的回答-研究人員的假定答案是完全錯誤的。
Affe
2019-12-17 23:33:45 UTC
view on stackexchange narkive permalink

我覺得有必要在這裡倡導性能較差的筆式測試儀。

該測試儀的用途是什麼?在什麼範圍內試用?

如果應用程序開發人員提供了白皮書或安全策略等聲稱根檢測是其安全策略的一部分,那麼絕對有必要指出,根檢測是針對公開可用apk的虛構內容。確定整個體系結構實際上是否在客戶端容易受到攻擊並且僅應在受控設備上運行,或者管理層只是想要盡可能多的“安全功能”列表,通常不是測試人員的問題。他或她只是報告說它針對所提供的聲明沒有通過(根檢測正在提高安全性。)

“修復”是停止提出客戶端環境檢查對安全性有任何幫助的聲明,以便您可以

此人暗示“在playstore上存在漏洞”的字眼不是OP的。 (我說過的話錯誤地重述了,這在我自己的職業生涯中犯了足夠多次的錯誤……!)

究竟。如果聲稱根檢測為某些情況提供了保護,以防止涉及用戶有意在具有根訪問權限的設備上運行應用程序的情況,則測試人員發現,根檢測僅阻止未確定運行該用戶的用戶。擁有root權限的設備上的應用程序。
Refineo
2019-12-16 21:02:42 UTC
view on stackexchange narkive permalink

我不會將任何客戶端或Web應用程序視為足夠安全的獨立應用程序,即沒有在OS上獨立保護解決方案服務器端的情況。

應至少重複使用客戶端應用程序內部實現的所有安全層,驗證和檢查,並在應用程序服務器端組件內進行相應或更強的驗證。

此外,使用仿真器運行應用程序意味著仿真器自身的漏洞可能損害用戶的安全,例如,某些漏洞允許攻擊者執行遠程代碼執行,信息洩露,竊取備份和數據,以及獲得對仿真器進程間通信功能的訪問權限*

*來源: https://www.bleepingcomputer.com/news/security/bluestacks-flaw-lets-attackers-remotely-control-android-emulator/ >

Martin Zeitler
2019-12-18 07:03:53 UTC
view on stackexchange narkive permalink

在硬件設備上運行的JVM或仿真器之間幾乎沒有區別。當然,可以看到OS構建字符串是否為“通用”字符串(只有仿真器才具有),然後在發布版本時退出應用程序-但這使總體安全性提高了零(因為字節碼很容易被刪除)反編譯-並且只有代碼簽名可以在某種程度上阻止對功能的更改)。此外,發行版未配置為 debuggable

要點是,當它無法在有根設備上運行時-則將不會在(有根)模擬器上運行。

Lassi Kinnunen
2019-12-19 12:39:58 UTC
view on stackexchange narkive permalink

由於明顯的邏輯筆測試漏洞,不可能進行可靠的根檢測。

如果用戶有權訪問apk,則用戶也可以僅分析apk,然後直接輕鬆地調用服務器api並完全繞過應用程序 b>或將應用程序移植到其他系統。如果這是保護系統以檢測系統是否在有根設備上運行的策略的一部分,則您需要重新考慮整體安全方法,因為您甚至無法可靠地知道正在運行的內容。 b>

如果他們想反編譯您的應用程序,則用戶可以將所有檢測部分從應用程序中剝離出來。該過程與“破解”軟件的過程相同。

您可以對root進行檢測,只是讓用戶知道您認為他們的手機已紮根,以作為安全警告。用戶-也許電話是在用戶不知道的情況下紮根的?但是即使在這種情況下,您也不能依靠它。您不知道它是不是實際運行的硬件。您不知道它是否在諸如knox之類的系統上運行,您可以在其中支付三星以通過系統功能從根本上獲得系統的根權限(是的,是的,它基本上可以授予您幾乎根源的權限,以使其他應用程序和其他應用程序組件陷入混亂-電話即使在那時仍會顯示為安全的,並且是無根的。)

根檢測通常會在應用程序中阻止黑客入侵,但這是100%解決問題的錯誤方法。抱歉,但是您需要的是組織在安全性方面的文化思維轉變:您不能相信在其他地方運行的軟件是您認為如此深思熟慮的東西。

編輯:如果您需要某種方式來向上司解釋,那麼您可以嘗試以下方法:“如果我們可以做到這一點,那麼那段代碼的價值將比整個公司的價值還要高”-即使您為Google工作,該報價仍然適用於您的公司。

Lucas
2019-12-23 00:28:22 UTC
view on stackexchange narkive permalink

安全研究人員警告是正確的,但是您必須將此警告放在應用程序的上下文中,以了解它是否相關。

您將“根檢測”列為您的重要安全功能應用程式。

我本人是安全專家,因此可以很容易地繞過根檢測。不僅在虛擬機上:在物理設備上也是如此。許多聲稱進行根目錄檢測的框架不會檢測到許多根目錄設備,也不會檢測到一些正常的根目錄設備。即使是這種情況,也可以輕鬆地對任何應用程序的客戶端進行反向工程。有動機的攻擊者將可以完全繞過客戶端應用程序訪問您的後端界面。這意味著可以繞過客戶端的所有檢查,並且使計算混亂。客戶端檢查或計算均不可信任。

可以創建一個受信任的客戶端,但是它需要專有的硬件,專有的操作系​​統和軟件。遊戲機和有線網絡可以做到這一點,但是盜版仍然遭受很多損失,這應被視為很好的例子來證明對設備進行防篡改的難度。從理論上講,這種策略是可行的,但由於它太昂貴,偷竊並阻止了在競爭之前變得脆弱和過時的產品功能的投資,因此在實踐中失敗了。

它需要有多安全?

沒有安全/安全的應用程序。安全性是要了解風險,可能造成的損失的可能性和損失的大小,並確定應急措施和緩解策略,以保持健康的利潤率。您應該問的問題是:

  • “根檢測”失敗時會發生什麼?
  • “根檢測”應該防禦哪些攻擊?
  • 發生這種情況的可能性有多大?
  • “根檢測”失敗會導致什麼樣的損失?
  • 還有其他防範措施嗎?
  • 是否可以快速檢測到此類違規行為?
  • 是否可以觸發可減少或消除損失的突發事件?
  • 公司仍然可以通過這些損失獲利嗎?

所有重要邏輯都必須在服務器端

您似乎為可能的損失感到煩惱攻擊者能夠在虛擬環境中安裝您的應用程序。我懷疑許多安全檢查和重要計算都在客戶端。在這種情況下,您確實需要重新設計應用程序以將所有控件移至服務器端:

  • 暴露給用戶網絡的後端接口API必須要求身份驗證用戶。

  • 後端接口API必須限制用戶可以看到和執行的操作。訪問限制應由服務器端而不是客戶端強加。當然,除了不包含敏感信息和命令的服務外,其他情況除外;

  • 後端接口API必須考慮暴力攻擊的可能性。攻擊者可以下載數據庫的大部分內容,並通過嘗試全部操作來猜測弱密碼和確認代碼。

  • 內部API(後端使用且未公開給用戶網絡的內部API)組成內部服務層,該內部服務層應使用服務用戶或客戶端證書進行身份驗證。出於記錄目的,真實用戶的信息應傳播到這些服務。

我知道這很令人失望。有了這些限制,後端接口API必須非常特定於應用程序工作流程,因此少重用。不幸的是,只有內部API可以重用。這也意味著後端開發人員將需要非常了解用戶體驗,設計的工作流程並與前端團隊緊密合作,這是大多數開發人員不喜歡或準備要做的事情。

即使服務器上具有所有重要的邏輯,也有必要設計工作流來考慮其他風險

如果應用程序遵循上述準則,則客戶端是否重要應用程序在攻擊者的設備上被篡改。他或她將無法執行任何操作,除了他們擁有的用戶憑據可以通過官方客戶端應用程序執行的操作之外。

但是,如果將真實的用戶設備植根,惡意軟件將能夠:

  • 繞過根植的設備檢測;
  • 捕獲用戶憑據;
  • 將用戶重定向到虛假頁面;
  • 將用戶重定向到虛假應用;
  • 遠程控制設備;

這些攻擊不是很常見。這些比較困難,因為通常需要用戶執行複雜的過程。但是,如果產品價格昂貴或信息過於敏感,則必須認真對待這些攻擊。

如果您擔心的是因為“銷售人員”處理的是損失很大且不易彌補的昂貴產品,則必須考慮次要障礙,例如:

  • 主管驗證在較大規模的行動中;
  • 使用多個外部數據庫驗證傳遞地址;
  • 改進對交貨的跟踪;
  • 根據風險強加時間限制。

如果這還不夠,您可以選擇提供一家公司鎖定的設備,以防止外部威脅應用程序安裝並鎖定USB僅可充電。我知道有幾個人一直帶著不同公司的三部公司電話走來走去:這仍然是一回事。

開發良好的日誌並對其進行監控

監視也是避免許多損失的好策略。回溯原木上的損失可以更好地了解它們的發生方式和失敗原因,提出對產品的更改建議,或者至少監視該情況以獲取未來類似情況的早期警告。

如果日誌足夠詳細,則存在易於實施的行為生物特徵識別技術,可以儘早檢測到多種入侵和某些操作錯誤,以防止損失。

您有台式機版本嗎?

當您說“我們有該產品的移動版本”時,聽起來好像您有另一個版本。您有台式機版本嗎?桌面操作系統默認情況下植根,並且沒有應用程序隔離。如果您可以使用台式機版本,則可能甚至根本不需要根目錄檢測。

持續改進安全性是一件好事,應該這樣做,但是除非您在新開發中犯了一個可怕的錯誤,否則您可以期望移動版本比台式機更加安全。



該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 4.0許可。
Loading...