用 JavaScript 对抗 DDOS 攻击

news2024/12/24 21:24:28

继续趣事分享。

上回聊到了大学里用一根网线发起攻击,今天接着往后讲。

不过这次讲的正好相反 —— 不是攻击,而是防御。一个奇葩防火墙的开发经历。

第二学期大家都带了电脑,于是可以用更高端的方法断网了。但设备先进反而没有了 GEEK 的感觉。于是,决定做些其他更有意义的事。


一天,几个好友在吐槽,他们的游戏服务器又被打垮了,接着讨论起各种防护方案。

在过去,每当听到防火墙软件时,就觉得毫无卵用。巨大的流量一来,带宽都堵死了,软件又有何用。

不过,大家仍对其寄以厚望。而且还有不少厂商在做,看来,效果总是有一点的。

讨论讨论着,不免又有些蠢蠢欲动。要不,做个防火墙吧,做一个思路完全不同的!


当然,这不是第一次尝试。

初学那会,没有固定的目标。每看见一个小 demo,就想搞个大程序。比如看了 DirectX 就有做游戏的冲动,但不出几天就不了了之。

有段时间对驱动程序产生了兴趣,琢磨起 Windows DDK 里的 demo。当看见 NDIS 中间件这玩意时,顿时起了精神。这不就是一个最底层的包过滤器吗,用来做防火墙,性能自然是极好的。

于是心血来潮,照着其中的样例,改造出一个最简单的 IP 过滤防火墙。为了凸显高性能,硬着头皮看了本数据结构,依样画葫芦写了个哈希表,来更快查询。

然而快归快,没有实际用途,不过是个玩具罢了。

现实中的防火墙,也不可能这么简单的逻辑。肯定还需更高层的协议分析,复杂的策略判断,大量的数据积累。。。当然还少不了无数次的蓝屏调试。

想到这,立马就没有了继续。


然而这一次,决定不再纠结技术层面,而是做一个“另类”的 —— 用最简单的技术,加上巧妙的想法,配合一些独门绝技,来获得出其不意的效果。

考虑到传统的开发人员,对系统、网络都已经非常熟悉,和他们比拼这些,就毫无优势了。

而当时的我,点满了一个和安全毫不相干的技能 —— 网页脚本特效,以及一堆“前端黑魔法”。

但是。。。这。。和网络防御。。。有什么关系?

没有半点关系~~ 想多了。还是考虑正经的吧。


首先想到的,是改造游戏的服务端程序。

毕竟这是“开源”的,肯定能通过修改程序,来加强那脆弱的网络系统。

然而,当看到那密密麻麻的代码、从未用过的语言、完全不熟的调试器,兴致荡然无存。

没兴趣就没想法,果断放弃。


既然如此,那就从客户端试试。

这一次,抱着探索的心情,打开程序,细细揣摩起来。

正当毫无头绪时,突然传来亲切的嚓嚓声 —— 敏感的神经怎能放过,这不是 ie 的专属声音吗。

这才猛然意识到,登录器中内嵌的,不正是一个大大的网页!

有网页,不就可以运行脚本了!

从没想到,居然打起了这个内嵌框的主意~~ 但总算把脚本扯到一起了。

越想越兴奋。现有的防火墙,几乎都是纯服务端的数据分析,能让客户端参与的,应该还很少吧。

“只要在登录器的网页里引一个脚本,就能...”

大家听了,表示可以接受。


有脚本,就可以尽情发挥了。

我们必须让用户运行脚本,才能连上游戏服务器;没运行过脚本的 IP,就一律阻拦。

于是开始构思、整理:

  • 当脚本运行时,发送一个请求给 “授权服务器”

  • “授权服务器”验证参数之后,将用户 IP 通知给“游戏服务器”上的防火墙,添加到白名单

  • “游戏服务器”只允许白名单的 IP 通过(“授权服务器”默认在白名单)

正常用户,这并没影响;但攻击器不会执行脚本,也就无法进入白名单 —— 无论发送什么数据包,都会被拦截。

