如何干净的删除vm_如何在macOS 10.15 Catalina绕过XProtect?

2987330d7397c8cb5c868eb72a0f2605.gif

98434b4070df30298993b53471de73de.png

在macOS 10.15 Catalina中,Apple进行了许多安全性能地改进,包括通过使所有可执行文件都受XProtect扫描来加固系统,而不管文件是否带有com.apple.quarantine位标记。对于安全研究人员而言,这意味着不再像以前的macOS一样,仅通过使用xattr实用程序删除隔离位就可以运行已知的XProtect恶意软件了。这对于用户来说是个好消息,但是对于那些想要探索XProtect样本的更详细的行为细节的研究人员来说,这可能是个问题。在本文中,研究人员将研究研究人员如何绕过这种各种安全功能,并在需要时仍在Catalina上运行已知的恶意软件。

9e6465b147d66709822ef8f807eda40a.png为什么要在Catalina上运行已知的恶意软件

不久之前,研究人员可能不太关心XProtect已知的恶意软件,因为XProtect很少更新,并且没有涵盖macOS研究社区已知的许多攻击。最重要的是,在Catalina之前,XProtect总是很容易被绕过。

然而,时代已经变了,苹果公司终于意识到,Mac电脑在野外正受到各种不同攻击因素的攻击。最近几个月,苹果公司不仅更频繁地更新其内部安全工具,而且还发现了其他研究人员之前面临的一些攻击。但Apple很少共享攻击情报,而且如果攻击被Catalina上的XProtect阻止,则研究人员则无法更深入地研究攻击的工作原理。这种深度探索是必要的,至少有两个原因。首先,研究人员要开发比XProtect使用的遗留方法更有效的缓解措施和阻止措施;其次,研究人员希望能够分析恶意软件的行为并跟踪活动,以便在攻击开始之前采取行动。

9e6465b147d66709822ef8f807eda40a.png如何在Catalina上运行已知的恶意软件样本

鉴于研究人员不能再删除com.apple.quarantine位以允许恶意软件在Catalina上运行了,研究人员必须采取其他策略。

首先,研究人员可以在macOS的早期版本(例如10.14)上运行示例,在这些早期的版本中,研究人员可以使用常规的XProtect绕过。这在某些情况下可能没问题,但这意味着研究人员无法测试特定于Catalina的恶意行为。此外,一旦研究人员升级到10.16及更高版本,测试计算机上的操作系统将越来越落后于实际使用的恶意软件作者所针对的操作系统。最终,研究人员最终会获得一个甚至根本不支持该恶意软件的操作系统,因此从长远来看,还需要另一种解决方案。

第二种可能性是禁用SIP并修改XProtect文件(例如删除所有签名),尽管在实验室设备或专门用于测试恶意软件的VM上执行此操作没有问题,但这个解决方案会带来很多副作用。除非万不得已,不要使用该方案。它的问题是在SIP关闭的情况下,你可能会遇到更多的问题,因为恶意软件在这样一个不寻常的环境中会有不同的行为。恶意软件的开发者知道,真正的用户很少在禁用SIP的情况下运行,因此他们可以使用一种简单的反分析技术来运行csrutil状态,然后相应地退出或改变行为。

第三种可能性是确定样本触发的规则,然后修改样本以避免该规则。XProtect很久以前就不仅仅是一个简单的基于哈希的文件扫描程序了,现在它使用了Yara规则,因此仅仅在示例的末尾添加一两个字节来更改计算的文件散列是行不通的。然而,正如我们将看到的,仍然可以通过一些工作绕过XProtect,但是有几个“陷阱”需要注意,我将在下面解释。

9e6465b147d66709822ef8f807eda40a.png如何在macOS 10.15及更高版本上攻击计算机

当然,研究人员指的是在运行恶意软件之前正确隔离的一次性VM实例的攻击!一旦你处在一个安全的、可任意使用的环境中,第一个任务就是确定恶意软件所针对的规则是什么。就本文而言,我将使用此示例,该示例在发布时未被VT上的任何静态引擎检测到:

174c5712759c4abd2bdfc1b93f4c990011c45aeed236e89c1c864b1e8379c54d

b2bc54f9f447b6b4d12ffc74e801923c.png

