我最近为我的Android应用程序分配了新的安全修复:本次漏洞评估与渗透测试(VAPT))团队使用Magisk和Magisk hide绕过Android根检测实现。
VAPT团队给出的描述:检查根检测基于包名su binary的可用性.
VAPT团队绕过Android设备根检测的步骤:
- 设置Magisk应用包名为随机
- 下一步应用Magisk隐藏设置. 它将对应用程序隐藏su二进制文件。所以,应用程序正常工作。这意味着Magisk Hide可以让你使用应用程序而不让它知道它是根设备。
App上的根检测实现:
- 目前在Android应用程序中我们有">Root Bear";">根工具";
- 所有App数据存储在加密数据库
我也检查了可能的修复方法,如SafetyNet的硬件认证,但我发现这还不够。在这里,我找到了一个链接,上面说他们也能够绕过安全网检测:
- https://nooberinfo.com/magisk -隐藏-不-工作-银行-应用程序- 2021 magisk -隐藏-不-工作- 2021 - android - 11/# 19-method-6-updating-magisk-to-magisk-canary-version-to-fix-safetynet-issue-in-android-11
- https://www.thecustomdroid.com/fix-safetynet-hardware-attestation-guide/
关于这个场景的问题:
-
如果绕过根检测,As数据库被加密不应该有任何应用程序数据泄露的机会。如果绕过根检测,是加密数据库足够安全,以防止应用程序的数据泄露?
-
是否有任何目前已知的缓解措施可用于检测Magisk和Magisk隐藏Android应用?
-
如果有新的方法来绕过和隐藏根,那么就需要在Android应用程序上集成新的根检测库,这反过来又增加了Android APK的大小。为根检测集成新的库总是一个好主意吗?
您可以使用这段代码来检测magisk隐藏,将其与另一个根检测库(如root beer)结合使用。这里我们只是检查所有安装的应用程序,并搜索magisk特定的库名,如"libstub.so"。
private void searchForMagisk() {
PackageManager pm = getPackageManager();
@SuppressLint("QueryPermissionsNeeded") List<PackageInfo> installedPackages = pm.getInstalledPackages(0);
for (int i = 0; i < installedPackages.size(); i++) {
PackageInfo info = installedPackages.get(i);
ApplicationInfo appInfo = info.applicationInfo;
String nativeLibraryDir = appInfo.nativeLibraryDir;
String packageName = appInfo.packageName;
Log.i("Magisk Detection", "Checking App: " + nativeLibraryDir);
File f = new File(nativeLibraryDir + "/libstub.so");
if (f.exists()) {
ShowMessageBox("Magisk Detection", "Magisk was Detected!");
}
}
}