翻译自https://news.sophos.com/en-us/2018/07/29/adkoob-information-thief-targets-facebook-ad-purchase-info/
最新的发现显示,恶意软件似乎正在寻求Facebook对广告的购买记录信息。
在Sophos公司中,我们不断寻找新的威胁。其中一个沙箱系统帮助我们筛选每日大量新的恶意软件,并给予我们分析运行态恶意软件行为的能力。
最近,我们发现了一个可疑的可执行文件。它在我们的沙箱中表现出了有趣的行为。这个可执行程序将代码注入到合法的Windows二进制文件中(svchost.exe),并且注入的代码触发了用来进行识别“信息窃取恶意软件”的内存检测功能。这个用来进行注入的进程突然结束,并导致系统显示出来错误信息。而这个错误信息与进程所包含的代码类型没有任何关系。这个错误信息为:“配置文件丢失,重新安装轻松备份可能会解决这个问题。”
这个奇怪的行为促使我们去深入分析恶意软件。我们一步跳入了这个研究洞穴,并发现了先前未被证实的威胁,我们称其为AdKoob。这是一个凭证窃取的恶意软件。它会将你Facebook账户中的信息数据发送给未知的接受者。
为了避免被检测出来,AdKoob主要进行了双层包装:首先进行开放源码UPX封装,然后使用自定义的代码注入工具。这个自定义的工具使用了称为“进程镂空”的技术将恶意代码写入在Windows服务主机上。一旦部署成功,这个注入代码将会恢复服务器的主机进程,并弹出假的错误提示信息。
但是当我们分析AdKoob时,我们很快发现了它为什么会抛出假错误消息:AdKOOB通过检查是否存在命令行参数来启动执行程序。如果不存在参数,它会抛出错误,但在一个样本分析中,我们发现了'/1c9542b2a8cb'
或者'/mode=debug'
的两种类型的代码。
如果恶意软件进程在开始的时候是通过其正确的方法执行的,那么AdKoob会通过检查%appdata%目录下'FC29FA0894FE.ini'文件的存在性来选择是否继续执行。此方法保证恶意代码仅执行一次。如果用户文件存在,恶意软件立即终止运行。
使用内置命令行参数检查是一种简单而狡猾的反沙箱技术,因为自动化沙箱不太可能提前知道它需要传递给可执行文件的参数。
一旦能够逃脱了所有的检查,AdKoob就开始其第一个核心任务:窃取用户保存在浏览器中的用户名和密码。为了实现这个目的,AdKoob会直接访问各种浏览器存储凭证的文件和注册表。
AdKoob使用一些技巧从不同浏览器中获取数据信息。对于Chrome和Firefox的旧版本(版本58之前),它对这些存储在磁盘中的浏览器SQLite数据库进行SQL查询(对于火狐来说是moz_logins,对于谷歌为logins)
SELECT encryptedUsername, encryptedPassword, formSubmitURL FROM moz_logins
SELECT origin_url, username_value, password_value FROM logins
AdKoob通过文件名访问SQLite数据库:
signons.sqlite (Firefox's SQL credential database)
Google\Chrome\User Data\Default\Login Data (path to Chrome's database)
在最近的版本中,AdKoob也可以去查询保存在JSON文件内部的火狐存储凭证。
此外,AdKoob看起来将浏览器的登陆表单凭证保存在以下注册表位置:
Software\Microsoft\Internet Explorer\IntelliForms\Storage2
AdKoob能够提取浏览器中保存的“基本访问认证”凭证(这些凭证被某些Web应用程序使用,并在特定HTTP报头中发送)。它使用GUID字符串,而GUID字符串需要生成加密的盐值并用来保护存储的凭证,除此之外,用来区分库中保存基本访问凭证与其他凭证的前缀码也需要被生成。
abe2869f-9b47-4cd9-a358-c22904dba7f7 (使用盐值加密生成的GUID字符串)
Microsoft_WinInet (标识存储的基本访问认证凭据的前缀码)
在获取凭证之后,AdKoob通过将HTTP请求发送给'useragent.cc'
或者'mybrowserinfo.com'
来确定受害者的公共IP地址。除了被害人的公共IP地址之外,AdKoob还收集了有关主机的基本信息。
这些被获取到的浏览器凭证被编码后通过HTTPS发送给攻击者,在此过程中使用了恶意程序中的两个硬编码URL。每个浏览器都有一个单独的POST请求。对于被分析的样本来说,这些URL(已经被混淆过)如下:
hxxps://104[.]200[.]131[.]253:1989/stats1.asp
hxxps://45[.]32[.]91[.]128:1989/stats1.asp
一个加密过后的请求如下:
3ED4ACD2B09E4389E997B918A9A7ADB4B07A4611BF|Windows NT 6.1<<1.2.3.4|UTC+00:00 GMT Standard Time|chrome|Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36{||}aHR0cHM6Ly9hY2NvdW50cy5nb29nbGUuY29tL3NpZ25pbi92Mi9zbC9wd2Q=|dGVzdGNyZWQ=|U2F2ZU1lIQ==|yangyangfb
解码请求中的字段描述如下:
| 字段 | 数据 |
| ------ | ------ |
| 唯一机器标示符(从C驱动器的主机名和卷序列号导出) | 3ED4ACD2B09E4389E997B918A9A7ADB4B07A4611BF |
| 操作系统版本 | Windows NT 6.1 |
|公告IP(样本)|1.2.3.4|
|被攻击者的本地时间|UTC+00:00 GMT Standard Time|
|AdKoob浏览器标识符字符串| chrome |
|用户代理(从证书中窃取的浏览器凭证)|Mozilla/5.0 (Windows NT 6.1; Win64; x64)…|
|base64编码后的浏览器凭据(网站、用户名、密码)| aHR0cHM6Ly9…dGVzdGNyZWQ=U2F2ZU1lIQ==|
|Bot标示符| yangyangfb |
一旦保存的浏览器凭据从受害者的机器中获取出来,AdKoob就开始它的第二个核心任务:建立一个Facebook会话并将数据从受害人的Facebook数据存储中删除。AdKoob使用以下两种方法去建立Facebook会话。
第一种方法依赖于通过Facebook认证cookies,使用存储在用户浏览器中的Facebook会话。AdKoob通过受害者安装的浏览器专门寻找与facebook.com域名相关的的Cookies记录。
类似于保存的凭据,Cookie存储在Firefox和Chrome中的SQLite数据库中。我们可以很容易地通过以下SQL语句来查询cookies:
SELECT * FROM cookies WHERE cookies.host_key LIKE "%.facebook.com";
SELECT * FROM moz_cookies WHERE moz_cookies.host LIKE "%.facebook.com";
除了Chrome和Firefox之外,AdKoob还查询了Internet Explorer和微软的Edgies浏览器中存在的Facebook的Cookie。
第二种方法利用了AdKoob所盗取的浏览器凭证。AdKoob试图通过发送适当的HTTP请求登录到Facebook,如果成功的话,它能够获得额外的Facebook会话cookies。
一旦认证成功,AdKoob会继续进行间谍活动。它会对Facebook的一系列url进行请求。恶意软件使用相应的正则表达式集检查来自每个请求的响应数据。这种技术能够使AdKoob识别受害人Facebook个人信息中的有价值的信息条目。
下列三个请求是Facebook的url:
https://www.facebook.com/
https://www.facebook.com/username/about
https://www.facebook.com/bookmarks/pages
从这些请求中,AdKoob盗取了下列数据:
act_<adaccountid>/campaigns?date_preset=this_month&fields=["boosted_action_type","brand_lift_studies","buying_type","effective_status","name","spend_cap","stop_time"]&filtering=[]&include_headers=false&limit=20&locale=en_US&method=get&pretty=0&sort=["delivery_info_ascending","spent_descending","stop_time_descending","start_time_descending"]&summary=["total_count"]&suppress_http_code=1
https://107[.]151[.]152[.]220:5658/down.asp?action=newinstall&u=<identifier>
这个URL不同于用于数据盗取相关的URL,这个URL大概是用于感染数量的统计。'%appdata%\FC29FA0894FE.ini'
来结束它的执行过程。这确保了恶意软件不会运行两次。然后它会进行自我销毁,试图不留下系统被破坏的迹象。rule adkoob_information_stealer
{
meta:
author = "Felix Weyne, Sophos"
strings:
$facebook_cookie_firefox = "SELECT * FROM moz_cookies WHERE moz_cookies.host LIKE \"%.facebook.com\"" nocase ascii
$facebook_cookie_chrome = "SELECT * FROM cookies WHERE cookies.host_key LIKE \"%.facebook.com\"" nocase ascii
$facebook_regex_ad_account_id = "<td [^>]*?data-testid=\"all_accounts_table_account_id_cell\">([^<>]*?)</td>" nocase wide
$self_destruction = "/C ping localhost -n 4 > nul & del" nocase wide
condition:
all of them
}