新型macOS恶意软件XcodeSpy可通过EggShell后门对Xcode开发人员发起攻击
2021-03-24 11:50:00 Author: www.4hou.com(查看原文) 阅读量:136 收藏

安全研究人员近日发现,一款名为XcodeSpy的全新恶意软件正对iOS开发人员进行供应链攻击,它利用编码平台的脚本功能在受影响的设备上安装macOS后门。

Xcode是苹果创建的免费应用程序开发环境,开发人员利用Xcode创建在macOS、iOS、tvOS和watchOS上运行的应用程序。

攻击者正在滥用苹果 Xcode IDE中的“运行脚本(Run Script)”功能,以通过共享的Xcode项目感染毫无戒心的苹果开发人员。

XcodeSpy是一个恶意的Xcode项目,它在开发人员的macOS计算机上安装了EggShell后门的自定义变体以及持久性机制。

该后门具有录制受害者的麦克风、摄像头和键盘的功能,以及上传和下载文件的功能。

XcodeSpy感染媒介可能会被其他攻击者使用,建议所有使用Xcode的苹果开发人员在采用共享Xcode项目时要谨慎行事。

SentinelOne奇异性可防止XcodeSpy。在本文中,研究人员还提供了一种简单的方法,供开发人员用来扫描其Xcode存储库中的XcodeSpy。

今年,已经出现了两个令人不安的网络攻击新趋势:针对开发人员和使用供应链攻击来感染广大客户。针对软件开发人员是成功进行供应链攻击的第一步。一种方法是滥用执行这项工作所需的开发工具。 2021年1月,Google TAG宣布发现了朝鲜针对安全研究人员和开发人员的活动。其中一种感染方法是共享用于加载恶意DLL的Visual Studio项目。在这篇文章中,研究人员将讨论一个类似的通过恶意Xcode项目针对苹果开发人员的攻击。

研究人员最近得知一个针对iOS开发人员的被木马化的Xcode项目,这要感谢一位匿名研究员提供的消息。该恶意项目是GitHub上一个合法开源项目的篡改版本。该项目为iOS开发人员提供了几个高级功能,用于基于用户交互为iOS Tab Bar设置动画。在ios的程序中,Tab Bar的使用率很高,几个视图需要切换的时候,就用到tab bar。

然而,XcodeSpy版本已经做了细微的改变,在开发人员的构建目标启动时执行一个模糊的运行脚本。该脚本与攻击者的C2联系,并在开发设备上设置一个自定义的EggShell后门。恶意软件安装一个用户LaunchAgent以保持持久性,并能够记录来自受害者的麦克风、摄像头和键盘的信息。

研究人员已经发现了载荷的两个变种:自定义后门,其中包含许多加密的C2 url和加密字符串的各种文件路径。其中一个加密字符串是在修改过的Xcode项目和自定义后门之间共享的,将它们链接在一起,作为同一个“XcodeSpy”活动的一部分。

目前,研究人员注意到一家美国机构发生了一起ITW攻击。研究人员的分析表明,该活动至少在2020年7月至10月期间就已经开始了,可能也针对亚洲开发商进行过攻击。

到目前为止,研究人员还没有发现其他被木马化的Xcode项目样本,也无法估计这种活动的影响程度。然而,从下面提到的已知样本和其他指标来看,XcodeSpy可能还存在其他项目。通过分享这个活动的细节,研究人员希望提高对这个攻击媒介的认识,并强调开发人员是攻击者的高价值目标这一事实。

XcodeSpy使用的隐藏和启动恶意脚本的简单技术可以部署在任何共享的Xcode项目中。因此,所有苹果开发人员在使用第三方Xcode项目时都要小心检查是否存在恶意运行脚本。研究人员提供了一个简单的方法,开发人员可以用它来扫描他们现有的本地Xcode存储库。

滥用Xcode的运行脚本功能

XcodeSpy利用了苹果IDE的内置功能,该功能允许开发人员在启动目标应用实例时运行自定义shell脚本。尽管可以轻松找到所需的技术,但是由于不知道控制台或调试器中是否有执行恶意脚本的指示,因此不了解运行脚本功能的新手或经验不足的开发人员尤其面临风险。

