macOS恶意软件驻留技术分析
2019-06-25 09:20:00 Author: xz.aliyun.com(查看原文) 阅读量:133 收藏

本文分析研究人员之前见过的macOS恶意软件驻留技术。

不管是加密货币挖矿、广告恶意软件劫持、或监听用户的恶意软件都有一个共同点:就是需要在终端上实现驻留。在苹果macOS平台上,攻击者有多种方法来实现驻留。下面对研究人员之前见过的macOS恶意软件驻留技术进行分析。

在macOS上实现驻留的最常见方式是通过LaunchAgent。Mac用户在Library文件夹下都有一个LaunchAgent文件夹,用来指定用户每次登陆后要执行的代码。系统还有一个自己的LaunchAgents文件夹。因为该文件夹是由于macOS自己管理的,默认请求下恶意软件不会进入该文件夹。

LaunchAgents以property list file的形式来指定要执行的文件,或包含要执行的命令。

因为用户LaunchAgents安装过程中不需要权限,因此这是最简单也是最常见的驻留方式。但在OSX 10.7 Lion之后版本,用户默认情况下隐藏了父Library文件夹,使攻击者更加容易地可以隐藏代理。

用户可以通过手动检查的方式来找出该库,但企业安全解决方案应当监控文件夹的内容,并对写入该位置的恶意进程进行拦截或发出告警。

LaunchDaemons只存在于计算机或系统级,从技术上讲是为驻留代码预留的,因为不与用户交互,因此对恶意软件来说是完美的。攻击者将daemon写入/Library/LaunchDaemons需要管理员权限。因为大多数mac用户都是管理员用户,所以习惯上会在请求认证时为软件提供认证来安装组件。在下图中,计算机被三个不同的、恶意LaunchDaemons感染了。

因为LaunchDaemons运行在开始菜单中,因此安全软件意识到什么daemon在运行,以及什么时间写新的daemon非常重要。作为System LaunchAgents,System LaunchDaemons是受SIP保护的,所以首先要监控的位置是/Library/LaunchDaemons

不要认为你认识的标记就不是恶意的。一些指向未签名代码的合法LaunchDaemons可能会被一些恶意代码所替换。比如,Wireshark就说使用了LaunchDaemon /Library/LaunchDaemons/org.wireshark.ChmodBPF.plist
执行未签名代码的路径为:
/Library/Application Support/Wireshark/ChmodBPF/ChmodBPF
苹果自己还使用并不会立刻清除的LaunchDaemon:
/Library/LaunchDaemons/com.apple.installer.cleanupinstaller.plist
它指向了可能会被恶意代码替换的 /macOS Install Data 文件夹中的可执行文件。

有了全新后,攻击者就可以修改这些property plist的程序参数或指向的可执行文件来获取驻留。因为这些程序会以root权限运行,安全解决方案好像也没有什么用处。

Profiles一般是组织使用,允许IT管理员管理用户机器,但被恶意软件作者误用了。随着Profiles通过邮件或网站传播,诱使用户安装只是社会工程的一个元素。

配置profiles使用户使用特定的浏览器设置、DNS代理设置、VPN设置。许多其他的payload都有可能使其被滥用。

用户也可以在System Preferences Profiles面板查看Profiles,管理员也可以枚举/Library/Managed Preferences文件夹来查看Profiles。但在profiles没有安装的系统中是不会存在System Preferences Profiles面板和文件夹的。

恶意软件开发者还盯上了有漏洞的cron作业。虽然苹果已经宣布新的cron作业要求用户交互在10.15 Catalina上安装,但这并不影响攻击者使用它作为一种驻留的方法。当用户已经被诱使安装了恶意软件,那么用户提示就已经不是一种有效的安全措施了。AdLoad 和Mughthesec恶意软件就使用恶意cron作业来实现驻留。

内核扩展被合法软件广泛用于实现驻留,比如PUP软件MacKeeper。开源的keylogger logkext也已经出现很多年了,但kexts并不是恶意软件常用的方法,因为相对来说比较难创建、缺乏隐蔽性、很容易被移除。

