陪伴我们多年的 CS 1.6 出现0-day漏洞 恶意木马被肆意传播
温馨提示:这篇文章已超过617天没有更新,请注意相关的内容是否还可用!
Counter-Strike Counter-Strike 1.6 是 Valve Software 在 2000 年发布的一款游戏。截至目前,该游戏仍然拥有众多忠实粉丝。 有20,000名在线用户使用CS 1.6官方客户端,超过5,000个游戏服务器在Steam上注册。
出于广告和盈利目的,一位名叫 Belonard 的开发者使用他的服务器在 CS 1.6 玩家的设备上感染了特洛伊木马,并使用他的帐户推荐其他游戏服务器。
恶意服务器的拥有者使用游戏客户端漏洞和特洛伊木马作为他们技术的基础。 该木马的目的是感染玩家的设备并下载恶意软件以确保木马在系统上的安全,并将其分发到其他玩家的设备。 截至目前,至少在官方游戏客户端和4个盗版游戏客户端中发现了多个远程代码执行RCE漏洞。
在系统中安装后,木马会替换游戏客户端中可用的游戏服务器列表,并在被感染的计算机上创建代理来传播木马。 代理服务器的ping值会比较小,玩家会觉得这是最快的服务器。 选择代理服务器后,玩家将被重定向到感染木马的恶意服务器。
以此为基础,木马开发者可以创建一个由CS 1.6客户端组成的僵尸网络。 据分析人士称,官方 Steam 客户端中的 5,000 台服务器中有 1,951 台是由 Belonard 木马创建的。
受感染的客户端
Trojan.Belonard包含11个组件,可根据游戏客户端在不同场景下运行。 如果使用官方客户端,木马会利用RCE漏洞感染设备; 盗版客户端的感染也是一样的。 如果用户从恶意服务器所有者的网站下载受感染的客户端,则在首次启动游戏后,特洛伊木马程序肯定会出现在系统中。
当用户启动官方Steam客户端并选择游戏服务器时,如果连接了恶意服务器,则会利用RCE漏洞将恶意库上传至受害者设备。 根据漏洞类型,下载并执行 client.dll (Trojan.Belonard.1) 或 Mssv24.asi (Trojan.Belonard.5)。
Trojan.Belonard.1 将删除与受害者设备上的库文件位于同一目录中的所有 .dat 文件。 之后,恶意库会了解C2服务器fuztxhus.valve-ms[.]ru:28445,并发送解密请求下载文件Mp3enc.asi(Trojan.Belonard.2)。 服务器发送加密文件作为响应。
以下是来自服务器的解密数据包:
安装到客户端
启动后,游戏会从游戏代理下载 ASI 文件。 从木马开发者网站下载的客户端会感染Trojan.Belonard.10(Mssv36.asi),但系统安装的木马与干净版游戏客户端不同。 一旦安装在受感染的客户端上,Trojan.Belonard.10 就会检查用户操作系统中的组件。 如果不存在,它会从主体中删除该组件并将 Trojan.Belonard.5 (Mssv24.asi) 下载到进程内存中。 与其他模块类似,Trojan.Belonard.10会修改创建、修改和访问的日期和时间连接到任意官方服务器失败,因此无法通过文件夹中内容的创建日期排序找到木马文件。
安装新组件后,木马Trojan.Belonard.10仍在系统中,负责客户端的防护和校准。 它过滤来自其他游戏服务器的请求、文件和命令,并将与客户端修改相关的数据传输到木马开发者的服务器。
Trojan.Belonard.5 接收有关正在运行的进程和路径的信息。 如果进程名不是rundll32.exe,则启动一个新线程进行后续操作。 在运行线程中,Trojan.Belonard.5会创建注册表值[HKCU\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\AppCompatFlags\\Layers]'
,赋值RUNASADMIN,查看模块名。 如果不在Mssv24.asi中,将自身复制到Mssv24.asi模块中,删除不同名称的版本,启动Trojan.Belonard.3(Mssv16.asi)。 如果名称匹配,就会立即下载并启动特洛伊木马。
干净客户端中的执行是由Trojan.Belonard.2 执行的。 下载后,木马会检查client.dll(Trojan.Belonard.1)加载的进程的DllMain。 如果它不在 rundll32.exe 中,请使用注册表项 [HKCU\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\AppCompatFlags\\Layers]'
创建一个线程并为其分配值 RUNASADMIN。 然后,木马会从用户设备上收集数据,从DialogGamePage.res文件中提取信息,然后将收集到的数据以加密格式发送到木马开发者的服务器。
采集到的系统数据结构如下:
服务器将响应 Mssv16.asi (Trojan.Belonard.3) 文件。 有关新模组的元数据保存在 DialogGamePage.res 文件中,Trojan.Belonard.5 已从用户设备中删除。
系统安装
确保特洛伊木马已驻留在系统中。 使用了特洛伊木马Trojan.Belonard.3。 Trojan.Belonard.5及木马安装后检测进程将被移除。 如果不在rundll32.exe中,再保存两个木马到%WINDIR%\System32\文件夹下,分别是Trojan.Belonard.7(WinDHCP.dll)和Trojan.Belonard.6(davapi.dll)。 这2个木马的主体被分成0xFFFC字节的块。 当保存在硬盘上时,木马会将所有的块组合起来,得到工作文件。
组装后,Trojan.Belonard.3 会创建一个 WinDHCP 服务以在 svchost.exe 环境中运行 WinDHCP.dll (Trojan.Belonard.7)。 根据语言设置,操作系统使用俄语或英语来设置服务参数。
WinDHCP 服务参数:
服务名称:“Windows DHCP 服务”或“Служба Windows DHCP”;
描述:“Windows 动态主机配置协议服务”或“Служба протокола динамической настройки узла Windows”;
ImagePath参数指定为“%SystemRoot%\System32\svchost.exe -k netsvcs”,ServiceDll指定了木马库的路径。
之后,Trojan.Belonard.3 会检查 WinDHCP 是否正在运行。 如果它没有运行,请重新安装该服务。
Trojan.Belonard.7是一个带有ServiceMain导出功能的WinDHCP.dll连接到任意官方服务器失败,通过自动运行该服务安装到受感染的设备上。 其目的是检查注册表项 HKLM\\SYSTEM\\CurrentControlSet\\Services\\WinDHCP 中的 Tag 参数。 如果设置为0,Trojan.Belonard.7将加载davapi.dll,调用它的导出函数,并传递一个指向SERVICE_STATUS的指针作为参数,它反映了WinDHCP服务的状态。 然后等待 1 秒,再次检查标签参数。 如果该值不等于 0,则 Trojan.Belonard.7 会加载 spwinres.dll。 之后,调用 spwinres.dll 的导出函数,将指向 SERVICE_STATUS 的指针作为参数传递。 木马每秒重复上述操作。
WinDHCP 服务参数:
在函数启动前,木马Trojan.Belonard.6会检查WinDHCP服务注册表的Tag和Data参数。 Data 参数必须包含用于生成 AES 密钥的数组。 如果不是,则木马使用 openssl 库生成 32 个随机字节来生成加密密钥。 之后木马读取WinDHCP服务的Info和Scheme参数。 在Scheme中,木马保存了4个参数,全部使用AES加密,info保存了安装持久化列表的SHA256哈希值。
Trojan.Belonard.6会解密C2服务器地址oihcyenw.valve-ms[.]ru,并尝试与服务器建立连接。 如果连接失败,木马会使用 DGA 在 .ru 区域内生成域名。 但是域生成代码中存在一个错误,因此无法为木马开发者创建域。
发送加密信息后,木马收到服务器的响应信息,解密后保存到%WINDIR%\System32\。 数据中包含木马 wmcodecs.dll (Trojan.Belonard.8) 和 ssdp32.dll (Trojan.Belonard.9)。
Belonard还在设备上安装了一个新的游戏客户端,这是由Trojan.Belonard.8和Trojan.Belonard.6完成的。
Trojan.Belonard.8 使用 Counter-Strike 1.6 客户端文件名和 SHA 256 哈希值初始化一个容器。 Trojan.Belonard.6 将开始搜索已安装的游戏客户端。 如果木马找到一个正在运行的客户端,它会根据从 Trojan.Belonard.8 收到的数据检查文件列表和 SHA 256 哈希值。 如果不匹配,Trojan.Belonard.8 将结束客户端进程并将 hl.exe 文件放到游戏目录中。 该文件仅在加载游戏时显示错误消息“无法加载游戏。请稍后再试”。 这样,木马就有时间让他替换客户端的文件。 然后,木马将Hl.exe替换为工作文件,导致游戏启动出错。
木马会删除以下客户端文件:
\\阀\\dlls\\*
\\cstrike\\dlls\\*
\\阀门\\cl_dlls\\*
\\cstrike\\cl_dlls\\*
\\cstrike\\资源\\*.res
\\阀门\\资源\\*.res
\\阀门\\motd.txt
\\cstrike\\resource\\gameui_english.txt
\\cstrike\\resource\\icon_steam.tga
\\阀门\\资源\\icon_steam.tga
\\cstrike\\resource\\icon_steam_disabled.tga
\\阀门\\资源\\icon_steam_disabled.tga
\\cstrike\\声音\\武器\\fiveseven_reload_clipin_sliderelease.dll
\\cstrike_russian\\声音\\武器\\fiveseven_reload_clipin_sliderelease.dll
\\cstrike_romanian\\声音\\武器\\fiveseven_reload_clipin_sliderelease.dll
根据操作系统的语言设置,木马会下载英文和俄文的游戏菜单文件。
该木马的有效载荷是在用户设备上枚举大量虚假游戏服务器。 为此,木马会将游戏客户端的相关信息传输到开发者的服务器,服务器以加密参数响应,创建一个假服务器。
Trojan.Belonard.9 创建代理游戏服务器并向 Steam API 注册。 游戏服务器端口从服务器指定的 game_srv_low_port 的最低值开始按顺序定义。 服务器还设置了 fakesrvbatch 值,它使协议仿真器线程的数量达到最大值。 模拟器支持对Goldsource引擎游戏服务器的基本请求:A2S_INFO、A2S_PLAYER、A2A_PING、接收challenge steam/non-steam客户端请求等。响应connect命令后,木马跟踪来自客户端的第一个和第二个数据包。
交换这些数据包后,木马发送最后一个数据包svc_director,它可以发起在CS客户端执行任意命令。 该漏洞自2014年被发现以来一直未得到修复。在尝试连接游戏代理服务器后,玩家被重定向到恶意服务器。 之后,木马开发者可以利用用户游戏客户端的漏洞安装Trojan.Belonard。 但Trojan.Belonard.9也存在漏洞,可用于检测假冒游戏服务器。 而在游戏栏中,假服务器有一个字符串Counter-Strike n,其中n的范围是1到3。
加密
Belonard 使用加密技术在木马内部存储数据并与服务器通信。 它将保存C2服务器的加密名称、一些代码和库名称。 旧版特洛伊木马使用的另一种算法来加密代码。 Trojan.Belonard.2中的解密算法如下:
定义解密(d):
小号 = ''
c = ord(d[0])
对于我在范围内(len(d)-1):
c = (ord(d[i+1]) + 0xe2*c - 0x2f*ord(d[i]) - 0x58) & 0xff
s += 字符 (c)
回报
旧版本的解密算法:
定义解密(数据):
s = 'f'
对于我在范围内(0,len(数据)-1):
s += chr((ord(s[i]) + ord(数据[i]))&0xff)
印刷
Belonard 使用复杂的加密方法与 C2 服务器交换数据。 在将信息发送到服务器之前,木马会将每个模块转换为不同的结构。 收集的数据使用存储在恶意软件中的 RSA 公钥加密。 但RSA只加密前342字节数据,如果模块发送的数据包数据大于342字节,则只加密前342字节,其余数据用AES加密。
详细分析报告下载地址: