DDOS几种常见攻击方式的原理及解决办法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DDOS几种常见攻击方式的原理及解决办法相关的知识,希望对你有一定的参考价值。

DOS的表现形式

  DDOS的表现形式主要有两种,一种为流量攻击,主要是针对网络带宽的攻击,即大量攻击包导致网络带宽被阻塞,合法网络包被虚假的攻击包淹没而无法到达主机;另一种为资源耗尽攻击,主要是针对服务器主机的攻击,即通过大量攻击包导致主机的内存被耗尽或CPU被内核及应用程序占完而造成无法提供网络服务。

  如何判断网站是否遭受了流量攻击呢?可通过Ping命令来测试,若发现Ping超时或丢包严重(假定平时是正常的),则可能遭受了流量攻击,此时若发现和你的主机接在同一交换机上的服务器也访问不了了,基本可以确定是遭受了流量攻击。当然,这样测试的前提是你到服务器主机之间的ICMP协议没有被路由器和防火墙等设备屏蔽,否则可采取Telnet主机服务器的网络服务端口来测试,效果是一样的。不过有一

  点可以肯定,假如平时Ping你的主机服务器和接在同一交换机上的主机服务器都是正常的,突然都Ping不通了或者是严重丢包,那么假如可以排除网络故障因素的话则肯定是遭受了流量攻击,再一个流量攻击的典型现象是,一旦遭受流量攻击,会发现用远程终端连接网站服务器会失败。

  相对于流量攻击而言,资源耗尽攻击要容易判断一些,假如平时Ping网站主机和访问网站都是正常的,发现突然网站访问非常缓慢或无法访问了,而Ping还可以Ping通,则很可能遭受了资源耗尽攻击,此时若在服务器上用Netstat -na命令观察到有大量的SYN_RECEIVED、TIME_WAIT、FIN_WAIT_1等状态存在,而ESTABLISHED很少,则可判定肯定是遭受了资源耗尽攻击。还有一种属于资源耗尽攻击的现象是,Ping自己的网站主机Ping不通或者是丢包严重,而Ping与自己的主机在同一交换机上的服务器则正常,造成这种原因是网站主机遭受攻击后导致系统内核或某些应用程序CPU利用率达到100%无法回应Ping命令,其实带宽还是有的,否则就Ping不通接在同一交换机上的主机了。