这样,防火墙的策略,也变得极其简单:仅仅判断数据包的 IP 是否在白名单里。

于是,之前那个简陋的 demo 驱动又被翻了出来。因为功能单一,保证了稳定性。而且是在网卡链路层上拦截,所以有超高的性能。

到此,一个 JavaScript 参与的网络防火墙原型诞生了!


也许你会说,这只是转移了风险而已。把游戏服务器的风险,转移到了网站上。要是网站被打垮,同样无法进游戏。

的确如此。不过相比普通的网络程序,Web 有更多成熟的防御方案,甚至用现成的 CDN,就可以缓解。

因此将普通的 C/S 网络防御,挂靠在了更稳定的 B/S 之上,就无需再造轮子了,节省大量成本。


当然这只是基本雏形。实际应用,还有不少需要考虑的地方。

例如,白名单不能无限增加,得有过期时间;客户端的脚本,也不能只运行一次,得定期触发激活。

....

不过,由于无需考虑兼容性问题,使得开发十分顺利。服务器都是 Win2003;网页运行在 WebBrowser 控件里,都是 ie67 的内核。

几天后功能完成。接着做了个简单的界面程序,将方案进行包装,就开始试用了。


上线后,效果很理想!任何与玩家无关的流量,都进行了拦截。虽然大流量攻击仍无能为力,但各种 CC 攻击就能轻松抵挡住了!

不过,攻击者也绝不会罢休。

况且,前端的一切都是公开的,这个秘密早晚会被发现。


对抗 v1

平静了几个月后,一大波僵尸又来了。

日志显示,短时间内白名单进了大量 IP,这绝不是正常用户的。

显然,已有人发现了这个秘密!

事实上,第一版做的非常简单,甚至连脚本都没混淆。

他们把脚本逻辑,移植到了攻击器里。这样不访问网页,也能变成合法用户了。

至于他们是如何发现的,无从得知。但脑补发现后的心情,一定是这样的:卧槽,原来是在这里,居然这么猥琐~~~~

当然,这是意料之中的事。

新版本早已准备就绪,“前端黑魔法” 也跃跃欲试,决定进行反击。

这次,将脚本进行了加密。

不,不是网上流传的那种加密,而是特殊构造的。虽然看起来差不多:整个程序,套在一个 eval 之中。

懂点 JS 的都知道,把 eval 换成 console.log 之类的,代码就原形毕现了。相信 99% 的人会这么做。

于是,利用大家这个心理,在代码中埋下一陷阱:如果只解密,不 eval,就会出现意外的后果。

eval(
	(function() {
		...
		T = setTimeout(die, 1)
		...
		code += 'clearTimeout(T)'
		...
		return code
	})()
)

在解密过程中,偷偷开启一个定时器:1 毫秒后,进入自杀模式 —— 死循环内存申请!

正常情况下,这并不会触发 —— 因为随后 eval 的代码里,会解除这个定时器;但如果把 eval 换成其他的,就无法执行解除了 —— 炸弹触发!

当时的主流内存还是 1~2G,这会瞬间被吞光,卡到硬盘吱吱作响。

为满足好奇心,想看看有多少人栽进去,因此在死循环之前,还加了日志上报的功能。

那段时间,正好在琢磨一个短信接口。于是,这日志就成了测试内容。

每当有人试图破解脚本时,手机就立即收到了消息,体验了回“尽在掌控中”的感觉:)

当然,就这样结束了吗?

不,还早着呢。

继续观看下一篇

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/593450.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

第十七章行为性模式—状态模式

文章目录 状态模式解决的问题反例 结构实例存在的问题使用场景 状态模式与策略模式的区别 行为型模式用于描述程序在运行时复杂的流程控制,即描述多个类或对象之间怎样相互协作共同完成单个对象无法单独完成的任务,它涉及算法与对象间职责的分配。行为型…

Java中常见转换-数组与list互转、驼峰下划线互转、Map转Map、List转Map、进制转换的多种方式

