android中无法绕过的根检测方法

Posted

技术标签:

【中文标题】android中无法绕过的根检测方法【英文标题】:Root detection methodology in android which cannot be bypassed 【发布时间】:2015-02-02 04:39:15 【问题描述】:

我知道在有根设备上运行拥有敏感信息的应用程序根本不安全。因此,开发人员通常会在这种情况下进行 root 检测,如果发现设备已 root,则该应用程序将无法安装。一切正常。

开发人员在root检测中使用的主要技术是检查superuser.apk文件,检查chainfire,busybox,执行su命令等。但攻击者可以通过多种方式简单地绕过这些检查,例如将 superuser.apk 重命名为 superuser0.apk。

所以我正在寻找一个独特的解决方案来解决这个问题,即攻击者无法绕过根检测检查。即使不存在这样的解决方案,也请分享您的观点。因为你们的解决方案可能有助于至少加强根检测代码。

【问题讨论】:

【参考方案1】:

有一个名为 rootbeer 和 a sample app 的开源库执行以下检查以检测 root。

CheckRootManagementApps CheckPotentiallyDangerousAppss CheckRootCloakingApps CheckTestKeys checkForDangerousProps checkForBusyBoxBinary checkForSubBinary checkSuExists checkForRWSystem

【讨论】:

请小心,因为 rootbeer 库会因为无根设备上存在一些应用程序而发出误报。我有两个应用程序特别告诉我我的无根设备已植根,仅仅是因为 CyanogenMod 的 ROM 管理器许可证在我的旧手机的备份/恢复过程中安装在手机上,它在启动器中没有显示为图标. (对 Transport for London 的 Oyster 应用程序进行拖网评论,以获取因误报“根深蒂固”而无法使用应用程序的恼怒用户的示例。)【参考方案2】:

据我所知,没有“单一解决方案”,但您需要检查最常见的事情。以下文章也很有用: https://blog.netspi.com/android-root-detection-techniques/

这里有一些提示......还有你不应该做的事情: Determine if running on a rooted device

【讨论】:

感谢您的链接。 :) 我正在等待更多答案来填充。如果没有比这更好的,那么我会接受这个作为答案。【参考方案3】:

查看 Google 的 SafetyNet 服务: https://developer.android.com/google/play/safetynet/index.html

它将进行一些检查以验证设备是否安全并产生您可以验证的结果。结果以 JSON Web 签名的形式返回,您可以在应用程序中读取该签名,但为了提供额外的保证,您还可以将此结果发送到您管理的服务器,让它直接通过 Google 验证结果。

https://developer.android.com/google/play/safetynet/start.html

我认为这不会在非 Google 版本的 Android(例如 Cyanogen)上运行,因此请记住一些事情。

【讨论】:

@Bastet 有点正确,该服务验证操作系统是否受到谷歌的信任(兼容性是其中之一),它会检查它是否已被植根或篡改。如果通过 Google Play 部署,那么这应该是检测受信任操作系统的可靠方法。这比生根更能验证信任链,但根据用例可能就足够了。如果目标是非 Google-Android 设备,那么您将需要另一种机制。 我总是建议使用 SafetyNet,但要结合其他已实施的检查,因为使用 Magisk root 可以绕过 SafteyNet 本身。但是结合其他检查,例如检查 Magisk 包是否存在,但可以重命名,因此对硬编码的 com.topjohnwu.magisk 字符串进行混淆。纵深防御。

以上是关于android中无法绕过的根检测方法的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Android 4.3 中匹配内容 URI 的根?

如何防止根设备绕过 Android 中的证书固定?

无法为参数org.gradle.api.Project找到方法android()

Android - 任何Activity的根视图层次结构中存在的所有视图的相对路径生成器

Android程序的签名保护及绕过方法

在 Android 自定义键盘中检测 isSticky