新版本 Redline 使用 Lua 字节码逃避检测

2024-09-02 04:28

本文主要是介绍新版本 Redline 使用 Lua 字节码逃避检测,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

近日,研究人员观察到 Redline Stealer 木马的新变种,开始利用 Lua 字节码逃避检测。

遥测分布

根据遥测数据,Redline Stealer 木马已经日渐流行,覆盖北美洲、南美洲、欧洲和亚洲甚至大洋洲。

感染链

1715947302_66474726062e1c41868c3.png!small?1715947300416

感染链

微软官方账户的 vcpky 仓库被攻击者滥用部署了恶意文件,恶意 URL 为 https[:]//github[.]com/microsoft/vcpkg/files/14125503/Cheat.Lab.2.7.2.zip

该压缩文件中包含 MSI 安装程序:

1715947324_6647473ca71cb0f35710d.png!small?1715947322526

MSI 文件

MSI 安装程序包含两个 PE 文件和一个文本文件。

1715947346_66474752306c22b707c30.png!small?1715947344121

文件内容

Compiler.exe 和 lua51.dll 都是 Lua 开发的二进制文件,攻击者会稍微定制化修改这些文件。而 readme.txt 其中包含 Lua 字节码,配合使用可以在运行时编译和执行。

Lua JIT 是 Lua 编程语言的即时编译器(JIT):

1715947366_664747662913f91f0e847.png!small?1715947367098

字节码

通常来说,1B 4C 4A 02也就表示着是 Lua 5.1 字节码。这种方式可以将恶意攻击进行混淆,避免安全软件检测到好识别的脚本文件(如 wscript、JScript 或 PowerShell 脚本),进一步增强了攻击的规避能力。

用户点击执行 MSI 安装程序后,就会显示一个用户界面:

1715947401_66474789a2cf2c4fc3f73.png!small?1715947399646

安装界面

安装过程中会提示用户将恶意软件安装到其他朋友的计算机上,就可以获得完整的应用程序。

1715947416_664747982d5254ce122aa.png!small?1715947414547

提示信息

在安装过程中,可以发现有三个文件被写入 C:\program Files\Cheat Lab Inc\ Cheat Lab\中。

1715947440_664747b03e89f290f4770.png!small?1715947438718

写入文件

后续这三个文件会被移动到指定路径中:

1715947458_664747c20d39897db3273.png!small?1715947456065

特定路径

可以看到,compiler.exe 由 msiexec.exe 执行,并以 readme.txt 作为参数。而 lua51.dll 会被加载到 compiler.exe 中,lua51.dll 是 compiler.exe 运行需要的 DLL,攻击者将该 DLL 文件与程序文件放在一起。

1715947476_664747d445c2b4d3a3770.png!small?1715947474488

操作行为

安装过程中,msiexec.exe 会创建一个计划任务来执行 compiler.exe,并将 readme.txt 作为参数。

1715947574_6647483624611ff34303b.png!small?1715947572191

计划任务

除了上述持久化技术外,恶意软件还使用另一种备用方式确保恶意软件能够得到执行。恶意软件会将前述三个文件复制到另一个文件夹中,路径非常长而且很随机。

1715947599_6647484f575105d6d742c.png!small?1715947597891

文件移动

请注意,compiler.exe 已经改名为 NzUW.exe。随后在 C:\Windows\Setup\Scripts\ 中释放文件 ErrorHandler.cmd。文件的内容如下所示,攻击者以新名称 NzUw.exe 执行 compiler.exe,并以 Lua 字节码作为参数。

1715947615_6647485f16d7a72441348.png!small?1715947613557

执行命令

执行 ErrorHandler.cmd 会调用 system32 文件夹中的恶意文件。

1715947627_6647486be6f40a57a0a99.png!small?1715947626648

进程创建

为此还会创建另一个计划任务,程序不带任何参数启动 C:\Windows\system32\oobe\Setup.exe。

1715947641_6647487935776a86e1474.png!small?1715947639301

计划任务