场景 Java中数组与List互转的几种方式 数组转List 1、最简单的方式,Arrays.asList(array); 创建的是不可变列表&#xff0c;不能删除和新增元素 String[] array new String[]{"a","b"};List<String> stringList Arrays.asList(array);System.ou…

嵌入式和单片机

凡是从事信息技术相关工作的&#xff0c;一定都听说过嵌入式和单片机。 大家都知道&#xff0c;这两个名词&#xff0c;和硬件系统有着非常密切的关系。 但是&#xff0c;如果要问具体什么是嵌入式&#xff0c;什么是单片机&#xff0c;它们之间究竟有什么区别&#xff0c;我…

【NovelAI 小说SD批量生成 文生图】Web版环境配置和使用方法

样片&#xff1a; 【样品】《谜影之夜》文生图全自动版SD一键成片 操作演示&#xff1a; 【txt2video web】携带漫画插件的Web版AI小说生成工具无声演示版 操作口述教程&#xff1a; 【NovelAI】携带漫画插件的Web版AI小说生成视频工具 该文章面向购买脚本的付费用户&#xff0…

钓鱼网站也在使用https加密,如何识别钓鱼网站?

信息安全是一个庞大的领域&#xff0c;其中涉及到很多知识点&#xff0c;但是大多公司都对其没有提及足够的重视&#xff0c;希望随着国内对于安全的越来越重视&#xff0c;更多的公司也能在信息安全领域投入越来越多的注意。 安装SSL证书是为了对数据进行加密传输&#xff0c…

轻松学会食堂管理,就这么简单!

随着科技进步和生活水平的不断提高&#xff0c;人们对于餐饮消费的需求也逐渐变得多样化和个性化。 高校食堂现状分析 01.信息化水平低&#xff0c;学校管理难&#xff0c;无法精准就餐&#xff1b; 02用户满意度低&#xff0c;学生取餐环节效率低&#xff1b; 03.管理效率低…

【Redis】浅谈Redis-集群(Cluster)

文章目录 前言1、集群实现1.1 创建cluster目录&#xff0c;并将redis.conf复制到该文件夹1.2 复制redis.conf&#xff0c;并进行配置1.3 启动redis&#xff0c;查看启动状态1.4 合成集群1.5 查看集群1.6 集群读写操作 2、SpringBoot整合redis集群2.1 引入包2.2 设置配置2.3 使用…

C++服务器框架开发5——日志系统logAppender/IO类“3种stream”/双感叹号

该专栏记录了在学习一个开发项目的过程中遇到的疑惑和问题。 其教学视频见&#xff1a;[C高级教程]从零开始开发服务器框架(sylar) 上一篇&#xff1a;C服务器框架开发4——日志系统logger/.cpp与.cc C服务器框架开发5——日志系统logAppender/IO类“3种stream”/双感叹号 目前…

2022年天府杯全国大学生数学建模竞赛C题环境保护与绿色经济解题全过程文档及程序

2022年天府杯全国大学生数学建模竞赛 C题 环境保护与绿色经济 原题再现&#xff1a; “节能减排”和发展绿色经济是国家一项重大战略规划。“绿水青山就是金山银山”。环境的保护对国民经济的发展有着重要意义。随着工业化进程的加快&#xff0c;环境保护方面的问题已经刻不容…

ClickHouse进阶|如何自研一款企业级高性能网关组件?

使用原生ClickHouse集群进行节点数据查询和写入时&#xff0c;离不开第三方开源网关组件chproxy支持。但由于chproxy缺少TCP协议支持&#xff0c;导致性能、查询能力等受限。这也成为困扰众多ClickHouse开发者的一大难题。那么&#xff0c;究竟应该如何突破&#xff1f;本文将揭…

chatgpt赋能python:Python中撤销的快捷键

