标题 | 简介 | 类型 | 公开时间 | ||||||||||
|
|||||||||||||
|
|||||||||||||
详情 | |||||||||||||
[SAFE-ID: JIWO-2024-401] 作者: ecawen 发表于: [2017-08-20]
本文共 [549] 位读者顶过
本篇博文分析了一个Poseidon的实例(实例:1b7f205b663af9a6eb44f18555bdaad86e0fa58f3a9e4aced3e2ae1e3ed472b5,下载地址。这是一个恶意下载器,携带着CnCs列表中正在网上工作的CnCs。然而因为有一个bug,这个恶意软件不能下载第二个阶段的可执行文件(键盘记录器)。
[出自:jiwo.org]
下载器第一个实例是键盘记录器的下载器。他复制自己到c:\windows\system32\winsrv.exe并自动安装(它也会创建WinSrvWD的mutex令牌)。然后自动删除第一个exe文件并创建两个进程:
两个进程运行相同的可执行文件。Svchost.exe运行一个函数,万一进程死掉该函数会保护WinSrv.exe。 WinSrv.exe运行下载器的主代码。 下载器主要工作是尝试连接CnCs列表:
当它解析到列表的域名后,会连接列表并发送主机信息(如果没有解析到,则继续尝试下一个网址):
这里出现了问题。当下载器连接到一个有效网址时,CnC应该回复一个它可以理解的结构体。但这有一个bug,服务器是有效域名,也是一个有效的http服务器,但它没有运行CnC服务,它会回复一些“not found”之类的错误(一个错误页)。这时,恶意软件找不到他需要的有效结构体,并一直重复尝试相同的网址,一直重复得到同样的结果。 所以,当下载器找到了一个有效的http服务器但不运行CnC服务时,下载器会进入死循环,一直连接相同的网址而不继续尝试其他网址(这样它就不会继续下载第二个可执行文件了)。 发现了这种情况,我必须欺骗下载器来继续连接下一个网址。最后它找到了一个有效网址并得到了CnC服务应答,这是服务器的回复:
正如我们看到的,它是一个有效网页,在恶意软件的结构体中显示“此网页不存在!” 从回复中我们可以看到一个可以下载第二个可执行文件的网址,和一个新的网址列表。 它会保存新网址列表到c:\windows\system32\winsrv.exe.cfg,并运行另一个svchost.exe的例子来注入(Process Hollowing,恶意软件常用的一种进程创建技术)下载程序POSNumBot_baked.exe。 在下载器中没有其他有趣的东西了。对CnC服务器的询问很容易,是明文且只用base64加密机器信息,写一个Python client并不难。
下载器下载的第二个可执行文件是键盘记录器。下载地址。 它没有壳。双击就可以运行(不需要下载器加载)。 它创建一个窗口来接收键盘事件:
在这里记录键盘事件:
它会把键盘事件列为一个列表供另一个线程使用,这个线程负责与CnC通信:
线程与CnC连接:
它构成的一个查询如下所示: oprat=2&uid=6922070704454700032&uinfo=<user info>==&win=6.1&vers=13.40M&logs=<logged keys>Uinfo表示用户信息,用base64编码(像下载器一样)。 Logs=parameter用来发送登录密钥。密钥简单的与0x2a异或进行加密,用base64编码:
这里的第二个可执行文件只能连接一个特殊的CnC网址。 我们用一个记事本触发键盘事件:
这是被捕获的发送给CnC的数据:
用下面的小脚本解密logs parameter中的数据:
得到以下解密结果:
如果将这些结果与记事本里内容作比较,会发现按键都包含在log中(顺便说一下,log中的单词“NUMERO”和“PAUSA”是西班牙语。我是通过虚拟机的西班牙语配置知道的)。
总结PoSeidon看起来是简单的下载器+键盘记录器的组合,修复bug并不难。如果我没有在修复bug时遇到错误,下载器会一直有一个bug:如果连接到一个有效地址,提供http服务但没有安装CnC服务时,下载器就不会继续下载第二个可执行文件了。 |