网站开发工程师自学,建立网站目录结构时应注意哪几个方面?,遵义网站制作一般多少钱,杭州建设工程网背景介绍近期#xff0c;我一直在研究macOS上的一些持久化技术#xff0c;尤其是如何利用低等级用户权限来修改文件以影响用户交互。对于macOS终端用户来说#xff0c;交互最频繁的当属Dock了。在我的研究过程中#xff0c;我发现了一个plist文件#xff0c;它可以控制App… 背景介绍近期我一直在研究macOS上的一些持久化技术尤其是如何利用低等级用户权限来修改文件以影响用户交互。对于macOS终端用户来说交互最频繁的当属Dock了。在我的研究过程中我发现了一个plist文件它可以控制Apple D 对于macOS终端用户来说交互最频繁的当属Dock了。ock应用程序是否可见。在检查plist文件中的值时我就想判断是否可以通过修改这些值来将合法程序替换成我们的恶意程序并执行恶意代码。最终我开发出了一个包含PersistentJXA项目的DockPersist.js脚本文件并且能够将Dock中最常见的Safari和Chrome替换成我们的恶意程序不过这种方法适用于其他任何应用程序。一旦用户点击了Safari或Chrome图标我们的恶意软件就会运行因为这里的Dock图标充当了实际应用程序的快捷方式。接下来我们将在这篇文章中介绍这项技术的实现方式。环境配置这种持久化方法需要将恶意程序上传到目标设备中不过我们有很多种方法绕过Gatekeeper保护机制并实现恶意程序的上传压缩应用程序Bundle在Mythic代理中使用上传命令然后解压至目标路径压缩应用程序Bundle使用curl命令在目标设备中拉取程序然后解压至目标路径压缩应用程序Bundle进行base64编码然后在目标设备中解码并解压至目标路径在这里首先使用Automator创建一个应用程序这个应用程序会在后台打开Safari然后运行我们的Apfell Payload为了不引起终端用户的察觉我用Safari罗盘图标替换掉了Automator图标。当然了我们也可以使用Xcode来生成更加复杂的应用程序。接下来压缩应用程序Bundle并上传至目标系统然后解压至/Users/Shared/路径下此时我们就可以调用持久化方法了。这里需要注意的是考虑到plist文件的格式这里要求伪造的应用程序命名为“Google Chrome”或“Safari”并且存储路径为/Users/Shared/然后修改Safari64和Chrome64变量来指向该地址。调用持久化方法将脚本导入至Apfell代理中调用DockPersist函数该函数可以接收三个参数应用程序名称应用程序Bundle ID重载Dock选项Bundle ID存在于Info.plist文件中可以使用下列命令直接获取/usr/libexec/PlistBuddy -c Print CFBundleIdentifier ~/FakeApp/Safari.app/Contents/Info.plist检测技术Crescendo是一款在单主机中快速捕捉事件的优秀工具Crescendo也是macOS上的一款实时事件查看器它可以利用苹果的终端安全框架ESF来实现其功能。ESF能够监控系统事件并识别潜在的恶意活动它相当于Windows中的ETW。在Crescendo的帮助下我们可以轻松查看持久化执行所生成的文件和进程事件。比如说下列ESF事件将会被映射至Crescendo中ES_EVENT_TYPE_AUTH_EXEC process::execES_EVENT_TYPE_NOTIFY_EXIT process::exitES_EVENT_TYPE_NOTIFY_CREATE file::createES_EVENT_TYPE_NOTIFY_KEXTLOAD process:kext::loadES_EVENT_TYPE_NOTIFY_MOUNT file::mountES_EVENT_TYPE_NOTIFY_UNLINK file::unlinkES_EVENT_TYPE_NOTIFY_RENAME file::renameES_EVENT_TYPE_NOTIFY_UIPC_CONNECT network::ipcconnectES_EVENT_TYPE_NOTIFY_FORK process::forkES_EVENT_TYPE_NOTIFY_EXEC可以捕捉这种持久化方法的各种事件如果还需要覆盖其他事件我强烈推荐使用Xorrior的Appmon。以下几个因素针对的是持久化方法的运行因为实际的恶意应用程序组件将根据攻击者开发的内容而有所不同。首先plutil可以将Dock plist转换为XMLXML格式可以轻松修改除此之外temp9876文件的创建也会被记录到日志中。DockPersist.js会在/private/tmp/目录下创建一个随机名称的文件该脚本将修改plist文件的XML版本并将其存储至这个随机文件名中。在这里temp0wsn4p包含了XML格式的恶意plist所以我们可以使用正确的格式来修改代码格式版本并在Dock中正确加载接下来DockPersist.js会删除~/Library/Preferences/com.apple.dock.plist路径下的plist文件ESF会捕捉到我们存储新的恶意plist文件的行为~/Library/Preferences/com.apple.dock.plist最后因为我们在函数调用中重载了Dock因此killall命令将会被调用这些事件都可以作为构建检测机制的入口点这里最重要的就是plutil和killall了。除此之外还可以利用文件创建、删除和修改事件进行检测。正常执行我们已经知道了如何使用ESF来捕捉恶意行为了那么我们如何让ESF来显示正常执行行为呢在正常操作中cfprefsd会触发com.apple.dock.plist上的file::rename(文件重写)事件当用户通过GUI手动修改Dock时同样会触发这些事件防护绕过攻击者可以在目标设备外执行plist修改操作然后再上传到目标Dock plist路径下这样可以降低被检测到的风险。但是这同样会触发file::rename事件不过它不会使用到cfprefsd进程。可视化指标我们的PoC应用程序执行之后会在Dock中出现两个Safari图标第一个Safari是恶意程序它存在于plist文件中的persistent-apps字段第二个就是真实的Safari了它存在于plist文件中的recent-apps字段。总结在这篇文章中我们介绍了一种在macOS上的持久化机制它有点类似于在Windows中利用.LNK文件实现持久化的方法。更重要的是我们希望通过这篇文章来帮助广大研究人员开发出相应的检测技术。精彩推荐