当前主要有三种流行的DDOS攻击:

  1、SYN/ACK Flood攻击:这种攻击方法是经典最有效的DDOS方法,可通杀各种系统的网络服务,主要是通过向受害主机发送大量伪造源IP和源端口的SYN或ACK包,导致主机的缓存资源被耗尽或忙于发送回应包而造成拒绝服务,由于源都是伪造的故追踪起来比较困难,缺点是实施起来有一定难度,需要高带宽的僵尸主机支持。少量的这种攻击会导致主机服务器无法访问,但却可以Ping的通,在服务器上用Netstat -na

  命令会观察到存在大量的SYN_RECEIVED状态,大量的这种攻击会导致Ping失败、TCP/IP栈失效,并会出现系统凝固现象,即不响应键盘和鼠标。普通防火墙大多无法抵御此种攻击。

  2、TCP全连接攻击:这种攻击是为了绕过常规防火墙的检查而设计的,一般情况下,常规防火墙大多具备过滤TearDrop、Land等DOS攻击的能力,但对于正常的TCP连接是放过的,殊不知很多网络服务程序(如:IIS、Apache等Web服务器)能接受的TCP连接数是有限的,一旦有大量的TCP连接,即便是正常的,也会导致网站访问非常缓慢甚至无法访问,TCP全连接攻击就是通过许多僵尸主机不断地与受害服务器建立大量 的TCP连接,直到服务器的内存等资源被耗尽而被拖跨,从而造成拒绝服务,这种攻击的特点是可绕过一般防火墙的防护而达到攻击目的,缺点是需要找很多僵尸主机,并且由于僵尸主机的IP是暴露的,因此容易被追踪。

  3、刷Script脚本攻击:这种攻击主要是针对存在ASP、JSP、php、CGI等脚本程序,并调用MSSQLServer、mysqlServer、Oracle等数据库的网站系统而设计的,特征是和服务器建立正常的TCP连接,并不断的向脚本程序提交查询、列表等大量耗费数据库资源的调用,典型的以小博大的攻击方法。一般来说,提交一个GET或POST指令对客户端的耗费和带宽的占用是几乎可以忽略的,而服务器为处理此请求却可能要从上万条记录中去查出某个记录,这种处理过程对资源的耗费是很大的,常见的数据库服务器很少能支持数百个查询指令同时执行,而这对于客户端来说却是轻而易举的,因此攻击者只需通过Proxy代理向主机服务器大量递交查询指令,只需数分钟就会把服务器资源消耗掉而导致拒绝服务,常见的现象就是网站慢如蜗牛、ASP程序失效、PHP连接数据库失败、数据库主程序占用CPU偏高。这种攻击的特点是可以完全绕过普通的防火墙防护,轻松找一些Proxy代理就可实施攻击,缺点是对付只有静态页面的网站效果会大打折扣,并且有些Proxy会暴露攻击者的IP地址。

  完全抵御住DDOS攻击是不可能的

  对付DDOS是一个系统工程,想仅仅依靠某种系统或产品防住DDOS是不现实的,可以肯定的是,完全杜绝DDOS目前是不可能的,但通过适当的措施抵御90%的DDOS攻击是可以做到的,基于攻击和防御都有成本开销的缘故,若通过适当的办法增强了抵御DDOS的能力,也就意味着加大了攻击者的攻击成本,那么绝大多数攻击者将无法继续下去而放弃,也就相当于成功的抵御了DDOS攻击。

  以下几点是防御DDOS攻击几点:

  1、采用高性能的网络设备

  首先要保证网络设备不能成为瓶颈,因此选择路由器、交换机、硬件防火墙等设备的时候要尽量选用知名度高、口碑好的产品。再就是假如和网络提供商有特殊关系或协议的话就更好了,当大量攻击发生的时候请他们在网络接点处做一下流量限制来对抗某些种类的DDOS攻击是非常有效的。

  2、充足的网络带宽保证

  网络带宽直接决定了能抗受攻击的能力,假若仅仅有10M带宽的话,无论采取什么措施都很难对抗现在的SYNFlood攻击,当前至少要选择100M的共享带宽,最好的当然是挂在1000M的主干上了。

  但需要注意的是,主机上的网卡是1000M的并不意味着它的网络带宽就是千兆的,若把它接在100M的交换机上,它的实际带宽不会超过100M,再就是接在100M的带宽上也不等于就有了百兆的带宽,因为网络服务商很可能会在交换机上限制实际带宽为10M,这点一定要搞清楚。

  3、安装专业抗DDOS防火墙

  专业抗DDOS防火墙采用内核提前过滤技术、反向探测技术、指纹识别技术等多项专利技术来发现和提前过滤DDoS非法数据包,做到了智能抵御用户的DoS攻击。但也不能100%阻止对DDoS非法数据包准确检查。

参考资料:天鹰ddos防火墙官网天鹰学堂ddos攻击原理

参考技术A 题主是想问,如果遇到DDOS攻击,应该如何解决吧?

