macOS Auto Start

chevron-right从零开始学习AWS黑客技术,成为专家 htARTE(HackTricks AWS红队专家)arrow-up-righthashtag

支持HackTricks的其他方式:

本节内容主要基于博客系列超越传统的LaunchAgentsarrow-up-right,旨在添加更多自动启动位置(如果可能的话),指出哪些技术在最新版本的macOS(13.4)中仍然有效,并指定所需的权限

沙盒绕过

circle-check

Launchd

位置

  • /Library/LaunchAgents

  • 触发器:重启

  • 需要Root权限

  • /Library/LaunchDaemons

  • 触发器:重启

  • 需要Root权限

  • /System/Library/LaunchAgents

  • 触发器:重启

  • 需要Root权限

  • /System/Library/LaunchDaemons

  • 触发器:重启

  • 需要Root权限

  • ~/Library/LaunchAgents

  • 触发器:重新登录

  • ~/Library/LaunchDemons

  • 触发器:重新登录

描述与利用

launchd是在启动时由OX S内核执行的第一个 进程,也是在关机时最后一个完成的。它应该始终具有PID 1。此进程将读取和执行在以下ASEP plist中指示的配置:

  • /Library/LaunchAgents:由管理员安装的每个用户代理

  • /Library/LaunchDaemons:由管理员安装的系统范围守护程序

  • /System/Library/LaunchAgents:由Apple提供的每个用户代理

  • /System/Library/LaunchDaemons:由Apple提供的系统范围守护程序

当用户登录时,位于/Users/$USER/Library/LaunchAgents/Users/$USER/Library/LaunchDemons中的plist将以登录用户的权限启动。

代理和守护程序之间的主要区别在于代理在用户登录时加载,而守护程序在系统启动时加载(因为有些服务如ssh需要在任何用户访问系统之前执行)。此外,代理可能使用GUI,而守护程序需要在后台运行。

有时需要在用户登录之前执行代理,这些被称为PreLoginAgents。例如,这对于在登录时提供辅助技术很有用。它们也可以在/Library/LaunchAgents中找到(请参见此处arrow-up-right的示例)。

circle-info

新的守护程序或代理配置文件将在下次重启后加载,或使用launchctl load <target.plist>。也可以使用launchctl -F <file>加载没有扩展名的.plist文件(但这些plist文件在重启后不会自动加载)。 也可以使用launchctl unload <target.plist>卸载(指向它的进程将被终止)。

为了确保没有任何东西(如覆盖)阻止代理或守护程序运行,运行:sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.smdb.plist

列出当前用户加载的所有代理和守护程序:

circle-exclamation

shell 启动文件

Writeup: https://theevilbit.github.io/beyond/beyond_0001/arrow-up-right Writeup (xterm): https://theevilbit.github.io/beyond/beyond_0018/arrow-up-right

位置

  • ~/.zshrc, ~/.zlogin, ~/.zshenv.zwc, ~/.zshenv, ~/.zprofile

  • 触发条件:使用 zsh 打开终端

  • /etc/zshenv, /etc/zprofile, /etc/zshrc, /etc/zlogin

  • 触发条件:使用 zsh 打开终端

  • 需要 root 权限

  • ~/.zlogout

  • 触发条件:使用 zsh 退出终端

  • /etc/zlogout

  • 触发条件:使用 zsh 退出终端

  • 需要 root 权限

  • 可能还有更多在:man zsh

  • ~/.bashrc

  • 触发条件:使用 bash 打开终端

  • /etc/profile(未生效)

  • ~/.profile(未生效)

  • ~/.xinitrc, ~/.xserverrc, /opt/X11/etc/X11/xinit/xinitrc.d/

  • 触发条件:预期与 xterm 触发,但未安装,即使安装后也会出现此错误:xterm: DISPLAY is not set

描述与利用

当初始化 shell 环境,如 zshbash 时,会运行某些启动文件。macOS 目前使用 /bin/zsh 作为默认 shell。当启动终端应用程序或通过 SSH 访问设备时,会自动访问此 shell。虽然 bashsh 也存在于 macOS 中,但需要显式调用才能使用。

