Android SuperUser应用程序如何检测应用程序请求root权限?

15
我正在编写一个应用程序,将使用su在Linux内核中执行一些命令。我想知道SuperUser如何确定应用程序正在请求root权限?此外,是否有已知的方法(通过混淆)可以绕过此检查?
换句话说: Android / (SuperUser)如何知道应用程序需要root权限,尽管在Android清单文件中没有显式请求任何权限。
从安全角度来看,我想了解这个工作的详细信息,以确保恶意应用程序无法绕过SuperUser。
3个回答

18

超级用户系统分为两个部分 - superuser二进制文件(终端上的su)和SuperUser.apk(使用su管理应用程序的Android应用程序)。查看su二进制文件的源代码时,当您通过

Process p = Runtime.getRuntime().exec("su");

它通过Android消息管理器发布意图,表明应用程序已请求获得超级用户访问权限。
sprintf(command, "/system/bin/am broadcast -a '%s' --es socket '%s' --ei caller_uid '%d' --ei allow '%d' --ei version_code '%d' > /dev/null",action, socket_path, ctx->from.uid, allow, VERSION_CODE);  

经理应用程序会监听此意图,并要求用户处理请求(允许/拒绝)。

根据您的解释,似乎 su 广播一条消息询问 Superuser.apk 是否应允许 root 访问。那么我想知道,是什么阻止其他应用程序响应该请求而不是 Superuser.apk?(如果可能的话,这将是一个巨大的漏洞,所以我猜这是不可能的;只是好奇)此外,有什么保护措施可以防止应用程序以虚假名称请求 root 权限吗?(例如,恶意.apk 以 awesome-root-only-app.apk 的名称请求 root 权限,以欺骗用户授予访问权限) - youen

16

当您运行这个命令时:

Process p = Runtime.getRuntime().exec("su");

你正在尝试执行 "su",这只有拥有超级用户权限的应用程序才能执行!因此,每当Android检测到您正在尝试运行“su”时,它会得出需要超级用户权限的结论。

此外,Android保留了一些领域,只有Android系统可以访问。如果您的应用程序试图访问那里的某些内容,Android将理解需要超级用户权限。

例如,假设您想修改主机文件或修改某些网络配置,比如DHCP。或者您正在尝试从系统区域访问文件,例如/data,Android将检查该应用程序是否具有超级用户权限,然后才会授予其访问此类内容的权限。

关于恶意软件,每当一个应用程序需要超级用户访问权限时,系统将提示用户授予或拒绝该应用程序的超级用户权限。只有在此之后应用程序才能获得root访问权限。因此,由用户决定是否接受或拒绝任何应用程序的root访问权限。(系统将提示用户每次应用程序尝试访问需要root访问权限的内容时,除非您告诉系统记住您对特定应用程序接受或拒绝的选择。)

PS:您可能考虑查看超级用户应用程序网站


2
Superuser 应用程序如何/为什么只充当 Su 权限提供者?它是如何成为负责人的? - waqaslam
@Waqas 这可能会回答你的问题 http://androidsu.com/superuser/ 只需浏览该网站。我将在答案中更新链接。对其他人可能有帮助。 :) - Suraj Bajaj
是的,我观察到了这种行为。但仍不清楚 'SuperUser' 应用程序是如何发现这个问题的。SuperUser 是否像一个监视器一样检查运行中的所有其他应用程序的行为呢? - asudhak
@asudhak 我会说这更像是防火墙。所有的 su 请求都要经过它。 - Suraj Bajaj
1
su 只是调用 superuser.apk。就这样。 - Wei Liu
显示剩余2条评论

6
实际上很简单。原生的Android甚至没有susuperuser。当您root设备时,会以root权限运行shell。然后安装su二进制文件和superuser.apk。安装完成后将shell设置回普通权限。现在,所有这些仅限root的应用程序都可以调用su请求root访问权限。
当运行su时,它会向superuser.apk发送一条消息,询问您是否要提升权限。 su二进制文件和superuser.apk受到Android正常沙盒保护。请注意,一旦您授予应用程序root权限,它就可以任意使用,包括覆盖su并使用自己的版本。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接