查看原文
其他

利用遭苹果弃用的不安全授权API以根权限运行代码

代码卫士 2022-11-01


作者:Michael Mimoso

翻译:360代码卫士团队



前言



目前,开发人员更新macOS中的app和服务时仍然会使用由第三方应用程序调用且已遭苹果公司弃用的授权API。但由于本地攻击者能利用一个安全问题提升至根权限,因此使用这个API会产生问题。


多款应用程序仍在使用遭弃用的API



这个问题由著名的Mac安全研究员Patrick Wardle在DEF CON会议上提出。继续使用AuthorizationExecuteWithPrivilegesAPI的另外一个严重问题是,流行应用程序的安装程序如Slack、Google Chrome、Dropcam、VMware Fusion、多个安全软件更新器以及开源更新库Sparkle,都在更新过程中调用这个已遭弃用的API。


不检查执行内容是否遭修改且窃取用户凭证



Wardle解释称,API能导致系统显示由一个单独守护进程处理的熟悉的验证对话框,也就是说用户不必以密码的方式委托应用安装程序。操作系统会通过这个信任,而在安装时需要管理权限或根权限的任何功能都可能会这么做。


然而,AuthorizationExecuteWithPrivileges并不会验证将要在机器上执行的内容是否被恶意修改。因此,已经出现在计算机上并运行代码的攻击者能够等待第三方安装程序调用这个不安全的授权API,然后在用户输入凭证时窃取凭证。


Wardle指出,“在正常情况下,这些应用程序会请求操作系统以根权限执行某些代码。这些代码可由任何人写入并且存在于Temp或者下载的应用包。已经有权限访问这个对话框的本地代码、恶意软件或本地攻击者能更改以根权限执行的内容。由于系统不会验证请求执行的应用程序是否被修改,当用户输入凭证并点击‘安装’时,系统会执行所请求执行的任何内容,即使内容被恶意修改也不例外。”


苹果自家的安装程序也受影响



Wardle表示,这种情况也波及苹果公司自己的且受单独但相关问题影响的安装程序。他解释称,当用户双击一个.pkg文件时,苹果公司的installer.app会在文件中执行并查找插件并将插件复制到Temp中,然后将这些库加载到由苹果公司签名且受操作系统信任的安装程序app的进程上下文中。Wardle指出本地攻击者能创造一个竞争条件并在安装包安装在本地系统前进行修改。恶意的且未被签名的dylibs并未由安装程序app验证,因此会被盲目加载。这些恶意的dylibs能创建将被操作系统信任的且可被轻易伪造的验证弹出消息。用户随后会输入凭证,在无意间授权恶意代码以根权限运行。


替代方案SMJobBless复杂难用成本高



苹果在2013年弃用了AuthorizationExecuteWithPrivilegesAPI,目前建议开发人员使用SMJobBless。


SMJobBless通过将请求安装的内容复制到权限更高目录的方式运行,而且一旦位于安全目录中,SMJobBless会加密验证是否遭篡改,随后请求用户进行验证。


然而,当开发人员选择SMJobBless时就会面临更加复杂的场景。首先它要求拥有苹果开发者证书的开发人员执行必要的加密签名。Wardle指出,因为SMJobBless成本高且非常复杂,而遭弃用的API只有三行代码非常简单因此所有人都在使用。


Wardle表示他私下已将问题告知苹果公司称安装程序加载未签名的库,但苹果公司尚未回应。他还指出他将与Chrome有关的API问题告知谷歌,谷歌回应称已意识到该问题但目前“尚未有好的替代方案”,包括SMJobBless在内。Wardle指出,在理想情况下,人人都会使用安全替代方案,或者苹果会提供一个更易于使用的安全替代方案。但谷歌如此回应,说明当前情况难以改观。



本文由360代码卫士编译,不代表360观点,转载请注明“转自360代码卫士www.codesafe.cn”。



360代码卫士    长按二维码关注我们!

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存