翻译自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 |

对Facebook个人信息部分的间谍活动

一旦保存的浏览器凭据从受害者的机器中获取出来,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盗取了下列数据:

源链接

Hacking more

...