草庐IT

MacOS 上常见的七种混淆技术

Avenger 2023-03-28 原文
MacOS 平台的威胁日渐增多,攻击者也越来越重视针对该平台的用户的攻击,本文将会介绍七种 macOS 上常见的混淆技术。

混淆的 Shell 脚本

Shell 脚本可能是 Linux 平台下最常见的恶意文件,在 macOS 上也不遑多让。许多恶意软件都将 Shell 脚本作为应用程序中的可执行文件,如下所示。

混淆的 Shell 脚本

也有攻击者直接将脚本内置在镜像文件中,通过别名来诱导用户执行:

文件中的脚本

在安装镜像文件时,会看到教育用户打开恶意软件并绕过内置的 Gatekeeper 安全机制。

提示信息

要求用户点击的安装 PKG 图标其实是一个隐藏目录中的 Shell 脚本的别名,名称为 .hidden。该脚本经过轻微混淆,在 /tmp 目录下使用随机 12 个字符创建一个目录后,会完成去混淆执行并删除从同一目录中的数据文件中提取的可执行文件:

/bin/bash -c eval '$(echo ' openssl enc -aes-256-cbc -d -A -base64 -k \ '$archive\'
- in \ '$appDir/$archive\' -out \ '$ tmpDir/$binFile\' xattr -c \ '$tmpDir/\' * chmod 777
\ '$tmpDir/$binFile\' \ '$tmpDir/$binFile\' && rm -rf $tmpDir ')'

混淆的 SHC

Shell Script Compiler 是将 Bash 脚本编译生成可执行文件的技术,尽管这些可执行文件并不能做到完全独立,仍然需要执行环境中包含指定的 Shell。

Shell Script Compiler

SHC 的 -U 参数可以使编译后的二进制文件无法使用 ptrace 进行跟踪,-e 参数支持设置程序终止运行的到期日期。如果使用不同的 -e 参数,相同的脚本就可以生成不同哈希的二进制文件。

Shell Script Compiler

SHC 被 SCSSET 恶意软件大量使用,在野能够持续发现相关样本。从攻击者的角度来看,使得编写无法通过静态分析读取的恶意脚本变得非常简单。而且,通过 -e 参数还能够无限生成不同哈希值的样本文件。

Shell Script Compiler

发现 SHC 编译的二进制文件,唯一的方法就是通过沙盒执行观察其行为。静态检测发现 SHC 编译的二进制文件时可以将其认为是可疑的,编译器生成的独特字符串也利于检测,但实际上只有通过执行才能准确区分是否恶意。

混淆的 Python 脚本

苹果公司已经在 Monterey 12.3 及更高版本的 macOS 设备上取消了对 Python 2.7 的支持,所以针对 macOS 平台的攻击者已经对 Python 不再热衷。

混淆的 Python 脚本

将 Python 脚本打包 .pyc 编译好的 Mach-O 文件仍然是存在的攻击媒介,更常见的则是将框架如 Meterpreter 经过多次 base64 编码混淆处理,这就足以绕过许多检测引擎。

混淆的 Python 脚本

混淆的 Cobalt Strike

Cobalt Strike 在 Windows 平台非常常见,在 macOS 上出现甚少,但也不是完全没有。

2021 年 9 月,OSX.Zuru 发起了供应链攻击,针对使用 iTerm2、Mac 版 MS 远程桌面、SecureCRT 和 Navicat 14 进行投毒。恶意软件使用 UPX 加壳,解压后是一个使用 C 语言编写的 Mach-O 文件。该可执行文件经过混淆,包含超过 4 万个垃圾函数。相同的混淆方式,后来也出现在针对 PyPI 的 pymafka 供应链攻击中。

混淆的 Cobalt Strike

该混淆技术能够通过二进制段的熵和哈希中进行识别。例如,__cstring 段的 MD5 哈希值为 c5a055de400ba07ce806eabb456adf0a,其熵值也能用于静态识别特征:

混淆的 Cobalt Strike

混淆的 AppleScript

AppleScript 一直是被低估的攻击向量,其在 macOS 系统中的存在时间甚至比 Python 都要长。最近几年苹果公司不再给予其过多的关注,但仍然通过 TCC 等其他机制来对其进行限制。

混淆的 AppleScript

AppleScript 能够通过 run-only 选项来生成几乎不可逆向恢复的编译后代码。在野发现的恶意软件中,有使用四字节十六进制字符编码将一个 run-only 的脚本嵌入到另一个脚本中。

混淆的 AppleScript

