导语:PBot是一款基于python的广告软件,最初该软件伪装成一个挖矿机。PBot可以进行MITB攻击并注入脚本到合法网站中,展示广告甚至改变用户浏览的内容。

最近研究人员发现一个利用套件释放的基于python的样本。虽然该样本伪装成MinerBlocker,但是和挖矿机没有任何共同点。事实上,它是一个基于python的广告软件:PBot/PythonBot。

除了俄语论坛的一些发布的消息外,没有任何详细的信息。研究人员对该样本的特征进行了分析,发现它执行MITB(man-in-the-browser)攻击并注入不同的脚本到合法网站中。根据传播的意图,该恶意软件的功能可能不止简单的广告注入。

样本分析

· 5ffefc13a49c138ac1d454176d5a19fd – EK释放的下载器

· b508908cc44a54a841ede7214d34aff3 –恶意安装器(MinerBlocker)

· e5ba5f821da68331b875671b4b946b56 –注入python的主DLL

· 596dc36cd6eabd8861a6362b6b55011a – injecteex64 (注入浏览器的DLL,64位)

· 645176c6d02bdb8a18d2a6a445dd1ac3 – injecteex86 (注入浏览器的DLL,64位)

传播方法

上面描述的样本是RIG利用套件释放的:

1.png

行为分析

安装

利用套件释放的主执行文件是一个下载器。这个下载器非常简单,并且没有混淆。可以看到资源中的脚本:

2.png

作用是取出第二个安装器,其中第二个安装器中含有所有的恶意python脚本。第二个部分就是MinerBlocker。

如果下载的组件单机运行,那么行为就是一个正常的、合法的安装器。而且会看到下面的信息:

3.png

这看起来像一个拦截恶意挖矿机的合法应用。但是研究人员没有找到类似产品相关的网站。

4.png

当原来的下载器以原来的组件运行,安装过程就是全静默的。并且会在%APPDATA%文件夹中释放包。

组件

释放的应用含有多个元素,可以看到运行释放脚本所需要的python的完全安装。一起安装的还含有卸载软件uninstall.exe,一旦应用就会完全移除该包。

5.png

在js目录中,可以看到一个JS脚本文件i.js:

6.png

在configs中,有两个配置文件:rules.ini和settings.ini。

7.png

配置文件rules.ini指定了JS文件的路径并指明会被注入:

文件settings.ini含有许多的参数:

1)服务运行的端口和使用的证书的签发者:

8.png

2)可能被攻击的浏览器进程列表:

9.png

3)IP和域名的白名单集。域名是base64编码的,解码后可以看到不同的俄罗斯银行站点。结果确认,这些站点都没有被感染。

10.png

通过在注册表中运行key来达到驻留的目的。

11.png

ml.py脚本运行后,就会使用另一个python组件,httpfilter.py和.ini文件:

12.png

功能

如果看整个包的话,含有卸载应用,看起来很像是合法的。但是应用的功能却跟我们所见的并不一样。首先,会向每个访问的页面注入脚本。注入的脚本来自于配置文件中的指定路径,然后会从远程服务器上加载二阶段脚本。

一旦被注入,攻击者就可以控制浏览器中显示的内容。恶意软件可以注入广告,也可以注入其他的恶意内容。

下面是恶意软件注入脚本的例子:

13.png

将该脚本与js目录中的脚本对比:

14.png

恶意软件会伪造证书并执行MIMB攻击。站点的HTTPS合法证书被一个“The Filter”签发的假的证书所取代,而The Filter是一个恶意实体:

15.png

看一下浏览器打开的socket并与python实例打开的socket相比较,研究人员发现是配对的。这就说明浏览器与恶意软件通信并受它的控制。

例:IE连接到socket 24681,下面是运行恶意软件的python进程打开的socket:

16.png

内部机制

加载器loader

恶意软件的第一层是混淆的python脚本。

首先是运行ml.py脚本,该脚本是混淆过的,主要作用是运行第二层python脚本httpfilter.py。

httpfilter.py脚本负责解密保存在httpfilter.bin中的DLL文件。

然后,向DLL中注入python可执行文件。为了达到注入的目的,会使用输入系统DLL,ctypes和传统PE头定义。

ctpes.png

PE header定义片段:

fragment_hdrs.png

并且会手动加载PE文件,加载器开头:

loader_fragment.png

重定向执行到入口点。然后可以找到解混淆的加载器。

go_to_ep.png

注:用python写的PE注入器是很少见的。

注入器(DLL)

注入python的DLL是恶意软件的主要组件。该组件会被注入到Python可执行文件当中:

17.png

注入器会从配置文件中取回传递的参数。可以看到这并不是之前脚本传递的参数。

开发者预留了一些调试字符串,这就让执行流很容易明白。

18.png

DLL文件是负责对配置文件进行语义分割并设定恶意的代理。一共有两个硬编码的DLL,一个是32位的,一个是64位的。这些DLL是未来会被注入到浏览器的组件,而注入的浏览器也是根据配置信息选择的。这些dll的名称为injectee-x86.dll and injectee-x64.dll:

injectee (DLL)

injectee DLL的执行是从输出函数InjectorEntry开始的:

19.png

injectee是植入到浏览器中的,并且负责hook对应的DLL。下面是hooking函数的开始:

20.png

hooking函数是这事件的标准类型。负责接收特定输出函数的地址,然后重写重定向到含有恶意DLL的函数的开头。

目标是分割证书的函数(Crypt32.dll)和发送接收数据的函数(ws32_dll):

21.png

通过PE-sieve可以dump hook,就可以看到这些函数如何被重定向到恶意软件。下面是从DLL中收集的标签列表:

From Crypt32:

16ccf;CertGetCertificateChain->510b0;5
1cae2;CertVerifyCertificateChainPolicy->513d0;5
1e22b;CertFreeCertificateChain->51380;5

From ws32_dll:

3918;closesocket->50c80;5
4406;WSASend->50d90;5
6b0e;recv->50ea0;5
6bdd;connect->50780;5
6f01;send->50c90;5
7089;WSARecv->50fa0;5
cc3f;WSAConnect->50ab0;5
1bfdd;WSAConnectByList->50c70;5
1c52f;WSAConnectByNameW->50c50;5
1c8b6;WSAConnectByNameA->50c60;5

从上面可以看出,地址都被重定向到injectee DLL,DLL是在base 50000被加载的。比如,函数WSASend被监听,执行的过程被重定向到injectee dll中RVA 0xd90处的函数。

22.png

监听函数的开始:

23.png

就这样,所有的请求都被重定向到恶意软件。恶意软件可以作为一个代理工作,改变数据。在代理的功能完成后,就会跳转到原来的功能,所以用户并不会体验到功能的变化。

结论

这个恶意软件非常简单,没有采用任何混淆技术,也没有静默执行。该恶意软件除了不隐藏之外,还让人觉得是合法和无害的。但恶意软件的功能会带来严重的危害。恶意软件可以用来展示无害的广告,也可以通过配置来修改网站的内容。但该网站伪造站点的证书应该引起关注。

源链接

Hacking more

...