草庐IT

Android 相当于 ios devicecheck

coder 2023-12-02 原文

是否有相当于 ios 设备检查的 android
https://developer.apple.com/documentation/devicecheck
或者有什么方法可以验证这是您进行 api 调用的未篡改的 apk?

最佳答案

问题第一部分

Is there an android equivalent of ios device check https://developer.apple.com/documentation/devicecheck



正如已经指出的那样,Android 等价物是 SafetyNet,但尽管对 Android 安全生态系统进行了非常好的改进,但它并非旨在用作独立防御,根据 Google own statement :

The goal of this API is to provide you with confidence about the integrity of a device running your app. You can then obtain additional signals using the standard Android APIs. You should use the SafetyNet Attestation API as an additional in-depth defense signal as part of an anti-abuse system, not as the sole anti-abuse signal for your app.



此外,当开发人员实现 SafetyNet 解决方案时,还需要牢记:
  • 它是 Google 移动服务 (GMS) 的一部分,因此只能在具有此功能的设备上运行。在某些市场,例如远东,有大量设备不具备此功能。
  • 可以使用标准的免费 API key 进行的证明调用数量有限,因此要大规模使用(可能)需要付费级别。
  • 它主要用于检查特定 Android 设备运行的操作系统镜像是否被认为是安全和兼容的。因此,它可以被认为是非常先进的根检查,能够检查指示根设备的文件系统更改。
  • 由于 SafetyNet 正在对操作系统镜像的哈希值进行全面分析,因此它实际上可能非常慢(有时需要几秒钟)。这意味着它不能连续运行,并且在使用时需要小心以向用户隐藏此延迟,但又不会为攻击者提供可利用的机会。
  • SafetyNet 没有专门分析正在运行的应用程序的内存映射来检测检测框架(它依赖于它们只能在有 root 权限的设备上运行的事实),例如 XPosed 和 Frida。
  • SafetyNet 确实通过 apkDigestSha256 功能提供了正在运行的应用程序的证明。但是,只有在报告完全完整性的情况下才能依赖这一点。这意味着应用程序的完整性是未知的,如果它运行在任何类型的异常或有 root 权限的设备上。一些用户仅出于自定义目的对他们的设备进行 root,如果移动应用程序中有很大比例的设备,则 SafetyNet 会将他们排除在能够使用该应用程序之外。在这种情况下,我们想特别了解正在运行的应用程序的完整性,而不是整个系统。 SafetyNet 无法做到这一点,但移动应用认证服务可以。
  • 为了以无法被欺骗的方式执行证明检查,应用程序无法进行自己的检查(很明显,此代码可能会被篡改)。因此,需要实现服务器端以可靠地使用该功能。

  • 问题的第二部分

    or any way to verify that this is your undoctored apk making the api call?



    这里的方法是将 SafetyNet 与移动应用证明服务一起使用。如果您的移动应用程序中需要用户身份验证和身份验证,也应使用 OAUTH2。最后但并非最不重要的是使用证书锁定来保护 API 服务器和移动应用程序之间的通信 channel ,如 this series 中所述。关于移动 API 技术的文章。

    移动应用认证服务的定义

    移动应用认证服务的作用是通过使用集成在您的应用中的 SDK 和在云中运行的服务,在运行时保证您的应用没有被篡改或不在有 root 权限的设备中运行。

    成功证明应用程序完整性后,将颁发 JWT token 并使用一个 secret 签名,只有您的应用程序的 API 服务器和云中的移动应用程序证明服务知道。

    如果 App Attestation 失败,JWT 会使用 API 服务器不知道的 secret 进行签名。

    现在,应用程序必须随每个 API 调用发送请求 header 中的 JWT token 。这将允许 API 服务器仅在它可以验证 JWT token 中的签名时才提供请求,并在验证失败时拒绝它们。

    一旦应用程序不知道移动应用程序证明服务使用的 secret ,即使应用程序被篡改、在 Root设备中运行或通过作为目标的连接进行通信,也无法在运行时对其进行逆向工程中间人攻击。这是与 SafetyNet 解决方案相关的此类服务的亮点。

    附带说明一下,如果您的应用程序直接与第三方服务对话,那么我建议您将该责任委托(delegate)给 API 服务器,这将阻止
    在未经授权的情况下代表您使用您的第三方服务,一旦它仅用于
    现在来自通过完整性挑战的移动应用程序的真实请求。

    移动应用证明服务已作为 SAAS 解决方案存在于 Approov (我在这里工作)为包括 iOS 在内的多个平台提供 SDK。集成还需要对 API 服务器代码进行少量检查,以验证云服务发布的 JWT token 。此检查对于 API 服务器能够决定提供哪些请求以及拒绝哪些请求是必要的。

    关于Android 相当于 ios devicecheck,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45986067/

    有关Android 相当于 ios devicecheck的更多相关文章

    1. Python 相当于 Perl/Ruby ||= - 2

      这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Pythonconditionalassignmentoperator对于这样一个简单的问题表示歉意,但是谷歌搜索||=并不是很有帮助;)Python中是否有与Ruby和Perl中的||=语句等效的语句?例如:foo="hey"foo||="what"#assignfooifit'sundefined#fooisstill"hey"bar||="yeah"#baris"yeah"另外,类似这样的东西的通用术语是什么?条件分配是我的第一个猜测,但Wikipediapage跟我想的不太一样。

    2. java - 什么相当于 ruby​​ 的 rack 或 python 的 Java wsgi? - 2

      什么是ruby​​的rack或python的Java的wsgi?还有一个路由库。 最佳答案 来自Python标准PEP333:Bycontrast,althoughJavahasjustasmanywebapplicationframeworksavailable,Java's"servlet"APImakesitpossibleforapplicationswrittenwithanyJavawebapplicationframeworktoruninanywebserverthatsupportstheservletAPI.ht

    3. 安卓apk修改(Android反编译apk) - 2

      最近因为项目需要,需要将Android手机系统自带的某个系统软件反编译并更改里面某个资源,并重新打包,签名生成新的自定义的apk,下面我来介绍一下我的实现过程。APK修改,分为以下几步:反编译解包,修改,重打包,修改签名等步骤。安卓apk修改准备工作1.系统配置好JavaJDK环境变量2.需要root权限的手机(针对系统自带apk,其他软件免root)3.Auto-Sign签名工具4.apktool工具安卓apk修改开始反编译本文拿Android系统里面的Settings.apk做demo,具体如何将apk获取出来在此就不过多介绍了,直接进入主题:按键win+R输入cmd,打开命令窗口,并将路

    4. java - Ruby 相当于 Java 的 Collections.unmodifiableList 和 Collections.unmodifiableMap - 2

      Java的Collections.unmodifiableList和Collections.unmodifiableMap在Ruby标准API中是否有等价物? 最佳答案 使用freeze应用程序接口(interface):Preventsfurthermodificationstoobj.ARuntimeErrorwillberaisedifmodificationisattempted.Thereisnowaytounfreezeafrozenobject.SeealsoObject#frozen?.Thismethodretur

    5. python - Ruby 相当于 Python str[3 :] - 2

      是否有Ruby等效于Python的方法来获取在字符串末尾结束的子字符串,如str[3:]?必须输入字符串的长度并不方便。 最佳答案 传递最后一个元素=-1的范围str[3..-1] 关于python-Ruby相当于Pythonstr[3:],我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/12978768/

    6. ruby - Java 8 相当于 ruby​​ each_with_index - 2

      我想知道,是否有一些流操作可以像ruby​​中的each_with_index那样做。其中each_with_index遍历值以及值的索引。 最佳答案 没有专门用于该目的的流操作。但您可以通过多种方式模仿该功能。索引变量:以下方法适用于顺序流。int[]index={0};stream.forEach(item->System.out.printf("%s%d\n",item,index[0]++));外部迭代:以下方法适用于并行流,只要原始集合支持随机访问。Listtokens=...;IntStream.range(0,toke

    7. ruby - setInterval() 相当于 ruby - 2

      在JavaScript中你可以这样做:setInterval(func,delay);我似乎无法在谷歌上找到任何我真正要找的东西。是否有ruby等价物?提前致谢。 最佳答案 你可以做类似的事情:Thread.newdoloopdosleepdelay#yourcodehereendend或者你可以定义一个函数:#@return[Thread]returnloopthreadreferencedefset_interval(delay)Thread.newdoloopdosleepdelayyield#callpassedblocke

    8. ruby-on-rails - Textmate 'Go to symbol' 相当于 Vim - 2

      在Railcasts上,我注意到一个非常有趣的功能“转到符号”窗口。它像Command-T一样工作,但显示当前文件中可用的类和方法。如何在vim中获取它? 最佳答案 尝试:helptags有各种程序和脚本可以生成标记文件。此外,标记文件格式非常简单,因此很容易将sed(1)或类似的脚本组合在一起,无论您使用何种语言,它们都可以生成标记文件。轻松获取标记文件(除了下载生成器之外)的关键在于格式化样式而不是实际解析语法。 关于ruby-on-rails-Textmate'Gotosymbol

    9. ruby-on-rails - Ruby 中的类方法(相当于 JAVA 中的静态方法) - 2

      伙计们,我正在学习ruby​​,最近从JAVA转行。在JAVA中,我可以将类的成员变量设为静态,并且该成员变量在类的实例中保持不变。我如何在ruby​​中实现相同的目标。我在我的ruby课上做了这样的事情:classBaseclass@@wordshashend到目前为止,这似乎在我测试时达到了目的,即@@wordhash在Baseclass的实例中保持不变。我的理解对吗?另外,我想在类中有一个成员方法,相当于JAVA中的静态方法(我不需要类的实例来访问它)。我怎样才能做到这一点?例如,我想在Baseclass中有一个像getwordshash()这样的方法,它返回@@wordshas

    10. Ruby - 相当于 Python __str__() 方法? - 2

      在Ruby中,是否存在可以在Python类上定义的与__str__()方法等效的方法? 最佳答案 你可以使用to_s。http://briancarper.net/2006/09/26/ruby-to_s-vs-to_str/ 关于Ruby-相当于Python__str__()方法?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/134969/

    随机推荐