前言

AcridRain是一个用C / C ++编写的新密码窃取程序,在2018年7月11日左右出现在黑客论坛上。这种恶意软件可以窃取来自多个浏览器的凭据、cookie以及信用卡信息。它还可以转储Telegram和Steam会话,劫持Filezilla最近的连接。你可以在下面的图片中,看到AcridRain的完整说明。

其中,交易信息里包含2名卖家和1名开发人员的地址,如下表所示。

技术细节

现在,我将重点分析我们在Hybrid-Analysis中找到的第一个AcridRain样本(7b045eec693e5598b0bb83d21931e9259c8e4825c24ac3d052254e4925738b43)。快速查看二进制文件,我们可以看到它既没有实施封装,也没有进行拆分(strip)处理。幸亏,还有一些调试信息可用,如PDB路径c:\users\igor1\source\repos\stealer ar\release\stealer ar.pdb(ar是AcridRain的缩写),另外,我们还发现了许多助于我们进行逆向分析的字符串。

初始化过程

在对受害者设备上的数据进行窃取之前,AcridRain需要将自身设置为正常运行,以逃避安全检测。首先,它会检索有关环境变量的一些信息,比如:

1.临时路径

2.程序文件路径

检索完成后,它将通过检查注册表值(如Steam path、Telegram full path到可执行文件的名称和可执行文件中图标的资源索引)继续获取程序路径。

完成后,它将生成Telegram的会话字符串,然后测试它们是否存在(见下图)。

最后,AcridRain会通过创建一个包含所有被盗数据的ZIP文件,完成初始化过程。这个ZIP在临时文件夹中创建并包含时间戳信息,例如:C:\Users\[UserName]\AppData\Local\Temp\2018-08-20 23-10-42.zip (代码如下图)。

在Google Chrome实施窃取的过程

AcridRain会首先窃取位于Google Chrome的凭据、Cookie和信用卡(如下图所示)。 AcridRain针对的浏览器如下:Amigo, Google Chrome, Vivaldi, Yandex browser, Kometa, Orbitum, Comodo, Torch, Opera, MailRu, Nichrome, Chromium, Epic Privacy browser, Sputnik, CocCoc以及Maxthon5。

在搜索可疑的字符串时,我们发现了一些非常有趣的行,正是根据其中的提示,它们才解开了AcridRain是如何窃取和压缩凭据信息的。我们可以在下图中看到恶意软件的使用名为browser-dumpwd-master这一现成的项目。其中的PoC,它会告诉了我们如何从Chrome和Firefox窃取凭据,但其中并没有并没有miniz.h和zip.c的内容。根据其中的教程,我们顺利地将Chrome / Firefox中的凭据代码复制粘贴了过来。

Chrome凭据的窃取

其实窃取凭据非常简单。根据DumpChromeCreds(0x4017F0)的给定输入,恶意软件将选择用户数据的适当目录。只需根据给定的dumpchromecred (0x4017F0)输入,AcridRain就会自动选择适合于用户数据的目录。例如,如果输入0x1,那么恶意软件将使用目录C:\Users\[USER]\AppData\Local\Google\Chrome\User Data\Default,如果输入的是0x3,则目录就会变为 C:\Users\[USER]\AppData\Local\Yandex\YandexBrowser\User Data\Default。另外,为了窃取方便,AcridRain给每类浏览器都定义了一个固定值,如下所示。

为了能够识别浏览器所对应的凭据,AcridRain会创建特定的标头。这些标头和凭据会存储在%TEMP%文件夹中的文件result.txt中。在选择了要攻击的浏览器后,将在结果文件中写入对应的标头。

创建标头后,恶意程序会调用dump_chromesql_pass (0x401BC0)来转储所有凭据。此时,SQLite数据库的登录数据将被复制到之前所选择的用户数据目录中的templogin中,这样做的目的是为了防止数据库被锁定。然后,数据库才会被打开,攻击者使用SQLite(代码如下)请求其中的数据。

正如我们在前面的屏幕截图中看到的那样,sqlite3_exec使用回调来转储凭据。函数chrome_worker(0x401400)用于从表登录中检索特定信息。对于表中的每一行内容,恶意软件将保存以下几个字段:origin_url,username_value和password_value。由于密码使用的是CryptProtectData加密,因此要获取纯文本,就必须使用CryptUnprotectData函数。如果一切顺利,则所有窃取的信息都将存在如下所示的文件中。

