僵尸网络之如何防护DDoS攻击,愿这个世界再无黑产

本文探讨了僵尸网络的基本概念,包括C&C僵尸网络结构,并介绍了如何防御DDoS攻击。作者强调了网络安全的重要性,提供了学习资源,并警告读者勿将知识用于非法行为。文章还涉及了简单的僵尸网络实现,包括主节点和从节点的功能,以及如何伪装和部署恶意软件。
摘要由CSDN通过智能技术生成
*严正声明:本文仅限于技术讨论与分享,严禁用于非法途径。

大家好,最近看到国外有一篇和僵尸网络有关的文章,今天分享给各位。

当然,我们面对DDoS当然是可以防御的,就比如云清洗。我写这篇文章的目的是为了让大家更多的去了解如何防护DDoS攻击,所以请勿用作违法行为!愿这个世界再无黑产。

学习网络安全的朋友可以点击【网络安全学习资料·攻略】查看学习思路,也可以私信我获取网络安全相关书籍、工具、教程

简单的 C&C 僵尸网络

这个 hackpack 将引导您完成一个基本框架,该框架从根本上表征了僵尸网络。 如果您以前使用过 C,它可能会有所帮助。 如果你喜欢这个教程,一定要给这个 repo 加星标!

注意:请勿将您在此处学到的任何内容用于恶意目的。 这个 hackpack 只是一个用于教育目的的僵尸网络案例研究。 在这个 hackpack 中学到的概念具有深远的用例(基本上与网络有关的任何事情)。 最重要的是,此 hackpack 旨在在本地进行测试和部署(因此请不要与其他黑客共享您构建的与此 hackpack 相关的任何内容)。 隐私很重要,所以请尊重它。

什么是僵尸网络?

在构建僵尸网络之前,了解什么是僵尸网络很重要。僵尸网络是能够远程接收命令并在本地部署它们的计算机网络。 或者,他们可以选择将信息中继回网络中的其他节点。 它们已被用于从分布式拒绝服务攻击到广泛部署的间谍软件的所有领域。

您过去可能听说过许多僵尸网络。 最突出的可能是 Mirai 和 Gameover Zeus,它们分别控制了 380 和 360 万台物联网设备。 僵尸网络执行某些任务的方式存在很大差异。 但是为了成功构建我们的僵尸网络,我们需要在我们的工作网络中确保以下功能。

我们的僵尸网络应该:

包括一个控制网络上所有其他节点的主节点;

在主机上部署伪装的恶意软件/从节点;

将命令从主节点传输到从节点,执行并将输出返回给主节点。

这种结构是所谓的命令与控制僵尸网络的特征。 这些僵尸网络有一台主服务器和多台从服务器。 然而,这种僵尸网络风格已经过时,可以通过切断对主域的访问来轻松取缔。 更新和复杂的僵尸网络遵循点对点架构,其中管理员权限分布在网络中的所有节点或节点子集。

这些僵尸网络让安全专家非常头疼,因为没有中央控制点,并且可以增长到数百万个节点。 消灭此类僵尸网络本身就是一个有趣的读物。 然而,为了这个 hackpack 的目的,让我们保持简单。 我们将为 C&C 僵尸网络实现一个简单的从节点。
执行
这个 hackpack 将主要处理实现客户端恶意软件。 对于主服务器,我们可以使用开源 TCP 服务器调用 Netcat。 Netcat 与僵尸网络无关。 它只是一个方便的、既定的工具,我们可以重新使用它来向来自客户端的发送文本数据包(这才是真正的主人)。 我稍微调整了 netcat 服务器并将其编译为名为“master”的二进制文件。 这里不再需要工作了! 我们的主人已经准备好使用了。

奴隶
让我们继续讨论更有趣的部分:接收和执行远程命令(我们稍后会担心伪装我们的恶意软件)。 这里的目标是使我们的从节点尽可能简单并遵守上面详述的要求。 请注意,在 lib/macros.h 中定义了许多常量,因此可以随意使用它们。 所有实现的函数签名都可以在 lib/connect.h 或 lib/utils.h 中找到。

  1. 启动
    打开 bot.c 文件。 在我们的服务器中启动一个新节点时,我们可能应该命名它,以便 master 知道将命令部署到哪些客户端。 可以使用许多命名约定。 使用 IP 地址可能是最好的,因为它是每个客户端的唯一标识符。

然而,为了让普通人更容易阅读,让我们使用计算机的用户名。 使用 C 函数getenv()有论据"USER"返回计算机存储在 USER 环境变量中的任何内容。 这是存储用户用户名的一个地方,所以让我们使用它。 另外,既然你的奴隶正在运行,让我们找到主人。 为此,我们必须知道主人的 IP 地址。 每个网络设备都有一个 IP 地址。 它负责识别其他节点和位置寻址。

此外,master 可以有许多服务器在不同的端口上运行。 所以,我们不仅要连接到master,还要指定正确的端口。 此端口由主设备选择,但可以更改。 在这个 hackpack 中,我们想在本地进行测试。 因此,我们将使用您的计算机作为我们的网络。

每台计算机的本地 IP 地址(“localhost”也解析为)是"127.0.0.1". 在 master 中,我指定它在端口上运行9999. 有了这三样东西(主 IP 地址、主端口和从名称),我们就可以在服务器和客户端之间启动一个称为套接字的通信管道。 将这三个参数传递给函数init_socket()创建一个套接字。

init_function()不是内置的 C 命令。 相反,我们需要实施它。 然后,我们需要在堆栈上分配一些空间来保存传入的消息。 我们使用大约 10KB 的堆栈空间调用这个堆栈指针msg. 最后,有一个printf声明表示一切进展顺利。

char* name = //Get the client's username and store it in name
int channel = //initiate a channel given SERVER, PORT, and name;
//Allocate stack space of size CMD_LENGTH to hold data of type char. Call the stack pointer msg
printf("%s joining the botnet\n", name);

现在切换到 lib/connect.c。 让我们实施init_channel(). 首先,我定义了一个名为的堆栈字符缓冲区msg长度CMD_LENGTH和一个特殊的 C 网络结构称为server保存有关我们与 master 连接的信息。

首先将传入的 ip 地址从人类可读的格式(带有数字和点)转换为网络字节顺序的二进制格式。 这是使用一个名为的特殊 C 函数完成的inet_addr()来自套接字库。 它只是接收一个 ip 地址并将其以网络可用的二进制文件形式输出。

在 C 中,我们可以通过填写一个名为的结构体的字段来轻松地指定一个网络sockaddr_in.我们那个结构体的实例被称为server. 我们需要填写

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值