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

结论

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


推荐阅读
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • 本文介绍了操作系统的定义和功能,包括操作系统的本质、用户界面以及系统调用的分类。同时还介绍了进程和线程的区别,包括进程和线程的定义和作用。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • Windows 10中没有Documents and Settings文件夹怎么办?
    在Windows 10系统中找不到Documents and Settings文件夹,本文介绍了几种操作方法,包括查找临时文件夹、显示隐藏文件、复制文件夹地址等。同时解释了Windows 10中停用Documents and Settings文件夹的原因,并指出了替代的文件夹路径。 ... [详细]
  • 本文介绍了如何使用python从列表中删除所有的零,并将结果以列表形式输出,同时提供了示例格式。 ... [详细]
  • C++字符字符串处理及字符集编码方案
    本文介绍了C++中字符字符串处理的问题,并详细解释了字符集编码方案,包括UNICODE、Windows apps采用的UTF-16编码、ASCII、SBCS和DBCS编码方案。同时说明了ANSI C标准和Windows中的字符/字符串数据类型实现。文章还提到了在编译时需要定义UNICODE宏以支持unicode编码,否则将使用windows code page编译。最后,给出了相关的头文件和数据类型定义。 ... [详细]
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
  • 本文介绍了2020年计算机二级MSOffice的选择习题及答案,详细解析了操作系统的五大功能模块,包括处理器管理、作业管理、存储器管理、设备管理和文件管理。同时,还解答了算法的有穷性的含义。 ... [详细]
  • 服务器上的操作系统有哪些,如何选择适合的操作系统?
    本文介绍了服务器上常见的操作系统,包括系统盘镜像、数据盘镜像和整机镜像的数量。同时,还介绍了共享镜像的限制和使用方法。此外,还提供了关于华为云服务的帮助中心,其中包括产品简介、价格说明、购买指南、用户指南、API参考、最佳实践、常见问题和视频帮助等技术文档。对于裸金属服务器的远程登录,本文介绍了使用密钥对登录的方法,并提供了部分操作系统配置示例。最后,还提到了SUSE云耀云服务器的特点和快速搭建方法。 ... [详细]
  • Android工程师面试准备及设计模式使用场景
    本文介绍了Android工程师面试准备的经验,包括面试流程和重点准备内容。同时,还介绍了建造者模式的使用场景,以及在Android开发中的具体应用。 ... [详细]
  • 本文介绍了一个免费的asp.net控件,该控件具备数据显示、录入、更新、删除等功能。它比datagrid更易用、更实用,同时具备多种功能,例如属性设置、数据排序、字段类型格式化显示、密码字段支持、图像字段上传和生成缩略图等。此外,它还提供了数据验证、日期选择器、数字选择器等功能,以及防止注入攻击、非本页提交和自动分页技术等安全性和性能优化功能。最后,该控件还支持字段值合计和数据导出功能。总之,该控件功能强大且免费,适用于asp.net开发。 ... [详细]
  • SpringBoot整合SpringSecurity+JWT实现单点登录
    SpringBoot整合SpringSecurity+JWT实现单点登录,Go语言社区,Golang程序员人脉社 ... [详细]
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社区 版权所有