在确认窃取完每个浏览器的所有凭据后,AcridRain将对cookie进行转储。

对Chrome Cookie进行转储

Cookie的转储是由函数DumpChromeCookies(0x402D10)完成的,由于在项目browser-dumpwd中没有可以窃取cookie的函数,因此我们复制粘贴了之前用于窃取凭据的代码,并将其修改为可以窃取cookie的函数。用于保存被窃信息的文件是result_cookies.txt,就像窃取凭据的函数一样,它也有一些标头。但是,正如我们在下图中看到的那样,我们也对其中的一些标头进行了修改。

函数dump_chromesql_cookies (0x403300)将创建一个名为templogim(sic)的SQLite cookie副本。然后发出以下SQL请求: SELECT host_key, name, path, last_access_utc, encrypted_value FROM cookies;,这个SQL查询使用回调chrome_cookies_worker(0x401E00,如下图所示)。

然后,与凭据函数一样,cookie窃取者将使用CryptUnprotectedData解密encrpted_value列,并使用Netscape格式将所有窃取内容保存到result_cookie .txt中。

一旦cookie被保存,恶意软件就会接着窃取信用卡信息。

窃取Chrome上的信用卡信息

用于转储信用卡的函数是DumpChromeCreditsCards (0x402970),与cookie一样,转储信用卡信息的函数也是根据凭据窃取函数而修改而来的。被盗的数据保存在result_CC.txt文件中(始终位于%TEMP%目录中)。而其中的标头则用于标识转储的信息具体是来自哪个浏览器。一旦信息被写入标头后,AcridRain就会调用dump_chromesql_cc (0x4031D0),它会生成名为templogik(sic)的Web数据副本。加载此数据库后,AcridRain将执行以下查询。

SELECT credit_cards.name_on_card,
credit_cards.expiration_month,
credit_cards.expiration_year,
credit_cards.card_number_encrypted,
credit_cards.billing_address_id,
autofill_profile_emails.email,
autofill_profile_phones.number,
autofill_profile_names.first_name,
autofill_profile_names.middle_name,
autofill_profile_names.last_name,
autofill_profile_names.full_name,
autofill_profiles.company_name,
autofill_profiles.street_address,
autofill_profiles.dependent_locality,
autofill_profiles.city,
autofill_profiles.state,
autofill_profiles.zipcode
FROM   autofill_profile_emails,
autofill_profile_phones,
autofill_profiles,
autofill_profile_names,
credit_cards

对信用卡执行的回调是chrome_credit_cards_worker(0x402080),检索完所有值并解密信用卡号后,信息将被保存在result_CC.txt中,格式如下。

在Firefox上窃取信息的过程

用于从Firefox窃取凭据的函数DumpFirefoxCreds(0x403600)也是复制粘贴的browser-dumpwd的代码,只是稍作了一下修改。AcridRain的第一个行为就是从CnC下载额外的库。这些DLL来自Mozilla,它们用于解密Firefox保存的凭据中的信息。要联系服务器并请求这些库,只有使用libcurl 7.49.1。这些DLL保存在名为Libs.zip的ZIP文件中的CnC根目录下。下载此文件后,它将保存在%TEMP%目录中,目录名称为32.zip。

你可以点此下载ZIP,在这个项目中,我们可以找到前面在字符串选项卡(miniz.h和zip.c)中看到的两个丢失的文件。它由5个DLL组成,分别是freebl3.dll,mozglue.dll,nss3.dll,nssdbm3.dll和softokn3.dll。

在Firefox上窃取凭据的过程

被AcridRain窃取的Firefox凭据存储在Chrome的result.txt文件中,这和项目所描述的过程是一样的。首先,AcridRain在报告文件中写入与目标浏览器关联的标头。然后,再窃取凭据。目前该项目针对的浏览器包括Firefox,Waterfox,Pale Moon,Cyberfox,Black Hawk和K-Meleon。

函数dump_Firefox_passwords(0x403E60)会首先从nss3.dll加载有用的函数。这些函数是NSS_Init,NSS_Shutdown,PL_ArenaFinish,PR_Cleanup,PK11_GetInternalKeySlot,PK11_FreeSlot和PK11SDR_Decrypt。

函数被加载后,AcridRain将检索Profile0的路径。为此,它会读取%APPDATA%中相应浏览器的profile.ini并提取与Profile0关联的文件夹的路径(如下图所示),这个过程是由GetFirefoxProfilePath(0x403500)完成的。