DDOS攻击,叫做分布式拒绝服务攻击,指通过过大的各种正常流量,大量占用服务器处理资源或网络资源,从而使用户无法正常的连接到服务器,达成访问。当然,DDOS攻击只是一种总的攻击方式,最终的结果就是让用户无法正常访问相应服务。
PC当前可以正常访问server,并且server对PC提供服务需要占用上行带宽1M。那么server理论上可以同时对100名正常用户提供服务。
此时hacker希望针对server进行DDOS攻击,那为了不暴露自己的身份,hacker不会使用自己的IP进行攻击,他会各种世界各地的肉鸡,各种各样的IP对server进行攻击,但是这种攻击并不是向server注入什么病毒木马,而是正常的访问server的服务,但是他们并不好好访问,而是登录之后立刻下线,然后再次登录,再次下线,通过这样的方式来占用server的上行带宽以及server连接数,导致正常的PC无法进行正常访问,这个就是DDOS攻击的模式,当然,DDOS攻击有很多种不同的方式,比如带宽占用、TCP饥饿攻击、ping of death等,这里就不一一列举了。

那么如何解决DDOS攻击呢?

在这里列举几种常见的解决方式:
1、硬件防火墙

现在很多的下一代防火墙都带有DDOS攻击防治的功能,在设备出口处设置阈值针对于业务类型的阈值,比如门户型网站服务器,用户登录之后需要做的只是一些图片、文档的查阅,每一个IP向服务器发送的流量是很有限的,可能只有几十K的速率,那这时我们就可以针对于每一个访问IP设置一个阈值,如果一个IP接入服务器的速率超过100K,就将其暂时放入黑名单中,拒绝其后续的访问,然后在一段时间之后进行黑名单解除。这样的话,就可以避免大部分的DDOS攻击。

2、无防火墙的环境

如果企业没有防火墙,只有路由器做网关,如何防治DDOS?这时要基于攻击方式来做区分:
如果是用登录连接数作为攻击方式的话,我们可以在服务器上,针对于同一IP在一段时间内进行登录次数进行阈值的设置,例如,1分钟之后同一个IP登录超过5次,则暂时将该IP放入黑名单,拒绝其访问,一段时间之后再解禁即可。
如果是用流量拥堵的方式来进行攻击的话,则可以通过更换服务器IP的方式来暂时解决,然后在上游设备上将原有IP地址的下一跳置为空,也就是做一条空路由,这样就可以暂时解决DDOS流量攻击,当然,这是治标不治本的,最好的办法就是增加带宽,或者做服务器的负载均衡。

总而言之,DDOS作为当前internet中最毒瘤的攻击方式,几乎无法完全避免,毕竟你有张良计,我有过墙梯,如果攻击方有钱,无限制的攻击你,你其实也没有太好的办法,所以,建议通过硬件防火墙预防DDOS攻击,有些钱还是不能省的。
参考技术B 目前ipv4网络环境中没有完全抵抗ddos攻击的方法。
无论你的软硬件防护级别多高,机房的总带宽有限。
参考技术C 目前最常见的就是SSDP和TNP等 都能在防火墙用协议处理一部分的 不用太担心方法 参考技术D 去腾讯智慧安全申请个御点终端安全系统
申请好了之后,打开腾讯御点,选择修复漏洞
可以自动检测出电脑里面需要修复的漏洞然后一键修复

PHP网站常见的几种攻击方式

PHP网站建设中常见的安全威胁包括:SQL 注入、操纵 GET 和 POST 变量、缓冲区溢出攻击、跨站点脚本攻击、浏览器内的数据操纵和远程表单提交。

1、防止SQL注入攻击

在 SQL 注入攻击 中,用户通过操纵表单或 GET 查询字符串,将信息添加到数据库查询中。

例如,假设有一个简单的登录数据库。这个数据库中的每个记录都有一个用户名字段和一个密码字段。构建一个登录表单,让用户能够登录。

解决这个问题的办法是,将 PHP 的内置 mysql_real_escape_string() 函数用作任何用户输入的包装器。

这个函数对字符串中的字符进行转义,使字符串不可能传递撇号等特殊字符并让 MySQL 根据特殊字符进行操作。清单 7 展示了带转义处理的代码。

2、防止用户操纵变量

 

用户拥有有效的密码,并不意味着他将按照规则行事 —— 他有很多机会能够造成损害。例如,应用程序可能允许用户查看特殊的内容。