事实证明,如果将 Payload 放在 c:\WINDOWS\Setup\Scripts\ErrorHandler.cmd 中,则 c:\WINDOWS\system32\oobe\Setup.exe 将在发生错误时加载它。

1715947657_664748890a22d71aaf16a.png!small?1715947655296

官方文档

c:\WINDOWS\system32\oobe\Setup.exe 的执行需要参数,如果不提供参数就会触发错误。从而执行 ErrorHandler.cmd 调用 compiler.exe 加载恶意 Lua 代码。

1715947674_6647489a2ead7358160b3.png!small?1715947672109

进程树

可以确认 c:\WINDOWS\system32\oobe\Setup.exe 以 ErrorHandler.cmd 脚本作为参数启动 cmd.exe,该脚本运行 NzUw.exe。

继续通过 API 查看所在 IP 的信息:

1715947685_664748a543fe2c2b5287e.png!small?1715947683586

IP 信息

IP 相关信息会以 JSON 形式写入 inetCache 文件夹中。

1715947698_664748b25b7120ef11f2b.png!small?1715947696462

写入文件

文件内容如下所示:

1715947712_664748c0b9365d7874709.png!small?1715947713225

文件内容

C&C 通信

恶意软件的 C&C 通信使用 HTTP 协议:

1715947727_664748cfcb450899b22fb.png!small?1715947727173

C&C 流量

C&C 服务器响应了名为 OTMsOTYs 的任务 ID,包含在 base64 编码的字符串中:

1715947740_664748dcc2926ad4c4f91.png!small?1715947742017

响应信息

1715947772_664748fc130da876a71ed.png!small?1715947770244

响应信息

通过 /loader/screen 的 HTTP PUT 请求发送到攻击者控制的服务器。服务器 IP 地址归属于 Redline,许多引擎都将其标记为恶意。

1715947793_664749114962a2430254d.png!small?1715947791819

IP 地址

进一步查看,该数据包传输的是名为 Screen.bmp 的图片文件。值得注意的是,请求使用的 User-Agent 为 Winter。

1715947805_6647491de2d47bd52f721.png!small?1715947804255

PUT 请求

图片如下所示,为回传的受害者的屏幕截图。

1715947820_6647492c21f1c87916a9e.png!small?1715947818500

屏幕截图

字节码

字节码的分析很有挑战,使用很多开源的反编译器可以得到不同的 Lua 脚本。

1715947835_6647493b1cd40d2abd9dc.png!small?1715947833834

反编译

调试过程如下所示:

1715947852_6647494c16f5329eaf79f.png!small?1715947850594

调试信息

通过将数据值传递给两个函数来填充 var_0_19,调试时可以发现 base64 编码的值存储在 var_0_19 中。这些 base64 字符串多是编码数据,而不是字符串。

1715947860_66474954870eb1c774a7b.png!small?1715947858547

函数传递

var_0_19 中的所有数据都会被分配给 var_0_26:

1715947875_66474963a5495a432e5b2.png!small?1715947873693

调试信息

同样的方式填充第二个 table(var_0_20),其中包含编码数据的替换密钥:

1715947886_6647496eac38bfdc0db6d.png!small?1715947885028

解密代码

解密代码如上所示,逐个元素迭代 var_0_26 并进行解密。循环很长并且包含很多垃圾代码,循环结束时将解密的值还给 var_0_26。

1715947900_6647497ca9b5ba62f5077.png!small?1715947898949

恶意代码

1715947912_664749881fdaf2b0056df.png!small?1715947910304

调试信息

断点设置在 1174 行并监测 var_0_26:

1715947924_664749945d86b22cab0f4.png!small?1715947922321

调试信息

当多次命中断点时,监视窗口可以看到更多加密数据:

1715947935_6647499f57daf4d192eb5.png!small?1715947933855

调试信息

解密的字符串例如 var_0_26 中的 Tamper Detected!

加载 LuaJIT 字节码

