【译】在您的应用中安全使用Android的篡改检测 (Using Android's tamper detection securely in your app)
原文地址: https://koz.io/using-safetynet-securely-in-your-android-app/
在上一篇博文中,我從技術(shù)角度描述了Google Play的SafetyNet服務(wù)的結(jié)構(gòu),深入研究了細(xì)節(jié)并對其進行了檢查。
回顧:Google Play的SafetyNet服務(wù)允許您的應(yīng)用獲取有關(guān)所運行設(shè)備的“ CTS兼容性”狀態(tài)的信息。您可以將CTS兼容性視為生根檢測,設(shè)備篡改檢測和活動MitM檢測的組合。
許多應(yīng)用程序使用商業(yè)“保護套件”來執(zhí)行其中的某些任務(wù),或者推出自己的解決方案-這通常很容易被破壞。
Google Play的SafetyNet服務(wù)可以免費為您的應(yīng)用提供類似的信息-盡管檢查是基本的,但比推出自己的解決方案更難繞過。我相信,如果您確實想進行篡改檢測,但又不想投資專門的產(chǎn)品或咨詢服務(wù),那么使用此API值得一試。
但是,對于不具備安全意識的開發(fā)人員而言,“正確”使用SafetyNet API并非直截了當(dāng)。
不安全地使用SafetyNet
例如,此示例應(yīng)用程序?(源)和此應(yīng)用程序以僅客戶端方式實現(xiàn)API。這些應(yīng)用程序獲取證明結(jié)果,并使用和字段getBoolean()上的方法在本地檢查簽名和CTS兼容性字段。ctsProfileMatchisValidSignature
這種方法的問題在于,已經(jīng)在設(shè)備上具有root用戶訪問權(quán)限的攻擊者可以掛鉤該getBoolean()方法并使其始終返回true-誘使您的應(yīng)用程序相信該設(shè)備確實與CTS兼容,而真正的SafetyNet響應(yīng)卻說這是不。如果您在本地檢查JWS AttestationResult對象的簽名,則會存在相同的問題。
完全可以執(zhí)行這種掛鉤的Xposed模塊已經(jīng)發(fā)布-可以輕松進行旁路。
或者,攻擊者可以重新打包您的應(yīng)用程序并剝離所有這些檢查,從而獲得相同的結(jié)果。
避免客戶端檢查
這幾乎不是新的最佳實踐建議:避免客戶端檢查對您有好處。
我和Cigital的資深顧問Georgi Boiko創(chuàng)建了SafetyNet Playground,這是一個示例性的開源Android應(yīng)用程序,旨在解決這些“瑣碎的繞過”問題。它使用SafetyNet API的方式與Android Pay相同。
設(shè)計該應(yīng)用程序是為了在服務(wù)器端進行檢查。這樣的想法是,除非SafetyNet服務(wù)響應(yīng)您的設(shè)備與CTS兼容,否則服務(wù)器將不會返回任何有用的數(shù)據(jù)。
有了這樣的解決方案,攻擊者就可以不再瑣碎地鉤住應(yīng)用程序中的內(nèi)容。他需要投入時間和精力來趕上趕超過程,并了解不斷變化的SafetyNet服務(wù),試圖掛鉤從設(shè)備收集到的所有內(nèi)容,并弄清楚什么將構(gòu)成每張支票的“可接受”狀態(tài)。
當(dāng)然,攻擊者在剝離了Attestation API之后仍然可以重新打包應(yīng)用程序。取決于攻擊者的聰明程度,它也可能會被擊敗,因為JWS對象包括發(fā)出請求的程序包的簽名……攻擊者將不得不偽造該簽名,以便Google Services認(rèn)為另一個應(yīng)用程序發(fā)出了請求。
這篇博客文章詳細(xì)介紹了SafetyNet Playground的設(shè)計。Android應(yīng)用程序和Web服務(wù)是開源的,因此您可以重用部分代碼或?qū)ζ溥M行研究。
與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的【译】在您的应用中安全使用Android的篡改检测 (Using Android's tamper detection securely in your app)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 最近正在研究Liferay portal
- 下一篇: Android dex分包方案 (多de