我们可以通过 man zsh 阅读 zsh 的 man 页面,其中有关启动文件的详细描述。

重新打开的应用程序

triangle-exclamation

Writeup: https://theevilbit.github.io/beyond/beyond_0021/arrow-up-right

位置

  • ~/Library/Preferences/ByHost/com.apple.loginwindow.<UUID>.plist

  • 触发器:重新启动时重新打开应用程序

描述和利用

所有要重新打开的应用程序都在 plist 文件 ~/Library/Preferences/ByHost/com.apple.loginwindow.<UUID>.plist 中。

因此,要让重新打开的应用程序启动您自己的应用程序,您只需要将您的应用程序添加到列表中

UUID 可以在列出该目录或使用 ioreg -rd1 -c IOPlatformExpertDevice | awk -F'"' '/IOPlatformUUID/{print $4}' 找到。

要检查将要重新打开的应用程序,您可以执行以下操作:

要将应用程序添加到此列表中,您可以使用:

终端偏好设置

位置

  • ~/Library/Preferences/com.apple.Terminal.plist

  • 触发器: 打开终端

描述与利用

在**~/Library/Preferences中存储了用户在应用程序中的偏好设置。其中一些偏好设置可以包含配置以执行其他应用程序/脚本**。

例如,终端可以在启动时执行一个命令:

这个配置反映在文件**~/Library/Preferences/com.apple.Terminal.plist**中,如下所示:

所以,如果系统中终端的偏好设置的 plist 文件被覆盖,那么可以使用 open 功能来打开终端并执行该命令

您可以通过以下命令行添加此功能:

终端脚本 / 其他文件扩展名

位置

  • 任何地方

  • 触发器: 打开终端

描述 & 利用

如果您创建一个**.terminal**脚本arrow-up-right并打开它,终端应用程序将自动调用以执行其中指定的命令。如果终端应用程序具有一些特殊权限(如TCC),您的命令将以这些特殊权限运行。

尝试使用:

您还可以使用扩展名**.command.tool**,其中包含常规shell脚本内容,它们也将被终端打开。

triangle-exclamation

音频插件

Writeup: https://theevilbit.github.io/beyond/beyond_0013/arrow-up-right Writeup: https://posts.specterops.io/audio-unit-plug-ins-896d3434a882arrow-up-right

位置

  • /Library/Audio/Plug-Ins/HAL

  • 需要Root权限

  • 触发器:重新启动coreaudiod或计算机

  • /Library/Audio/Plug-ins/Components

  • 需要Root权限

  • 触发器:重新启动coreaudiod或计算机

  • ~/Library/Audio/Plug-ins/Components

  • 触发器:重新启动coreaudiod或计算机

  • /System/Library/Components

  • 需要Root权限

  • 触发器:重新启动coreaudiod或计算机

描述

根据先前的写作,可以编译一些音频插件并加载它们。

QuickLook插件

Writeup: https://theevilbit.github.io/beyond/beyond_0028/arrow-up-right

位置

  • /System/Library/QuickLook

  • /Library/QuickLook

  • ~/Library/QuickLook

  • /Applications/AppNameHere/Contents/Library/QuickLook/

  • ~/Applications/AppNameHere/Contents/Library/QuickLook/

描述与利用

当您触发文件的预览(在Finder中选择文件后按空格键)并安装了支持该文件类型的插件时,QuickLook插件可以被执行。

您可以编译自己的QuickLook插件,将其放在上述位置之一以加载它,然后转到支持的文件并按空格键触发它。

登录/注销挂钩

triangle-exclamation

Writeup: https://theevilbit.github.io/beyond/beyond_0022/arrow-up-right

位置

  • 您需要能够执行类似defaults write com.apple.loginwindow LoginHook /Users/$USER/hook.sh的命令

  • 位于~/Library/Preferences/com.apple.loginwindow.plist

它们已被弃用,但可用于在用户登录时执行命令。

这个设置存储在/Users/$USER/Library/Preferences/com.apple.loginwindow.plist

删除它:

**/private/var/root/Library/Preferences/com.apple.loginwindow.plist**中存储了root用户的自动启动位置。

条件沙盒绕过

circle-check

Cron

Writeup: https://theevilbit.github.io/beyond/beyond_0004/arrow-up-right