比如 template.php?pid=33 或 template.php?pid=321。URL 中问号后面的部分称为查询字符串。因为查询字符串直接放在 URL 中,所以也称为 GET 查询字符串。

这里有什么错吗?

首先,这里隐含地相信来自浏览器的 GET 变量 pid 是安全的。

这会怎么样呢?

大多数用户没那么聪明,无法构造出语义攻击。但是,如果他们注意到浏览器的 URL 位置域中的 pid=33,就可能开始捣乱。

如果他们输入另一个数字,那么可能没问题;但是如果输入别的东西,比如输入 SQL 命令或某个文件的名称(比如 /etc/passwd),或者搞别的恶作剧,比如输入长达 3,000 个字符的数值,那么会发生什么呢?

在这种情况下,要记住基本规则,不要信任用户输入。

应用程序开发人员知道 template.php 接受的个人标识符(PID)应该是数字,所以可以使用 PHP 的 is_numeric() 函数确保不接受非数字的 PID。

需要做的只是使用 strlen() 检查变量的长度是否非零;如果是,就使用一个全数字正则表达式来确保数据元素是有效的。如果 PID 包含字母、斜线、点号或任何与十六进制相似的内容,那么这个例程捕获它并将页面从用户活动中屏蔽。

 

3、缓冲区溢出攻击

缓冲区溢出攻击 试图使 PHP 应用程序中(或者更精确地说,在 Apache 或底层操作系统中)的内存分配缓冲区发生溢出。

 

请记住,您可能是使用 PHP 这样的高级语言来编写 Web 应用程序,但是最终还是要调用 C(在 Apache 的情况下)。与大多数低级语言一样,C 对于内存分配有严格的规则。

缓冲区溢出攻击向缓冲区发送大量数据,使部分数据溢出到相邻的内存缓冲区,从而破坏缓冲区或者重写逻辑。这样就能够造成拒绝服务、破坏数据或者在远程服务器上执行恶意代码。
防止缓冲区溢出攻击的惟一方法是检查所有用户输入的长度。

注意,缓冲区溢出攻击并不限于长的数字串或字母串。也可能会看到长的十六进制字符串(往往看起来像 \xA3 或 \xFF)。

记住,任何缓冲区溢出攻击的目的都是淹没特定的缓冲区,并将恶意代码或指令放到下一个缓冲区中,从而破坏数据或执行恶意代码。

对付十六进制缓冲区溢出最简单的方法也是不允许输入超过特定的长度。
如果您处理的是允许在数据库中输入较长条目的表单文本区,那么无法在客户端轻松地限制数据的长度。在数据到达 PHP 之后,可以使用正则表达式清除任何像十六进制的字符串。

4、跨站点脚本攻击

在跨站点脚本(XSS)攻击中,往往有一个恶意用户在表单中(或通过其他用户输入方式)输入信息,这些输入将恶意的客户端标记插入过程或数据库中。

例如,假设站点上有一个简单的来客登记簿程序,让访问者能够留下姓名、电子邮件地址和简短的消息。

恶意用户可以利用这个机会插入简短消息之外的东西,比如对于其他用户不合适的图片或将用户重定向到另一个站点的 JavaScript,或者窃取 cookie 信息。

幸运的是,PHP 提供了 strip_tags() 函数,这个函数可以清除任何包围在 HTML 标记中的内容。strip_tags() 函数还允许提供允许标记的列表。

从安全的角度来看,对公共用户输入使用 strip_tags() 是必要的。如果表单在受保护区域(比如内容管理系统)中,而且您相信用户会正确地执行他们的任务(比如为 Web 站点创建 HTML 内容),那么使用 strip_tags() 可能是不必要的,会影响工作效率。

还有一个问题:如果要接受用户输入,比如对贴子的评论或来客登记项,并需要将这个输入向其他用户显示,那么一定要将响应放在 PHP 的 htmlspecialchars() 函数中。