在加载 LuaJIT 字节码前,会创建一个新状态。每个 Lua 状态都维护其全局环境、堆栈与加载的库,从而在不同的 Lua 代码间提供隔离。

1715947947_664749abc73e690361a6d.png!small?1715947945644

恶意代码

恶意软件使用 Lua_openlib 函数加载库,并加载 debug、io、math、ffi 和其他支持的库。

1715948350_66474b3ebb29fb0e9c085.png!small?1715948348694

恶意代码

使用 lua51 的导出函数 luaL_loadfile 加载 LuaJIT 字节码,会使用 fread 函数读取 JIT 字节码,然后使用 memmove 函数移动到分配的内存。

1715948365_66474b4d03213551e20bb.png!small?1715948362883

调试信息

1715948379_66474b5bc861009ad5ec4.png!small?1715948377758

调试信息

文件中的字节码使用 memmove 函数将字节码从一个偏移量更改为另一个偏移量。使用 memmove 函数复制 JIT 字节码中 200 字节定长数据。

1715948390_66474b668c2489c0b8bb7.png!small?1715948388477

调试信息

获取 table 的值并使用浮点算术或异或指令对其进行处理:

1715948404_66474b746ae305638fd5c.png!small?1715948404084

调试信息

使用 memmove 函数将字节从源缓冲区移动到目标缓冲区。

1715948420_66474b84b46f97fbc9389.png!small?1715948418516

调试信息

进一步分析后,该脚本中将使用变量和参数进行定义:

1715948442_66474b9a8ada11ea1c8ad.png!small?1715948440554

调试信息

API 会使用 ffi 从 Lua 代码中直接访问 Windows API,定义 API 函数如下所示:

1715948462_66474bae20fd1cf7c2c53.png!small?1715948460572

函数信息

它会使用 CreateMutexExW 创建名为 Winter750 的互斥量:

1715948477_66474bbd08d77ff996d53.png!small?1715948475369

调试信息

也会使用 ntdll.dll 中的 LdrLoaddll 函数在运行时加载 dll,使用 LuaJIT ffi 调用该函数。

1715948492_66474bcc93cb80257ed97.png!small?1715948490745

调试信息

使用 ffi 使用 RegQueryValueEx 函数从 Windows 注册表检索 MachineGuid 项。使用 RegOpenKeyExA 打开注册表项SOFTWARE\Microsoft\Cryptography 并从打开的注册表项查询 MachineGuid 的值。

1715948505_66474bd9c23b069bb79fb.png!small?1715948503882

调试信息

使用 ffi 的 GetComputerNameA 函数从 Windows 注册表中检索 ComputerName。

1715948521_66474be97072f6b09585a.png!small?1715948519377

调试信息

收集以下信息并将其发送到 C&C 服务器:

1715948535_66474bf78b8deadf31a04.png!small?1715948534276

回传信息

1715948550_66474c0697b21ae336db4.png!small?1715948548758

回传信息

微软已经从官方存储库中删除了存在问题的文件。

题外话

初入计算机行业的人或者大学计算机相关专业毕业生,很多因缺少实战经验,就业处处碰壁。下面我们来看两组数据:

  • 2023届全国高校毕业生预计达到1158万人,就业形势严峻;
  • 国家网络安全宣传周公布的数据显示,到2027年我国网络安全人员缺口将达327万。

一方面是每年应届毕业生就业形势严峻,一方面是网络安全人才百万缺口。

6月9日,麦可思研究2023年版就业蓝皮书(包括《2023年中国本科生就业报告》《2023年中国高职生就业报告》)正式发布。

2022届大学毕业生月收入较高的前10个专业

本科计算机类、高职自动化类专业月收入较高。2022届本科计算机类、高职自动化类专业月收入分别为6863元、5339元。其中,本科计算机类专业起薪与2021届基本持平,高职自动化类月收入增长明显,2022届反超铁道运输类专业(5295元)排在第一位。