位置

  • /usr/lib/cron/tabs//private/var/at/tabs/private/var/at/jobs/etc/periodic/

  • 需要root权限才能直接写入。如果可以执行crontab <file>,则无需root权限

  • 触发器:取决于cron作业

描述和利用

列出当前用户的cron作业:

在**/usr/lib/cron/tabs//var/at/tabs/**中可以查看用户的所有cron作业(需要root权限)。

在MacOS中,可以找到几个以特定频率执行脚本的文件夹:

在这里,您可以找到常规的cron jobsat jobs(不太常用),以及periodic jobs(主要用于清理临时文件)。 比如,可以使用periodic daily来执行每日的周期性作业。

要通过编程方式添加用户cronjob,可以使用:

iTerm2

Writeup: https://theevilbit.github.io/beyond/beyond_0002/arrow-up-right

位置

  • ~/Library/Application Support/iTerm2/Scripts/AutoLaunch

  • 触发器: 打开iTerm

  • ~/Library/Application Support/iTerm2/Scripts/AutoLaunch.scpt

  • 触发器: 打开iTerm

  • ~/Library/Preferences/com.googlecode.iterm2.plist

  • 触发器: 打开iTerm

描述与利用

存储在**~/Library/Application Support/iTerm2/Scripts/AutoLaunch**中的脚本将被执行。例如:

macOS Auto Start Locations

macOS自动启动位置

macOS provides several locations where applications and services can be configured to automatically start when a user logs in. These locations can be leveraged by malware to maintain persistence on a system.

macOS提供了几个位置,可以配置应用程序和服务在用户登录时自动启动。恶意软件可以利用这些位置来保持系统的持久性。

The following are common auto start locations in macOS:

以下是macOS中常见的自动启动位置:

  1. Login Items: These are user-specific auto start items that are configured in System Preferences > Users & Groups > Login Items.

    登录项:这些是在“系统偏好设置” > “用户与群组” > “登录项”中配置的特定于用户的自动启动项目。

  2. Launch Agents: These are user-specific or global auto start items that are configured using property list (plist) files in the ~/Library/LaunchAgents/ and /Library/LaunchAgents/ directories.

    启动代理:这些是使用属性列表(plist)文件在~/Library/LaunchAgents//Library/LaunchAgents/目录中配置的特定于用户或全局的自动启动项目。

  3. Launch Daemons: These are global auto start items that are configured using property list (plist) files in the /Library/LaunchDaemons/ directory.

    启动守护程序:这些是使用属性列表(plist)文件在/Library/LaunchDaemons/目录中配置的全局自动启动项目。

  4. Startup Items: Deprecated auto start mechanism that was used in older versions of macOS. Startup items are stored in the /Library/StartupItems/ directory.

    启动项:在旧版本的macOS中使用的已弃用的自动启动机制。启动项存储在/Library/StartupItems/目录中。

脚本 ~/Library/Application Support/iTerm2/Scripts/AutoLaunch.scpt 也会被执行:

在**~/Library/Preferences/com.googlecode.iterm2.plist中的iTerm2首选项可以指示在打开iTerm2终端时执行的命令**。

此设置可以在iTerm2设置中配置:

而命令会反映在首选项中:

你可以设置要执行的命令为:

circle-exclamation

xbar

Writeup: https://theevilbit.github.io/beyond/beyond_0007/arrow-up-right

位置

  • ~/Library/Application\ Support/xbar/plugins/

  • 触发器: 一旦 xbar 被执行

描述

如果安装了流行的程序 xbararrow-up-right,则可以在 ~/Library/Application\ Support/xbar/plugins/ 中编写一个 shell 脚本,在 xbar 启动时执行:

Hammerspoon

Writeup: https://theevilbit.github.io/beyond/beyond_0008/arrow-up-right

位置

  • ~/.hammerspoon/init.lua

  • 触发器: 一旦执行 Hammerspoon

描述

Hammerspoonarrow-up-right 作为 macOS 的自动化平台,利用 LUA 脚本语言 进行操作。值得注意的是,它支持完整 AppleScript 代码的集成和 shell 脚本的执行,显著增强了其脚本编写能力。