Python中撤销的快捷键 在编程中&#xff0c;我们经常需要进行调试&#xff0c;不可避免地会出现一些错误&#xff0c;这时候撤销 (Undo) 功能就显得尤为重要。在 Python 中&#xff0c;我们可以使用一些快捷键来快速撤销&#xff0c;本文将会介绍这些快捷键的使用以及使用它们…

chatgpt赋能python:Python中的字符提取:从基础到高级

Python中的字符提取&#xff1a;从基础到高级 在使用Python进行文本处理和数据挖掘时&#xff0c;我们经常需要从字符串中提取特定的字符或子串。本文将介绍Python中的常用字符串提取方法&#xff0c;包括基础的字符串操作、正则表达式和第三方库等高级方法。 基础字符串操作…

二叉树中堆的实现

完全二叉树 满二叉树&#xff1a;二叉树每个节点的度都达到最大值&#xff08;2&#xff09;&#xff0c;由此可有等比求和计算出节点总数&#xff1a;2^k-1 完全二叉树&#xff1a;除了最后一层。前面节点的度都满了&#xff0c;最后一层可以不满&#xff0c;但是必须从左至右…

用时序数据库 DolphinDB 实现地震波形的分析预警

1. 绪论 波形数据的存储与实时流处理是地震预警、地震速报、地震烈度速报、震源机制解等数字地震台网综合处理系统的前提&#xff0c;合理的存储方案与高效的实时流处理架构能极大地节约存储成本、降低响应延时、方便震源分析。 本篇教程会为有该方面需求的客户提供一个基于 …

如何在不丢失格式的情况下将 Excel 转换为 PDF?

Microsoft Excel 因其专业的数据或信息显示能力而被广泛采用。但是&#xff0c;它在兼容性上有一个恼人的缺点。 首先&#xff0c;Excel只能在Windows和MacOS上使用&#xff0c;Linux或其他操作系统的用户将无法使用&#xff1b;其次&#xff0c;即使您有一个可以打开和阅读 E…

PERMA幸福模型

PERMA幸福模型 由“积极心理学之父”马丁塞利格曼&#xff08;Martin Seligman&#xff09;在《持续的幸福 》一书中提出。 模型介绍 PERMA指的是创造充实、快乐和有意义的生活所必需的五大要素&#xff0c;它们是: 正向情绪Positive emotions 积极情绪是快乐人生的一个重要…

三种不同的存储芯片性能比较

为了进行性能比较&#xff0c;使用了三种不同的存储芯片&#xff0c;即Everspin EM064LX 64Mib STT‐MRAM、Micron MT25Q 128Mib NOR闪存和Micron MT29F 1Gib SLC NAND闪存。 该基准测试在STM32H755ZI上运行&#xff0c;Cortex‐M7内核的时钟频率为240MHz。Quad SPI总线用于1‐…

安泰功率放大器ATA-8202在EMC电磁兼容测试中的具体应用

作为电子及电器产品质量衡量指标之一的电磁兼容性&#xff08;EMC&#xff09;测试&#xff0c;它的测试正确与否直接关系到产品自身使用的可靠性及安全性&#xff0c;并且它还有可能对于同系统中的其他部分造成影响&#xff0c;不良的电磁兼容性会直接导致系统无法正常运转&am…

GIS数据转换器坐标生成功能

​很多时候我们会拿到一些没有坐标的图片或栅格数据&#xff0c;我们如何给它赋予坐标呢&#xff1f;下面介绍一种为这些数据生成坐标的方法。使用工具是GIS数据转换器-栅格-V4.0。 GIS数据转换器坐标生成功能 使用图片是这样的&#xff0c;网上找的不知道哪位大神画的三国时期…

【毕业季征文】追光人,终将光芒万丈!

追光人&#xff0c;终将光芒万丈&#xff01; 写在最前面最后从0到1 我的二进制探索之路一、从0到1&#xff0c;破茧成蝶二、从0到2n&#xff0c;全面发展三、从0到∞&#xff0c;逐光而行 参考 写在最前面 参与活动#毕业季征文|未来可期# 岁月不居&#xff0c;时节如流。转眼…