具体看专业,2022届本科月收入较高的专业是信息安全(7579元)。对比2018届,电子科学与技术、自动化等与人工智能相关的本科专业表现不俗,较五年前起薪涨幅均达到了19%。数据科学与大数据技术虽是近年新增专业但表现亮眼,已跻身2022届本科毕业生毕业半年后月收入较高专业前三。五年前唯一进入本科高薪榜前10的人文社科类专业——法语已退出前10之列。

 “没有网络安全就没有国家安全”。当前,网络安全已被提升到国家战略的高度,成为影响国家安全、社会稳定至关重要的因素之一。 

网络安全行业特点

1、就业薪资非常高,涨薪快 2021年猎聘网发布网络安全行业就业薪资行业最高人均33.77万!

 2、人才缺口大,就业机会多

2019年9月18日《中华人民共和国中央人民政府》官方网站发表:我国网络空间安全人才 需求140万人,而全国各大学校每年培养的人员不到1.5W人。猎聘网《2021年上半年网络安全报告》预测2027年网安人才需求300W,现在从事网络安全行业的从业人员只有10W人。

 行业发展空间大,岗位非常多

网络安全行业产业以来,随即新增加了几十个网络安全行业岗位︰网络安全专家、网络安全分析师、安全咨询师、网络安全工程师、安全架构师、安全运维工程师、渗透工程师、信息安全管理员、数据安全工程师、网络安全运营工程师、网络安全应急响应工程师、数据鉴定师、网络安全产品经理、网络安全服务工程师、网络安全培训师、网络安全审计员、威胁情报分析工程师、灾难恢复专业人员、实战攻防专业人员…

职业增值潜力大

网络安全专业具有很强的技术特性,尤其是掌握工作中的核心网络架构、安全技术,在职业发展上具有不可替代的竞争优势。

随着个人能力的不断提升,所从事工作的职业价值也会随着自身经验的丰富以及项目运作的成熟,升值空间一路看涨,这也是为什么受大家欢迎的主要原因。

从某种程度来讲,在网络安全领域,跟医生职业一样,越老越吃香,因为技术愈加成熟,自然工作会受到重视,升职加薪则是水到渠成之事。

黑客&网络安全如何学习

今天只要你给我的文章点赞,我私藏的网安学习资料一样免费共享给你们,来看看有哪些东西。

 1.学习路线图 

 攻击和防守要学的东西也不少,具体要学的东西我都写在了上面的路线图,如果你能学完它们,你去就业和接私活完全没有问题。

2.视频教程

网上虽然也有很多的学习资源,但基本上都残缺不全的,这是我自己录的网安视频教程,上面路线图的每一个知识点,我都有配套的视频讲解。

内容涵盖了网络安全法学习、网络安全运营等保测评、渗透测试基础、漏洞详解、计算机基础知识等,都是网络安全入门必知必会的学习内容。

 (都打包成一块的了,不能一一展开,总共300多集)

因篇幅有限,仅展示部分资料,需要保存下方图片,微信扫码即可前往获取

3.技术文档和电子书

技术文档也是我自己整理的,包括我参加大型网安行动、CTF和挖SRC漏洞的经验和技术要点,电子书也有200多本,由于内容的敏感性,我就不一一展示了。 

 因篇幅有限,仅展示部分资料,需要保存下方图片,微信扫码即可前往获取

4.工具包、面试题和源码

“工欲善其事必先利其器”我为大家总结出了最受欢迎的几十款款黑客工具。涉及范围主要集中在 信息收集、Android黑客工具、自动化工具、网络钓鱼等,感兴趣的同学不容错过。 

 还有我视频里讲的案例源码和对应的工具包,需要的话也可以拿走。

因篇幅有限,仅展示部分资料,需要保存下方图片,微信扫码即可前往获取

 最后就是我这几年整理的网安方面的面试题,如果你是要找网安方面的工作,它们绝对能帮你大忙。

这些题目都是大家在面试深信服、奇安信、腾讯或者其它大厂面试时经常遇到的,如果大家有好的题目或者好的见解欢迎分享。