该应用程序寻找一个单一文件,~/.hammerspoon/init.lua,并在启动时执行该脚本。

BetterTouchTool

位置

  • ~/Library/Application Support/BetterTouchTool/*

该工具允许指定应用程序或脚本在按下某些快捷键时执行。攻击者可能能够配置自己的快捷键和操作以在数据库中执行任意代码(一个快捷键可能只是按下一个键)。

Alfred

位置

  • ???

它允许创建工作流,当满足某些条件时可以执行代码。潜在地,攻击者可以创建一个工作流文件并让Alfred加载它(需要付费版本才能使用工作流)。

SSHRC

Writeup: https://theevilbit.github.io/beyond/beyond_0006/arrow-up-right

位置

  • ~/.ssh/rc

  • 触发器:通过ssh登录

  • /etc/ssh/sshrc

  • 需要Root权限

  • 触发器:通过ssh登录

triangle-exclamation

描述 & 利用

默认情况下,除非在 /etc/ssh/sshd_config 中设置了 PermitUserRC no,当用户通过 SSH 登录时,将执行脚本 /etc/ssh/sshrc~/.ssh/rc

登录项

Writeup: https://theevilbit.github.io/beyond/beyond_0003/arrow-up-right

位置

  • ~/Library/Application Support/com.apple.backgroundtaskmanagementagent

  • 触发: 登录

  • 利用载荷存储调用 osascript

  • /var/db/com.apple.xpc.launchd/loginitems.501.plist

  • 触发: 登录

  • 需要 root 权限

描述

在系统偏好设置 -> 用户与组 -> 登录项 中,您可以找到用户登录时要执行的 项目。 可以通过命令行列出、添加和删除它们:

这些项目存储在文件**~/Library/Application Support/com.apple.backgroundtaskmanagementagent**

登录项也可以使用API SMLoginItemSetEnabledarrow-up-right 进行指示,该API将在**/var/db/com.apple.xpc.launchd/loginitems.501.plist**中存储配置。

将ZIP作为登录项

(查看有关登录项的先前部分,这是一个扩展)

如果将ZIP文件存储为登录项,则**Archive Utility将打开它,例如,如果ZIP文件存储在~/Library中,并包含具有后门的文件夹LaunchAgents/file.plist**,则该文件夹将被创建(默认情况下不会创建),并且plist将被添加,因此下次用户再次登录时,plist中指定的后门将被执行

另一个选项是在用户主目录中创建文件**.bash_profile.zshenv**,因此如果LaunchAgents文件夹已经存在,则此技术仍将起作用。

At

详细信息:https://theevilbit.github.io/beyond/beyond_0014/arrow-up-right

位置

  • 需要执行 at,并且它必须是启用

描述

at任务旨在安排在特定时间执行一次性任务。与cron作业不同,at任务在执行后会自动删除。需要注意的是,这些任务在系统重新启动后仍然存在,这在某些情况下可能会被视为潜在的安全问题。

默认情况下它们是禁用的,但root用户可以使用以下命令启用它们:

这将在1小时内创建一个文件:

使用 atq 命令来检查作业队列:

以上我们可以看到两个已计划的任务。我们可以使用 at -c JOBNUMBER 命令打印任务的详细信息。

circle-exclamation

作业文件可以在 /private/var/at/jobs/ 找到

文件名包含队列、作业编号和计划运行时间。例如,让我们看看 a0001a019bdcd2

  • a - 这是队列

  • 0001a - 十六进制的作业编号,0x1a = 26

  • 019bdcd2 - 十六进制的时间。它表示自纪元以来经过的分钟数。0x019bdcd2 在十进制中是 26991826。如果我们将其乘以60,我们得到 1619509560,这是 GMT: 2021年4月27日,星期二 7:46:00

如果我们打印作业文件,我们会发现它包含了我们使用 at -c 得到的相同信息。

文件夹操作

Writeup: https://theevilbit.github.io/beyond/beyond_0024/arrow-up-right Writeup: https://posts.specterops.io/folder-actions-for-persistence-on-macos-8923f222343darrow-up-right

  • 有用于绕过沙箱:arrow-up-right

  • 但您需要能够调用带参数的 osascript 来联系 System Events 以配置文件夹操作

  • TCC绕过:🟠arrow-up-right

  • 它具有一些基本的TCC权限,如桌面、文稿和下载

