目录导航
介绍
凭据窃取恶意软件在当今的网络攻击环境中很常见。Zscaler ThreatLabz 团队在不同的攻击活动中发现了许多新型的窃取恶意软件。窃取程序是恶意程序,威胁参与者使用各种技术收集敏感信息,包括键盘记录、cookie 窃取以及将窃取的信息发送到命令和控制服务器(C2)。
最近,ThreatLabz 发现了一种基于 Windows 的新型恶意软件,它创建了一个注册表项为 FFDroider。基于这一观察,ThreatLabz 将这种新恶意软件命名为 Win32.PWS.FFDroider。FFDroider 旨在将被盗的凭据和 cookie 发送到命令与控制服务器,在受害者的机器上伪装自己,看起来像即时消息应用程序“Telegram”。
ThreatLabz 在我们的 zscaler 云中观察到多个与 FFDroider 窃取程序相关的活动,这些活动通过受感染的 URL download.studymathlive[.]com/normal/lilay.exe 到达,并且都通过嵌入破解版安装程序和免费软件的恶意程序连接。

这种攻击的主要特征
- 从受害者的机器上窃取 cookie 和凭据。
- 针对社交媒体平台窃取凭据和 cookie。
- 窃取者使用窃取的 cookie 登录受害者的社交媒体平台,并提取 Facebook Ads-manager 等帐户信息以使用存储的支付方式投放恶意广告,并通过 API 窃取 Instagram 以窃取个人信息。
- 利用 Windows 防火墙中的入站白名单规则,允许将恶意软件复制到所需位置。
- 攻击者使用 iplogger.org 跟踪感染计数。
攻击周期

本文主要关注对窃取程序及其功能的剖析。
FFDroider 窃取者分析
FFDroider 窃取程序包含流行的“ASPack v2.12”打包程序。为了更好地了解窃取程序的工作原理,ThreatLabz 解包。反编译和调试恶意软件,在执行过程中执行以下任务:
- 为了检测 Zscaler 云中的完整恶意软件活动,研究人员解压缩文件以公开 PDB 路径:F:\FbRobot\Release\FbRobot.pdb

在执行期间,窃取者会创建一个互斥锁,以避免使用相同恶意软件的不同实例再次感染主机。观察到的互斥量值为:“37238328-1324242-5456786-8fdff0-67547552436675”

为了复制自身以供进一步执行,恶意软件会在 Documents 文件夹中创建一个名为“VlcpVideov1.01”的目录。

然后它执行一个字符串解密例程,它基本上是加密字符串和密钥之间的 XOR 解密循环,其中解密以下字符串,其中包括使用 LoadLibraryA() 和 GetProcAddress() WinApi 进一步加载和获取的 DLL 和 API 名称
- “Wininet.dll”
- “InternetGetCookieExW”
- “ieframe.dll”
- “IEGetProtectedModeCookie”
- “Netapi32.dll”
- “NetWkstaGetInfo”
- “NetAPIBufferfree”
- “Advapi32.dll”
- “Iphpapi.dll”
- “RegCreateKey”
- ‘GetAdaptersInfo
- “FFDroider”

为了解密恶意软件样本中的字符串,ThreatLabz 在 python 中重写了 XOR 解密逻辑,如下面的屏幕截图所示。完整的解密代码片段可以在本文的附录部分找到。

FFDroider窃取者使用解密后的字符串和RegCreateKey () 函数来创建注册表项:“ HKCU\Software\ffdroider\FFDroider ”。

- 然后恶意软件使用 CreateThread() 创建多个线程来加速 cookie 和凭据的盗窃,同时阻碍逆向工程。
通过WinHTTPSendRequest()将初始 GET 请求连同文件名一起发送到命令和控制服务器。
GET Request: http[:]//152[.]32[.]228[.]19/seemorebty/il.php?e=<filename>
Referrer: https[:]facebook[.]com
Previously a Cobalt Strike server according to third-party threat intel sources

对此请求的响应是一个 iplogger.org URL,用于记录引爆恶意软件的环境的公共 IP 地址,攻击者可能会使用它来跟踪受害者的位置和 IP 地址详细信息。在分析多个嵌入式 iplogger URL 的统计信息后,我们可以在下面的屏幕截图中看到 IP 地址是如何记录的。
IPLogger URL: https[:]//iplogger[.]org/logger/ey4zrs2miAY6

- 该恶意软件进一步启动 Cookie 和 Credential Stealer 功能,并针对以下浏览器和网站:
– 目标浏览器:
- 谷歌浏览器
- 火狐浏览器
- IE浏览器
- 微软Edge

– 目标网站:
www[.]facebook[.]com
www[.]instagram[.]com
www[.]amazon[.]ca/cn/eg/fr/de/in/it.co.jp/nl/pl/sa/sg/es/se/ae/co.uk/com/com.au/com.br/mx/tr
www[.]all-access.wax[.]io
www[.]ebay[.]com
www[.]etsy[.]com
www[.]twitter[.]com