此类脚本无法使用内置工具进行反编译,需要进行动态分析或者手动的逆向工程。想要静态检测的话,可以检测嵌入的十六进制字符和标记 AppleScript 块结尾的 Magic Number:FADE DEAD。

Poseidon 恶意软件

Poseidon 是攻击框架 Mythic 的 Golang 版本,可以使攻击者操纵失陷主机。最近一次高调的攻击,是针对 Rust 开发社区的 CreateDepression 供应链攻击。

Poseidon 恶意软件

左侧为源代码,右侧是反汇编代码。Poseidon 支持攻击者与失陷主机中间发送与接收文件,还支持获取按键记录、屏幕截图并进行持久化等。已编译的 Poseidon 二进制文件中的字符串具有独特的特征,很容易检测。

Sliver 恶意软件

开源框架 Sliver 被在野使用的越来越频繁,可以通过 DNS、HTTPS、双向 TLS 和 Wireguard 为攻击者提供 C&C 信道。

Sliver 二进制文件多达 10MB 甚至更多,尽管 Sliver 本身不支持混淆或加壳,但在野发现了原始与定制的 UPX 加壳方案。

Sliver 恶意软件

近期发现的 macOS 恶意软件,伪装成 Apple 软件更新二进制文件并在用户的 Library LaunchAgents 文件夹中进行持久化。该攻击避免使用任何 Apple 专有软件,并使用各种免费的工具(UPX、MacDriver 与 Platypus)。

结论

以上介绍的混淆机制并不是全部,攻击者也在不断精进,研究更多、更先进的混淆方式,例如 Pirrit、Adload 与 SliverSparrow 等。

苹果仍然在尝试阻止绕过 Gatekeeper 安全设置的各种下载,预计以后会有更多的恶意软件在初始载荷中就嵌入后续的 Payload,并且结合更多的混淆和规避技术。