位置

  • /Library/Scripts/Folder Action Scripts

  • 需要 root 权限

  • 触发器:访问指定文件夹

  • ~/Library/Scripts/Folder Action Scripts

  • 触发器:访问指定文件夹

描述和利用

文件夹操作是由文件夹中的更改自动触发的脚本,例如添加、删除项目,或其他操作,如打开或调整文件夹窗口。这些操作可用于各种任务,并且可以通过不同方式触发,如使用 Finder UI 或终端命令。

设置文件夹操作时,您可以选择以下选项:

  1. 使用 Automatorarrow-up-right 制作文件夹操作工作流,并将其安装为服务。

  2. 通过文件夹上下文菜单中的文件夹操作设置手动附加脚本。

  3. 利用 OSAScript 向 System Events.app 发送苹果事件消息,以通过编程方式设置文件夹操作。

  • 这种方法特别适用于将操作嵌入系统中,提供一定程度的持久性。

以下脚本是文件夹操作中可以执行的示例:

要使上述脚本可被文件夹操作使用,请使用以下命令进行编译:

在脚本编译完成后,通过执行以下脚本设置文件夹操作。该脚本将全局启用文件夹操作,并将先前编译的脚本附加到桌面文件夹。

使用以下命令运行设置脚本:

  • 通过 GUI 实现这种持久性的方法如下:

这是将被执行的脚本:

使用以下命令编译:osacompile -l JavaScript -o folder.scpt source.js

移动到:

然后打开Folder Actions Setup应用程序,选择您想要监视的文件夹,并在您的情况下选择**folder.scpt**(在我的情况下,我称其为output2.scp):

现在,如果您使用Finder打开该文件夹,您的脚本将被执行。

此配置存储在以base64格式存储的plist中,位于**~/Library/Preferences/com.apple.FolderActionsDispatcher.plist**。

现在,让我们尝试准备这种持久性而无需GUI访问:

  1. 复制 ~/Library/Preferences/com.apple.FolderActionsDispatcher.plist/tmp 以备份它:

  • cp ~/Library/Preferences/com.apple.FolderActionsDispatcher.plist /tmp

  1. 删除您刚刚设置的文件夹操作:

现在我们有了一个空环境

  1. 复制备份文件:cp /tmp/com.apple.FolderActionsDispatcher.plist ~/Library/Preferences/

  2. 打开Folder Actions Setup.app以使用此配置:open "/System/Library/CoreServices/Applications/Folder Actions Setup.app/"

triangle-exclamation

Dock快捷方式

报告:https://theevilbit.github.io/beyond/beyond_0027/arrow-up-right

位置

  • ~/Library/Preferences/com.apple.dock.plist

  • 触发器:当用户点击Dock内的应用程序时

描述和利用

Dock中显示的所有应用程序都在plist中指定:~/Library/Preferences/com.apple.dock.plist

只需使用以下内容即可添加一个应用程序

通过一些社会工程,你可以在 dock 中冒充谷歌浏览器,实际上执行你自己的脚本:

颜色选择器

解读:https://theevilbit.github.io/beyond/beyond_0017arrow-up-right

位置

  • /Library/ColorPickers

  • 需要root权限

  • 触发条件:使用颜色选择器

  • ~/Library/ColorPickers

  • 触发条件:使用颜色选择器

描述与利用

编译一个颜色选择器捆绑包与你的代码(你可以使用这个作为例子arrow-up-right),并添加一个构造函数(就像屏幕保护程序部分中一样),然后将捆绑包复制到~/Library/ColorPickers

然后,当颜色选择器被触发时,你的代码也应该被执行。

请注意,加载你的库的二进制文件有一个非常严格的沙盒/System/Library/Frameworks/AppKit.framework/Versions/C/XPCServices/LegacyExternalColorPickerService-x86_64.xpc/Contents/MacOS/LegacyExternalColorPickerService-x86_64

Finder Sync Plugins

