FreeBuf|Alerts在macOS上实现持久化,如何利用Calendar( 二 )


首先 , 我们需要配置Mythic , 然后获取ApfellPayload 。 Mythic提供了比较详细的配置文档 , 具体请参考这篇【文档】 。 接下来 , 我们需要使用jsimport命令将功能导入到Apfell中:
FreeBuf|Alerts在macOS上实现持久化,如何利用Calendar
文章图片
此时 , 我们的脚本代码已经嵌入到了ApfellPayload中了 。 现在 , 我们需要枚举用户的日历 , 这里可以使用list_calendars函数来实现 , 不过这个操作需要用户授权:
FreeBuf|Alerts在macOS上实现持久化,如何利用Calendar
文章图片
这里我们选择Automator日历 , 记录下对应的UID 。 接下来 , 我们使用JXA中的persist_calalert函数来创建新的事件 。 该函数调用方式如下所示:
persist_calalert("MyEvent",//Title"/Users/rookuu/Library/Apfell.app",//TargetApp60,//Delayinseconds"daily",//Frequencyofrecurrence1,//Intervalofrecurrence3,//Numberofevents"711CE045-7778-4633-A6FA-27E18ADD0C17"//UIDofthecalendar)接下来 , 进程将会创建新的事件 , 然后将其插入到日历中 。 Delayinseconds参数表示第一个事件被触发的时间 , 后面的参数分别代表持久化操作触发的频率、间隔以及事件数量 。 在我们的演示样例中 , 我们将连续三天每天创建一个新的事件 , 事件触发时便会执行我们的恶意软件:
FreeBuf|Alerts在macOS上实现持久化,如何利用Calendar
文章图片
在Apfell中开始攻击后 , 我们可以在日历中看到操作结果 。 首次事件将在2020年10月9日18:53触发 , 执行指定的应用程序 。 在这个演示样例中 , 我们将执行ApfellPayload , 并且在指定的时间段内拿到Shell , 实现持久化感染 。
macOS沙箱至此 , 我们并没有考虑到macOS系统上的沙箱机制 , 因此我们还要想办法在Calendar沙箱外执行代码 。
FreeBuf|Alerts在macOS上实现持久化,如何利用Calendar
文章图片
但是经过分析之后 , 我们发现我们并不需要关心沙箱逃逸的问题 , 因为我们一开始就没有在沙箱里面 。 虽然Calendar是一个沙箱化进程 , 但通过警报方式执行的应用并没有被沙箱化处理 。 如上图所示 , 我们执行的应用CalendarAlarmSandboxTest并没有在沙箱中 。
参考资料https://research.nccgroup.com/2020/05/05/exploring-macos-calendar-alerts-part-1-attempting-to-execute-code/))
https://github.com/FSecureLABS/CalendarPersist?
FreeBuf|Alerts在macOS上实现持久化,如何利用Calendar
文章图片