热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Necurs.P2P:一种新型的点对点僵尸网络

上周,我收到了一个安全研究人员发给我的僵尸网络分析样本,该研究人员认为这是一个点对点的对等网络,但是在我对其进行了几天的分析之后,我可以确定这个网络不仅只是一个P2P网络,而且它还是一个当前非常活跃的

https://img.php1.cn/3cd4a/1eebe/cd5/6c257b6ba227cc3e.webp

上周,我收到了一个安全研究人员发给我的僵尸网络分析样本,该研究人员认为这是一个点对点的对等网络,但是在我对其进行了几天的分析之后,我可以确定这个网络不仅只是一个P2P网络,而且它还是一个当前非常活跃的对等网络系统。给我提供分析样本的人是我的一个好朋友,他也是一名安全研究人员,即R136a1(他不仅发现了这个僵尸网络,而且他曾经还发现了ZeroAccess3,并找出了这个僵尸网络背后的控制者)。

在我上网搜索了一些相关信息之后,我发现了一篇发表于2015年5月份的文章,这篇文章介绍了一些有关Necurs的知识,也许大家能够从这篇文章中找到一些你们需要的信息。但是,这篇文章并没有提到Necurs中UDP数据包的主要用途。除此之外,我还在bluecoat上找到了一篇时间更加久远的文章,这篇文章发表于2013年9月,文中对Necures僵尸网络的变种进行了非常详细的讨论,感兴趣的读者也可以阅读一下。

虽然我不敢百分之百地肯定,但我认为我们将要讨论的这个僵尸网络应该是原始Necurs的一个变种。

安装过程

我在安装的过程中,发生了…

https://img.php1.cn/3cd4a/1eebe/cd5/780a3060eeed6a4e.webp

好吧…大家别介意啊!

在我对系统进行了一次快速检测之后,我发现计算机的蓝屏死机是由嵌入在恶意软件中的反虚拟化代码所引起的,而且这种情况非常的罕见,也非常的奇怪。当我们对虚拟环境进行检测的时候,恶意软件将会向系统中所有的进程注入一个简单的程序,这个程序能够创建一个异常处理程序,并执行VMCPUID指令。

http://p3.qhimg.com/t016a9089c9ee57b19e.png

VMCPUID指令可以将虚拟机的CPUID返回给我们,但有趣的是,VMCPUID指令只能在某些虚拟机中正常使用。如果虚拟机系统不支持使用这个命令的话,它将会生成一个无效的指令,并引起系统异常。这时,我们就需要一个异常处理程序来捕获并处理这种异常。当恶意软件将函数注入到每一个进程中之后,系统将无法创建正常的异常处理程序,因为系统的异常信息会被存储在.rdata会话进程中,它也没有复制功能。所以结果就是,如果恶意软件检测到了当前的系统为虚拟机系统,而且该系统不支持使用VMCPUID命令的话,那么系统中的所有进程都会崩溃,进而导致系统的蓝屏死机。所以我猜测,恶意软件的开发人员的意图是想要尝试去实现对虚拟机系统进行某种注入检测,但是却使得虚拟机不断地死机,所以他们干脆直接将这项不成熟的技术当作一种凡虚拟化的技术来使用了(尽管这项技术不应该引起支持使用VMCPUID命令的虚拟机系统崩溃)。

当恶意软件成功利用漏洞CVE-2010-4398并为bot进程提权之后,bot的副本将会把可执行程序和相应驱动程序分别复制到C:Installers{BotGUID}syshost.exe和C:Drivers{RandomName}.sys内。恶意软件会将这一可执行程序设置为一个自启动的服务,并且将驱动程序设置为启动设备(如果需要的话,bot还会启用TESTSIGNING模式来加载未进行签名的驱动程序)。在完成了相应的配置之后,系统将会重新启动。

在系统重启完成之后,bot将会尝试使用netsh.exe来将其进程列入系统防火墙的白名单中(在Windows XP系统中,恶意软件将会直接禁用系统的防火墙功能)。

下图显示的是恶意软件利用netsh.exe来尝试将其自身进程列入防火墙白名单的相关代码:

http://p8.qhimg.com/t010ac651b6d4c106fe.png

点对点通信

因为僵尸网络的控制命令是由一个中央C&C服务器来发送的,这与普通僵尸网络的运行机制类似,所以这种C&C结构也被称为“混合式P2P网络”。但是,由于恶意软件可以随时利用点对点网络来向僵尸网络中所有的bot推送新的C&C服务器地址,所以相较于传统的僵尸网络而言,这种新型的僵尸网络不仅可以一直保持其有效性,而且还具有P2P对等网络的灵活性。

为了启用P2P通信,系统还必须生成一个随机端口号,并将其保存至系统的注册表中。这个端口将会被绑定到系统的UDP和TCP协议中(即使系统在绝大多数情况下使用的是UDP协议),并以此来保证相应的P2P通信数据能够正常地发送。僵尸网络中的bot拥有超过1000个IP地址,其端口绑定信息存储在初始配置文件中,各个端口每秒钟都会发送信息,直到接收到响应消息为止。在接收到了响应信息之后,信息的发送周期将会变成每分钟发送一次。奇怪的是,在每一个请求信息发送之前,系统都需要从0-4中随机选择一个数字:如果选择的数字为0,bot将会尝试与远程主机建立TCP链接,否则它将会向远程主机发送UDP数据包。所以情况将会变成,发送UDP数据包和发送TCP数据的比例大概为4:1(目前我仍无法确定这一机制的目的是什么)。