Writeup: https://theevilbit.github.io/beyond/beyond_0026/arrow-up-right Writeup: https://objective-see.org/blog/blog_0x11.htmlarrow-up-right

  • 有用于绕过沙盒: 否,因为您需要执行自己的应用程序

  • TCC绕过: ???

位置

  • 特定应用程序

描述和利用

一个带有Finder Sync Extension的应用程序示例可以在这里找到arrow-up-right

应用程序可以拥有Finder Sync Extensions。这个扩展将放在将要执行的应用程序中。此外,为了使扩展能够执行其代码,它必须使用一些有效的苹果开发者证书进行签名,它必须受到沙盒限制(尽管可以添加宽松的例外),并且必须注册到类似于:

屏幕保护程序

Writeup: https://theevilbit.github.io/beyond/beyond_0016/arrow-up-right Writeup: https://posts.specterops.io/saving-your-access-d562bf5bf90barrow-up-right

位置

  • /System/Library/Screen Savers

  • 需要Root权限

  • 触发器:选择屏幕保护程序

  • /Library/Screen Savers

  • 需要Root权限

  • 触发器:选择屏幕保护程序

  • ~/Library/Screen Savers

  • 触发器:选择屏幕保护程序

描述 & 攻击

在Xcode中创建一个新项目,并选择模板生成一个新的屏幕保护程序。然后,将代码添加到其中,例如以下代码以生成日志。

构建它,并将.saver捆绑包复制到**~/Library/Screen Savers**。然后,打开屏幕保护程序GUI,如果您只需单击它,它应该生成大量日志:

triangle-exclamation

Saver code:

Spotlight插件

writeup: https://theevilbit.github.io/beyond/beyond_0011/arrow-up-right

位置

  • ~/Library/Spotlight/

  • 触发条件:创建一个由Spotlight插件管理的扩展名的新文件。

  • /Library/Spotlight/

  • 触发条件:创建一个由Spotlight插件管理的扩展名的新文件。

  • 需要Root权限

  • /System/Library/Spotlight/

  • 触发条件:创建一个由Spotlight插件管理的扩展名的新文件。

  • 需要Root权限

  • Some.app/Contents/Library/Spotlight/

  • 触发条件:创建一个由Spotlight插件管理的扩展名的新文件。

  • 需要新的应用程序

描述和利用

Spotlight是macOS内置的搜索功能,旨在为用户提供快速和全面访问计算机上的数据。 为了促进这种快速搜索功能,Spotlight维护一个专有数据库,通过解析大多数文件创建索引,使得可以通过文件名和内容快速搜索。

Spotlight的基本机制涉及一个名为'mds'的中央进程,代表**'元数据服务器'。该进程协调整个Spotlight服务。此外,还有多个执行各种维护任务的'mdworker'守护程序,例如索引不同文件类型(ps -ef | grep mdworker)。这些任务通过Spotlight导入器插件或".mdimporter bundles**"实现,这些插件使Spotlight能够理解和索引各种文件格式的内容。

这些插件或**.mdimporter** bundles位于先前提到的位置,如果出现新的bundle,它将在一分钟内加载(无需重新启动任何服务)。这些bundles需要指示它们可以管理哪些文件类型和扩展名,这样,当创建具有指定扩展名的新文件时,Spotlight将使用它们。

可以通过运行以下命令找到所有加载的mdimporters

例如,/Library/Spotlight/iBooksAuthor.mdimporter 用于解析这些类型的文件(扩展名为 .iba.book 等):

triangle-exclamation

要创建自己的导入器,您可以从这个项目开始:https://github.com/megrimm/pd-spotlight-importerarrow-up-right,然后更改名称,CFBundleDocumentTypes并添加UTImportedTypeDeclarations,以便支持您想要支持的扩展名,并在**schema.xml中反映它们。 然后更改函数GetMetadataForFile**的代码,以在创建具有已处理扩展名的文件时执行您的有效负载。

最后构建并复制您的新.mdimporter到三个先前位置之一,您可以通过监视日志或检查**mdimport -L.**来检查它何时加载。

首选项窗格

triangle-exclamation

撰写:https://theevilbit.github.io/beyond/beyond_0009/arrow-up-right