在Catalina上,研究人员仍然必须删除com.apple.quarantine位,才能同时满足Gatekeeper(山狮中引入的一项新安全技术,它可保证用户安装来自Mac App Store或者拥有开发者签名的应用)和Notarization 要求(2019年,苹果在10.14.5上新引入的App Notarization机制,要求开发人员上传应用程序之前,将它们提交给苹果,以扫描恶意内容,并查找可能存在的代码签名问题,没有经过苹果检测的应用程序以后可能将不被允许运行)。

$ xattr -rc ~/mdworker_share.app

但是,正如研究人员看到的那样,当尝试引爆样本时,尽管VT不了解这种恶意软件,但XProtect却知道。

7fdbefe7c052bcc8390f0afb2434e294.png

这意味着研究人员首先必须检查研究人员的恶意软件,并将其与XProtect.yara中的规则进行比较以找到匹配项。之前我们已经写过有关如何逆转XProtect签名定义的文章,因此请参阅该文章中的内容。

如果你试图测试已经在VT或其他存储库中发现的恶意软件,那么你可以通过查看恶意软件的检测名称来获得线索,但苹果的新签名并不使用普通的恶意软件名称。如今,苹果公司更喜欢使用无意义的字母数字标识符,如下面所示,来混淆他们所检测的内容:

7cbbf499e8b3079ccade625cc6102763.png

如果像研究人员在此使用的示例一样,你的恶意软件不为杀毒引擎所知,并且被XProtect阻止,那么请先查看更新的XProtect规则。至少在目前,较新的规则往往位于文件的顶部。但研究人员发现经常关注XProtect的更改是很有用的,这样可以查看每次更改的内容,从而使这个过程更快、更容易。

你可能必须根据规则对样本的二进制文件进行grep字符串查找,直到找到匹配项为止。

ca87f84cca2511b6fb7504c3cd99f769.png

在此示例的情况下,事实证明这些字符串与Apple所谓的MACOS.b264ff6的规则匹配,目前,该规则已添加到XProtect v2112中。

825be7a9eec51ae69214f4a1d392a40a.png

研究人员可以将恶意软件样本加载到十六进制编辑器中,并以十六进制搜索规则,以确认样本是否符合要求:

61d232e6a2c709e803b533e5f4fe8e5a.png

当然,请确保你的样本符合指定的确切条件,而不仅仅是一个字符串。对于此规则,研究人员需要从$ a和$ b集合中的字符串中每个击中一个,以及从字符串$ c中获得一个命中。

Macho and filesize < 3000000 and (1 of ($a*)) and (1 of ($b*)) and $c

9e6465b147d66709822ef8f807eda40a.png如何修补二进制文件以绕过XProtect Yara规则

假设该规则在条件中有一个文件大小,我们可以选择将垃圾数据附加到二进制文件的末尾,或者修改规则中指定的一个字符串。该规则表示可执行文件必须小于3MB,而实际上研究人员的样本只有86Kb,因此要添加很多垃圾。不过,将垃圾附加到二进制文件中很容易。这样做可能需要几分钟,但是很容易用条件将数字替换为下面括号中的第二个数字,并且代码会将文件膨胀到所需的大小:

for i in {1..3000000}; do echo '0' >> mdworker_share; done

2fa20b1a4528c198a76aeffaaa7e674a.png

尽管这种方法在这个特定的示例上工作得很好,又可能导致其他样本改变其行为,例如,如果它对自己的文件大小进行自我检查。同样,尽管当前几乎所有XProtect规则都在条件中指定了文件大小,但将来可能不成立。因此,研究人员还应该考虑修补二进制文件,而不仅仅是将垃圾数据附加到二进制文件中。

在修补二进制文件时,需要注意一些“陷阱”,我将在下一部分中列出,但是你要注意的第一个也是最直接的一个是确保你不要更改会破坏的东西,或更改恶意软件的行为。例如,假设研究人员的示例具有在MACOS.b264ff6规则中指定的$ b4字符串:

$b4 = { /usr/sbin/system_profiler }

