Fake-SMS恶意软件混淆分析——低代码的时代来了

写在前面的话

在安全社区中,只要聊到开源代码使用方面的话题,就肯定会聊到安全问题。虽然使用开源代码通常会被认为是安全的,但我们需要清楚的是,与非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 KBMD5:D5C8063A0A5F4292D616BFC5C3FCEB47SHA-256:7673072621F94777F1DF767103F8052299A84692D2598C71EA340F722113DD55

参考资料

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

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

https://drvoip.com/wtf_otw/

Null Byte — The aspiring white-hat hacker/security awareness playground « Null Byte :: WonderHowTo

SP 800-83 Rev. 1, Guide to Malware Incident Prevention and Handling for Desktops and Laptops | CSRC

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/

GitHub - machine1337/fake-sms: A small and efficent script to send SMS all over the world anonymously

Deobfuscate/Decode Files or Information, Technique T1140 - Enterprise | MITRE ATT&CK®

参考链接

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

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

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

相关文章

Hive on spark源码编译与调优

文章目录 一、编译环境准备1、hadoop和hive安装2、编译环境搭建3、Hive on Spark配置 二、Hive相关问题1、Hadoop和Hive的兼容性问题1.1 问题描述1.2 解决思路1.3 修改并编译Hive源码 2、Hive插入数据StatsTask失败问题3.1 问题描述3.2 解决思路 3、Hive和Spark兼容性问题3.1 问…

【Android surface 】二:源码分析App的surface创建过程

文章目录 画布surfaceViewRoot的创建&setView分析setViewrequestLayoutViewRoot和WMS的关系 activity的UI绘制draw surfacejni层分析Surface无参构造SurfaceSessionSurfaceSession_init surface的有参构造Surface_copyFromSurface_writeToParcelSurface_readFromParcel 总结…

【Hive上篇: 一篇文章带你使用Hive!深入了解Hive!学会Hive!】

前言: 💞💞大家好,我是书生♡,本篇文章主要分享的是大数据开发中hive的相关技术,什么是Hive?怎么使用Hive?怎么安装部署?希望大家看完这篇文章会有所帮助。也希望大家能够…

Depth maps转点云

前言 本文主要记录一下如何可视化相机位姿,如何用Blender得到的深度图反投影到3D空间,得到相应的点云。 Refernce https://github.com/colmap/colmap/issues/1106 https://github.com/IntelRealSense/librealsense/issues/12090 https://medium.com/yod…

【详细讲解下Photoshop】

🎥博主:程序员不想YY啊 💫CSDN优质创作者,CSDN实力新星,CSDN博客专家 🤗点赞🎈收藏⭐再看💫养成习惯 ✨希望本文对您有所裨益,如有不足之处,欢迎在评论区提出…

鸿蒙 Failed :entry:default@CompileResource...

Failed :entry:defaultCompileResource... media 文件夹下有文件夹或者图片名称包含中文字符 rawfile 文件夹下文件名称、图片名称不能包含中文字符

地理空间分析中的深度学习应用

深度学习与地理信息系统 (GIS) 的结合彻底改变了地理空间分析和遥感的格局。这种结合将遥感和地理空间分析领域带到了全球研究人员和科学家的前沿。 深度学习是机器学习的一个复杂子集(更多关于机器学习的内容,请参阅我的其他文章)&#xff0…

绿色地狱steam叫什么 绿色地狱steam怎么搜

绿色地狱steam叫什么 绿色地狱steam怎么搜 《绿色地狱》是一款以亚马逊雨林为背景的开放世界生存模拟游戏。玩家们扮演一名被困在丛林中的冒险者,玩家在游戏内需要学习采集资源、建造庇护所、狩猎和烹饪食物,同时要面对丛林中的危险和挑战,…

太好玩了,我用 Python 做了一个 ChatGPT 机器人

毫无疑问,ChatGPT 已经是当下编程圈最火的话题之一,它不仅能够回答各类问题,甚至还能执行代码! 或者是变成一只猫 因为它实在是太好玩,我使用Python将ChatGPT改造,可以实现在命令行或者Python代码中调用。…

