freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

Fake-SMS恶意软件混淆分析——低代码的时代来了
2024-03-28 22:18:45

写在前面的话

在安全社区中,只要聊到开源代码使用方面的话题,就肯定会聊到安全问题。虽然使用开源代码通常会被认为是安全的,但我们需要清楚的是,与非FOSS(自由与开源软件)解决方案相比,开源软件解决方案并不能保证完全的可信任度或更好的安全性。那么关键问题就出现了:即使代码经过了混淆处理,我们是否仍应该使用FOSS?答案肯定是否定的,而且这样的代码并不应该被视为FOSS。

先让我们一起回头看看恶意软件的定义到底是什么?恶意软件可以被描述为在未经用户意识或许可的情况下执行操作,导致计算机系统或网络出现问题的软件。恶意软件的类型非常多,比如说蠕虫、RootKit、病毒、木马和间谍软件等。虽然它们的复杂程度和绕过安全检测的能力可能有很大差异,但影响都是非常严重的。

本文由Aleksa Majkić于2024年3月24日发表于Medium。在这篇文章中,我们将深入研究一个开源工具中隐藏恶意代码的典型案例,并给大家演示如何通过经过混淆的恶意代码来追、分析和识别威胁行为者。实际上,我们其实可以将手头上的任何代码都想象成是恶意代码,而我们可以和任何安全分析人员一样,去对代码进行分析和审计。除此之外,本文还将涉及到Git库的取证分析、代码加密、压缩和混淆相关的内容。

一切是如何开始的?

在一个寒冷冬天的早晨,当时我正在做我本该做的事情,当我在浏览Twitter时,意外地发现了一个内容包含“Fake-SMS”的开源工具介绍推文。虽然这个项目目前已经不是恶意软件了,但早在2022年它当时还是一个恶意软件。该项目包含恶意代码的持续时间我们不得而知,但我分析后发现它至少有一个月的时间存在恶意代码。

一段Python代码,就可以免费发送短信,这听起来就很nice吧?当然了,这必不可能是真的,下载下来之后,我系统的安全警报就biubiubiu了。毫无疑问,我遇到了恶意软件,出于我的“本能”,我打算对其进行进一步的分析。从推文来看,这篇推文貌似还是来源于受信任的源,于是我便点进去研究了一下这位名为“three_cube”的安全专家所发布的一些文章。但我却发现他所发的文章很多信息和观点都是矛盾的,似乎他完全就是一个菜鸟。更可怕的是,还有一些内容甚至要付费才能阅读。即便是如此,这位大哥仍然得到了David Bombal和Null Byte等专家的认可。

环境搭建和工具准备

在开始启动并分析恶意软件之前,工作环境是至关重要的。我们可以选择虚拟环境或一个单独的物理系统进行分析,每种选择有各自的优势,具体看自己。然后就是为测试系统接入网络了,我们建议创建一个隔离网络环境,因为我们的控制措施越强,遇到安全问题的概率就越低。

环境配置好之后,就要选择分析所使用的工具了。针对这一个恶意软件样本,我将完全依赖于静态分析方法,也就是在不运行代码的情况下进行分析。考虑到这个样本的“业余”属性,我也不需要其他的工具来解决它的混淆处理、打包或代码加密等问题。虽然监控恶意软件在执行过程中的行为可能更容易进行分析,但我的这种取证分析方法相对来说更安全一些。当然了,你也可以选择动态分析和静态分析相结合的方式,效果可能会更好一些。

Fake-SMS推文分析

由于在本文撰写之时,之前的推文已经无法访问了。为此,我提供了一个【Wayback链接】给大家访问和查看。

文章中提及到一个没有包含任何混淆处理代码的Bash脚本,而该项目却是采用Python开发的,通过查看其代码库的commit历史,我发现它压根就和Bash没关系。但是在搜索资料之后,我发现2021年7月份geeksfoeks.com网站上出现了一篇宣传该工具的旧文章,这证实了该项目最初是用Bash编写的。

这也就意味着,很有可能对该项目的commit历史进行了修改,要么就是删除了原本Bash版本的分支,要么就是用Python版本的代码使用相同的URL直接取代了原始项目。

时间线分析

下图显示的就是我通过资料收集之后,整理出来的Fake-SMS时间线:

我能找到的旧版本代码托管在linuxquestions.com网站上,因为当时有一名用户在该网站上就Fake-SMS工具中存在混淆代码的事情发帖求助过。如果你感兴趣的话,可以看看旧版本的Fake-SMS源码:

从代码来看,最初Fake-SMS的Bash版本除了每天发送一条免费短信所需的代码外,不包含任何其他代码,那么恶意代码很可能就是在2021年至2023年间由原作者添加的。

Git代码库分析

访问Fake-SMS的代码库【GitHub传送门】(该代码库仍然可以访问)后,我发现了以下几点内容:

1、脚本本身体积不小,每天发送一条短信的效率也很低;

2、安装指引写的不够好,而且它不建议创建虚拟环境,而是建议全局安装;

3、需要安装一个不必要的软件包termcolor,而这个包对于短信发送来说没有意义,其目的就是格式化ASCII字符;

4、以这种方式发送短信并不是真正匿名的,因为IP地址仍然可以泄漏你的信息;

5、命令行ASCII字符与文章中显示的不同;