要获取凭据,恶意软件会搜索两个文件,即logins.json和signons.sqlite。JSON由decrypt_Firefox_json(0x403930)解析,这其中就包含browser-dumpwd项目的parson.c代码。从JSON检索的值分别是hostname,encryptedUsername和encryptedPassword。其中,用户名和密码由DecryptedString(0x403430)使用nss3.dll中的函数解密。

一旦JSON中的凭据完成转储,AcridRain就会执行回调firefox_worker (0x404180)中的查询语句SELECT * FROM moz_logins对SQLite数据库进行查询。

回调过程与JSON函数中的操作相同,都会对hostname, encryptedUsername, encryptedPassword进行检索,然后将窃取的信息转储到报告文件中。

与Chrome上窃取凭据的过程不同,恶意软件在凭据窃取完以后,是不会在Mozilla浏览器中自动开始窃取Cookie信息或信用卡信息的。

信息压缩过程

转储完所有凭据后,恶意软件会开始对所要传送的所有TXT文件和Telegram会话进行压缩。为此,AcridRain会使用zip_entry_open函数在zip中指定文件的名称和位置。例如,zip_entry_open(zip, “result.txt”)将在zip的根目录添加名为result.txt的给定文件, zip_entry_open(zip, “Telegram\D877F783D5DEF8C1”) 将在Telegram文件夹中创建文件D877F783D5DEF8C1 。然后,AcridRain使用zip_entry_fwrite在zip中写入给定的文件。

窃取STEAM账号

窃取Steam会话分两个阶段进行,首先,AcridRain将在steam目录中转储所有ssfn*文件。

然后,检索steam目录配置中的所有文件。

窃取Filezilla凭据

FileZilla是一种快速、可信赖的FTP客户端, AcridRain不会针对已保存在服务器的凭据,而只会针对最近使用的凭据,即未保存在服务器的凭据。为了转储这些信息,AcridRain将把recentserver .xml保存在FileZilla目录中。

数字货币的窃取过程

盗窃浏览器凭据只是AcridRain的恶意功能的一部分,它最大的功能就是窃取数字货币。该恶意软件支持5个软件:Ethereum, mSIGNA, Electrum, Bitcoin, Armory,这些客户端的路径都被定义为0x404EEA,如下所示。

这个过程非常简单, AcridRain对每个客户端文件进行迭代查询,寻找诸如*.dat的文件。以下是负责从比特币客户端窃取所有货币的代码:

对于每个客户端来说,存储数字货币的钱包都保存在ZIP文件内的不同目录中。例如,比特币钱包保存在Bitcoin\wallets\文件夹内,以太坊则保存在ethereum,依此类推。

检索桌面上的所有文本文件并发送回后台

一般来说,窃取信息的最后一步是转储所有文本文件,对于AcridRain来说,最后一步是检索桌面上的所有文本文件。使用的技术与窃取Steam会话或数字钱包的技术相同(详见下文)。

在窃取完所有信息后,恶意软件会将报告文件发送给CnC。此时,ZIP文件使用带有ID参数的POST请求发送。假设这个ID用于将文件发送给服务器上的正确用户,而用于发送这些信息的代码位于0x405732,如下所示。

以下是在Hybrid-Analysis沙箱生成的上传报告的HTTP流量。

清理文件,擦除攻击痕迹

发送完所有数据后,恶意软件将删除所有创建的文件,然后自动退出。删除的文件是32.zip,result.txt,mozglue.dll,nss3.dll,nssdbm3.dll,softokn3.dll,freebl3.dll,result_cookies.txt和result_CC.txt。

调试日志

在分析AcridRain样本过程中,我们发现了一个有趣的事情,其中存在奇怪的打印日志,我们可以在dump_Firefox_password函数中看到一个很好的示例。

我们可以看到其中采用的语言是用英语和斯拉夫语混合而成的。我们将斯拉夫语翻译过来,比如:

tut ebanaya oshibka???(тут ебаная ошибка): Is a fucking mistake here???

ili tut???(или тут): or here ???

ya ee nashol (я её нашол): I have found it

如果我们执行恶意软件时将这些翻译过来的语句重定向到文件中,则会得到以下日志。

AcridRain的版本迭代过程分析

2018.7.29的版本变化

