.NET恶意软件-对Snake Keylogger的深入分析
person 发表于 广东 历史精选 1727浏览 · 2024-06-27 17:03

简述

一封恶意电子邮件,内含Snake Keylogger。Snake Keylogger是一种用 .NET 编程语言编写的信息窃取恶意软件,它于 2020 年 11 月被发现,也被称为 404 Keylogger、404KeyLogger 和 Snake。它专注于从受害者的设备窃取敏感信息,包括已保存的凭据、受害者的击键、受害者的屏幕截图以及剪贴板数据。

电子邮件

IOC

Hash
MD5 60D00C17D3EA15910893EEF868DE7A65
SHA1 1D17DD1688A903CBE423D8DE58F8A7AB7ECE1EA5
SHA256 D13A7EAAF07C924159EA7BB8F297DAB1D8DA0F9AF46E82E24052D6A9BF5E4087

邮件分析

打开后邮件内含一个pago.4094.r09

如何分析一封电子邮件是否是恶意钓鱼邮件?

  • 使用通用问候语,而非名字
  • 邮件未通过SPF、DKIM或DMARC检查
  • 有时间限制或非同寻常的急迫感(想要用户及时采取行动)
  • 正文消息漏洞百出
  • 正文消息中的连接与发件人的域不一致
  • 等等...

看电子邮件,开头的问候语是尊敬的先生;邮件最下方是宝马和某机构的徽标,发件人试图使用熟悉度,熟悉度利用是一种社会工程策略,攻击者假装成目标熟悉的实体。

分析SPF和DKIM信息:

  • SPF(发件人政策框架)是一个电子邮件认证协议,旨在检测电子邮件欺骗行为,并防止未经授权的发件人代表特定的域名发送邮件。

  • DKIM(域名密钥识别邮件)是一种标准的电子邮件身份验证方法,它会在外发邮件中添加数字签名。 邮件接收服务器在收到DKIM 签名的邮件后,可验证邮件是否确实来自发件人,而非冒充发件人的其他人。 DKIM 还会执行检查,以确保邮件内容在邮件发送后未发生变化。

同样的,该邮件既无DKIM记录也没用DMARC。邮件也未签名。

附件分析

pago.4094.r09:IOC

Hash
MD5 a448bda0002ecd968b6ae9526617c974
SHA1 cf13df73eff74b9ceb6d837c1d7cc9d01fe918db
SHA256 ad24b345eac9876a65fb6b0d2eda0da669c3b23aaa969db9ce913f8a63c0a5f1

该文件是一个rar压缩包。解压后会得到一个pago 4094.exe的应用程序

pago 4094.exe:IOC

Hash
MD5 1a0f4cc0513f1b56fef01c815410c6ea
SHA1 cf13df73eff74b9ceb6d837c1d7cc9d01fe918db
SHA256 d483d48c15f797c92c89d2eafcc9fc7cbe0c02cabe1d9130bb9069e8c897c94c

沙箱分析

ANY.RUN沙箱分析链接

双击运行后,大约三十秒后,pago4094.exe从桌面上消失。

创建子进程“C:\Users\admin\Desktop\pago 4094.exe”,并释放可执行文件“C:\Users\admin\AppData\Local\Temp\tmpG484.tmp”。释放 .tmp 文件是为了确保在受害机器上的持久性。

1112进程

可以观察它创建文件或文件夹、查询注册表、执行系统信息发现、检查LSA保护、放弃一个应用程序手动执行其它恶意文件。

在路径“C:\Users\admin\AppData\Local\Microsoft\CLR_v4.0_32\UsageLogs\”下创建了一个text文件,命名为"pago 4094.exe.log",内容如下:

上述log是一个记录.NET程序集加载的日志文件,包含了与.NET API相关的System.Windows.Forms、Ststem.Drawing等的引用。它还包含PublicKeyToken值。

查看修改的注册表:

子进程3868


该进程从287.76s运行一直持续到进程结束。它进行了诸多恶意行为,包括但不限于删除可执行文件、窃取个人数据、类似于垃圾邮件的行为。

进程转储 不明

从web浏览器窃取凭证:

该恶意行为涉及俩个MITRE ATT&CK技术,分别是T1552.001(不安全的凭证:文件中的凭证)和T1555.003(来自密码存储的凭据:来自 Web 浏览器的凭据)。这里访问了一个本地路径,而Login Data文件用于存储用户的登录信息和密码数据。

T1518:软件发现:

进程3686尝试发现已安装的软件,该恶意行为进行了多次,推测子进程3686先遍历计算机上存在哪些Web浏览器,之后依次遍历这些可能存在的本地路径,窃取登录凭证。

连接SMTP端口、检查外部IP:

检测到Snake Keylogger,目标ip是158.101.44.242,端口是80。

查看威胁,发现该进程试图使用checkip.dyndns.org检索外部IP地址。


可以发现它连接到了158.101.44.242的80端口。