参考解析:深信服官网、奇安信官网、Freebuf、csdn等

内容特点:条理清晰,含图像化表示更加易懂。

内容概要:包括 内网、操作系统、协议、渗透测试、安服、漏洞、注入、XSS、CSRF、SSRF、文件上传、文件下载、文件包含、XXE、逻辑漏洞、工具、SQLmap、NMAP、BP、MSF…

 因篇幅有限,仅展示部分资料,需要保存下方图片,微信扫码即可前往获取 

  

这篇关于新版本 Redline 使用 Lua 字节码逃避检测的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1128984

相关文章

python中的flask_sqlalchemy的使用及示例详解

《python中的flask_sqlalchemy的使用及示例详解》文章主要介绍了在使用SQLAlchemy创建模型实例时,通过元类动态创建实例的方式,并说明了如何在实例化时执行__init__方法,... 目录@orm.reconstructorSQLAlchemy的回滚关联其他模型数据库基本操作将数据添

Spring配置扩展之JavaConfig的使用小结

《Spring配置扩展之JavaConfig的使用小结》JavaConfig是Spring框架中基于纯Java代码的配置方式,用于替代传统的XML配置,通过注解(如@Bean)定义Spring容器的组... 目录JavaConfig 的概念什么是JavaConfig?为什么使用 JavaConfig?Jav

Java使用Spire.Doc for Java实现Word自动化插入图片

《Java使用Spire.DocforJava实现Word自动化插入图片》在日常工作中,Word文档是不可或缺的工具,而图片作为信息传达的重要载体,其在文档中的插入与布局显得尤为关键,下面我们就来... 目录1. Spire.Doc for Java库介绍与安装2. 使用特定的环绕方式插入图片3. 在指定位

Springboot3 ResponseEntity 完全使用案例

《Springboot3ResponseEntity完全使用案例》ResponseEntity是SpringBoot中控制HTTP响应的核心工具——它能让你精准定义响应状态码、响应头、响应体,相比... 目录Spring Boot 3 ResponseEntity 完全使用教程前置准备1. 项目基础依赖(M

Java使用Spire.Barcode for Java实现条形码生成与识别

《Java使用Spire.BarcodeforJava实现条形码生成与识别》在现代商业和技术领域,条形码无处不在,本教程将引导您深入了解如何在您的Java项目中利用Spire.Barcodefor... 目录1. Spire.Barcode for Java 简介与环境配置2. 使用 Spire.Barco

Android使用java实现网络连通性检查详解

《Android使用java实现网络连通性检查详解》这篇文章主要为大家详细介绍了Android使用java实现网络连通性检查的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录NetCheck.Java(可直接拷贝)使用示例(Activity/Fragment 内)权限要求

C# 预处理指令(# 指令)的具体使用

《C#预处理指令(#指令)的具体使用》本文主要介绍了C#预处理指令(#指令)的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录1、预处理指令的本质2、条件编译指令2.1 #define 和 #undef2.2 #if, #el

C#中Trace.Assert的使用小结

《C#中Trace.Assert的使用小结》Trace.Assert是.NET中的运行时断言检查工具,用于验证代码中的关键条件,下面就来详细的介绍一下Trace.Assert的使用,具有一定的参考价值... 目录1、 什么是 Trace.Assert?1.1 最简单的比喻1.2 基本语法2、⚡ 工作原理3

C# IPAddress 和 IPEndPoint 类的使用小结

《C#IPAddress和IPEndPoint类的使用小结》本文主要介绍了C#IPAddress和IPEndPoint类的使用小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定... 目录一、核心作用网络编程基础类二、IPAddress 类详解三种初始化方式1. byte 数组初始化2. l

C语言逗号运算符和逗号表达式的使用小结

《C语言逗号运算符和逗号表达式的使用小结》本文详细介绍了C语言中的逗号运算符和逗号表达式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习... 在C语言中逗号“,”也是一种运算符,称为逗号运算符。 其功能是把两个表达式连接其一般形式为:表达