研究人员不应该只是将其更改为某些垃圾字符串,因为这可能会阻止他们分析的恶意软件正常运行或完全无法执行。相反,研究人员可以将该路径更改为另一个长度相等的路径,然后将system_profiler二进制文件的副本放在研究人员的测试设备上。例如,研究人员可以创建/tmp/sbin/system_profiler

修补程序本身就是使用类似hex Fiend的十六进制编辑器,对规则中出现的每个惟一字符串或十六进制字节进行搜索和替换。如果可以选择,请选择理想情况下只出现在一个地方的代码,以减少破坏样本的风险。

研究人员使用的这个特定示例匹配字符串$ a1,$ b2和$ c,只需要更改其中之一即可发起攻击。字符串$b2看起来像一个方法名,只有当用户取消授权请求时才会调用这个方法名。

$b2 = { didCancelAuthenticationChallenge }

由于我不打算在测试中执行此操作,因此我将在Hex Fiend中更改此方法名称的前几个字符,然后保存二进制文件。

0f0c8fbc83dc7d18660515a4a2bd9f52.png

在最坏的情况下,恶意软件会对其自身的代码完整性进行内部检查,或者你在不影响恶意软件行为的情况下无法找到要更改的值,则可能必须制作此类补丁才能首先通过XProtect进行启动,然后再取消补丁。调试器中的二进制文件,以使其在执行内部检查或修补的代码之前返回其原始状态。这涉及在修补的代码上设置断点(请记住,你必须在出现的任何地方对其进行修补/取消修补),然后在继续之前提供原始值。

9e6465b147d66709822ef8f807eda40a.png修补二进制文件时的一些注意事项

研究人员的示例现在可以运行了,但是在启动它之前,先了解一些陷阱,以确保做的一切都是正确的。

首先,请确保仅替换二进制文件中的字节,而不添加字节。虽然在二进制文件的末尾添加垃圾文件是可以的,但是在二进制文件中创建的任何补丁都不应该添加额外的字节,否则你将移动所有偏移量,代码将无法运行。

其次,确保你的补丁工具能够在不破坏二进制文件的情况下保存它们。例如,Ghidra似乎无法在不破坏二进制文件的情况下进行修补和保存。Hex Fiend可能是你最好的选择,但是其他工具当然也应该起作用。

第三,打补丁时,你将破坏可能存在的所有代码签名。这通常不是问题,因为你将通过删除com.apple.quarantine位来禁用代码签名检查,但是如果你确实需要对二进制文件进行有效的代码签名(例如,如果它检查自己的代码签名)在修补后使用临时签名对它重新签名,或者修补或跳过在二进制文件中返回代码签名检查的方法。

第四,如果你在Catalina上运行了一个示例,但该示例被XProtect阻止,则请勿修补被阻止的同一实例。看起来,无论是通过XProtect还是LaunchServices,卡塔琳娜都记得已被阻止的文件,并且无论你对其进行多少修补,它都将无法运行。因此,在另一台计算机或VM上修补一个干净的恶意软件副本,然后将其转移过来。在尝试启动之前,请记住删除隔离位。

如果你避免了上述所有“陷阱”,那么你现在应该能够引爆恶意软件,,并愉快地继续你的macOS反向工程探索!

9e6465b147d66709822ef8f807eda40a.png样本

mdworker_share.app.zip

791157ca6a1f10ee209ea71ffa0f8c9109028f4d1013d092276a6a7e50e1b2a4

174c5712759c4abd2bdfc1b93f4c990011c45aeed236e89c1c864b1e8379c54d

46724f195ea18e82d833ed92637a20ed95f9afe1ef749aa06c9156f2719ce389

helper.app.zip

0ac25a8dd9134284406248110ad66dbdb7f4ec557570be02fb9f92bee93727bf

fa88ca779f16e7adbe0702db8473883c20b0aaa69a2345d07c81d322ff2bc990

terninal.app.zip

cbc7751d5fcca12d9e7ea2fd90862d14af8d024710ff22f5457a2f8d427b7fee

参考及来源:https://www.sentinelone.com/blog/macos-malware-researchers-how-to-bypass-xprotect-on-catalina/

0acb819e5db02866eab43f34b776aa88.png

ae32d0184ab7763880dd5e1bf98fb736.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/434204.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

activexobject对象不能创建_Oracle数据库用户管理之系统权限和对象权限

