目录
DOS 攻击
什么是 DOS 攻击
攻击手段分类
具体的攻击方式举例
优秀博客参考
DDOS 攻击
DOS 攻击
什么是 DOS 攻击
DOS 是 Denial of Service 的简称, 用中文简单翻译就是拒绝服务. DOS 攻击的目的是: 通过耗尽服务器的 CPU, 内存和网络带宽等资源使服务器无法为用户提供正常服务或使得服务质量下降. 总结下就是攻击服务器, 使得服务器拒绝为正常的用户请求提供服务.(这样已解释, 感觉 DOS 这个名字还取得挺形象的, 哈哈~)
在网上找了个比较详细的解释:
作个形象的比喻来理解 DoS. 街头的餐馆是为大众提供餐饮服务, 如果一群地痞流氓要 DoS 餐馆的话, 手段会很多, 比如霸占着餐桌不结账, 堵住餐馆的大门不让路, 骚扰餐馆的服务员或厨子不能干活, 甚至更恶劣...... 相应的计算机和网络系统则是为 Internet 用户提供互联网资源的, 如果有黑客要进行 DoS 攻击的话, 可以想象同样有好多手段! 今天最常见的 DoS 攻击有对计算机网络的带宽攻击和连通性攻击. 带宽攻击指以极大的通信量冲击网络, 使得所有可用网络资源都被消耗殆尽, 最后导致合法的用户请求无法通过. 连通性攻击指用大量的连接请求冲击计算机, 使得所有可用的操作系统资源都被消耗殆尽, 最终计算机无法再处理合法用户的请求.
攻击手段分类
DOS 拒绝服务攻击根据攻击手段, 主要可分为两类:
洪泛攻击: 向目标服务器发送大量超过其处理能力的无用数据包从而使目标服务器无法为合法用户提供服务;
半开连接攻击: 使系统中存在大量处于半连接的请求服务, 服务器为了维护这些半开连接, 需要耗费大量内存, 而且一般的 web 服务器都是有连接数量限制的. 这个时候如果正常的请求过来就会被拒绝掉.
具体的攻击方式举例
1. SYN FLOOD(属于半开连接攻击)
利用服务器的连接缓冲区 (Backlog Queue), 利用特殊的程序, 设置 TCP 的 Header, 向服务器端不断地成倍发送只有 SYN 标志的 TCP 连接请求. 当服务器接收的时候, 都认为是没有建立起来的连接请求, 于是为这些请求建立会话, 排到缓冲区队列中.
如果你的 SYN 请求超过了服务器能容纳的限度, 缓冲区队列满, 那么服务器就不再接收新的请求了. 其他合法用户的连接都被拒绝掉. 可以持续你的 SYN 请求发送, 直到缓冲区中都是你的只有 SYN 标记的请求.
2. 带宽 DOS 攻击
如果你的连接带宽足够大而服务器又不是很大, 你可以发送请求, 来消耗服务器的缓冲区消耗服务器的带宽. 这种攻击就是人多力量大了, 配合上 SYN 一起实施 DOS, 威力巨大. 不过是初级 DOS 攻击.
3. Hash 碰撞攻击
这个安全弱点利用了各语言的 Hash 算法的 "非随机性" 可以制造出 N 多的 value 不一样, 但是 key 一样数据, 然后让你的 Hash 表成为一张单向链表, 而导致你的整个网站或是程序的运行性能以级数下降 (可以很轻松的让你的 CPU 升到 100%). 关于 Hash 碰撞 DOS 攻击, 这篇博客已经总结的很全面了, 就不自己再造个轮子了.
我自己做了个简单的实验, 写了下面这个 Controller
- @RequestMapping("/convertJSONAndValid")
- public Object convertJSON(@RequestBody JSONObject jspan){
- Map<String,Object> map = new HashMap<>();
- map.put("key1","value");
- return map;
- }
通过 Postman 向这个接口一次性发送 1000000 个 "xx":"1" 这样的键值对, 通过任务管理器看到 CPU 瞬间就飙升到了 88%. 这个攻击还是非常恐怖的. 下面代码用于生成 1000000 个键值对.
- public static void main(String[] args) throws Exception {
- FileWriter fs = new FileWriter("D:\\json.txt");
- fs.write("{\r\n");
- int count = 1000000;
- for(int i=0;i<count;i++){
- if(i!=count-1){
- fs.write("\"xx\":\"1\",\r\n");
- }else {
- fs.write("\"xx\":\"1\"\r\n");
- }
- }
- fs.write("}");
- fs.close();
- }
优秀博客参考
https://www.cnblogs.com/botoo/p/9583388.html
DDOS 攻击
传统上, 攻击者所面临的主要问题是网络带宽, 由于较小的网络规模和较慢的网络速度的限制, 攻击者无法发出过多的请求. 虽然类似 "the ping of death" 的攻击类型只需要较少量的包就可以摧毁一个没有打过补丁的 UNIX 系统, 但大多数的 DoS 攻击还是需要相当大的带宽的, 而以个人为单位的黑客们很难使用高带宽的资源. 为了克服这个缺点, DoS 攻击者开发了分布式的攻击. 攻击者简单利用工具集合许多的网络带宽来同时对同一个目标发动大量的攻击请求, 这就是 DDoS(Distributed Denial of Service) 攻击.
无论是 DoS 攻击还是 DDoS 攻击, 简单的看, 都只是一种破坏网络服务的黑客方式, 虽然具体的实现方式千变万化, 但都有一个共同点, 就是其根本目的是使受害主机或网络无法及时接收并处理外界请求, 或无法及时回应外界请求.
总结下:
DDOS 攻击就是控制多台分布广泛的机器对目标机器发起 DOS 攻击
来源: https://www.cnblogs.com/54chensongxia/p/11766347.html