这个函数将与符号、< 和 > 符号转换为 HTML 实体。例如,与符号(&)变成 &。这样的话,即使恶意内容躲开了前端 strip_tags() 的处理,也会在后端被 htmlspecialchars() 处理掉。

 

5、浏览器内的数据操纵

有一类浏览器插件允许用户篡改页面上的头部元素和表单元素。使用 Tamper Data(一个 Mozilla 插件),可以很容易地操纵包含许多隐藏文本字段的简单表单,从而向 PHP 和 MySQL 发送指令。

 

用户在点击表单上的 Submit 之前,他可以启动 Tamper Data。在提交表单时,他会看到表单数据字段的列表。

Tamper Data 允许用户篡改这些数据,然后浏览器完成表单提交。

要防御这种工具,最简单的方法是假设任何用户都可能使用 Tamper Data(或类似的工具)。

只提供系统处理表单所需的最少量的信息,并把表单提交给一些专用的逻辑。例如,注册表单应该只提交给注册逻辑。

如果已经建立了一个通用表单处理函数,有许多页面都使用这个通用逻辑,那该怎么办?

如果使用隐藏变量来控制流向,那该怎么办?

例如,可能在隐藏表单变量中指定写哪个数据库表或使用哪个文件存储库。有 4 种选择:

不改变任何东西,暗自祈祷系统上没有任何恶意用户。

重写功能,使用更安全的专用表单处理函数,避免使用隐藏表单变量。

使用 md5() 或其他加密机制对隐藏表单变量中的表名或其他敏感信息进行加密。在 PHP 端不要忘记对它们进行解密。

通过使用缩写或昵称让值的含义模糊,在 PHP 表单处理函数中再对这些值进行转换。例如,如果要引用 users 表,可以用 u 或任意字符串(比如 u8y90×0jkL)来引用它。

后两个选项并不完美,但是与让用户轻松地猜出中间件逻辑或数据模型相比,它们要好得多了。

 

6、远程表单提交

Web 的好处是可以分享信息和服务。坏处也是可以分享信息和服务,因为有些人做事毫无顾忌。

 

以表单为例。任何人都能够访问一个 Web 站点,并使用浏览器上的 File > Save As 建立表单的本地副本。然后,他可以修改 action 参数来指向一个完全限定的 URL(不指向 formHandler.php,而是指向http://www.yoursite.com/formHandler.php,因为表单在这个站点上),做他希望的任何修改,点击 Submit,服务器会把这个表单数据作为合法通信流接收。

首先可能考虑检查 $_SERVER[‘HTTP_REFERER‘],从而判断请求是否来自自己的服务器,这种方法可以挡住大多数恶意用户,但是挡不住最高明的黑客。这些人足够聪明,能够篡改头部中的引用者信息,使表单的远程副本看起来像是从您的服务器提交的。

处理远程表单提交更好的方式是,根据一个惟一的字符串或时间戳生成一个令牌,并将这个令牌放在会话变量和表单中。提交表单之后,检查两个令牌是否匹配。如果不匹配,就知道有人试图从表单的远程副本发送数据。

PHP网站开发安全总结:

使用 mysql_real_escape_string() 防止 SQL 注入问题。

使用正则表达式和 strlen() 来确保 GET 数据未被篡改。

使用正则表达式和 strlen() 来确保用户提交的数据不会使内存缓冲区溢出。

使用 strip_tags() 和 htmlspecialchars() 防止用户提交可能有害的 HTML 标记。

避免系统被 Tamper Data 这样的工具突破。

使用惟一的令牌防止用户向服务器远程提交表单。



以上是关于DDOS几种常见攻击方式的原理及解决办法的主要内容,如果未能解决你的问题,请参考以下文章

常见的几种web攻击方式及原理

WEB网站常见受攻击方式及解决办法

几种常见的网络攻击方式

DDOS攻击方式都有哪些?

安全漏洞XSS、CSRF、SQL注入以及DDOS攻击

WEB网站常见受攻击方式及解决办法