Verichains

Verichains

技术分析 - 越南部分银行 App 中不当使用私有 iOS API

Thanh Nguyen 2025年3月28日

引言

昨天,越南信息安全社区有报告指出,两款流行的银行 App – BIDV SmartBankingAgribank – 正在使用隐藏/私有的 iOS API 来检测用户 iPhone 上安装的其他 App

最初,TrollStore 的开发者 @opa334 在 infosec.exchange 上提出了这一行为,随后在越南 J2TEAM 论坛的 Facebook 帖子 中也提到了。由于这种行为暗示违反了 Apple 的政策并侵犯了用户隐私,因此迅速引起了争议。

最初的 Facebook 帖子中提到了对我们的 BShield Mobile Security 解决方案的怀疑,导致了一种不准确的误解,影响了 BShield 和 Verichains 的声誉。

因此,我们对提及的银行 App BIDV SmartBanking(v5.2.62,2025年3月14日更新) 和 Agribank Plus(v5.1.8,2025年3月25日更新) 进行了彻底的技术分析,详细信息见本文,其中还探讨了对用户和银行 App 的影响。

_免责声明:
本分析仅出于安全研究、透明度和客户保护的目的而发布。 本文档还旨在澄清有关 BShield 参与的虚假声明,并提高技术透明度。
虽然我们力求准确,但我们不对本博客中包含的信息、产品、服务或相关图形的完整性、准确性、可靠性、适用性或可用性做出任何明示或暗示的陈述或保证。 本文提供的信息不旨在鼓励、指导或支持任何违反 Apple、Google 政策或当前法律法规的行为。 对于因滥用本分析中提供的信息而造成的任何损害或后果,我们概不负责。_

技术分析

TLDR;

据报告,这些 App(BIDV SmartBanking 和 Agribank Plus)使用私有 iOS API SBSLaunchApplicationWithIdentifierAndURLAndLaunchOptions 来检测用户设备上安装的 TrollStore 和其他应用程序。

技术分析表明,由 VNPay 开发的 BIDV SmartBanking(v5.2.62,2025年3月14日更新)和 Agribank Plus(v5.1.8,2025年3月25日更新)使用了商业 Mobile App Shield DexProtector/Licel 和 Dexguard/iXGuard,以及一个可能是名为 "VNPay Runtime Protection" 或 "VNPShield" 的自研代码。

VNPay Runtime Protection 采用了一种机制,利用 iOS 私有 API SBSLaunchApplicationWithIdentifierAndURLAndLaunchOptions 的 side-channel 问题来检测用户 iOS 设备上 App 的存在,并结合非常弱的 XOR 加密来尝试隐藏 API 字符串,以防止被扫描。这种 side-channel 问题在非越狱设备的最新 iOS 版本上有效。根据 Apple Security Bounty Program,此问题可能属于“通过用户安装的 App 进行设备攻击 – 未经授权访问敏感数据”类别,符合获得 5,000 美元漏洞赏金的条件。

利用私有 API 枚举已安装的 App 违反了 Apple App Store 政策,并可能导致 App 被 Apple 删除的重大风险,从而可能影响数百万银行客户。

此政策违规与 Verichains 的 BShield 无关。 应用程序防护的主要目的是主动保护银行应用程序免受用户设备上的恶意应用程序的侵害,防止帐户接管、资金和个人数据被盗。 我们不时会意识到各种新的检测方法,包括利用 N-day 漏洞或私有 API 的某些技巧。 然而,作为一款保护超过 1 亿用户的银行级 Mobile App Protection 解决方案,BShield 严格只使用稳定且合法的检测技术。 我们不使用有风险或危险的方法,确保完全遵守商店政策,并在针对银行应用程序的威胁日益增加的情况下优先考虑用户和企业安全。

混淆机制

为了隐藏它们对私有 API 的使用,这些 App 采用了非常弱的 XOR 加密来混淆敏感字符串,例如 API 名称和应用程序 bundle identifiers。 这种技术可能旨在从静态分析工具中隐藏 API 字符串,从而使其更难检测到 API 的滥用。 在运行时,加密的字符串通过与密钥进行 XOR 运算来解密,从而显示其原始值。

BIDV App 上的密钥是 "94826663"(Agribank App 上是 "41818020"),加密数据存储在数据段中。 解密函数,名为 _RE_Decrypt_10233F108_,可以用 Python 表示为:

从加密数据中解密的字符串片段

从解密的字符串中,我们注意到这段代码很可能是一个名为 VNPay Runtime Protection 的模块的一部分。 回到原始代码,我们观察到以下字符串使用模式:

代码块的工作方式如下:

这可以简化为 v40 = dlopen(XOR_DECRYPT(X), 1),其中 X 是数据段中的加密字符串。

调用解密字符串中的 API 调用的示例代码片段

上面的代码片段等效于从 /usr/lib/libSystem.B.dylib 调用 csops 函数

"/usr/lib/libSystem.B.dylib".csops(a1, a2, a3, a4);

