Android Enterprise Work Profile 必需应用替换

Tip

学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE) 学习和实践 Azure 黑客技术:HackTricks Training Azure Red Team Expert (AzRTE)

支持 HackTricks

攻击面

Android Enterprise Work Profiles 实现为 次级 Android 用户(BYOD 示例:user 0 = personal,user 1 = work)。每个用户拥有独立的 /data/user/<id> 目录树、系统应用、Play Services 实例以及由 MDM 维护的策略对象。当像 Microsoft Intune 这样的 MDM 将某个应用标记为 Work Profile 的 required 时,Work-Profile Play Store (Finsky) 会周期性地确认该包是否存在,若缺失则自动安装。

即使在修复 CVE-2023-21257(当设置了 DISALLOW_INSTALL_APPSDISALLOW_DEBUGGING_FEATURES 时阻止 ADB sideload)的补丁之后,以下链仍允许攻击者用任意代码替换任何 Intune 要求的 Work Profile 应用

  1. 利用 Android Studio 的 “Install for all users” 路径放置一个看起来像是被管理包更新的恶意 APK。
  2. 等待 MDM 检测到必需应用缺失。Intune 会触发 Work-Profile 的 Finsky 实例重新安装该应用。
  3. Finsky 比较已放置的 APK 版本与 Play Store 的版本,并静默安装 最高的 versionCode,从而绕过原先的限制。

侦察与前提检查

  • 确认多用户布局和用户 ID:
adb shell pm list users
# Expect user 0 = Owner, user 1 = Work profile (or higher if multiple profiles exist)
  • 直接安装到工作用户会因策略而失败(预期错误):
adb install --user 1 legit.apk
# java.lang.SecurityException: Shell does not have permission to access user 1
  • 你必须临时物理接触一台已解锁的 BYOD,以启用 Developer Options + USB debugging。
  • 识别一个标记为 required 的 Work-Profile 应用的 package name(例如 com.workday.workdroidapp)。

武器化 Android Studio 的多用户安装器

Android Studio 的 Run/Debug 配置仍然可以使用 INSTALL_ALL_USERS 标志推送构建。在运行之前,启用 Deploy as instant appInstall for all users

构建恶意负载,使用与受管理应用相同的 package name 并设置一个 更大的 versionCode,这样 PackageManager/Finsky 会将其视为较新的版本:

android {
namespace = "com.workday.workdroidapp"
defaultConfig {
applicationId = "com.workday.workdroidapp"
versionCode = 900000004
versionName = "9000000004.0"
}
}

When Android Studio deploys:

  1. Personal user (0) 正常安装恶意包。
  2. Work Profile user (1) 在临时暂存区接收 APK 并尝试将其视为更新。
  3. CVE-2023-21257 的逻辑检测到该用户被限制 → 安装被拒绝,但合法的受管应用被标记为已卸载,且暂存的 APK 保持缓存。

Intune/Finsky auto-install bypass

Within ~1–10 minutes (policy refresh interval):

  1. Intune/Company Portal 检测到 Work Profile 中缺少必需软件包。
  2. 请求 Work-Profile 的 Finsky 实例重新安装它。
  3. 在版本解析期间,Finsky 比较:
  • Play Store metadata for com.workday.workdroidapp.
  • 之前安装尝试所暂存的本地 APK。
  1. 由于本地构建具有最高 versionCode,Finsky 将其视为最新版本并将其安装到受限制的 Work Profile 中,而不重新应用 DISALLOW_INSTALL_APPS / DISALLOW_DEBUGGING_FEATURES 检查

恶意二进制现在以真实包名驻留在 Work Profile 中,并被 MDM 视为合规。

Post-exploitation opportunities

  • Work-profile data access – 其他企业应用继续信任绑定到已替换包的 Intents/content providers,从而使内部数据被窃取并将数据从 Work Profile 隐蔽地外传到攻击者的基础设施。
  • Per-app VPN hijack – 如果被替换的包被映射到 Intune 的 per-app VPN(MS Tunnels + Defender),恶意构建会自动继承该 VPN 配置,从而让攻击者控制的进程直接访问内部主机。
  • Persistence – 因为 MDM 现在认为必需应用已安装,它会在用户或防御者移除该应用时重新安装恶意构建,从而在 BYOD Work Profiles 上提供长期立足点。

References

Tip

学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE) 学习和实践 Azure 黑客技术:HackTricks Training Azure Red Team Expert (AzRTE)

支持 HackTricks