Translated ['macos-hardening/macos-security-and-privilege-escalation/mac

This commit is contained in:
Translator 2023-10-15 10:00:57 +00:00
parent 278dcd0066
commit 0e9b3f2bc5
3 changed files with 44 additions and 32 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 169 KiB

View file

@ -5,10 +5,10 @@
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks云 ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* 你在一家**网络安全公司**工作吗你想在HackTricks中看到你的**公司广告**吗?或者你想获得**PEASS的最新版本或下载PDF格式的HackTricks**吗?请查看[**订阅计划**](https://github.com/sponsors/carlospolop)
* 发现我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品[**The PEASS Family**](https://opensea.io/collection/the-peass-family)
* 发现我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品 - [**The PEASS Family**](https://opensea.io/collection/the-peass-family)
* 获得[**官方PEASS和HackTricks周边产品**](https://peass.creator-spring.com)
* **加入**[**💬**](https://emojipedia.org/speech-balloon/) [**Discord群组**](https://discord.gg/hRep4RUj7f)或[**电报群组**](https://t.me/peass),或者**关注**我在**Twitter**上的[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
* **通过向**[**hacktricks repo**](https://github.com/carlospolop/hacktricks) **和**[**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **提交PR来分享你的黑客技巧。**
* **加入** [**💬**](https://emojipedia.org/speech-balloon/) [**Discord群组**](https://discord.gg/hRep4RUj7f) 或 [**Telegram群组**](https://t.me/peass) 或 **关注**我在**Twitter**上的[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
* **通过向** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **和** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **提交PR来分享你的黑客技巧。**
</details>
@ -85,7 +85,7 @@ ldid -S/tmp/entl.xml <binary>
### SuspiciousPackage
[**SuspiciousPackage**](https://mothersruin.com/software/SuspiciousPackage/get.html) 是一个有用的工具,可以在安装之前检查 **.pkg** 文件(安装程序)并查看其中的内容。\
这些安装程序包含 `preinstall``postinstall` 的 bash 脚本,恶意软件作者通常会滥用这些脚本来**持久化****恶意软件**
这些安装程序包含 `preinstall``postinstall` 的 bash 脚本,恶意软件作者通常会滥用这些脚本来**持久化**恶意软件。
### hdiutil
@ -172,14 +172,14 @@ swift demangle
{% endhint %}
{% hint style="warning" %}
请注意,在macOS上为了对系统二进制文件如`cloudconfigurationd`)进行仪器化必须禁用SIP仅删除签名是不起作用的
请注意,为了在macOS上**检测系统二进制文件**(如`cloudconfigurationd`必须禁用SIP仅删除签名是不起作用的
{% endhint %}
### 统一日志
MacOS会生成大量日志当运行应用程序时这些日志非常有用可以帮助理解应用程序在做什么。
此外,有些日志会包含标签`<private>`,以隐藏一些用户或计算机可识别的信息。但是,可以通过**安装证书来公开此信息**。请按照[**此处**](https://superuser.com/questions/1532031/how-to-show-private-data-in-macos-unified-log)的说明进行操作。
此外,有些日志会包含标签`<private>`,以隐藏一些用户或计算机可识别的信息。但是,可以**安装证书来显示这些信息**。请按照[**这里**](https://superuser.com/questions/1532031/how-to-show-private-data-in-macos-unified-log)的说明进行操作。
### Hopper
@ -205,14 +205,14 @@ MacOS会生成大量日志当运行应用程序时这些日志非常有用
### dtrace
它允许用户以极其**低级别**访问应用程序,并提供了一种用户可以**跟踪**程序甚至更改其执行流程的方式。Dtrace使用**探针**,这些探针被放置在内核的各个位置,例如系统调用的开始和结束。
它允许用户以极其**低级别**访问应用程序,并为用户提供了一种**跟踪**程序甚至更改其执行流程的方法。Dtrace使用**探针**,这些探针被放置在内核的各个位置,例如系统调用的开始和结束。
DTrace使用**`dtrace_probe_create`**函数为每个系统调用创建一个探针。这些探针可以在每个系统调用的**入口和出口点触发**。与DTrace的交互通过/dev/dtrace进行该设备仅对root用户可用。
{% hint style="success" %}
要在不完全禁用SIP保护的情况下启用Dtrace可以在恢复模式下执行`csrutil enable --without dtrace`
您还可以使用**您已编译的**二进制文件**`dtrace`**或**`dtruss`**
您还可以**运行您已编译的**`dtrace`或`dtruss`二进制文件
{% endhint %}
可以使用以下命令获取dtrace的可用探针
@ -305,13 +305,20 @@ ktrace trace -s -S -t c -c ls | grep "ls("
[**ProcessMonitor**](https://objective-see.com/products/utilities.html#ProcessMonitor) 是一个非常有用的工具,用于检查进程执行的与进程相关的操作(例如,监视进程创建的新进程)。
### SpriteTree
[**SpriteTree**](https://themittenmac.com/tools/) 是一个工具,用于打印进程之间的关系。\
您需要使用类似 **`sudo eslogger fork exec rename create > cap.json`** 的命令来监视您的 Mac启动此命令需要 FDA。然后您可以在此工具中加载 json 文件以查看所有的关系:
<figure><img src="../../../.gitbook/assets/image (710).png" alt="" width="375"><figcaption></figcaption></figure>
### FileMonitor
[**FileMonitor**](https://objective-see.com/products/utilities.html#FileMonitor) 允许监视文件事件(如创建、修改和删除),并提供有关这些事件的详细信息。
[**FileMonitor**](https://objective-see.com/products/utilities.html#FileMonitor) 允许监视文件事件(如创建、修改和删除),并提供有关这些事件的详细信息。
### Crescendo
[**Crescendo**](https://github.com/SuprHackerSteve/Crescendo) 是一个具有类似于 Windows 用户熟悉的 Microsoft Sysinternal 的 _Procmon_ 的外观和感觉的 GUI 工具。它允许您启动和停止记录各种类型的事件,按类别(文件、进程、网络等)对其进行过滤,并将记录的事件保存为 json 文件。
[**Crescendo**](https://github.com/SuprHackerSteve/Crescendo) 是一个具有类似于 Windows 用户熟悉的 Microsoft Sysinternal's _Procmon_ 的外观和感觉的 GUI 工具。它可以启动和停止记录各种类型的事件,按类别(文件、进程、网络等)对其进行过滤,并将记录的事件保存为 json 文件。
### Apple Instruments
@ -355,7 +362,7 @@ settings set target.x86-disassembly-flavor intel
<table data-header-hidden><thead><tr><th width="225"></th><th></th></tr></thead><tbody><tr><td><strong>(lldb) 命令</strong></td><td><strong>描述</strong></td></tr><tr><td><strong>run (r)</strong></td><td>开始执行,直到遇到断点或进程终止。</td></tr><tr><td><strong>continue (c)</strong></td><td>继续执行被调试的进程。</td></tr><tr><td><strong>nexti (n / ni)</strong></td><td>执行下一条指令。该命令会跳过函数调用。</td></tr><tr><td><strong>stepi (s / si)</strong></td><td>执行下一条指令。与nexti命令不同该命令会进入函数调用。</td></tr><tr><td><strong>finish (f)</strong></td><td>执行当前函数“frame”中剩余的指令然后返回并停止。</td></tr><tr><td><strong>control + c</strong></td><td>暂停执行。如果进程已经运行r或继续c这将导致进程在当前位置停止执行。</td></tr><tr><td><strong>breakpoint (b)</strong></td><td><p>b main #任何名为main的函数</p><p>b &#x3C;binname>`main #二进制文件的主函数</p><p>b set -n main --shlib &#x3C;lib_name> #指定二进制文件的主函数</p><p>b -[NSDictionary objectForKey:]</p><p>b -a 0x0000000100004bd9</p><p>br l #断点列表</p><p>br e/dis &#x3C;num> #启用/禁用断点</p><p>breakpoint delete &#x3C;num></p></td></tr><tr><td><strong>help</strong></td><td><p>help breakpoint #获取断点命令的帮助</p><p>help memory write #获取写入内存的帮助</p></td></tr><tr><td><strong>reg</strong></td><td><p>reg read</p><p>reg read $rax</p><p>reg read $rax --format &#x3C;<a href="https://lldb.llvm.org/use/variable.html#type-format">format</a>></p><p>reg write $rip 0x100035cc0</p></td></tr><tr><td><strong>x/s &#x3C;reg/memory address></strong></td><td>将内存显示为以空字符结尾的字符串。</td></tr><tr><td><strong>x/i &#x3C;reg/memory address></strong></td><td>将内存显示为汇编指令。</td></tr><tr><td><strong>x/b &#x3C;reg/memory address></strong></td><td>将内存显示为字节。</td></tr><tr><td><strong>print object (po)</strong></td><td><p>这将打印参数引用的对象</p><p>po $raw</p><p><code>{</code></p><p><code>dnsChanger = {</code></p><p><code>"affiliate" = "";</code></p><p><code>"blacklist_dns" = ();</code></p><p>请注意大多数苹果的Objective-C API或方法返回对象因此应通过“print object”po命令显示。如果po没有产生有意义的输出请使用<x/b></p></td></tr><tr><td><strong>memory</strong></td><td>memory read 0x000....<br>memory read $x0+0xf2a<br>memory write 0x100600000 -s 4 0x41414141 #在该地址写入AAAA<br>memory write -f s $rip+0x11f+7 "AAAA" #在该地址写入AAAA</td></tr><tr><td><strong>disassembly</strong></td><td><p>dis #反汇编当前函数</p><p>dis -n &#x3C;funcname> #反汇编函数</p><p>dis -n &#x3C;funcname> -b &#x3C;basename> #反汇编函数<br>dis -c 6 #反汇编6行<br>dis -c 0x100003764 -e 0x100003768 #从一个地址到另一个地址<br>dis -p -c 4 #从当前地址开始反汇编</p></td></tr><tr><td><strong>parray</strong></td><td>parray 3 (char **)$x1 #检查x1寄存器中的3个组件的数组</td></tr></tbody></table>
{% hint style="info" %}
在调用**`objc_sendMsg`**函数时,**rsi**寄存器保存方法的名称以空字符结尾“C”字符串。要通过lldb打印名称请执行以下操作
在调用**`objc_sendMsg`**函数时,**rsi**寄存器保存方法的名称,作为以空字符结尾“C”字符串。要通过lldb打印名称请执行以下操作
`(lldb) x/s $rsi: 0x1000f1576: "startMiningWithPort:password:coreCount:slowMemory:currency:"`
@ -374,9 +381,9 @@ settings set target.x86-disassembly-flavor intel
* 一些恶意软件还可以根据MAC地址00:50:56判断机器是否为VMware。
* 还可以通过简单的代码判断进程是否正在被调试:
* `if(P_TRACED == (info.kp_proc.p_flag & P_TRACED)){ //process being debugged }`
* 还可以使用**`ptrace`**系统调用以**`PT_DENY_ATTACH`**标志调用。这可以防止调试器附加和跟踪。
* 可以检查是否导入了**`sysctl`**或**`ptrace`**函数(但恶意软件可能会动态导入它)。
* 如本文所述:“[Defeating Anti-Debug Techniques: macOS ptrace variants](https://alexomara.com/blog/defeating-anti-debug-techniques-macos-ptrace-variants/)”:\
* 还可以使用**`ptrace`**系统调用和**`PT_DENY_ATTACH`**标志来阻止调试器的附加和跟踪。
* 可以检查是否导入了**`sysctl`**或**`ptrace`**函数(但恶意软件可能会动态导入它)。
* 如在此文档中所述:“[Defeating Anti-Debug Techniques: macOS ptrace variants](https://alexomara.com/blog/defeating-anti-debug-techniques-macos-ptrace-variants/)”:\
“_消息“Process # exited with **status = 45 (0x0000002d)**”通常是调试目标正在使用**PT\_DENY\_ATTACH**的明显迹象_”。
## Fuzzing

View file

@ -5,9 +5,9 @@
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks云 ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 推特 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 YouTube 🎥</strong></a></summary>
* 你在一家**网络安全公司**工作吗你想在HackTricks中看到你的**公司广告**吗?或者你想获得**PEASS的最新版本或下载PDF格式的HackTricks**吗?请查看[**订阅计划**](https://github.com/sponsors/carlospolop)
* 发现我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品——[**The PEASS Family**](https://opensea.io/collection/the-peass-family)
* 发现我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品[**The PEASS Family**](https://opensea.io/collection/the-peass-family)
* 获取[**官方PEASS和HackTricks周边产品**](https://peass.creator-spring.com)
* **加入**[**💬**](https://emojipedia.org/speech-balloon/) [**Discord群组**](https://discord.gg/hRep4RUj7f)或[**电报群组**](https://t.me/peass),或者**关注**我在**Twitter**上的[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
* **加入**[**💬**](https://emojipedia.org/speech-balloon/) [**Discord群组**](https://discord.gg/hRep4RUj7f) 或 [**Telegram群组**](https://t.me/peass) 或 **关注**我在**Twitter**上的[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
* **通过向**[**hacktricks repo**](https://github.com/carlospolop/hacktricks) **和**[**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **提交PR来分享你的黑客技巧。**
</details>
@ -16,9 +16,9 @@
<figure><img src="../../../../../.gitbook/assets/image (2) (1) (2).png" alt=""><figcaption><p>图片来源:<a href="http://newosxbook.com/files/HITSB.pdf">http://newosxbook.com/files/HITSB.pdf</a></p></figcaption></figure>
在上图中,可以看到当运行具有权限`com.apple.security.app-sandbox`的应用程序时,**沙盒将如何加载**。
在上图中,可以看到当运行具有权限**`com.apple.security.app-sandbox`**的应用程序时,**沙盒将如何加载**。
编译器将`/usr/lib/libSystem.B.dylib`链接到二进制文件。
编译器将**`/usr/lib/libSystem.B.dylib`**链接到二进制文件。
然后,**`libSystem.B`**将调用其他几个函数,直到**`xpc_pipe_routine`**将应用程序的权限发送给**`securityd`**。Securityd检查进程是否应该被隔离在沙盒中如果是则将被隔离。
最后,通过调用**`__sandbox_ms`**激活沙盒,该函数将调用**`__mac_syscall`**。
@ -27,19 +27,23 @@
### 绕过隔离属性
**由沙盒进程创建的文件**会附加**隔离属性**,以防止沙盒逃逸。然而,如果你设法在沙盒应用程序中**创建一个没有隔离属性的`.app`包**,并使应用程序包的二进制文件指向**`/bin/bash`**,并在**plist**中添加一些环境变量来滥用launchctl以**无沙盒方式启动新应用程序**。
**由沙盒进程创建的文件**会附加**隔离属性**,以防止沙盒逃逸。然而,如果你设法在沙盒应用程序中**创建一个没有隔离属性的`.app`文件夹**,你可以使应用程序包的二进制文件指向**`/bin/bash`**,并在**plist**中添加一些环境变量来滥用**`open`**以**启动新的非沙盒应用程序**。
这就是[**CVE-2023-32364**](https://gergelykalman.com/CVE-2023-32364-a-macOS-sandbox-escape-by-mounting.html)中所做的事情。
这就是[**CVE-2023-32364**](https://gergelykalman.com/CVE-2023-32364-a-macOS-sandbox-escape-by-mounting.html)**中所做的**。
{% hint style="danger" %}
因此,目前,如果你只能创建一个以**`.app`**结尾的文件夹而没有隔离属性你可以逃离沙盒因为macOS只会在**`.app`文件夹**和**主可执行文件**中**检查**隔离属性(我们将主可执行文件指向**`/bin/bash`**)。
{% endhint %}
### 滥用Open功能
在[**Word沙盒绕过的最后几个示例**](macos-office-sandbox-bypasses.md#word-sandbox-bypass-via-login-items-and-.zshenv)中可以看到如何滥用**`open`**命令行功能来绕过沙盒。
在[**Word沙盒绕过的最后示例**](macos-office-sandbox-bypasses.md#word-sandbox-bypass-via-login-items-and-.zshenv)中可以看到如何滥用**`open`**命令行功能来绕过沙盒。
### 滥用自动启动位置
如果沙盒进程可以在**稍后将要运行二进制文件的非沙盒应用程序的位置写入**,它将能够通过将二进制文件放置在那里来**逃**。这种位置的一个很好的例子是`~/Library/LaunchAgents`或`/System/Library/LaunchDaemons`。
如果沙盒进程可以在**稍后将要运行二进制文件的非沙盒应用程序可以写入的位置**写入,它将能够通过将二进制文件放置在那里来**逃离沙盒**。这种位置的一个很好的例子是`~/Library/LaunchAgents`或`/System/Library/LaunchDaemons`。
对于这个过程,你可能需要**两个步骤**:使具有**更宽松沙盒**`file-read*``file-write*`)的进程执行你的代码,实际上会写入一个将以**无沙盒方式执行**的位置
为此,你可能需要**2个步骤**:使具有**更宽松沙盒**`file-read*``file-write*`)的进程执行你的代码,实际上会在**非沙盒环境中执行**
查看关于**自动启动位置**的页面:
@ -49,7 +53,7 @@
### 滥用其他进程
如果从沙盒进程中能够**入侵运行在较少限制沙盒(或无沙盒)中的其他进程**,你将能够逃逸到它们的沙盒中
如果从沙盒进程中能够**入侵运行在较少限制沙盒(或无沙盒)中的其他进程**,你将能够逃离它们的沙盒
{% content-ref url="../../../macos-proces-abuse/" %}
[macos-proces-abuse](../../../macos-proces-abuse/)
@ -57,14 +61,13 @@
### 静态编译和动态链接
[**这项研究**](https://saagarjha.com/blog/2020/05/20/mac-app-store-sandbox-escape/)发现了种绕过沙盒的方法。因为沙盒是在用户空间加载**libSystem**库时应用的。如果一个二进制文件能够避免加载它,它就永远不会被沙盒化:
[**这项研究**](https://saagarjha.com/blog/2020/05/20/mac-app-store-sandbox-escape/)发现了2种绕过沙盒的方法。因为沙盒是在用户空间加载**libSystem**库时应用的。如果一个二进制文件能够避免加载它,它就不会被沙盒化:
* 如果二进制文件是**完全静态编译**的,它可以避免加载该库。
* 如果**二进制文件不需要加载任何库**因为链接器也在libSystem中它就不需要加载libSystem。
* 如果二进制文件**不需要加载任何库**因为链接器也在libSystem中它就不需要加载libSystem。&#x20;
### Shellcodes
### Shellcode
请注意即使是ARM64的**shellcode**也需要链接到`libSystem.dylib`
请注意即使是ARM64架构的shellcode也需要链接到`libSystem.dylib`中:
```bash
ld -o shell shell.o -macosx_version_min 13.0
ld: dynamic executables or dylibs must link with libSystem.dylib for architecture arm64
@ -206,9 +209,9 @@ system("cat ~/Desktop/del.txt");
- `com.apple.security.files.user-selected.read-only`:允许应用只读用户选择的文件。
- `com.apple.security.files.all`:允许应用访问所有文件。
- `com.apple.security.print`:允许应用进行打印操作。
- `com.apple.security.temporary-exception.apple-events`:允许应用在特定情况下使用苹果事件。
- `com.apple.security.temporary-exception.apple-events`:允许应用在特定情况下执行苹果事件。
通过在 entitlements.xml 文件中定义这些权限,我们可以控制应用在沙盒环境中的行为和访问权限
这些权限可以根据应用的需求进行配置和调整,以实现沙盒环境下的安全保护和功能限制
{% endtab %}
```xml
@ -229,7 +232,9 @@ To debug or bypass the macOS sandbox, it is necessary to modify the `Info.plist`
When modifying the `Info.plist` file, it is important to understand the implications and potential security risks. Weakening or removing sandbox restrictions can expose the application to unauthorized access or privilege escalation.
To prevent unauthorized modifications to the `Info.plist` file, it is recommended to implement proper code signing and entitlements verification mechanisms. This ensures that only trusted modifications are allowed and prevents potential sandbox bypasses.
To prevent unauthorized modifications to the `Info.plist` file, it is recommended to implement integrity checks and code signing. These measures can help ensure the integrity and authenticity of the file, preventing tampering and unauthorized modifications.
It is worth noting that bypassing or tampering with the macOS sandbox is a violation of Apple's security policies and can have legal consequences. It is important to use this knowledge responsibly and only for legitimate purposes, such as penetration testing or security research.
{% endtab %}
```xml