进程3868还有一个网络木马,这是一个通过SMTP发起的Snake Keylogger EXil,其目标IP为208.91.199.225,目标端口是587。端口587通常被用于电子邮件传输,它于TLS或SSL加密一起使用,以确保电子邮件传输过程中的数据安全。

总结

该Snake Keylogger从一封电子邮件开始,下载解压得到exe,用户手动执行后启动进程1112,其子进程3868执行主要的恶意操作,尝试发现已安装的软件,之后窃取Web浏览器凭证;尝试检查外部IP,使用SMTP传输协议向服务器发送包含被盗信息的电子邮件。

静态分析(pago 4094.exe)

.NET恶意软件,使用dnSpy32进行分析。定位到程序入口点,发现一个名为From1的构造函数。

跳到From1,大量代码都无用,下面发现一处解密,使用函数GetObject调用资源Grab

Grab的内容如下:

解密前:

解密后:

可以发现很明显的DOS头MZ,之后程序使用Assembly.Load(data2)将二进制数据作为程序集加载到当前应用程序域中。Activator.CreateInstance (type, args)创建实例并开始执行加载的程序集。

将内存dump出来,重命名为Aads.dll 。方便分析

阶段二 Aads.dll

IOC

Hash
MD5 2b5c78f544d9939869b6f1095d247efa
SHA1 4f0b6b32e03e6c0a710fb80e9191758d721558fb
SHA256 6bdcfdc224a08b68553021a44f2f8597d239488eb2e71064502a28aa098b4996

静态分析

代码经过了混淆,基于上一阶段使用GetObject获取资源中的数据,在这一阶段通过搜索GetObject定位到了HeapSort中,这行代码表示从资源管理其获取了一个图像对象,之后将其转换为Bitmap类型。

动态调试

回到exe中,下断点在解密后,让Aads加载进当前应用程序域中,之后直接在模块处找到Aads选择跳转到模块去。下断点,接着运行。可以发现x10的值变成了 ivmsL

这对应的是pago 4094.exe中的资源:

在内存中查看:

之后经过解密(字节数组搜索和各种排序算法(堆排序、快速排序)),得到:

可以在模块选项卡里面找到这个dll,Tyrone。

dump出来重命名为Tyrone.dll

阶段三 Tyrone.dll

IOC

Hash
MD5 f922482d9fd6a17de937403ad3136f09
SHA1 301633fb60c784c14cb7174a3089cf7f2829b2be
SHA256 de8d4787465c79b3d6175ed18dffd96d4fb7f7fb551f659e2c62d44ab2e0f3de

静态分析

存在大量混淆。

使用.NET Reactor slayer进行反混淆:

反混淆后的代码相对好阅读,但还是存在大量无用的代码,且至今为止,我都没有在代码中发现曾在沙箱分析中体现出来的恶意行为,因此可以尝试继续寻找GetObject,猜测还有下一阶段。

一个函数一个函数搜索,发现:

这里从资源文件中读取一个,之后进行解密(动调找)因此可以回到pago 4094.exe中了。

动态调试

同上一阶段一样,跳转到模块,按照程序集资源后的@0200002C找到这一处GetObject,下断点:

上面混淆代码的UmHYCAPJIp\u0020分别对应原来的smethod_0string_0;运行一下:

运行解密后:

同上一下,明显的DOS头(MZ)、DOS stub以及PE头,dump出来。

第四阶段 pago.exe

DIE分析可以知道,这是一个PE32,GUI文件。使用.NET编写。

IOC

Hash
MD5 bdef67c31299a3d0c10e3608c7ee2bdb
SHA1 86be2a34eacbc0806dbd61d41b9d83a65aef69c5
SHA256 ec3023ecf592a4f637e7c99b009466aa38ba90b9f9c7fbb550f129bca285bd6e

静态分析

该pago.exe同第三阶段一样,被严重混淆,使用.NET Reactor Slayer反混淆,得到:

尝试从入口点Main函数开始分析。前面蛮多点进去都是空的。

smethod_7() 移动文件

这里移动当前可执行文件到临时文件夹中去,使用时间命名。

信息收集1

smethod_0()

开始信息收集,从某个来源中(例如Outlook)中收集用户的URL,用户名和密码信息。这些信息被存储到一个全局字符串Class6.string_0中。

smethod_3():

同样是信息收集(Foxmail),不过对比上一个多了许多操作;

  • 首先获取并终止所有Foxmail进程,这一步是为了释放Foxmail的资源文件
  • 读取注册表获取Foxmail的安装路径
  • 遍历存储目录获取账户文件
  • 对账户文件进行解析,将窃取的信息存入Class.string_0中。

窃取Yandex浏览器的登陆凭证。

除了通过直接遍历文件,遍历注册表的方式,Snake还可以从Discord收集身份验证令牌,Discord 将其 LevelDB 数据库文件存储在“\discord\Local Storage\leveldb”中,并且可能包含用户的身份验证令牌。借助身份验证令牌,攻击者无需密码即可未经授权访问受害者的 Discord 帐户。

如下:

其它也都通通是信息收集,具体就不一一分析了。

泄露信息

在Main函数的最后面,Snake窃取完消息后应该干什么?当然是泄露信息啊。

