作为一个加密货币挖矿软件,StripedFly常年隐藏在一个支持Linux和Windows的复杂模块化框架后面。它配备了一个内置的TOR网络隧道,用于与命令控制(C2)服务器通信,同时通过可信服务(如GitLab、GitHub和Bitbucket)进行更新和交付功能,所有这一切都使用自定义加密归档。可以说,创建这个框架所付诸的努力确实十分了不起,同样地,它所披露的真相也相当惊人。
背景介绍
2022年,卡巴斯基研究人员在WININIT.EXE进程中遇到了两个惊人的发现,随后的分析揭示了可追溯到2017年的早期可疑代码实例。在此期间,它有效地逃避了分析,并被误归类为加密货币挖矿软件。然而,尽管它确实在服务于这个目的,但这却并非其主要目标。
为此,研究人员决定对收集的样本进行全面分析,唯一的目的就是排除任何不确定因素。分析结果完全出乎意料:这个加密货币挖矿软件只是一个更庞大实体的组成部分。该恶意软件使用了定制的“永恒之蓝”(EternalBlue)SMBv1漏洞来渗透受害者的系统。重要的是,调查剖析了二进制时间戳,表明这个漏洞是在2017年4月之前创建的。值得注意的是,EternalBlue漏洞是“影子经纪人”(Shadow Brokers)组织于2017年4月14日才公开披露的。
这个特殊的蠕虫与其他使用EternalBlue的恶意软件的区别在于其独特的传播模式。它会悄无声息地传播,从而避免了大多数安全解决方案的检测。
感染过程
第一个检测到的shellcode位于WININIT.EXE进程中,该进程能够从bitbucket[.]org下载二进制文件,并执行PowerShell脚本。在最初发现时,感染媒介是未知的。然而,随着调查的逐步深入,研究人员发现了一个与EternalBlue非常相似的SMBv1漏洞。
内核shellcode通过漏洞利用将额外的shellcode注入到用户空间中,然后部署有效载荷,其中包括一个具有插件式可扩展功能的框架,以及一个超轻量级的TOR网络客户端。一旦该过程完成,入口被永久密封,恶意软件会进一步禁用受感染系统上的SMBv1协议。
该蠕虫功能试图依赖漏洞和SSH协议在本地网络中传播,使用在受害者设备上找到的密钥。
【Windows主机上的感染流程】
持久性
为了实现持久性,该恶意软件采用了各种方法,具体行为取决于PowerShell解释器的可用性和授予该进程的特权。通常情况下,该恶意软件在通过漏洞利用安装时以管理权限运行,而在通过Cygwin SSH服务器交付时以用户级权限运行。
如果PowerShell不存在,该恶意软件将用MZ-PE加载程序生成一个隐藏文件,其随机名称位于%APPDATA%目录中。该加载程序包括system.img的副本,并随后在Windows注册表项SoftwareMicrosoftWindowsCurrentVersionRun中以类似GUID的名称注册。
如果安装了PowerShell,其行为将因是否有管理访问权而异。如果有管理权限,它将执行一个PowerShell脚本,该脚本会创建两个具有类似GUID的名称和不同触发器的任务调度器项。这些任务的动作由PowerShell加载脚本运行。
如果没有管理权限,PowerShell脚本加载程序将被放置在HKCUSoftwareMicrosoftWindowsCurrentVersionApplets注册表项中,然后使用以下命令将其注册到HKCUSoftwareMicrosoftWindowsCurrentVersionRun项中:
代码语言:javascript复制C:WindowsSystem32WindowsPowerShellv1.0powershell.exe -W Hidden -
Command "Invoke-Expression((Get-ItemProperty -Path
'HKCU:SoftwareMicrosoftWindowsCurrentVersionApplets').
'%RegValNameFromPrevStep%')".
在PowerShell可用的两种情况下,该恶意软件归档本身的主体将被存储在注册表项SoftwareMicrosoftWindowsCurrentVersionShell中,由Base64编码,并通过上述PowerShell脚本启动。
在Linux主机上,该恶意软件进程隐藏在名称(sd-pam)下。并且有诸多方法来建立持久性:它可以是系统或用户systemd服务、自动启动的.desktop文件,或在合适的/etc/rc*、profile、bashrc或inittab文件中的额外行。该恶意软件可执行文件以随机名称放置在/tmp目录下。
Bitbucket存储库
为了最小化初始漏洞利用的足迹,所有可卸载的元素都封装在加密和压缩的自定义二进制归档中。这个归档被谨慎地托管在合法网站上,巧妙地伪装成标记为“m100”的神秘设备的固件二进制文件。
Bitbucket存储库于2018年6月21日由Julie Heilman的帐户创建,是与该配置文件相关的唯一存储库。
【Bitbucket存储库的内容】
该存储库只包含一个README.md文件,内含项目名称。值得注意的是,Downloads文件夹(通常包含编译后的项目二进制文件)包含五个二进制文件:delta.dat、delta.img、ota.dat、ota.img和system.img。
【该存储库的Downloads文件夹】
该文件夹没有任何版本控制,并且下载计数器仅反映自上次文件更新以来的下载次数。尤其是,system.img文件是用于初始Windows系统感染的真实有效载荷归档。该文件的下载计数器准确反映了自上次更新以来的新感染数量。在分析期间,该文件最后一次更新是在2022年2月24日,截至2022年6月,初始感染数量为16万。然而,截至2023年9月,这个数字已降至6万。
文件ota.img和delta.img用于更新恶意软件,其中ota.img对应Windows版本,而delta.img对应Linux版本。有趣的是,system.img和ota.img功能上是相同的,不过ota.img包含用于完整性验证的补充元数据,而delta.img充当了入侵Linux主机的初始感染有效载荷。
文件ota.dat和delta.dat以及版本文件都是恶意软件检查新更新可用性的工具。然而,值得注意的是,ota.img和delta.img的下载计数器不能准确反映当前感染数量。这是因为恶意软件主要从其C2服务器获取更新,并且只有在C2服务器没有响应时才从存储库下载更新文件。
在分析期间,研究人员从存储库中获得了约100万更新。截止本文撰稿时,Windows系统只有8次更新,Linux系统只有4次更新,这表明存在两种情况:要么活跃感染极少,要么C2服务器保持活跃,并对所有受感染的受害者做出响应。
TOR网络
C2服务器位于TOR网络中,其.onion地址为:
gpiekd65jgshwp2p53igifv43aug2adacdebmuuri34hduvijr5pfjad[.]onion:1111。
为了与C2通信,该恶意软件采用了一个自定义的、轻量级的TOR客户端实现。有趣的是,这种实现似乎并不是基于任何已知的开源TOR实现,因为许多标准的TOR特性(如路由、目录列表、中继、出口节点模式以及对控制协议的支持)都不存在。
该恶意软件会定期启动与C2服务器的TCP连接,发送含有受害者独特ID的信息。然后,它会每分钟发送一个空信标消息。
这个功能所展示的精妙水平是了不起的。攻击者不惜一切代价隐藏C2服务器的目标推动其开发了一个独特而耗时的项目:创建自己的TOR客户端。这种方法在APT和犯罪软件开发者中并不常见,由此也强调了这种恶意软件的高度复杂性。因而,研究人员将其归类为高度先进的威胁。
模板
该恶意软件有效载荷本身的结构是一个单体式二进制可执行代码,旨在支持可插入模块来扩展或更新其功能。这种架构方法是APT恶意软件的标志,每个模块负责实现和注册回调函数,该回调函数在与C2服务器的连接建立或脱机时触发,或者在从C2服务器接收消息时触发。这些模块中的功能分为两类:服务和扩展功能模块。
服务模块
配置存储
该模块通过在Windows版本的HKCUSoftwareClassesTypeLib密钥中创建一个类似GUID的注册表项,安全地存储AES加密的恶意软件配置。Linux版本将该信息隐藏在位于用户主目录中的随机隐藏文件夹中。
升级/卸载
当与C2服务器建立初始连接时,该服务模块会生成一个8字节的受害者ID,存储它,然后与所用的system.img文件的散列一起重用它,用于向服务器返回报告。该模块旨在实现两个特定的命令:
- 服务器发送img的新版本,升级过程由生成的脚本或生成的可执行文件来执行。
- 执行全面卸载。
如果C2服务器脱机时间超过20分钟,并且这种情况持续存在,该模块将尝试下载ota.dat文件(对于Linux来说是delta.dat),然后验证其完整性。如果文件版本发生了变化,那么该模块会通过下载适当的.img文件(Windows版本的ota.img和Linux版本的delta.img)来触发升级过程。
功能模块
反向代理
该模块授予访问受害者网络的权限,并允许代表受害者执行远程操作。
杂项命令处理程序
该模块包含一系列命令,用于与受害者的文件系统交互、捕获屏幕截图、检索系统版本,并获得Linux上的活跃X11显示内容(默认值是Windows上的WinSta0)。它还包含一个能够执行从C2服务器收到的shellcode的命令。
凭据收集程序
该模块运行一个专用线程,每两小时运行一次定期扫描。在扫描过程中,它会从所有活跃用户收集一系列敏感信息。这些信息包括网站登录用户名及密码,以及个人自动填写数据,比如姓名、地址、电话号码、公司和职位。它还获取已知的Wi-Fi网络名称和相关密码,以及来自流行的软件客户软件(如FileZilla、Cyberduck和WinSCP)的SSH、FTP和WebDav凭据。
值得注意的是,Web浏览器对凭据收集的支持不仅限于Chrome、Firefox和Internet Explorer等知名浏览器,还包括一些不太知名的浏览器,比如Nichrome、Xpom、RockMelt、Vivaldi、SaMonkey、Epic Privacy和Brave。
在Linux版本中,它还收集存储在HOME/.ssh中的OpenSSH密钥,将来自HOME /.ssh/known_hosts的主机整理成表,并包括从Libsecret保管库检索秘密信息的功能。然而,这个特殊的功能目前存在缺陷,因为在链接的musl libc库中没有dlopen API实现。
可重复的任务
该模块拥有一些内置的功能任务,这些任务可以执行一次,也可以在可重复的调度基础上执行,条件是这些任务必须在特定窗口可见。
以下是对任务的简要描述:
- 获取屏幕截图,并列出在那一刻可见的所有窗口。
- 使用给定的命令行执行进程,重定向其输出,并使用正则表达式对其进行过滤。
- 记录麦克风输入。
- 该任务收集具有特定扩展名的文件列表,例如与图像、文档、声音、视频、归档、数据库、证书、源代码文件相关的文件及其他关键的用户数据文件。此进程扫描所有本地驱动器和网络共享区,系统文件夹除外。这是在Linux版本的恶意软件中唯一有效的任务。
侦察模块
该模块编译大量的系统信息,并在连接时将其传输到C2服务器。收集的数据包含广泛的详细信息,包括操作系统版本、计算机名称、硬件MAC地址列表、Windows系统的当前用户名、Linux系统的/etc/passwd文件、设备IP地址、当前连接的TOR网络出口节点的IP地址、系统启动时间、恶意软件正常运行时间、时间及时区,总内存/可用内存量、用户管理权限以及特定的Windows相关信息,如UI语言和键盘布局、存在的防病毒软件、NetBIOS名称、DNS域、机主的Windows许可证详细信息以及存在的PowerShell命令解释器。
SMBv1和SSH感染程序
还有两个模块专门用于恶意软件的渗透能力,它们构成了核心的蠕虫功能。
一旦凭据收集模块完成其任务,SSH感染程序就会启动,它会过滤SSH密钥和凭据的搜索结果,一旦找到,就激活专用线程。该线程的随机超时中断时间从10分钟到2小时不等,并启动渗透进程。首先,它从缓存或直接从bitbucket[.]org检索delta.dat和delta.img。然后,它进而验证这些文件的完整性,从delta.img动态加载libay库、zlib库和libssh2库。下一步是尝试连接到远程SSH服务器。如果连接成功,它调用并解析/bin/sh -c ' uname -nmo '命令的输出。如果远程系统受支持,恶意软件将其二进制文件以随机名称上传到远程的/tmp文件夹,并以命令/bin/sh -c 'cat > %s; chmod x %s; nohup sh -c "%s; rm %s" &>/dev/null'执行该文件。这个方法确保了与x86、amd64、arm和aarch64 Linux CPU等架构兼容,并使用生成的MZ-PE加载程序与Cygwin x86和amd64远程主机兼容。
SMBv1感染模块使用自定义的EternalBlue漏洞利用代码,作为Windows受害者的主要渗透工具。在初始执行时,它会立即通过修改受害者系统上的HKLMSYSTEMCurrentControlSetServicesLanmanServerParameters注册表项来禁用SMBv1协议。然后,它会启动两个专用线程来执行定期的蠕虫程序。
第一个线程负责检查网络适配器的IP地址和子网掩码,然后,它会试图在整个局域网子网内引起感染;第二个线程则定期尝试选择一个随机的互联网IP地址,以下地址排除在外:
- Bogon网络,如0.0.0/8、10.0.0.0/8、100.64.0.0/10、 127.0.0.0/8、172.16.0.0/12、192.168.0.0/16、198.18.0.0/15、224.0.0.0/4和240.0.0.0/4。
- 255.0.0/16——主要指南非。这可能是一个漏洞,开发者可能意指169.254.0.0/16——bogon网络列表中缺失的部分。
- 0.0.0/8、15.0.0.0/8、16.0.0.0/8、56.0.0.0/8——-亚马逊、惠普和美国邮政部等。
- 0.0.0/8和55.0.0.0/8——美国陆军信息系统司令部。
- 0.0.0/8、11.0.0.0/8、21.0.0.0/8、22.0.0.0/8、26.0.0.0/8、 28.0.0.0/8、29.0.0.0/8、30.0.0.0/8、33.0.0.0/8、214.0.0.0/8和215.0.0.0/8——美国国防部网络信息中心。
受支持的Windows版本包括Windows Vista、Windows 7、Windows Server 2008 R2、Windows 8、Windows Server 2012和Windows 10(直至build 14392)。
门罗加密货币挖矿模块
锦上添花的是Monero挖矿模块。它在一个单独的进程中运行,并巧妙地伪装成位于GoogleChromeApplicationServices目录中的chrome.exe进程,该目录可以在公共或本地AppData目录中找到。这种欺骗性的外观甚至包括对伪装的可执行文件的版本信息和进程图标的更改。主模块中的恶意软件功能定期监视木偶挖掘进程,并在必要时重新启动它。它还向C2服务器如实报告哈希率、工作时间、发现的错误和错误统计信息。
池服务器(pool servers)的DNS解析被巧妙地隐藏在针对Cloudflare DoH(DNS over HTTPS)服务的DNS over HTTPS请求的后面,为其操作增加了额外的隐形层。
研究人员强烈怀疑,这个模块就是恶意软件能够长时间逃避检测的主要原因,它的存在主要是出于巧妙伪装的需要。值得注意的是,该模块挖掘的门罗币于2017年徘徊在10美元左右,后于2018年1月9日达到了542.33美元的峰值。截至2023年,其交易价约为150美元。虽然这个模块肯定是有利可图的,但它不一定是这种恶意软件最赚钱的用途。例如,寻找未加密的二进制钱包或钱包凭据可能会产生更高的利润。
此外,该恶意软件代码中存在与挖矿相关的未加密字符串,也从侧面证明了其潜在的辅助用途。
ThunderCrypt
在分析过程中,研究人员偶然发现了该恶意软件的早期版本,这促使其发现了一个相关的勒索软件变体:ThunderCrypt。事实证明,这两种恶意软件共享相同的底层代码库,更重要的是,它们与位于ghtyqipha6mcwxiz[.]onion:1111的同一台C2服务器通信。
与StripedFly相比,ThunderCrypt勒索软件展现了惊人相似的功能和模块。其中包括TOR客户端、配置存储、升级/卸载和侦察模块,一个值得注意的例外是没有SMBv1感染模块。有意思的是,该勒索软件使用可重复任务模块的文件列表组件作为其勒索加密进程的组成部分。
遥测数据显示,ThunderCrypt首次出现于2017年4月23日,活动的主要高峰期出现在随后的5月份。有趣的是,因为一件趣事它引起了中国台湾新闻网的注意。据报道,一名中国台湾网民因无法支付0.345比特币的勒索赎金以换取解密内容,决定通过提供的支持电子邮件地址与攻击者联系。他在邮件中坦率地解释了面临的困境,称其月收入只有400美元。令许多人吃惊的是,攻击者回复承认高估了中国台湾民众的收入,这次攻击被认为是一次彻底失败的尝试。
【台湾新闻网关于ThunderCrypt的报道】
EternalBlue
研究人员评估称,EternalBlue漏洞与StripedFly背后的开发者间存在相似之处。研究人员的假设依赖PE时间戳的准确性,虽然不可能验证初始EternalBlue模块时间戳的真实性,但恶意软件的后续更新含有与遥测数据大致匹配的时间戳,因此初始时间戳很可能也是准确的。研究人员重构的时间线如下:
- 2016年4月9日:PE时间戳表明,StripedFly最早的已知版本包含EternalBlue。
- 2016年8月:Shadow Brokers组织首次泄密。
- 2017年3月14日:微软发布安全公告MS17-010,引入了EternalBlue漏洞的补丁。
- 2017年4月14日:Shadow Brokers发布了含有EternalBlue漏洞的泄露信息。
- 2017年4月15日:第一个包含EternalBlue的勒索软件ExPetr出现。
- 2017年4月20日:出现了最早版本的ThunderCrypt勒索软件(不含EternalBlue)。
- 2017年4月23日:首次在遥测数据中检测到ThunderCrypt。
- 2017年5月12日:WannaCry勒索软件利用EternalBlue进行攻击。
- 2017年6月27日:ExPetr攻击使用EternalBlue。
- 2017年8月24日:在初始PE时间戳提供的日期一年后,遥测数据首次检测到StripedFly。
综上所述,这些不同的数据表明了与Equation恶意软件的相似之处,尽管没有直接证据表明它们存在关联。
结 语
StripedFly活跃了很多年,但却成功逃避了检测,无疑实现了其预期目的。许多高调和复杂的恶意软件已被调查过,但这个软件能够脱颖而出,确实值得关注和认可。
至于该恶意软件的真正目的至今仍然是个谜。虽然ThunderCrypt勒索软件表明开发者存在商业动机,但它也抛出了一个问题:为什么他们不选择可能更有利可图的途径?勒索软件团伙通常旨在获取匿名赎金,而这个案例似乎一反常态。
这个问题至今无解,相信只有那些设计这个神秘恶意软件的人知道答案。鉴于所有的证据都与此相反,很难接受这样一种观点,即如此复杂和设计精妙的恶意软件会服务于如此微不足道的目的。
【FreeBuf粉丝交流群招新啦!
在这里,拓宽网安边界