最近花了点时间把《破坏之王-DDOS攻击与防范深度剖析》看了一遍,坦白来说,这本书比较浅显,可以说是入门书,当然对于我这种对DDOS一知半解的人来说,也是一本不错的书,起码我学到了一些东西。
       DDOS是分布式拒绝服务(Distributed Denial of Service, DDOS)的简写,从名字可以看出,其攻击是分布式的,即多台(可能上万台,甚至更多)电脑同时对目标进行攻击,攻击的目的是让目标无法提供服务。从根本上来说,让目标无法提供服务,办法有很多,比如侵入目标服务器,删除关键服务或程序,或者其他的物理方式,这些确实有效,但是在隐蔽性上,以及目标恢复服务的难度上,都和DDOS相去甚远。DDOS本质来说是用一些方法消耗目标服务器的资源,一台服务器提供正常的对外服务,它必须拥有足够的硬件设备,如CPU、内存、足够快的硬盘,以及系统软件,如稳定的操作系统、稳定的应用服务器以及数据库等,还需要稳定的应用服务,比如基于JavaEE和PHP的程序,还需要足够的带宽,让用户可以访问。这些是提供服务的基础,也是DDOS攻击的关键,从这个角度来看,DDOS的攻击一般分为带宽攻击、系统资源攻击和应用资源供给。简单说明如下:
      1)带宽攻击:这个很容易理解,就是向目标服务器发送大量的数据包,让其他的正常用户无法连接上服务器,这个最好理解,也最容易实现,很多压力测试的工具都可以达到这种效果。但是这种压力测试工具很容易被通过IP黑名单的办法屏蔽掉。常见的攻击方式有ICMP/IGMP洪水攻击和UDP洪水攻击,这种攻击方式比较古老,很容易过滤,并且受制于攻击电脑的性能,往往达不到想要的效果。更好的方式是反射攻击技术,所谓的反射攻击,就是攻击电脑伪装成目标主机,向某些服务器(如DNS、NTP、ACK、SNMP)发送请求,这些服务器返回的报文远大于请求内容,并且其返回的数据是指向目标主机的,这即方便了攻击隐藏,也避免了攻击主机的性能限制,因为某些情况下,其放大效果能达到700倍。
     2)攻击系统资源:主要是指攻击TCP链接和攻击CPU、内存等资源,TCP连接被设计为可靠的三次握手模式,对。于后两次而言,每当有一次出现问题,就会引起等待和重传,没有完成的连接被称为半开连接,半开连接会很快耗尽服务器的连接资源,这就是常见的SYN洪水攻击;另外客户端发送完数据之后,会设置PSH标志,服务器收到这一信息后,就会清空缓冲区,将数据提交给服务进程,如果发送大量的PSH位的数据,也会造成服务器资源的占用。另外还有RST攻击和SocketStress攻击,前者相对困难,后者是一种慢速攻击,这是通过TCP连接中的传输窗口的特性进行攻击。另外还有利用SSL的特性,让服务器端耗费大量的资源进行加解密,进而耗尽资源导致其无法服务。
     3)攻击应用资源:常见的有攻击DNS和攻击HTTP服务,攻击DNS实际上一种无目的的、针对整个网络的攻击,相当于毁掉了整个城市的站牌和路标,自然就无法通行了。攻击HTTP服务是利用HTTP服务的一些设计缺陷,如HTTP洪水攻击,其实和攻击TCP连接类似,攻击者连接服务器之后,立刻切断连接,并重新连接,这样服务器的连接在超时之前需要保存,就会耗尽服务器资源;再比如Slowloris攻击,就是利用了HTTP头部的结束标志位"\r\n\r\n",攻击者发送其他的Head字段,就是不发送"\r\n\r\n"标志,就会导致服务器的连接耗尽,IIS、Nginx进行修改,但是Apache似乎没有修改;再如慢速POST攻击,是利用了Content-Length指定了Body的传输长度这一特点,指定巨大的Content-Length值,然后缓慢的发送body信息,从而占有http连接,进而耗尽服务器资源。还有一些就是数据处理过程的攻击,如正则表达式和哈希冲突拒绝服务攻击,这些也是降低服务器的处理速度,占有关键资源,从而达到拒绝服务的目的。
      DDOS的治理:
      1)最可行的办法,其实就是杜绝IP地址伪造,其实这个处理起来并不难,只要让路由器判断这个包是否是从本网域发出来的,如果不是,则拒绝,但是由于成本和缺乏激励机制,还没有实现。还有一些类似的方案,如果能够独具IP地址伪造,那么DDOS攻击应该减少大部分。
       2)攻击流量的缓解主要是对网络流量进行清洗,清洗之前需要稀释,稀释的办法主要有CDN、AnyCast,前者是通过智能DNS,将用户的访问分布到不同的机器上,但是这种方法对指定IP的攻击无效,AnyCast可以解决针对IP攻击的问题。
      3)数据清洗的办法很多,但是并不是十分有效,常见的办法有IP信誉检查、攻击特征匹配、速度限制和检查、TCP代理和验证、协议完整性验证、客户端真实性验证等方法