下图显示的是P2P协议处理程序:

http://p5.qhimg.com/t01fe42570544d3e250.png

僵尸网络中所有的bot主机都会对请求信息进行响应,并且会在其发送的响应信息中嵌入一个经过密钥(这个密钥为僵尸网络的主控密钥,这是一个长度为2048位的RSA密钥,其作用就是为了防止其他人向僵尸网络中引入新的响应payload)签名的payload。

值得注意的是,在P2P协议中并不存在对等交换功能,这是因为僵尸网络的主机不会信任网络中的对等主机,也不会在与网络中的其他主机共享信息。它们会选择生成一个主机列表,并通过C&C服务器来进行广播。这种方式可以有效地防止中毒和外部攻击,因为网络服务器可以根据这个主机列表来检测数据中心内的相应IP地址,否则僵尸网络将有可能被安全公司所破坏。

Payload存储

所有从C&C服务器或者P2P网络中下载下来的数据都会被存储在临时文件夹之中,每一个文件名都有一个单独的UUID,后缀均为.tmp。系统会对bot的标识符(一个长度为64位的静态整形数据,用于标识文件的内容)使用SHA1算法进行哈希处理,并生成相应的UUID。

下图显示的是文件名的生成函数:

http://p1.qhimg.com/t016a64ce700283f9f2.png

文件会使用RC4算法进行加密,系统将从上图所显示的函数中提取出其使用的加密密钥。除此之外,系统还会生成一个经过哈希处理的随机变量,并将其存储在文件末尾,这样一来,生成文件的签名就不会起任何作用了。

结论

上述的内容均来源于我的分析结果,当我与我的同事完成了所有的数据采集工作之后,我们应该可以更加深入地去了解这个僵尸网络。我们将会在得到了研究结果之后立刻更新。


推荐阅读
  • 本文详细介绍了PHP中的几种超全局变量,包括$GLOBAL、$_SERVER、$_POST、$_GET等,并探讨了AJAX的工作原理及其优缺点。通过具体示例,帮助读者更好地理解和应用这些技术。 ... [详细]
  • 探索OpenWrt中的LuCI框架
    本文深入探讨了OpenWrt系统中轻量级HTTP服务器uhttpd的工作原理及其配置,重点介绍了LuCI界面的实现机制。 ... [详细]
  • 本文详细介绍了在PHP中如何获取和处理HTTP头部信息,包括通过cURL获取请求头信息、使用header函数发送响应头以及获取客户端HTTP头部的方法。同时,还探讨了PHP中$_SERVER变量的使用,以获取客户端和服务器的相关信息。 ... [详细]
  • 在CentOS 7中部署Nginx并配置SSL证书
    本文详细介绍了如何在CentOS 7操作系统上安装Nginx服务器,并配置SSL证书以增强网站的安全性。适合初学者和中级用户参考。 ... [详细]
  • 页面预渲染适用于主要包含静态内容的页面。对于依赖大量API调用的动态页面,建议采用SSR(服务器端渲染),如Nuxt等框架。更多优化策略可参见:https://github.com/HaoChuan9421/vue-cli3-optimization ... [详细]
  • 本文详细探讨了 Android Service 组件中 onStartCommand 方法的四种不同返回值及其应用场景。Service 可以在后台执行长时间的操作,无需提供用户界面,支持通过启动和绑定两种方式创建。 ... [详细]
  • 如何高效学习鸿蒙操作系统:开发者指南
    本文探讨了开发者如何更有效地学习鸿蒙操作系统,提供了来自行业专家的建议,包括系统化学习方法、职业规划建议以及具体的开发技巧。 ... [详细]
  • C/C++ 应用程序的安装与卸载解决方案
    本文介绍了如何使用Inno Setup来创建C/C++应用程序的安装程序,包括自动检测并安装所需的运行库,确保应用能够顺利安装和卸载。 ... [详细]
  • 汇总了2023年7月7日最新的网络安全新闻和技术更新,包括最新的漏洞披露、工具发布及安全事件。 ... [详细]
  • 本文提供了一个详尽的前端开发资源列表,涵盖了从基础入门到高级应用的各个方面,包括HTML5、CSS3、JavaScript框架及库、移动开发、API接口、工具与插件等。 ... [详细]
  • 在使用 PyInstaller 将 Python 应用程序打包成独立的可执行文件时,若项目中包含动态加载的库或插件,需要正确配置 --hidden-import 和 --add-binary 参数,以确保所有依赖项均能被正确识别和打包。 ... [详细]
  • 本文探讨了在使用 MyBatis 进行批量数据处理时遇到的参数绑定异常问题,并提供了详细的解决方案。 ... [详细]
  • 本文详细介绍了如何在Windows和Linux系统上配置Openfire服务器,包括安装步骤、数据库配置及端口映射等关键环节。 ... [详细]
  • Maven快照版本管理及更新策略详解
    本文深入探讨了Maven中的快照版本管理和更新策略,解释了快照版本与正式版本的区别,并提供了如何配置快照更新策略的方法,以确保项目依赖始终保持最新。 ... [详细]
  • Canopy环境安装与使用指南
    《利用Python进行数据分析》一书推荐使用EPDFree版本的环境,然而随着技术的发展,目前更多人倾向于使用Canopy。本文将详细介绍Canopy的安装及使用方法。 ... [详细]
author-avatar
張張186coolgirl
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有