了解Cookie 和凭据窃取程序:
- Google Chrome: FFDroider 从以下数据存储中窃取 cookie 并保存 Chrome 浏览器的登录凭据:
i) 从C:\Users\<username>\AppData\Local\Google\Chrome\UserData\Default\Network\Cookies读取并解析 Chromium SQLite Cookie 存储, 并使用 WriteFile( ) 命名为“d”

ii) 从C:\Users\<username>\Appdata\Local\Chrome\User Data\Default\Login Data读取并解析 Chromium SQLite Credential Store,其中包含保存的凭据,并使用 WriteFile 将其写入二进制文件所在的路径() 命名为“p”,因为凭证存储被锁定在 AppData 目录中。

iii) Chrome SQlite 凭证存储包括属性 – action_url、username_value、password_value,其中 password_value 使用 Windows Crypt API 即 CryptProtectData 进行加密。在这种情况下,恶意软件首先通过执行 SQL 查询(例如“select username_value, password-value FROM logins where origin_url like \’%ebay.com/%\’”)解析“登录数据”凭证存储,从而解密加密的密码块。 ””,如下面的屏幕截图所示。


从输出中获取密码缓存并传递给CryptUnProtectData()函数以进行内存解密,从而揭示从目标 Web 应用程序凭据存储中窃取的明文凭据。

iv) 然后它读取并解析存储在C:\Users\<username>\AppData\Local\Google\Chrome\UserData\LocalState的本地状态 cookie,并使用 WriteFile()将二进制文件写入名为“u”的路径存储。

在这里,Cookie 也使用 CryptUnprotectData() 函数在内存中解密,方法是加载 json “本地状态”文件并过滤掉两个参数:os_crypt和encrypted_key,然后使用 CryptUnprotectData() 解密并存储在内存中。

以下解密例程用于窃取所有 Chrome 商店的 cookie 和存储的凭据,使用 SELECT SQL 查询通过 sqlite3 库执行相同的过程以获取所需的值,然后 CryptUnprotectData() 函数将内存中的 cookie 和凭据解密为根据目标网站。

- Internet Explorer/Edge: FFDroider Stealer 通过以下方式从 Internet Explorer 收集 cookie、浏览器历史记录和其他用户特定信息:
i) 恶意软件执行 InternetGetCookieRxW() 函数以检索上述目标网站的 cookie(仅读取 HTTP cookie),如果它们受到限制,则使用 IEGetProtectedModeCookie() 函数访问所有目标应用程序的低完整性 cookie它启动另一个进程“IElowutil.exe”,这是一个用于访问低完整性 cookie 和进程的实用程序。


它还读取 Appdata\Roaming\Microsoft\Windows\Cookies 并从 Cookie 存储中获取 Cookie 和 URL 详细信息,同时它还解析 Cookie、历史记录和来自 Microsoft Edge WebCache 的下载:
C:\Users\<用户名>\Appdata\Local\Microsoft\Windows\WebCache\WebCacheV01.dat将其复制到二进制文件所在的位置,然后放入名为“d”的文件中,该文件之前有 chrome cookie。

此外,它还会读取并解析 Appdata\Roaming\Microsoft\-Windows\History\History.IE5 和 \Appdata\Local\Microsoft\Windows\Temporary internet files\Content.IE5,这将允许恶意软件读取浏览历史记录和Internet Explorer 从存储中缓存,在其中查询属性,例如访问的 URL、文件名以及目标网站的其他元数据。此外,恶意软件还计划通过利用Rasapi32.dll API 调用从 \Appdata\Microsoft\Network\Connections\Pbk\rasphone.pbk 和 \Pbk\rasphone.pbk(如果存在)窃取保存的 VPN/拨号凭据。
- Mozilla FireFox: FFDroider Stealer 最初通过读取包含使用的配置文件的名称。此外,恶意软件使用这些配置文件名称访问名为“cookies.sqlite”(路径: C:\Users\<username>\Appdata\Roaming\Mozilla\Firefox\Profiles\<profilename>\cookies.sqlite) 的SQLite cookie 存储用户配置文件。然后通过使用一些 SQl 查询(例如“SELECT host,name,path,value,expiry FROM moz_cookies)来解析 cookie 属性,以获取存储在 Firefox Cookie 存储中的 Cookie 的 Hostkey、Name、Path、Value 和 Expiry。

Facebook 和 Instagram 数据收集:
FFDroider Stealer 拥有另一个功能,如果恶意软件从任何目标浏览器中获取facebook.com或instagram.com的 cookie,则 cookie 会重定向到www[.]facebook[.]com和 www[.]instagram[.]com从用户 Facebook 或 Instagram 帐户收集情报。
Facebook:
以下请求由获取 cookie 值的恶意软件帖子执行:
i) 最初,它向 https[:]//facebook[.]com 发送一个 GET 请求以及从目标浏览器窃取的 facebook cookie,以检查恶意软件是否能够使用以下一组窃取的 cookie 进行身份验证。

ii) 如果 cookie 有效并提供适当的身份验证,它会进一步向facebook.com发送带有访问令牌的 GET /settings以及经过身份验证的窃取 cookie,以获取受损帐户的用户帐户设置。