DDOS学习笔记(《破坏之王-DDOS攻击与防范深度剖析》)的更多相关文章

  1. 破坏之王-DDoS攻击与防范深度剖析

    破坏之王-DDoS攻击与防范深度剖析 下载:链接:https://pan.baidu.com/s/1bzVT6YkZGGg7anpQWDknjA 提取码:j7ns 网际空间的发展带来了机遇,也带来了威 ...

  2. 破坏之王DDoS攻击与防范深度剖析【学习笔记】

    一.DDoS初步印象 1.什么是分布式拒绝服务攻击? 1)首先它是一种拒绝服务攻击 我们可以这么认为,凡是导致合法用户不能访问服务的行为,就是拒绝服务攻击. 注:早期的拒绝服务主要基于系统和应用程序的 ...

  3. Metasploit学习笔记——客户端渗透攻击

    1.浏览器渗透攻击实例——MS11-050安全漏洞 示例代码如下 msf > use windows/browser/ms11_050_mshtml_cobjectelement msf exp ...

  4. DeepLearning.ai学习笔记(一)神经网络和深度学习--Week3浅层神经网络

    介绍 DeepLearning课程总共五大章节,该系列笔记将按照课程安排进行记录. 另外第一章的前两周的课程在之前的Andrew Ng机器学习课程笔记(博客园)&Andrew Ng机器学习课程 ...

  5. DeepLearning.ai学习笔记(一)神经网络和深度学习--Week4深层神经网络

    一.深层神经网络 深层神经网络的符号与浅层的不同,记录如下: 用\(L\)表示层数,该神经网络\(L=4\) \(n^{[l]}\)表示第\(l\)层的神经元的数量,例如\(n^{[1]}=n^{[2 ...

  6. Android学习笔记_48_若水新闻客户端源码剖析

    一.新闻客户端布局代码 1.1 主界面布局 使用GridView实现左右可滑动菜单项,使用标签HorizontalScrollView实现水平滚动条,将创建的GridView添加到布局文件中. < ...

  7. iOS学习——布局利器Masonry框架源码深度剖析

    iOS开发过程中很大一部分内容就是界面布局和跳转,iOS的布局方式也经历了 显式坐标定位方式 --> autoresizingMask --> iOS 6.0推出的自动布局(Auto La ...

  8. C51学习笔记

    转自:http://blog.csdn.net/gongyuan073/article/details/7856878 单片机C51学习笔记 一,   C51内存结构深度剖析 二,   reg51.头 ...

  9. DeepLearning.ai学习笔记汇总

    第一章 神经网络与深度学习(Neural Network & Deeplearning) DeepLearning.ai学习笔记(一)神经网络和深度学习--Week3浅层神经网络 DeepLe ...

随机推荐

  1. java 虚拟机的类加载机制

    Java 虚拟机的类加载机制 关于类加载机制: ​ 虚拟机把描述类的数据从Class 文件加载到内存,并对数据进行效验.转换解析和初始化,最终 形成可以被虚拟机直接使用的Java 类型,就是虚拟机的类 ...

  2. 使用PHP文件锁写一个多个请求同时并发写入一个文件,要求不脏读、数据不丢失

    使用PHP文件锁写一个多个请求同时并发写入一个文件,要求不脏读.数据不丢失. //并发文件操作 function filehandle($filename,$data){ $start = 0; $e ...

  3. 《Metasploit魔鬼训练营》第四章(下)

    p163 XSSF 默认kali 2.0中没有xssf,先下载:https://code.google.com/archive/p/xssf/downloads 将下载下来的zip文件解压,将其中的d ...

  4. 宏WINAPI和几种调用约定

    在VC SDK的WinDef.h中,宏WINAPI被定义为__stdcall,这是C语言中一种调用约定,常用的还有__cdecl和__fastcall.这些调用约定会对我们的代码产生什么样的影响?让我 ...

  5. [DFS遍历图]UVA10562 Undraw the Trees

    传送门: 1. UVA - 10562 2. Vjudge [看图写树]     将题目中给出的树改写为 括号表示法 即 (ROOT (SON1(...) (SON2(...)...(SONn(... ...

  6. SQLServer2008数据库连接error40错误

    在连接SQL Server偶尔会遇到报错,如在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误.未找到或无法访问服务器.请验证实例名称是否正确并且 SQL Server 已配置为 ...

  7. iOS 多线程之线程锁Swift-Demo示例总结

    线程锁是什么 在前面的文章中总结过多线程,总结了多线程之后,线程锁也是必须要好好总结的东西,这篇文章构思的时候可能写的东西得许多,只能挤时间一点点的慢慢的总结了,知道了线程之后要了解线程锁就得先了解一 ...

  8. Java数据结构和算法(四)——栈

    前面我们讲解了数组,数组更多的是用来进行数据的存储,纯粹用来存储数据的数据结构,我们期望的是插入.删除和查找性能都比较好.对于无序数组,插入快,但是删除和查找都很慢,为了解决这些问题,后面我们会讲解比 ...

  9. Undefined index: HTTP_RAW_POST_DATA的解决办法

    $postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; 替换为 $postStr = isset($GLOBALS['HTTP_RAW_POST_DA ...

  10. oracle中 merge into 的用法

    很多时候我们需要通过筛选条件同时对表进行 更新,插入,删除 等操作.这样如果我们单一的去操作表会显得很麻烦,下面会说到这个merge  into 的用法会极大的优化我们操作表的时间和代码量. 举例,先 ...