6、项目使用Python开发,而非Bash。我们知道该项目以前是Bash写的,在某个时候变成了Python,而使用不同的编程语言重写一个项目的情况比较少见;

7、代码库没有Issues页面,也就是无法提交错误信息;

8、该代码库只有一个相关的近期commit(2023年11月14日),信息为“error fix”,这也说明这个项目的Git历史被修改过;

在对该项目的Fork进行分析时,我发现了两个老版本且仍然可以访问的Fork,两个Fork的时间都是2022年11月,即hxlxmjxbbxs/fake-sms和Doru991/fake-sms。乍一看,这些Fork的代码与当前项目代码惊人的相似,不过commit历史有很大的区别。下图显示的是一个Fake-SMS Fork的commit历史:

由此看来,Python版本的代码似乎来源于2021年10月30日的初始commit(7688162)。通过分析之后,我能够确定恶意代码就是在2022年11月12日的一次commit(3d620ea)中出现的。这个版本的代码中,开发者想隐藏的远远不止所使用的公共API,而且代码经过了混淆处理:

抽丝剥茧-代码深入分析

为了彻底弄清楚恶意代码的行为,我们不得不去对代码进行抽丝剥茧的分析,但我知道最终的结果一定是好的,因为在使用解释型语言时,最终必须要给解释器一些它所能理解的东西。换句话说,代码必须在某个时刻执行。这些代码的混淆处理其实做得并不好,我直接用eval命令和print语句就搞定了第一层混淆和后续的混淆。当然了,没能拿到明文信息,到手的却是另外的混淆层。下图显示的是第二层经过混淆处理的代码:

就像解决第一层混淆一样,我用eval和print处理了一下,得到了如下内容(第三层混淆代码):

继续上述操作,得到第四层混淆代码:

通过重复相同的过程,我得到了更多的模糊代码层,它们使用了不同的模糊技术组合。下图所示为第五层混淆代码:

下图为第六层混淆代码:

下图为第七层混淆代码:

最后一层(第八层)模糊代码层如下所示:

最后,经过了最后一次eval+print的替换,拿到了最终的核心内容。下图所示即为Fake-SMS经过反混淆处理后的源代码:

为了更好地理解这个恶意软件,下面的代码只包含了该工具的恶意代码部分:

对代码进行分析后,我发现Linux和Windows系统都会启动一个远程文件下载任务,这也就意味着,目标用户的设备上运行该脚本之后,威胁行为者将能够执行远程代码执行(RCE)攻击。

为了进行对比,我先提供可以真正每天发送一条短信的代码:

很明显,工具并没有完全实现其承诺的功能。虽然它会提示用户输入消息,但实际的消息从未被发送出去。换句话说,就是输入的消息已被存储,但从未被使用,发送的只有“Hello World”。因此,你不仅无法每天发送一条免费短信,反而感染了恶意软件。

谁是背后的始作俑者?

到底是谁?为什么要这样做?此时我只想说一句:“掘地三尺我也要把你找出来!”

在查看了该项目GitHub的账户资料之后,我发现大多数的社交媒体链接已经被删除了,尽管如此,GitHub的commit历史还是能发现一些有价值的信息的。在查看了初始commit之后,我推断出了他就读大学的名称,他的LinkedIn资料和其他相关信息(地理位置和当前雇主等等)。对于经验丰富的人来说,信息收集工作其实并不困难,几分钟的事而已。他的真名是Sikander Rasheed,下面是他资料README的链接:

而且我还找到了他的Y0uTube频道链接,他的Y0uTube给我一种“黑客高手”的感觉:

下面是他的Telegram:

最讽刺的是,他自称自己是一个“好人”,是一个“红队专家”或“漏洞Hunter”,但是却对开源社区造成了这样严重的影响。

总结

本文旨在强调一个事实,即恶意软件其实并不需要多么出众或复杂才能取得成功。其实根本不用花大量精力去寻找0 day,也可以实现恶意目的。这也就意味着,很多缺乏经验的开发者很可能就会受到这种威胁的影响,因为很多人在GitHub上下载了代码之后会直接运行和使用。所以,我们一定要对使用的所有代码保持警惕!

最后给大家一句建议:“你不为产品付费,那你就是产品!”

IoC

文件名:fakesms.py

文件大小:1.66949844360352 KB

MD5:D5C8063A0A5F4292D616BFC5C3FCEB47

SHA-256:7673072621F94777F1DF767103F8052299A84692D2598C71EA340F722113DD55

参考资料

https://twitter.com/three_cube/status/1618948587513352193

https://www.y0utube.com/@davidbombal

https://drvoip.com/wtf_otw/

https://null-byte.wonderhowto.com/

https://csrc.nist.gov/pubs/sp/800/83/r1/final

https://www.hackers-arise.com/post/social-engineering-attacks-creating-a-fake-sms-message

https://web.archive.org/web/20231208160803/https://www.hackers-arise.com/post/social-engineering-attacks-creating-a-fake-sms-message

https://www.linuxquestions.org/questions/linux-newbie-8/how-to-de-obfuscate-bash-script-i-think-i%27m-hacked-4175700270/

https://github.com/machine1337/fake-sms

https://attack.mitre.org/techniques/T1140/

参考链接

https://medium.com/@aleksamajkic/fake-sms-how-deep-does-the-rabbit-hole-really-go-17e25c42f986

# 恶意代码分析 # 代码分析 # 代码安全 # 代码混淆 # 静态代码分析
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录