研究人员分析的样本使用了一个合法的开源项目的副本,这个项目可以在Github上找到,叫做TabBarInteraction。为了避免任何疑问,Github项目中的代码没有受到XcodeSpy的感染,开发人员potato04也没有与恶意软件操作有任何牵连。

在修改过的TabBarInteraction版本中,可以在“构建阶段”选项卡中找到混淆的恶意代码。默认情况下,运行脚本面板是不扩展的,这进一步帮助恶意软件避免被偶然检查发现的概率。

点击“揭露”按钮就会发现被混淆的脚本的存在。

可以看到,混淆相当简单,通过将eval替换为echo并在单独的shell中运行脚本,可以安全地检查输出内容。

该脚本在/tmp目录下创建了一个名为.tag的隐藏文件,该文件包含一条命令:mdbcmd。这又通过反向shell管道传递给攻击者C2。

截止发稿时,VirusTotal上的任何静态引擎均未检测到该样本。

把XcodeSpy和一个自定义的EggShell后门联系起来

当研究人员发现恶意的Xcode项目时,cralev[.]me的C2已经脱机了,所以不可能直接确定mdbcmd命令的结果。然而,幸运的是,在VirusTotal上有两个示例的EggShell后门包含了XcodeSpy字符串/private/tmp/.tag。

6d93a714dd008746569c0fbd00fadccbd5f15eef06b200a4e831df0dc8f3d05b
cdad080d2caa5ca75b658ad102987338b15c7430c6f51792304ef06281a7e134

这些样本都是在日本通过网络界面上传到VirusTotal的,第一次是在8月5日,第二次是在10月13日。

另一份样本也于2020年末在美国一名受害者的Mac电脑中被发现。出于保密的原因,研究人员无法提供关于ITW事件的进一步细节。然而,这名受害者报告称,他们多次成为朝鲜APT组织的攻击目标,这种感染是他们定期进行威胁搜寻活动的一部分。

从日本上传到VirusTotal的样本来自于未登录到VirusTotal账户的用户,因此无法判断它们来自同一来源还是两个不同的来源。尽管如此,它们都是通过包含字符串P4CCeYZxhHU/hH2APz6EcXc=来和Xcode项目进行关联的,该字符串原来是在恶意Xcode项目中找到的/private/tmp/.tag字符串的加密版本。

EggShell后门使用简单的字符串加密技术,解密包括将加密的字符串传递给[StringUtil decode:]方法,该方法在base64中对加密的字符串进行编码,然后遍历每个字节,并向其添加0xf0。这将生成一个可打印的ASCII字符代码,然后将其连接起来生成完整的字符串。

基于上面的伪代码,研究人员可以在Objective-C中实现自己的解码器来解密Mach-O二进制文件中的字符串。

对这两种变体中的字符串进行进一步解码,就会发现许多用于从受害者的计算机上传数据的硬编码url。

HTTPS://www.suppro.co/category/search.php?ts=%@ 
HTTPS://www.liveupdate.cc/preview/update.php?ts=%@ 
HTTPS://www.appmarket.co/类别/ search.php中TS =%@? 
HTTPS://www.recentnews.cc/latest/details.php?ts=%@ 
HTTPS://www.truckrental.cc/order/search.php?ts=%@ 
HTTPS://www.everestnote.com/sheet/list.php?ts=%@ 
HTTPS://www.alinbox.co/product/product_detail.php?ts=%@

在有数据存在的地方,所有这些来自后门二进制的域名在9月10日或11日被第一次看到或被第一次查询。

恶意Xcode项目中的域cralev[.]me也于9月10日首次被发现。

修改后的TabBarInteraction Xcode项目在一周前的9月4日首次出现在VirusTotal上。

研究人员可以根据这些数据推测出,攻击者自己可能已经将XcodeSpy项目文件上传到VirusTotal,以便在激活他们的c2之前进行检测。除suppro.co和cralevme域名外,其他域名似乎都处于非活动状态或未注册,可能正在等待将来被使用。有趣的是,VT提供的有关XcodeSpy上传者位置的国家/地区代码为“ZZ”(未知)。

与此同时,EggShell后门变种在大约两个月后(8月5日和10月13日)首次出现在VirusTotal上。如果后门是由受害者而不是攻击者上传的(这一假设绝不是安全的),这将表明第一个自定义的EggShell二进制文件可能是早期XcodeSpy样本的有效载荷。然而,研究人员不能对这些基于现有数据的推测给予很大的信心。研究人员所知道的是,第一个EggShell有效载荷是在已知的dropper前整整一个月上传的,第二个有效载荷是在10月13日在VirusTotal上看到的两个多月前上传的。

