分析用Golang编写的新窃取程序

栏目: Go · 发布时间: 5年前

内容简介:最近,我们观察到一种新的Zebocry恶意软件变种,用Go编写(详细分析可在此处我们在实验室中捕获了另一个用Go编写的恶意软件。这一次,Malwarebytes将

Golang (Go) 是一种相对较新的编程语言,发现其编写的恶意软件并不常见。 然而,用 Go 编写的新变种正在慢慢出现,这给恶意软件分析人员带来了挑战。 使用这种语言编写的应用程序体积庞大,在调试器下看起来与使用其他语言(如C / C ++)编译的应用程序有很大不同。

最近,我们观察到一种新的Zebocry恶意软件变种,用Go编写(详细分析可在此处 here 获得)。

我们在实验室中捕获了另一个用Go编写的恶意软件。这一次,Malwarebytes将 Trojan.CryptoStealer.Go 视为一个非常简单的窃取程序。本文将详细介绍其功能,同时展示可用于分析Go编写的其他恶意软件的方法和工具。

一、分析的样本

Malwarebytes将此窃取程序检测为Trojan.CryptoStealer.Go:

· 992ed9c632eb43399a32e13b9f19b769c73d07002d16821dde07daa231109432

·  513224149cd6f619ddeec7e0c00f81b55210140707d78d0e8482b38b9297fc8f

· 941330c6be0af1eb94741804ffa3522a68265f9ff6c8fd6bcf1efb063cb61196 – HyperCheats.rar (原始安装包)

· 3fcd17aa60f1a70ba53fa89860da3371a1f8de862855b4d1e5d0eb8411e19adf – HyperCheats.exe (UPX 加壳)

·  0bf24e0bc69f310c0119fc199c8938773cdede9d1ca6ba7ac7fea5c863e0f099 – 脱壳

二、行为分析Behavioral analysis

在底层,Golang调用WindowsAPI,我们可以使用典型 工具 跟踪其调用,例如PIN跟踪器。 我们发现恶意软件会在以下路径中搜索文件:

· "C:\Users\tester\AppData\Local\Uran\User Data\""C:\Users\tester\AppData\Local\Amigo\User\User Data\"

· "C:\Users\tester\AppData\Local\Torch\User Data\""C:\Users\tester\AppData\Local\Chromium\User Data\"

· "C:\Users\tester\AppData\Local\Nichrome\User Data\""C:\Users\tester\AppData\Local\Google\Chrome\User Data\"

· "C:\Users\tester\AppData\Local\360Browser\Browser\User Data\""C:\Users\tester\AppData\Local\Maxthon3\User Data\"

· "C:\Users\tester\AppData\Local\Comodo\User Data\""C:\Users\tester\AppData\Local\CocCoc\Browser\User Data\"

· "C:\Users\tester\AppData\Local\Vivaldi\User Data\""C:\Users\tester\AppData\Roaming\Opera Software\"

· "C:\Users\tester\AppData\Local\Kometa\User Data\""C:\Users\tester\AppData\Local\Comodo\Dragon\User Data\"

· "C:\Users\tester\AppData\Local\Sputnik\Sputnik\User Data\""C:\Users\tester\AppData\Local\Google (x86)\Chrome\User Data\""C:\Users\tester\AppData\Local\Orbitum\User Data\"

·"C:\Users\tester\AppData\Local\Yandex\YandexBrowser\User Data\""C:\Users\tester\AppData\Local\K-Melon\User Data\"

这些路径指向浏览器存储的数据。一个有趣的事实是其中一个路径指向Yandex浏览器,该浏览器在俄罗斯很流行。

下一个搜索的路径是桌面:

"C:\Users\tester\Desktop\*"

找到的所有文件都复制到在%APPDATA%中创建的一个文件夹中:

分析用Golang编写的新窃取程序

“Desktop”文件夹包含从桌面及其子文件夹复制的所有TXT文件。 我们的测试机器示例:

分析用Golang编写的新窃取程序

搜索完成后,文件被压缩:

分析用Golang编写的新窃取程序

我们可以看到这个数据包被发送到C&C(cu23880.tmweb.ru/landing.php):

分析用Golang编写的新窃取程序

三、内在

Golang编译的二进制文件通常很大,所以样本采用UPX打包来压缩就不足为奇。 我们可以使用标准UPX轻松脱壳。结果,我们得到了简单的Go二进制文件。导出表显示了编译路径和一些其他有趣的函数:

分析用Golang编写的新窃取程序

看看这些导出,我们可以了解其内部使用的静态库。

其中许多函数(与trampoline有关)可以在模块sqlite-3中找到: https://github.com/mattn/go-sqlite3/blob/master/callback.go

函数crosscall2来自Go运行时,它与从C/C++应用程序调用Go相关( https://golang.org/src/cmd/cgo/out.go )。

四、工具

为便于分析,我使用了IDA Pro以及George Zaytsev编写的脚本 IDAGolangHelper 。首先,Go可执行文件必须加载到IDA中。然后,我们可以从菜单(文件 – >脚本文件)运行脚本。之后,我们会看到以下菜单,可以访问特定功能:

分析用Golang编写的新窃取程序

首先,我们需要确定Golang版本(该脚本提供了一些有用的启发式)。在本案例中,它是Go 1.2。然后,我们可以重命名函数并添加标准的Go类型。完成这些操作后,代码看起来更具可读性。下面,可以看到使用脚本之前和之后的函数视图。

之前(仅导出的函数被命名):

分析用Golang编写的新窃取程序

之后(大多数函数都自动解析并添加了它们的名称):

分析用Golang编写的新窃取程序

其中许多函数来自静态链接库 因此,我们需要主要关注main_ *的函数 – 特定可执行文件的函数。

分析用Golang编写的新窃取程序

五、代码

在函数“main_init”中,我们可以看到在应用程序中使用的模块:

分析用Golang编写的新窃取程序

它与以下模块静态链接:

· GRequests (https://github.com/levigross/grequests)

· go-sqlite3 (https://github.com/mattn/go-sqlite3)

·  try (https://github.com/manucorporat/try)

分析此函数可以帮助我们预测功能; 即查看上述库,我们可以看到它们将通过网络进行通信,读取 SQLite 3数据库并抛出异常。其他初始化建议使用正则表达式,zip格式和读取环境变量。

此函数还负责初始化和映射字符串。 我们可以看到其中一些是第一个base64解码的:

分析用Golang编写的新窃取程序

在字符串初始化中,我们看到对加密货币钱包的引用。

Ethereum:

分析用Golang编写的新窃取程序

Monero:

分析用Golang编写的新窃取程序

Golang二进制文件的主函数为“main_main”。

分析用Golang编写的新窃取程序

在这里,我们可以看到应用程序正在创建一个新目录(使用函数os.Mkdir)。这是将要复制(找到的)文件的目录。

之后,有几个Goroutine已经开始使用runtime.newproc。(Goroutines可以像线程一样使用,但它们的管理方式不同。更多细节可以在 here 找到)。 这些例程负责搜索文件。 同时,Sqlite模块用于解析数据库以窃取数据。

之后,恶意软件将其全部压缩到一个包中,最后,压缩包被上传到C&C。

分析用Golang编写的新窃取程序

五、窃取什么?

要查看攻击者究竟对哪些数据感兴趣,我们可以更详细地了解执行 SQL 查询的函数,并查看相关字符串。

Golang中的字符串以串联形式存储在一起:

分析用Golang编写的新窃取程序

之后,根据需要检索来自此批量的单个块。 因此,看看每个字符串被代码中的哪个位置引用并不容易。

下面是代码中打开“sqlite3”数据库的片段(获取长度为7的字符串):

分析用Golang编写的新窃取程序

另一个例子:通过给定的偏移量和长度,从完整的字符串块中检索此查询:

分析用Golang编写的新窃取程序

我们来看看这些查询试图获取的数据。通过调用引用的字符串,我们可以获取并列出所有字符串:

select name_on_card, expiration_month, expiration_year, card_number_encrypted, billing_address_id FROM credit_cardsselect * FROM autofill_profilesselect email FROM autofill_profile_emailsselect number FROM autofill_profile_phoneselect first_name, middle_name, last_name, full_name FROM autofill_profile_names

我们可以看到浏览器的cookie数据库被查询与在线交易相关的数据:信用卡号,到期日以及姓名和电子邮件地址等个人数据。

所有搜索的文件的路径都存储为base64字符串。其中许多与加密货币钱包有关,但我们也可以找到对Telegram的引用。

Software\\Classes\\tdesktop.tg\\shell\\open\\command\\AppData\\Local\\Yandex\\YandexBrowser\\User Data\\
\\AppData\\Roaming\\Electrum\\wallets\\default_wallet
\\AppData\\Local\\Torch\\User Data\\
\\AppData\\Local\\Uran\\User Data\\
\\AppData\\Roaming\\Opera Software\\
\\AppData\\Local\\Comodo\\User Data\\
\\AppData\\Local\\Chromium\\User Data\\
\\AppData\\Local\\Chromodo\\User Data\\
\\AppData\\Local\\Kometa\\User Data\\
\\AppData\\Local\\K-Melon\\User Data\\
\\AppData\\Local\\Orbitum\\User Data\\
\\AppData\\Local\\Maxthon3\\User Data\\
\\AppData\\Local\\Nichrome\\User Data\\
\\AppData\\Local\\Vivaldi\\User Data\\
\\AppData\\Roaming\\BBQCoin\\wallet.dat
\\AppData\\Roaming\\Bitcoin\\wallet.dat
\\AppData\\Roaming\\Ethereum\\keystore\
\AppData\\Roaming\\Exodus\\seed.seco
\\AppData\\Roaming\\Franko\\wallet.dat
\\AppData\\Roaming\\IOCoin\\wallet.dat
\\AppData\\Roaming\\Ixcoin\\wallet.dat
\\AppData\\Roaming\\Mincoin\\wallet.dat
\\AppData\\Roaming\\YACoin\\wallet.dat
\\AppData\\Roaming\\Zcash\\wallet.dat
\\AppData\\Roaming\\devcoin\\wallet.dat

六、庞大但不成熟的恶意软件

此恶意软件中使用的一些概念提醒我们其他窃取程序,例如Evrial,PredatorTheThief和 Vidar 。它有类似的目标,并将被盗数据作为ZIP文件发送给C&C。但是,没有证据证明此窃取程序的作者与这些案件有某种联系。

当我们看这个恶意软件的实现和功能时,它相当简单。它的大个头来自许多静态编译的模块。可能这个恶意软件还处于开发的早期阶段 – 作者可能刚刚开始学习Go并正在进行实验。我们将密切关注其发展。

起初,分析Golang编译的应用程序可能会感到很难,因为它具有庞大的代码库和不熟悉的结构。但是在适当的工具的帮助下,安全研究人员可以轻松地在这个迷宫中导航,因为所有的函数都被贴上标签。由于Golang是一种相对较新的编程语言,我们可以预期分析它的工具会随着时间的推移而成熟。

用Go编写恶意软件是威胁发展的新兴趋势吗?这有点太早了。但我们知道,用新语言编写的恶意软件的意识对安全社区非常重要。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Spark

Spark

Bill Chambers、Matei Zaharia / O′Reilly / 2017-10-31 / GBP 39.99

Learn how to use, deploy, and maintain Apache Spark with this comprehensive guide, written by the creators of the open-source cluster-computing framework. With an emphasis on improvements and new feat......一起来看看 《Spark》 这本书的介绍吧!

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具