【问题标题】:Android APK signed with PLATFORM key not given system privileges?使用 PLATFORM 密钥签名的 Android APK 未授予系统权限?
【发布时间】:2019-11-26 19:46:16
【问题描述】:

我可以访问 Android 平板电脑的平台密钥和证书。我正在尝试构建一个应用程序并通过执行以下操作以系统级权限安装它:

  1. 使用 GitHub 上名为 platform_import_keystore 的 bash 脚本创建一个包含 platform.pk8 和 platform.x509.pem 的 Java KeyStore 文件。

  2. 在 AndroidManifex.xml 中添加以下内容:

    <uses-permission android:name="android.permission.READ_LOGS"/> android:sharedUserId="android.uid.system"

  3. 使用 Android Studio 中的 Java KeyStore 文件使用 PLATFORM 密钥和证书为 APK 签名。

  4. 安装 APK

当应用程序运行时,系统拒绝 READ_LOGS 权限。 为什么我的应用没有以系统级权限运行?

【问题讨论】:

  • “使用 PLATFORM 证书和密钥签署 APK 有什么好处?” -- 应用可以成功持有平台公开的组件signature级权限。
  • @MarkKeen 所以这可能是因为 AOSP 需要设置一个包含我的应用程序的白名单?
  • 是的 - 使用相同的密钥签名是不够的,我想它需要 3 件事,1)/system/priv-app 文件夹中的应用程序 2)使用平台密钥和 3 签名) 相关权限添加到/etc/permissions/privapp-permissions-xxx-.xml 文件中。根据我自己的经验,我只是通过构建 AOSP(在构建过程中添加 makefile 以自动化这些步骤)而不是在构建操作系统之后完成此操作。

标签: android android-studio apk android-install-apk


【解决方案1】:

对于系统应用程序,@Mark 提到的内容在某种程度上是正确的。 我认为你做错了什么。 我也用系统应用程序试过这个,只要它是用平台密钥库签名的,它就可以工作。现在这是在 Android 8 和 Android 9 上。你没有提到运行设备的 AOSP 版本。

这改变了 AFAIK,所以如果它是 AOSP 10+,它的行为可能会有所不同。

此外,其他 cmets 还缺少 SELinux 的另一个关键。 SELinux 不允许用户构建。 Verity 已启用,您不能拥有 root 访问权限。因此,您不能将应用推送到/system/priv-app/ 或将其推送到/vendor/app/。 如果没有适当的 SE 策略文件,您将无法访问系统资源。您可以自己查看日志,查看avc denied 消息。

我认为总体而言,您所看到的应该符合 AOSP 的安全理念。使用系统密钥签名的应用程序不应获得系统权限。它还需要位于正确的位置,无论是作为特权应用程序还是供应商应用程序。此类应用程序需要列入白名单。 AOSP 源代码中有一个内置脚本,甚至可以生成白名单的权限(它会生成所需的 xml)

有两类系统应用,/system/app//system/priv-app/ 特权应用程序是唯一获得签名级别权​​限的应用程序,根据较新版本的android,您需要在/system/etc/priv_app-permissions_device_name 中启用白名单。

如果您在启用验证时对系统或供应商进行任何更改,首先它们会以只读方式挂载,但不知何故,如果您进行了更改,设备就会自行变砖。这是安全功能。所有自定义开发都需要在 SELinux 的 permissive 模式下在 userdebug 构建中完成,然后需要预定义所有权限,将 SE Policies 微调到最小,只有这样用户构建才能正常运行。用户构建根本不适合 AOSP 开发活动,即使它只是用于测试或试用单个应用。

用户构建是最终用户可以使用的生产类型构建,而不是用于开发。它是最安全的 android 形式,所以如果你有平台密钥,它可能永远都不够。

说了这么多,我敢肯定你没有正确的钥匙。只需从system/priv-app/ 拉取一个应用程序并使用keytool 或类似方法检查它的签名,然后尝试与您的发布apk 匹配。

虽然它有点复杂,而且有点难以解释,而且在 android 中也有不同级别的权限,所以如果你不遵循特定的方法/路径,你将无法让它工作。

【讨论】:

    猜你喜欢
    • 2018-07-10
    • 2015-11-26
    • 2017-05-30
    • 2012-02-22
    • 1970-01-01
    • 2016-03-08
    • 1970-01-01
    相关资源
    最近更新 更多