langchain 链式写法-使用本地 embedding 模型,Faiss 检索

目录 示例代码1 示例代码2 示例代码1 使用本地下载的 embedding 模型去做 embedding,然后从中查相似的 import os from dotenv import load_dotenv from langchain_community.llms import Tongyi load_dotenv(key.env) # 指定加载 env 文件 key os.getenv(DAS…

ansible创建用户账户和更新ansible库的密钥

1.创建⽤户帐户 从 http://materials/user_list.yml 下载要创建的⽤户的列表,并将它保存到 /home/greg/ansible 在本次考试中使⽤在其他位置创建的密码库 /home/greg/ansible/locker.yml 。创建名为 /home/greg/ansible/users.yml 的 playbook ,从⽽…

探索顶级短视频素材库:多样化选择助力创作

在数字创作的浪潮中,寻找优质的短视频素材库是每位视频制作者的必经之路。多种短视频素材库有哪些?这里为您介绍一系列精选的素材库,它们不仅丰富多样,而且高质量,能极大地提升您的视频创作效率和质量。 1.蛙学网 蛙学…

springboot+Vue项目部署到云服务器上

一、下载配置ngnix 1.压缩包下载并上传 链接: https://pan.baidu.com/s/1m2LKV8ci4WXkAWdJXIeUFQ 提取码: 0415 2.解压 tar -xzvf 压缩包名 3.编译nginx 在解压好的文件夹下,依次执行: ./configure 来到nginx默认安装路径/usr/local/nginx 依次执行命令 mak…

【鸿蒙开发】饿了么页面练习

0. 整体结构 整体划分3部分。店铺部分,购物车部分,金额统计部分。使用 Stack 把3部分堆叠 0.1 整体页面 Index.ets 修改 Index.ets ,使用堆叠布局,并居底部对齐 import { ElShop } from ../components/ElShop import { ElShopp…

C#版Facefusion ,换脸器和增强器

C#版Facefusion ,换脸器和增强器 目录 说明 效果 项目 调用代码 说明 Facefusion是一款最新的开源AI视频/图片换脸项目。是原来ROOP的项目的延续。项目官方介绍只有一句话,下一代换脸器和增强器。 代码实现参考 https://github.com/facefusion/f…

软件工程及开发模型

根据希赛相关视频课程汇总整理而成,个人笔记,仅供参考。 软件工程的基本要素包括方法、工具和(过程) 方法:完成软件开发的各项任务的技术方法; 工具:运用方法而提供的软件工程支撑环境&#xff…

基于STM32的RFID智能门锁系统

本文针对RFID技术,着重研究了基于单片机的智能门锁系统设计。首先,通过链接4*4按键模块与主控STM32,实现了多种模式,包括刷卡开锁、卡号权限管理、密码开锁、修改密码、显示实时时间等功能。其次,采用RC522模块与主控S…

【学习笔记十四】EWM发货流程概述及相关配置

一、EWM发货流程与ERP集成配置 1.将凭证类型从 ERP 系统映射至 EWM ERP交货单凭证类型LF映射到EWM凭证类型OUTB 2.从 ERP 系统映射项目类型至 EWM ERP交货单凭证类型+ERP交货单项目类型TAN映射到EWM项目类型是ODLV 3.定义出库交货的参数文件 ①定义外向交货处理的凭证类型OUT…

Mamba论文笔记

Mamba论文 结合序列建模任务通俗地解释什么是状态空间模型?创新点和贡献 为什么Mamba模型擅长捕获long range dependencies? 结合序列建模任务通俗地解释什么是状态空间模型? 状态空间模型(State Space Model, SSM)是…

举个栗子!Tableau 技巧(270):用 Lookup 函数创建多 KPI 文本表

在 Tableau 中,文本表常用于呈现明细数据。但其实,数据粉如果想在同一视图中查看多个数据指标,也可以用到文本表。 如下示例,是不是很直观的就可以查看:不同区域随时间推移的数据指标情况呢? 如何在 Tablea…