macOS Dirty NIB
**有关该技术的更多详细信息,请查看原始帖子:https://blog.xpnsec.com/dirtynib/**。**以下是摘要:
NIB文件是苹果开发生态系统的一部分,用于定义应用程序中的UI元素及其交互。它们包含诸如窗口和按钮之类的序列化对象,并在运行时加载。尽管它们仍在使用中,但苹果现在倡导使用Storyboards来更全面地可视化UI流程。
NIB文件的安全问题
需要注意的是NIB文件可能存在安全风险。它们有可能执行任意命令,而对应用程序中NIB文件的更改不会阻止Gatekeeper执行该应用程序,构成重大威胁。
Dirty NIB注入过程
创建和设置NIB文件
初始设置:
使用XCode创建一个新的NIB文件。
向界面添加一个对象,并将其类设置为
NSAppleScript
。通过用户定义的运行时属性配置初始
source
属性。
代码执行小工具:
该设置便于按需运行AppleScript。
集成一个按钮来激活
Apple Script
对象,特别触发executeAndReturnError:
选择器。
测试:
用于测试目的的简单Apple Script:
在XCode调试器中运行并单击按钮进行测试。
针对应用程序的攻击(示例:Pages)
准备:
将目标应用程序(例如Pages)复制到一个单独的目录中(例如
/tmp/
)。启动应用程序以规避Gatekeeper问题并缓存它。
覆盖NIB文件:
用精心制作的DirtyNIB文件替换现有的NIB文件(例如About Panel NIB)。
执行:
通过与应用程序交互(例如选择
About
菜单项)来触发执行。
概念验证:访问用户数据
修改AppleScript以访问和提取用户数据,例如照片,而无需用户同意。
代码示例:恶意.xib文件
访问并查看一个恶意.xib文件的示例,演示执行任意代码。
处理启动约束
启动约束阻止应用程序从意外位置(例如
/tmp
)执行。可以识别未受启动约束保护的应用程序,并针对它们进行NIB文件注入。
其他macOS保护措施
从macOS Sonoma开始,限制了App捆绑包内部的修改。但是,早期的方法涉及:
将应用程序复制到不同位置(例如
/tmp/
)。重命名应用程序捆绑包中的目录以绕过初始保护。
运行应用程序以向Gatekeeper注册后,修改应用程序捆绑包(例如用Dirty.nib替换MainMenu.nib)。
将目录重新命名并重新运行应用程序以执行注入的NIB文件。
注意:最近的macOS更新通过防止Gatekeeper缓存后的应用程序捆绑包内文件修改来减轻了此漏洞,使其失效。
最后更新于