有关MacOS 上常见的七种混淆技术的更多相关文章

  1. Unity 热更新技术 | (三) Lua语言基本介绍及下载安装 - 2

    ?博客主页:https://xiaoy.blog.csdn.net?本文由呆呆敲代码的小Y原创,首发于CSDN??学习专栏推荐:Unity系统学习专栏?游戏制作专栏推荐:游戏制作?Unity实战100例专栏推荐:Unity实战100例教程?欢迎点赞?收藏⭐留言?如有错误敬请指正!?未来很长,值得我们全力奔赴更美好的生活✨------------------❤️分割线❤️-------------------------

  2. MIMO-OFDM无线通信技术及MATLAB实现(1)无线信道:传播和衰落 - 2

     MIMO技术的优缺点优点通过下面三个增益来总体概括:阵列增益。阵列增益是指由于接收机通过对接收信号的相干合并而活得的平均SNR的提高。在发射机不知道信道信息的情况下,MIMO系统可以获得的阵列增益与接收天线数成正比复用增益。在采用空间复用方案的MIMO系统中,可以获得复用增益,即信道容量成倍增加。信道容量的增加与min(Nt,Nr)成正比分集增益。在采用空间分集方案的MIMO系统中,可以获得分集增益,即可靠性性能的改善。分集增益用独立衰落支路数来描述,即分集指数。在使用了空时编码的MIMO系统中,由于接收天线或发射天线之间的间距较远,可认为它们各自的大尺度衰落是相互独立的,因此分布式MIMO

  3. git使用常见问题(提交代码,合并冲突) - 2

    文章目录git常用命令(简介,详细参数往下看)Git提交代码步骤gitpullgitstatusgitaddgitcommitgitpushgit代码冲突合并问题方法一:放弃本地代码方法二:合并代码常用命令以及详细参数gitadd将文件添加到仓库:gitdiff比较文件异同gitlog查看历史记录gitreset代码回滚版本库相关操作远程仓库相关操作分支相关操作创建分支查看分支:gitbranch合并分支:gitmerge删除分支:gitbranch-ddev查看分支合并图:gitlog–graph–pretty=oneline–abbrev-commit撤消某次提交git用户名密码相关配置g

  4. ruby - 将对象设置为 nil 是否很常见? - 2

    我正在构建一个应用程序,想知道是否将未使用的对象设置为nil是生产级编码中的常见做法。我知道这只是垃圾收集器的提示,并不总是处理对象。 最佳答案 根据这个thread如果您使用完一个成员对象,将其设置为nil将引发被引用对象被垃圾回收。如果它是局部变量,方法exit将做同样的事情。也就是说,如果您要求将成员显式设置为nil,我会质疑您的设计。 关于ruby-将对象设置为nil是否很常见?,我们在StackOverflow上找到一个类似的问题: https://

  5. ruby - 变量赋值后的 if 语句 - 有多常见? - 2

    我最近与一位同事讨论了以下Ruby语法:value=ifa==0"foo"elsifa>42"bar"else"fizz"end我个人并没有看到太多这种逻辑,但我的同事指出,这实际上是一种相当普遍的Rubyism。我试着用谷歌搜索这个主题,但没有找到任何文章、页面或SO问题来讨论它,这让我相信这可能是一种非常实际的技术。然而,另一位同事发现语法令人困惑,而是将上面的逻辑写成这样:ifa==0value="foo"elsifa>42value="bar"elsevalue="fizz"end缺点是value=的重复声明和隐式elsenil的丢失,如果我们想使用它的话。这也感觉它与Ruby

  6. ruby-on-rails - 用于门户的 Ruby 技术 - 2

    我刚刚看到whitehouse.gov正在使用drupal作为CMS和门户技术。drupal的优点之一似乎是很容易添加插件,而且编程最少,即重新发明轮子最少。这实际上正是Ruby-on-Rails的DRY理念。所以:drupal的缺点是什么?Rails或其他基于Ruby的技术有哪些不符合whitehouse.org(或其他CMS门户)门户技术的资格? 最佳答案 Whatarethedrawbacksofdrupal?对于Ruby和Rails,这确实是一个相当主观的问题。Drupal是一个可靠的内容管理选项,非常适合面向社区的站点。它

  7. ruby - 关于 Ruby 中 Dir[] 和 File.join() 的混淆 - 2

    我在Ruby中遇到了一个关于Dir[]和File.join()的简单程序,blobs_dir='/path/to/dir'Dir[File.join(blobs_dir,"**","*")].eachdo|file|FileUtils.rm_rf(file)ifFile.symlink?(file)我有两个困惑:首先,File.join(@blobs_dir,"**","*")中的第二个和第三个参数是什么意思?其次,Dir[]在Ruby中有什么用?我只知道它等价于Dir.glob(),但是,我对Dir.glob()确实不是很清楚。 最佳答案

  8. iNFTnews | 周杰伦18年前未发布的作品Demo,藏在了区块链技术里 - 2

    当音乐碰上区块链技术,会擦出怎样的火花?或许周杰伦已经给了我们答案。8月29日下午,B站独家首发周杰伦限定珍藏Demo独家访谈VCR,周杰伦在VCR里分享了《晴天》《青花瓷》《搁浅》《爱在西元前》四首经典歌曲Demo背后的创作故事,并首次公布18年前未发布的神秘作品《纽约地铁》的Demo。在VCR中,方文山和杰威尔音乐提及到“多亏了区块链技术,现在我们可以将这些Demos,变成独一无二具有收藏价值的艺术品,这些Demos可以在薄盒(国内数藏平台)上听到。”如何将音乐与区块链技术相结合,薄盒方面称:“薄盒作为区块链技术服务方,打破传统对于区块链技术只能作为数字收藏的理解。聚焦于区块链技术赋能,在

  9. 常见网络安全产品汇总(私信发送思维导图) - 2

    安全产品安全网关类防火墙Firewall防火墙防火墙主要用于边界安全防护的权限控制和安全域的划分。防火墙•信息安全的防护系统,依照特定的规则,允许或是限制传输的数据通过。防火墙是一个由软件和硬件设备组合而成,在内外网之间、专网与公网之间的界面上构成的保护屏障。下一代防火墙•下一代防火墙,NextGenerationFirewall,简称NGFirewall,是一款可以全面应对应用层威胁的高性能防火墙,提供网络层应用层一体化安全防护。生产厂家•联想网御、CheckPoint、深信服、网康、天融信、华为、H3C等防火墙部署部署于内、外网编辑额,用于权限访问控制和安全域划分。UTM统一威胁管理(Un

  10. 关于Qt程序打包后运行库依赖的常见问题分析及解决方法 - 2

    目录一.大致如下常见问题:(1)找不到程序所依赖的Qt库version`Qt_5'notfound(requiredby(2)CouldnotLoadtheQtplatformplugin"xcb"in""eventhoughitwasfound(3)打包到在不同的linux系统下,或者打包到高版本的相同系统下,运行程序时,直接提示段错误即segmentationfault,或者Illegalinstruction(coredumped)非法指令(4)ldd应用程序或者库,查看运行所依赖的库时,直接报段错误二.问题逐个分析,得出解决方法:(1)找不到程序所依赖的Qt库version`Qt_5'

随机推荐