这里72是空的,分析71:Snake会通过FTP、SMTP或Telegram泄露信息。

这里是负责使用FTP进行窃取的代码,创建一个FTP请求,FTP凭据被硬编码到Snake Keylogger代码中。之后使用FTP上传到服务器。

这里是负责使用SMTP进行泄露的代码,使用MailMessage构造一封电子邮件,并准备电子邮件发件人地址、收件人地址、主题、正文和被盗数据作为文本附件。然后,它使用恶意软件配置中硬编码的 SMTP 凭据通过 smtpClient.Send() 通过 SMTP 进行身份验证和数据泄露。

这里是负责使用 Telegram 进行数据泄露的代码。它会创建 Telegram API 请求 URL,其中包含机器人令牌和聊天ID,数据将发送到该 URL。

恶意软件配置

分析一下解密函数smethod_15():

它使用key的MD5哈希的前八个字节作为解密密钥,即“6fc98cd68a1aab8b”;解密方法是DES(ECB模式)。还有一个base64解码。Python解密代码如下:

from Crypto.Cipher import DES
from Crypto.Hash import MD5
import base64


def lena_decrypt_snake(text, key_string):
    try:
        # 生成 DES 密钥。MD5 哈希后的前 8 个字节被用作密钥。
        key = MD5.new(key_string.encode('ascii')).digest()[:8]

        # 使用密钥创建一个新的 DES 加密对象,模式为 ECB。
        cipher = DES.new(key, DES.MODE_ECB)

        # 解码 base64 编码的密文并解密数据。
        decrypted_data = cipher.decrypt(base64.b64decode(text))

        # 尝试将解密的数据解码为 ASCII 文本,忽略解码错误。
        decrypted_text = decrypted_data.decode('ascii', errors='ignore')

        # 处理 PKCS#5 或 PKCS#7 填充,获取填充的长度。
        padding_len = decrypted_data[-1]

        # 去除填充并返回解密后的文本。
        if padding_len < len(decrypted_data):
            return decrypted_text[:-padding_len]
        return decrypted_text

    except Exception as e:
        # 如果发生异常,返回异常信息。
        return str(e)


# lena_key 用于解密的密钥字符串。
lena_key = "BsrOkyiChvpfhAkipZAxnnChkMGkLnAiZhGMyrnJfULiDGkfTkrTELinhfkLkJrkDExMvkEUCxUkUGr"

# 使用 lena_decrypt_snake 函数解密并打印结果。
print("lena_sender_email_addr: ", lena_decrypt_snake("I22WW+qzjWDd9uzIPosYRadxnZcjebFO", lena_key))
print("lena_sender_email_pw: ", lena_decrypt_snake("MrZp4p9eSu2QFqjr3GQpbw==", lena_key))
print("lena_SMTP_server: ", lena_decrypt_snake("XHGvc06cCeeEGUtcErhxrCgs7X5wecJ1Yx74dJ0TP3M=", lena_key))
print("lena_receiver_email_addr: ", lena_decrypt_snake("I22WW+qzjWDd9uzIPosYRadxnZcjebFO", lena_key))
print("lena_SMTP_port: ", lena_decrypt_snake("oXrxxBiV5W8=", lena_key))
print("lena_padding: ", lena_decrypt_snake("Yx74dJ0TP3M=", lena_key))

解密结果:

规避检测

该代码段,搜索并终止所有与安全监控相关的进程。

屏幕截图


此代码负责截取屏幕截图。它使用Graphics对象捕获整个屏幕,将其作为 PNG 保存在“SnakeKeylogger”文件夹中,然后上传到FTP服务器,并进行一些后续处理。

监听剪贴板

监听剪贴板数据并通过FTP,SMTP或Telegram泄露

键盘记录器Keylogger

使用KeyDown和KeyUp事件处理程序来监视击键。

还可以识别按键,并检查特殊键,如 Backspace、Tab、Enter、Space、End、Delete 等。

参考链接:
anyrun沙箱链接
https://app.any.run/tasks/4b3a6bbc-e8fa-4ec6-9d35-9f779b715131?utm_source=anyrunblog&utm_medium=article_bottom&utm_campaign=snakekeylogger&utm_content=task&_gl=1%2A5m3qiq%2A_gcl_au%2AOTQ3ODU4OTI4LjE3MTg4NzU2NzM.%2A_ga%2ANTkzMjI3NzI4LjE3MTg4NzU2NzY.%2A_ga_53KB74YDZR%2AMTcxOTQ0ODA2Ni45LjEuMTcxOTQ1MzU3Ni4wLjAuMTY4NDA1MjI0MQ..%2F/
https://any.run/cybersecurity-blog/reverse-engineering-snake-keylogger/#introduction-7372
https://x-junior.github.io/malware%20analysis/2022/06/24/Snakekeylogger.html
https://www.splunk.com/en_us/blog/security/under-the-hood-of-snakekeylogger-analyzing-its-loader-and-its-tactics-techniques-and-procedures.html

0 条评论
某人
表情
可输入 255