位置

  • /System/Library/PreferencePanes

  • /Library/PreferencePanes

  • ~/Library/PreferencePanes

描述

看起来这似乎不再起作用。

Root沙箱绕过

circle-check

周期性

撰写:https://theevilbit.github.io/beyond/beyond_0019/arrow-up-right

位置

  • /etc/periodic/daily/etc/periodic/weekly/etc/periodic/monthly/usr/local/etc/periodic

  • 需要root权限

  • 触发器:时间到达时

  • /etc/daily.local/etc/weekly.local/etc/monthly.local

  • 需要root权限

  • 触发器:时间到达时

描述与利用

周期性脚本(/etc/periodic)会被执行,因为在/System/Library/LaunchDaemons/com.apple.periodic*中配置了启动守护程序。请注意,存储在/etc/periodic/中的脚本将作为文件的所有者执行,因此这对于潜在的特权升级不起作用。

/etc/defaults/periodic.conf 中还有其他将被执行的定期脚本:

如果您设法编写任何文件/etc/daily.local/etc/weekly.local/etc/monthly.local,它将迟早被执行

circle-exclamation

PAM

Writeup: Linux Hacktricks PAM Writeup: https://theevilbit.github.io/beyond/beyond_0005/arrow-up-right

位置

  • 始终需要root权限

描述和利用

由于PAM更专注于持久性和恶意软件,而不是在macOS内部轻松执行,因此本博客不会提供详细解释,请阅读这些文章以更好地理解这种技术

使用以下命令检查PAM模块:

一种滥用PAM的持久性/权限提升技术很简单,只需修改模块/etc/pam.d/sudo,在开头添加以下行:

所以它会看起来像这样:

因此,任何尝试使用**sudo的操作**都会生效。

triangle-exclamation

授权插件

Writeup: https://theevilbit.github.io/beyond/beyond_0028/arrow-up-right Writeup: https://posts.specterops.io/persistent-credential-theft-with-authorization-plugins-d17b34719d65arrow-up-right

  • 有用于绕过沙盒:🟠arrow-up-right

  • 但需要以root身份进行额外配置

  • TCC绕过:???

位置

  • /Library/Security/SecurityAgentPlugins/

  • 需要root权限

  • 还需要配置授权数据库以使用插件

描述和利用

您可以创建一个授权插件,在用户登录时执行以保持持久性。有关如何创建这些插件之一的更多信息,请查看先前的写作(请注意,编写不当的插件可能会将您锁在外面,您将需要从恢复模式清理您的Mac)。

bundle移动到要加载的位置:

最后添加加载此插件的规则

evaluate-mechanisms 会告诉授权框架需要调用外部机制进行授权。此外,privileged 会使其由 root 执行。

使用以下命令触发:

然后staff组应该具有sudo权限(阅读/etc/sudoers以确认)。

Man.conf

Writeup: https://theevilbit.github.io/beyond/beyond_0030/arrow-up-right

位置

  • /private/etc/man.conf

  • 需要root权限

  • /private/etc/man.conf:每当使用man时

描述和利用

配置文件**/private/etc/man.conf**指示打开man文档文件时要使用的二进制/脚本。因此,可修改可执行文件的路径,以便每当用户使用man阅读文档时,将执行后门。

例如,在**/private/etc/man.conf**中设置:

然后创建 /tmp/view 如下:

Apache2

Writeup: https://theevilbit.github.io/beyond/beyond_0023/arrow-up-right

位置

  • /etc/apache2/httpd.conf

  • 需要 root 权限

  • 触发条件:当 Apache2 启动时

描述 & 攻击

您可以在 /etc/apache2/httpd.conf 中指定加载一个模块,添加一行代码,例如:

这样,您编译的模块将由Apache加载。唯一的问题是,您需要使用有效的苹果证书进行签名,或者您需要在系统中添加一个新的受信任证书并用其进行签名。

然后,如果需要确保服务器将启动,您可以执行:

Dylb的代码示例:

BSM审计框架

Writeup: https://theevilbit.github.io/beyond/beyond_0031/arrow-up-right

位置

  • /etc/security/audit_warn

  • 需要Root权限

  • 触发条件: 当auditd检测到警告时

描述 & 攻击