在2018.7.29,我们对AcridRain进行了更新,发现已经出现了新的版本,该版本与上一版仅仅差了16天。之所以如此肯定,是因为在更新的样本中,我们发现了使用的可执行文件(769df72c4c32e94190403d626bd9e46ce0183d3213ecdf42c2725db9c1ae960b)是于2018年7月19日编译的,具体的分析报告请参考Hybird-Analysis上的完整分析。为了找到两个版本之间的区别,我们使用YaDiff工具(IDA数据库之间的字符串传送)在IDA数据库和Diaphora之间比较两个传送的IDB。可以看到,第一个修改是删除调试日志。 

先前用于生成时间戳的报告名称已更改为针对公共IP的地址了,这是通过请求ipify.org的API并将响应保存在名称为body.out的%TEMP%目录中完成的。

另外,在Chrome实施窃取功能的函数也进行了修改。新版本的AcridRain,不仅可以窃取Chrome的默认配置文件,还改变了存储这些信息的方式。在以前的版本中,所有数据都存储在三个不同的单独文件中,即凭据,cookie和信用卡中。现在,它们会自动存储在为每类浏览器所设置的单独文本文件中,例如,Vivaldi.txt,Vivaldi_Cookies.txt和Vivaldi_CC.txt。

既然文件名已更改,那报告ZIP文件中的目录也会随着更改,比如新出现的有一些名为browser,Cookies和CC的特定文件夹。

开发者还更改了Firefox浏览器的标头:

现在,扩展名为* .pfx的文件也会通过桌面转储。这些文件包含Windows服务器使用的公钥和私钥,它们都被存储在ZIP内的Serticifate(sic)目录中。

最重要的是,新版的恶意软件中又新增了许多新的加密货币钱包。现在,AcridRain还支持Doge,Dash,Litecoin和Monero。

2018. 8. 21的版本变化

2018. 8. 21,我们又对AcridRain进行了一次样本检测,发现新的版本已出现,是在2018年8月21日编译的。其中,使用的可执行文件是3d28392d2dc1292a95b6d8f394c982844a9da0cdd84101039cf6ca3cf9874c1c,可在VirusTotal上获得。在这次更新中,代码被清理,并且开发者还修复了一些原来的错误,例如,由于widechar导致生成Monero路径的错误。 32.zip(从CnC下载的Mozilla DLL)的名称也已被重命名为opana.zip。不过,开发者却忘记在删除过程中更改名称了。

Firefox部分的标头也更改了,现在他们看起来如下。

注意看一下,其中的报告文件名又切换回其原始名称:[timestamp] .zip。但是,开发人员忘记在删除过程中删除一些未使用的文件,如result_cookies.txt,result_Cookies.txt和result_CC.txt。不过,这些文件并不会在攻击过程中发挥什么作用。

最后,开发者还更改了CnC服务器地址,现在的IP为141.105.71.82。

Web操作界面的出现

要下载在CnC上传的ZIP,可以使用这个版本中新出现的Web界面。野外使用的第一个IP是185.219.81.232,其关联域为akridrain.pro。大约在2018年8月2日,服务器宕机,但几天后(大约在2018.8.8),IP 141.105.71.82就会弹出。如果我们使用浏览器访问该面板,就会被重定向到登录页面。

登录后,你将被重定向到仪表板,攻击者可以利用其中的一个操作选项,来下载和删除AcridRain推送的zip文件。

还有一个可以下载个人信息的用户页面,在下图中,我们可以看到恶意软件用来上传ZIP报告文件的ID。

2018. 8. 26的版本变化

这个版本的操作面板中添加了两个新字段:IP和Quick info(尚未运行)。另外,仪表板中还有一个新的按钮,用于下载所有ZIP文件。

总结

准确地说,AcridRain和市场上的所有密码窃取器一样。但是,目前它支持的软件列表非常有限。虽然AcridRain号称它可以处理大约36种浏览器。但正如我们在这篇文章中看到的那样,支持的浏览器数量仅有22种。而对于Firefox来说,AcridRain只能窃取凭据,目前还无法窃取cookie或信用卡信息。正如本文中所讲的那样,恶意功能有许多都是从Github存储库中复制粘贴的现成代码。此外,根据代码中出现的错误,我们可以断定开发人员似乎是个新手。

附录

你将在此存储库中,找到AcridRain的Yara规则和IDA IDC(分析数据库)。

本文翻译自:https://thisissecurity.stormshield.com/2018/08/28/acridrain-stealer/如若转载,请注明原文地址: http://www.4hou.com/web/16245.html
源链接

Hacking more

...