iii) 此外,它开始枚举被盗用的用户帐户是否是企业帐户并有权访问 Facebook 广告管理器,并通过解析响应使用窃取的 cookie 获取以下详细信息:
- 从 Facebook Adsmanager 获取帐户账单和付款信息
- 获取用户 Facebook 页面和书签。
- facebook好友数量和其他用户相关信息



稍后可能会利用以下信息从受害者帐户运行恶意广告,并利用受损帐户付款方式进一步传播恶意软件。
Instagram:
对于 instagram,每当恶意软件从目标浏览器 cookie 存储中获取任何 instagram cookie 时,它都会执行以下例程以从 Instagram 帐户中窃取用户帐户详细信息,如下所示:
i) 最初,它向 https[:]//instagram[.]com 发送一个 GET 请求以及窃取的 instagram cookie,以检查恶意软件是否能够使用以下窃取的 cookie 集进行身份验证并解析 html 响应。

ii) 如果有一个有效的响应,它会向 Instagram 服务器发送下一个 GET 请求,并使用从上一个响应中解析出来的被盗帐户 GET /<username> 的用户名,并基本上访问个人资料页面。

iii) 此外,它还会发送另一个请求:GET /accounts/edit/ 到 www[.]instagram.com,它会打开包含所有个人帐户相关信息的帐户设置,例如帐户电子邮件地址、手机号码和其他被入侵者的详细信息帐户。

此外,以相同的方式,所有与帐户相关的信息,例如用户名、密码、手机号码和其他帐户详细信息,都以 cookie 的形式从目标网站获取,保存凭据并使用不同的 API 获取,然后发送到命令并以加密方式控制服务器给威胁参与者,如下所述。
将被盗信息上传到 C2 服务器:
然后恶意软件向 C2 服务器发送一个 HTTP POST 请求:http[:]//152[.]32[.]228[.]19/seemorebty以及用于泄露的加密数据缓存。

当在 chrome 浏览器中向恶意软件提供有效的 facebook 帐户 cookie 时,这种使用修改后的 base64 编码的加密数据会从受感染的系统发送到 C&C。解密后的 json 正文可以在下面的 Facebook 相关泄露屏幕截图中看到,其中大量 Facebook 用户帐户信息已传输到 C2:

Instagram 用户的个人帐户信息,包括 cookie、电子邮件密码、Instagram 用户 ID、保存的密码、电话号码在此解密请求中显示。
解密的 JSON 正文:

加密请求:

此外,Windows 防火墙中的入站白名单规则如下面的屏幕截图所示,需要管理权限。

下载器功能:
从目标浏览器和网站窃取并发送窃取的详细信息到命令与控制之后。FFDroider Stealer 进一步尝试通过从更新服务器下载其他模块来在固定的时间间隔内升级自身,方法是向以下地址发送请求 – URL:http[:]//186[.]2[.]171 [.]17/seemorebtu/poe.php?e=<filename>通过调用 wininet.dll API,例如 InternetOpenUrlW 和 InternetReadFile。该模块以“install.exe”的形式写入先前创建的“VlcpVideov1.01”目录中的磁盘。


调试功能:
在对恶意软件进行逆向工程的过程中,我们遇到了恶意软件作者开发的用于调试恶意软件的功能。如果执行时的文件名是test.exe,则恶意软件进入调试状态并在每个循环中弹出消息,它会打印出被盗的 cookie 和最终的 json 正文,这些正文将从中发送到 C&C目标网站的每个浏览器,如下面的屏幕截图所示。

云沙箱检测

除了沙盒检测外,Zscaler 的多层云安全平台还可以检测各个级别的指标
结论
多年来,Stealer 已成为任何网络攻击活动中最常用的恶意软件之一。Zscaler ThreatLabz 团队将继续监控这次攻击以及其他攻击,以帮助确保我们客户的安全。
Mitre表
T1055 | 进程注入 |
T1027 | 混淆文件或信息 |
T1027-002 | 软件打包 |
T1003 | 操作系统凭证转储 |
T1016 | 系统网络配置发现 |
T1018 | 远程系统发现 |
T1057 | 过程发现 |
T1082 | 系统信息发现 |
T1083 | 文件和目录发现 |
T1005 | 来自本地系统的数据 |
侵害指标(IOCs):
哈希:
beb93a48eefd9be5e5664754e9c6f175
e8c629383fe4b2c0cbf57b0d335fc53f
6a235ccfd5dd5e47d299f664d03652b7
b11fd571c6cc4b8768f33a2da71fbb6e
RUL:
download[.]studymathlive[.]com/normal/vinmall880[.]exe
download[.]studymathlive[.]com/normal/lilay[.]exe
download[.]studymathlive[.]com/install/vinmall1[.]exe?_sm_byp=iVVkm23V4sqBFtNM
download[.]studymathlive[.]com/install/vinmall1[.]exe?_sm_byp=iVVJWHH51nHRJTzP
附录:
- FFDroider Stealer 字符串解密 Python 代码 –

转载请注明出处及链接