每当auditd检测到警告时,脚本 /etc/security/audit_warn 会被 执行。因此,您可以在其中添加您的有效负载。

启动项

triangle-exclamation

StartupItem 是一个目录,应该位于 /Library/StartupItems//System/Library/StartupItems/ 中的一个。一旦建立了这个目录,它必须包含两个特定的文件:

  1. 一个 rc 脚本:在启动时执行的 shell 脚本。

  2. 一个名为 StartupParameters.plistplist 文件,其中包含各种配置设置。

确保将 rc 脚本和 StartupParameters.plist 文件正确放置在 StartupItem 目录中,以便启动过程识别并利用它们。

在 macOS 上,有多个位置可以用来自动启动应用程序或服务。以下是一些常见的自动启动位置:

  1. 登录项:这些是在用户登录时自动启动的应用程序或服务。可以在“系统偏好设置” > “用户与群组” > “登录项”中管理。

  2. 启动代理:这些是在系统启动时自动启动的应用程序或服务。它们通常由 Launchd 管理,配置文件位于 /Library/LaunchAgents/Library/LaunchDaemons 中。

  3. 启动项:这些是在系统启动时自动启动的应用程序或服务。它们通常由 Launchd 管理,配置文件位于 /System/Library/LaunchAgents/System/Library/LaunchDaemons 中。

  4. 定时任务:使用 cronlaunchd 可以创建定时任务,定时执行特定的脚本或命令。

检查和管理这些自动启动位置对于确保系统安全性和性能至关重要。

emond

triangle-exclamation

Writeup: https://theevilbit.github.io/beyond/beyond_0023/arrow-up-right

由 Apple 引入,emond 是一个日志记录机制,似乎是未开发完全或可能被放弃,但仍然可以访问。虽然对于 Mac 管理员来说并不特别有益,但这个鲜为人知的服务可能作为威胁行为者的微妙持久性方法,很可能不被大多数 macOS 管理员注意到。

对于知道其存在的人来说,识别 emond 的任何恶意使用是直截了当的。该服务的 LaunchDaemon 寻找要在单个目录中执行的脚本。要检查这一点,可以使用以下命令:

XQuartz

Writeup: https://theevilbit.github.io/beyond/beyond_0018/arrow-up-right

位置

  • /opt/X11/etc/X11/xinit/privileged_startx.d

  • 需要 root 权限

  • 触发条件:使用 XQuartz

描述 & 攻击

XQuartz 不再在 macOS 中安装,如果需要更多信息,请查看 writeup。

kext

triangle-exclamation

位置

要将 KEXT 安装为启动项,需要将其安装在以下位置之一:

  • /System/Library/Extensions

  • 内置于 OS X 操作系统中的 KEXT 文件。

  • /Library/Extensions

  • 第三方软件安装的 KEXT 文件

您可以使用以下命令列出当前加载的 kext 文件:

amstoold

Writeup: https://theevilbit.github.io/beyond/beyond_0029/arrow-up-right

位置

  • /usr/local/bin/amstoold

  • 需要 root 权限

描述 & 利用

显然,/System/Library/LaunchAgents/com.apple.amstoold.plist 中的 plist 使用了这个二进制文件,同时暴露了一个 XPC 服务... 问题在于该二进制文件并不存在,因此您可以在那里放置一些内容,当调用 XPC 服务时,您的二进制文件将被调用。

我在我的 macOS 中找不到这个了。

xsanctl

Writeup: https://theevilbit.github.io/beyond/beyond_0015/arrow-up-right

位置

  • /Library/Preferences/Xsan/.xsanrc

  • 需要 root 权限

  • 触发条件:当服务运行时(很少)

描述 & 利用

显然,运行此脚本并不是很常见,我甚至在我的 macOS 中找不到它,因此如果您想获取更多信息,请查看 writeup。

/etc/rc.common

triangle-exclamation

也可以在这里放置将在启动时执行的命令。 例如常规 rc.common 脚本:

持久化技术和工具

chevron-right从零开始学习AWS黑客技术,成为专家 htARTE (HackTricks AWS Red Team Expert)arrow-up-right!hashtag

支持HackTricks的其他方式:

最后更新于