EggShell执行行为

在执行时,自定义的EggShell二进制文件会在~/Library/LaunchAgents/com.apple.usagestatistics.plist或~/Library/LaunchAgents/com.apple.appstore.checkupdate.plist上下载LaunchAgent 。这个plist检查原始的可执行文件是否正在运行;如果没有,它会在 ~/Library/Application Support/com.apple.AppStore/.update 上创建一个“主”版本的可执行文件的副本,然后执行它。

EggShell还会在/private/tmp/wt0217.lck处放置一个零字节文件,并在~/Library/Application Scripts/com.apple.Preview.stors处放置一个数据文件。二进制文件中还加密了许多其他文件路径(有关完整列表,请参见本文结尾处的IoC)。几乎所有这些路径都是攻击者自定义的。但是,一个加密的字符串解密为/tmp/.avatmp,这是在公共EggShell存储库中找到的默认路径,用于存储AV捕获的内容。

公开的EggShell repo的源代码包含了各种功能,包括持久化、屏幕捕获和AV录制等。

对在野外和在VirusTotal上发现的编译过的XcodeSpy变体的分析实现了这些以及它们自己的自定义数据编码和键盘记录方法。

检测和缓解

这篇文章的末尾提供了已知的IoC的完整列表。由于所有C2,路径名和加密字符串都是高度可自定义的,并且易于更改,因此它们仅可用作对这些特定样本过去攻击的指标。因此,需要一种行为检测解决方案来完全检测XcodeSpy有效载荷的存在。

安全管理人员和开发人员如果担心自己是否无意中下载了包含XcodeSpy的项目,可以通过以下命令行手动搜索:

find . -name "project.pbxproj" -print0 | xargs -0 awk '/shellScript/ && /eval/{print "\033[37m" $0 "\033[31m" FILENAME}'

这将在同时包含字符串shellScript和eval的Xcode项目(位于project.pbxproj文件中)的“构建阶段”部分中搜索“运行脚本”。如果找到任何内容,它将打印出该脚本的副本以进行检查,以及找到该脚本的文件名。

下面的示例在说明文件夹及其所有子文件夹中搜索XcodeSpy。

用户应在运行命令之前切换到保存Xcode项目的相应父文件夹。

当然,可以通过Xcode项目导航器中的“构建阶段”选项卡检查各个项目中是否存在恶意的运行脚本。

总结

这已经不是攻击者第一次利用Xcode作为攻击苹果平台开发人员的媒介了。早在2015年,XcodeGhost为中国的iOS开发人员提供了一个Xcode版本,从本地镜像下载的速度比从苹果服务器下载的速度更快。收件人不知道的是,他们收到的Xcode版本已被修改,将恶意代码注入任何用它编译的应用程序。使用XcodeGhost编译的应用程序可以被攻击者用来读取和写入设备剪贴板,打开特定的url(如WhatsApp、Facebook),并将数据窃取到c2。实际上,XcodeGhost是一种供应链攻击,通过第三方软件攻击下游受害者。

相反,XcodeSpy采用木马化的Xcode项目的形式,与完整版本的Xcode IDE相比,它更轻便,更易于传播。尽管XcodeSpy似乎直接针对开发人员本身,而不是针对开发人员的产品或客户,但从窃取开发人员的工作环境到向该开发人员软件的用户发送恶意软件,仅是一步之遥。

XcodeSpy完全有可能是针对某个特定的开发人员或开发团队的,但也有其他潜在的高价值受害者。攻击者可能只是在搜寻有趣的目标,为未来的活动收集数据,或者他们可能试图收集AppleID证书,以便在其他使用带有有效苹果开发人员代码签名的恶意软件的活动中使用。这些建议并没有穷尽所有的可能性,它们也不是相互排斥的。

本文翻译自:https://labs.sentinelone.com/new-macos-malware-xcodespy-targets-xcode-developers-with-eggshell-backdoor/如若转载,请注明原文地址:


文章来源: https://www.4hou.com/posts/rBVW
如有侵权请联系:admin#unsafe.sh