苹果对Login Items做出的修改对恶意软件驻留带来了新的讲话。Login Items很容易就可以通过System Preferences工具进行枚举,但苹果的一个新机制可以使安装的应用程序在登陆时自启动,即将Login Item加入到bundle中。虽然该机制的目的是让合法开发者通过app的用户接口位logIn项目提供控制,广告恶意软件和PUP软件开发人员滥用该机制作为一种驻留机制,因为对用户来说,可靠地枚举出哪些应用含有login item是很难的。
对普通用户来说枚举所有的Login Items很不简单,但对admin来说就很简单了,只需要分析下面的文件就可以了:
~/Library/Application Support/com.apple.backgroundtaskmanagementagent/backgrounditems.btm

对AppleScript来说,Apple最有用的工具“swiss army knife”可以提供一些驻留的方法。第一个是使用Folder Actions,允许攻击者执行代码,甚至可以远程读取内容到内存中。这是一种聪明的无文件恶意软件攻击方法。

还有一种方法是利用Mail规则来完成驻留,具体是发送给受害者一个精心伪造的邮件来触发代码。该方法是静默的,而且可以绕过许多监测工具。防护者可以通过分析ubiquitous_SyncedRules.plist文件和SyncedRules.plist文件来检查是否有可疑的mail规则。比如,快递的bash脚本grep -A1 "AppleScript" ~/Library/Mail/V6/MailData/SyncedRules.plist
可疑枚举所有调用AppleScripts的Mail规则。然后检查是否有恶意内容。

rc.commonlaunchd.conf已经不支持在macOS上运行了,在10.9 Mavericks版本之后就移除了对StartupItems的支持。纵然如此,一些老旧的nix tricks仍然在被使用。包括使用jobsperiodics和loginhooks,以及emond服务。

Periodics是常被用于驻留的系统脚本,可以计划每天、每周和每月运行。Periodics的内容保存在文件夹etc/periodic中。

列出每个子文件夹的内容可以看出periodics的标准集。如果没有发现其他内容,那么这些内容都是可疑的,应该对其进行检查。

如下图所示,uptime脚本可以在没有用户交互或通知的情况下每天运行。

LoginHooks和LogoutHooks目前已经很少使用了,但在macOS Mojave中仍然是实现驻留的一种很好的方法。从名字就可以看出,当用户登入或登出的时候这些机制就会运行。

写这些hook很简单,但是检查这些文件是否存在也很简单。下面的命令就可以返回是否有LoginHook或LogoutHook值的结果:
sudo defaults read com.apple.loginwindow
如果有,就表明这是一个到该脚本的命令或路径,然后考虑是否进一步调查。

at jobs的知名度就相对低一些了。但是运行一次后,虽然默认是不启用的,但是也有一些方法可以在系统重启时运行代码。单次使用可能并没有什么问题,因为at jobs每次结束都会被重写,但许多用户尤其是没有经验的管理员可能并不会注意到jobs。
可以通过枚举/var/at/jobs目录来检查计划任务的at jobs。Jobs的前缀有一个字母a,名字为十六进制风格,如下图所示:

在OSX 10.5 Leopard中,苹果引入了一种新的名为emond的登入机制。看起来emond并没有完全开发完成就被苹果公司放弃了,但在macOS 10.14 Mojave中仍然是可用的。
2016年,研究人员James Reynolds对emond和其能力进行了综合型的分析,并得出结论:在perl脚本中登入、运行命令或发送邮件很容易,那么为什么我要用emond而不是脚本呢?
而且很多mac admin可能并不知道该服务,但是对攻击者来说,管理员不了解的驻留机制或许是最好的方法。
监测emond的恶意使用并不难,只需要运行以下脚本就可以了:
/private/var/db/emondClients
管理员也可以很容易地进行检查来查看攻击者是否在该位置放置了恶意文件:

因为emond在很多环境中是没有合法使用的理由的,所以emondClient目录中找到的文件都是可疑的。

从上面的分析可疑看出,在macOS中完成驻留有很多的方法。因为管理员应该多了解一些macOS中驻留的方法并及时发现恶意内容,也可以使用一些安全产品来检测和防止macOS恶意软件驻留。
https://www.sentinelone.com/blog/how-malware-persists-on-macos/


文章来源: http://xz.aliyun.com/t/5463
如有侵权请联系:admin#unsafe.sh