【关键术语】Privileges 权限System privileges 系统权限Object privileges 对象权限Grant 授予Revoke 撤消2.1 Oracle 权限概述2.1.1 权限的作用权限(privilege)是指执行特定类型 SQL 命令或访问其他模式对象的权利。Oracle 使用 权限来控制用户对数据的访问以及用户所能执行的…

【啃不完的算法导论】- 动态规划 - 最长公共子序列(概念篇)

以下内容纯是为了熟悉《算法导论》中的内容&#xff0c;高手可略过&#xff0c;其中涉及的书本内容的版权归原作者、译者、出版社所有 求最长公共子序列&#xff0c;一个典型的 动态规划题 和 字符串处理算法&#xff0c;写在这里是希望自己以后能多来看看和改改&#xff0c;温…

python发送邮箱_你知道怎么用Python发送邮件吗?

作者 | 陈熹来源 | 早起Python(ID&#xff1a;zaoqi-python)头图 | CSDN 下载自东方IC前言本文主要对邮件操作基础知识及代码进行介绍&#xff0c;用Python发邮件有哪些优势&#xff1f;批量发送邮件&#xff0c;并且各邮件可以不同高度自定义的定时发送更有效地管理收件箱基本…

centos中安装mysql5.6_CentOS中安装MySQL5.6报错的解决方法

由于项目需要&#xff0c;必须使用最新出来的MySQL5.6社区版本&#xff0c;使用的操作系统是CentOS6.3。然后安装到中途报错如下&#xff1a;file /usr/share/mys由于项目需要&#xff0c;必须使用最新出来的MySQL5.6社区版本&#xff0c;使用的操作系统是CentOS6.3。首先&…

使用Wireshark进行SIP包解析

1. 安装Wireshark 下载Wireshark后&#xff0c;安装很简单&#xff0c;基本上只需要点击“Next”和“I agree”等按钮&#xff0c;不再赘述。 2. Wireshark介绍 参见&#xff1a;http://man.lupaworld.com/content/network/wireshark/Introduction.html copy一下简要介绍&a…

Android-Animations的使用大全之二:Frame Animation和其他

Android-Animations的使用大全之一&#xff1a;Tweened Animations详解 5 Frame-By-Frame Animations的使用方 1 在res/drawable中创建一个xml文件&#xff0c;定义Animation的动画播放序列 anim_nv.xml Xml代码 <animation-list xmlns:android"http://schemas.androi…

wireshark分析SIP协议——注册

SIP 是VOIP目前非常流行的一种协议。有关协议的详细原理参照相关文档。本文通过wireshark抓包分析SIP user agent&#xff08;用户代理客户机&#xff0c;uac&#xff09;与SIPserve之间的交互过程&#xff0c;在拨打SIP电话之前&#xff0c;先需要搭建相应的环境&#xff1a;根…

micropython仿真器_Micropython教程之TPYBoard DIY超声波测距仪实例演示

1.实验目的 1. 学习在PC机系统中扩展简单I/O?接口的方法。 2. 进一步学习编制数据输出程序的设计方法。 3. 学习超声波模块的测距原理。 4. 学习LCD5110接线方法 5. 学习TPYboard控制超声波模块测距。(萝卜学科编程教育tpyboard。com) 2.所需元器件 超声波模块一个 TPYBoard板…

monotouch在ipad中的实例应用--显示图像和文字

本节主要讲述在苹果环境中使用monodevelop开发ipad的一个实例&#xff0c;具体操作如下 1、新建项目 选择monotouch--ipad--Empty project 命名为iPad01 2、添加新文件&#xff0c;选择monotouch--ipad view&#xff0c;命名为showView&#xff0c;这样会在项目中多出来三个文件…

MTU MSS 详解记录

先学习理解一下帧的封装格式&#xff1a; 需要注意的是&#xff0c;区别两种帧封装格式&#xff1a;802标准帧和以太网帧1&#xff0c;在802标准定义的帧格式中&#xff0c;长度字段是指它后续数据的字节长度&#xff0c;但不包括C R C检验码。RFC 1042&#xff08;IEEE 802&a…

通达oa 不允许从该ip登陆_通达OA-命令执行漏洞复现

通达OA-命令执行一、环境安装文件&#xff1a;链接:https://pan.baidu.com/s/1Y78Zs-7Igi4MRE0J_Dp-dQ 提取码:2b3i二、漏洞验证任意文件上传漏洞 /ispirit/im/upload.php本地文件包含漏洞 /ispirit/interface/gateway.php这两个路径不需要登录认证。burp抓包修改数据包上传文件…

mysql数据转存到时序数据库_干货丨如何高速迁移MySQL数据到时序数据库DolphinDB...

DolphinDB提供了两种导入MySQL数据的方法&#xff1a;ODBC插件和MySQL插件。我们推荐使用MySQL插件导入MySQL数据&#xff0c;因为它的速度比ODBC导入更快&#xff0c;导入6.5G数据&#xff0c;MySQL插件的速度是ODBC插件的4倍&#xff0c;并且使用MySQL插件无需任何配置&#…

优秀程序员的45个习惯

摘要&#xff1a;值得打印出来贴在办公室墙上学习实践的箴言。 优秀来自好的习惯。怎样成为优秀的开发人员&#xff1f;图灵公司最近热销的《高效程序员的45个习惯》一书给出了很好的解答&#xff0c;非常值得一读。 这本书的英文原版荣获了有软件奥斯卡之称的Jolt生产效率大奖…

java 类型转换_java中的基本数据类型的转换

本文参考了如下两篇文章:Java中&#xff0c;经常可以遇到类型转换的场景&#xff0c;从变量的定义到复制、数值变量的计算到方法的参数传递、基类与派生类间的造型等&#xff0c;随处可见类型转换的身影。Java中的类型转换在Java编码中具有重要的作用。首先&#xff0c;来了解下…

Activity的四种加载模式(转载)

在多Activity开发中&#xff0c;有可能是自己应用之间的Activity跳转&#xff0c;或者夹带其他应用的可复用Activity。可能会希望跳转到原来某个Activity实例&#xff0c;而不是产生大量重复的Activity。这需要为Activity配置特定的加载模式&#xff0c;而不是使用默认的加载模…

centos 安装tomcat_简单介绍Linux配置mysql,tomcat,Nginx 开机自启动的几个方式

概述一般我们打算把一些服务&#xff0c;例如 mysql&#xff0c;tomcat&#xff0c;Nginx设置开机自启动的话一般是有三四种方式来实现&#xff0c;下面以mysql&#xff0c;tomcat&#xff0c;Nginx做例子来演示。一、使用定时任务 cron 命令创建定时任务来运行 .sh 脚本。在sh…

java 永久代_Java新生代、老生代和永久代详解

前言: 还是面试经常被q&#xff0c;小结一下image.pngJVM中的堆一般分为三部分&#xff0c;新生代、老年代和永久代。1 新生代主要是用来存放新生的对象。一般占据堆空间的1/3&#xff0c;由于频繁创建对象&#xff0c;所以新生代会频繁触发MinorGC进行垃圾回收。新生代分为Ede…

java算法:冒泡排序

java算法&#xff1a;冒泡排序 冒泡排序&#xff1a;不断遍历文件&#xff0c;交换倒序的相邻元素&#xff0c;直到文件排好顺序。冒泡排序的主要优点是容易实现&#xff0c;冒泡排序通常会比选择排序、插入排序慢。 如&#xff0c;对EXAMPLE 字母进行排序&#xff1a; E X…

strlwr,strupr函数

函数原型&#xff1a;extern char *strlwr(char *str) extern char *strupr(char *s) 参数说明&#xff1a;str为要转换的字符串。 所在库名&#xff1a;#include <string.h> 函数功能&#xff1a;将字符串str中的大(小)写字母转换成为小(大)写字母&#xff…

python中的类怎样理解_理解Python数据类:Dataclass fields 的概述(下)

原标题 Understanding Python Dataclasses?—?Part 2 &#xff0c;作者为 Shikhar Chauhan 。这是 Python 最新的 Dataclasses 系列的第二部分内容。在第一部分里&#xff0c;我介绍了 dataclasses 的一般用法。这篇主要介绍另一个特征&#xff1a;dataclasses.field。我们已…