类似地,代码使用相同的方法来调用其他私有 API,例如:

用于检测用户 iOS 设备上安装的 App 的私有 API

检测 TrollStore 和其他 App 的代码片段

该代码通过调用私有 iOS API SBSLaunchApplicationWithIdentifier 并使用 App 的 bundle ID 来检查已安装的应用程序。 通常,开发者通过 schemes(如果支持)启动 App。 但是,如果调用 App 具有 Apple 颁发的授权,则此 API 可以直接启动任何 App。 因此,此私有 API 可用作 side-channel,通过返回的错误代码来验证 App 的存在。

请注意,来自 SpringBoard 的此 API 是一个私有 API,Apple 未正式向开发者提供,因此使用它违反了 Apple Store 政策。

一些目标 App 检查列表:

SBSLaunchApplicationWithIdentifierAndURLAndLaunchOptions 中的断点处的 LLDB 屏幕截图,显示了对 ”com.opa334.Dopamine.roothide” 的检查。

SBSLaunchApplicationWithIdentifierAndURLAndLaunchOptions 是从 SBSLaunchApplicationWithIdentifier 调用的。

私有 API 用作 side-channel,通过返回的错误代码来验证 App 的存在:

这演示了通过私有 iOS 验证 App 是否已安装的 side-channel 漏洞利用,在调用 **VNPShieldBridgingManager.** 的类中执行。

但是,当运行利用此私有 API 来检测用户设备上安装的软件的银行应用程序时,该应用程序的控制台日志将显示错误消息,表明尝试在没有权限的情况下启动应用程序。

Apple Store 政策违规

根据 Apple 的 App Store 审核指南(第 2.5.1 节和 Legal 5),未经明确用户同意使用非公开(私有)API 或隐藏的系统调用会违反数据透明度、用户控制和安全标准,从而损害用户信任。

具体来说,指南 2.5.1 规定 App “可能只能使用公共 API”,并且必须严格按照其预期目的使用这些 API。 任何使用内部、未公开的系统框架或函数的行为都将导致 App 被拒绝或删除。 Apple 强制执行这些准则,以维持 App 的稳定性、保护用户隐私并维护平台安全性。

除了合规性之外,滥用私有 API 可能是一个安全和隐私问题。 Apple 的规则部分是为了防止 App 访问用户未同意的数据或功能。 例如,使用隐藏的系统调用来探测设备的状态可能会侵犯用户隐私和平台安全。 未经许可扫描用户的设备以查找其他已安装的 App 是明确不允许的,并且会损害用户信任。

尝试绕过 iOS 沙盒限制或收集未经授权的数据(例如,已安装的 App 列表)是一项重大违规行为,会对 Apple 和具有安全意识的用户发出严重的危险信号。 这种做法可能会导致 App 被禁止或从 App Store 中删除,从而可能影响数百万银行客户。

在此分析中,我们确认 SBSLaunchApplicationWithIdentifier 私有 API 可用作 side-channel,通过返回的错误代码来验证 App 的存在,这在非越狱设备的最新 iOS 版本上有效。 根据 Apple Security Bounty Program,这应属于“通过用户安装的 App 进行设备攻击 – 未经授权访问敏感数据”,可获得 5,000 美元的漏洞赏金。

结论

技术分析表明,由 VNPay 开发的 BIDV SmartBanking(v5.2.62,2025年3月14日更新)和 Agribank Plus(v5.1.8,2025年3月25日更新)使用了商业 Mobile App Shield DexProtector/Licel 和 Dexguard/iXGuard,以及一个可能是名为 "VNPay Runtime Protection" 或 "VNPShield" 的自研代码。

VNPay Runtime Protection 采用了一种机制,利用 iOS 私有 API SBSLaunchApplicationWithIdentifierAndURLAndLaunchOptions 的 side-channel 问题来检测用户 iOS 设备上 App 的存在,并结合非常弱的 XOR 加密来尝试隐藏 API 字符串,以防止被扫描。这种 side-channel 问题在非越狱设备的最新 iOS 版本上有效。根据 Apple Security Bounty Program,此问题可能属于“通过用户安装的 App 进行设备攻击 – 未经授权访问敏感数据”类别,符合获得 5,000 美元漏洞赏金的条件。

利用私有 API 枚举已安装的 App 违反了 Apple App Store 政策,并可能导致 App 被 Apple 删除的重大风险,从而可能影响数百万银行客户。

此政策违规与 Verichains 的 BShield 无关。 应用程序防护的主要目的是主动保护银行应用程序免受用户设备上的恶意应用程序的侵害,防止帐户接管、资金和个人数据被盗。 我们不时会意识到各种新的检测方法,包括利用 N-day 漏洞或私有 API 的某些技巧。 然而,作为一款保护超过 1 亿用户的银行级 Mobile App Protection 解决方案,BShield 严格只使用稳定且合法的检测技术。 我们不使用有风险或危险的方法,确保完全遵守商店政策,并在针对银行应用程序的威胁日益增加的情况下优先考虑用户和企业安全。