V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
这是一个专门讨论 idea 的地方。

每个人的时间,资源是有限的,有的时候你或许能够想到很多 idea,但是由于现实的限制,却并不是所有的 idea 都能够成为现实。

那这个时候,不妨可以把那些 idea 分享出来,启发别人。
koswu
V2EX  ›  奇思妙想

一种关于网站防 ddos 的想法

  •  
  •   koswu · 2020-04-29 10:02:42 +08:00 · 7049 次点击
    这是一个创建于 1698 天前的主题,其中的信息可能已经有所发展或是发生改变。

    网站能否在被访问之前加入一段挖矿脚本,大约运行个几秒钟,达成一定的工作量证明才能打开。 但是关键是* 挖矿能否在这么短的时间做出工作量证明?* 如果可行的话我觉得是一种防止 DDOS 的好手段,你 D 我,我就拿收入,这样? 希望有懂的人解答一下

    第 1 条附言  ·  2020-04-29 10:35:49 +08:00
    专指 CC 攻击,我承认我自己没有理清楚,但是我认为广义上的 ddos 攻击包含 CC 攻击,请理性讨论好吗,我说的是类似 cloudflare 的 5 秒盾一样的东西
    第 2 条附言  ·  2020-04-29 10:54:19 +08:00
    CC 攻击,耗尽的不一定是流量,更有可能是服务器的处理资源和 IO 资源,返回静态的页面,就可以把请求丢给 CDN 去处理
    第 3 条附言  ·  2020-04-29 12:34:58 +08:00
    我可能是表述不清楚,导致各位对于我的想法理解都有偏差

    首先我不是想用这个抵御流量,我的想法是为了防止对主机资源的耗尽,试想以下场景

    我有一个博客,访问某个页面需要执行一段 sql 语句,这段语句很费时间

    有一个攻击者发现了,疯狂用肉鸡访问这个页面,企图通过大量的 sql 执行把我的服务器搞 down

    这个时候我加入了一个验证,你要访问这个页面需要提交一个工作量证明,我才会真的去执行 sql 语句把结果返回给你,首次访问的人就先丢给你一个静态页面,里面附加了计算工作量证明的计算代码,js 或者 webassembly 实现,计算以后再次请求

    然后现在,我可以把我的一部分初次访问的流量分发给其他主机,因为只需要这个静态的页面,缓解了后端压力

    这样攻击者他如果不做工作量证明就不能让我的后端执行 sql 语句
    50 条回复    2020-05-06 11:02:22 +08:00
    ohao
        1
    ohao  
       2020-04-29 10:05:58 +08:00   ❤️ 6
    弟弟,先搞清楚什么是 DDOS 在来发帖
    DDOS 攻击模式是大流量堵塞端口,根本和访问没半毛钱关系

    最接近你说的攻击,是 CC 攻击
    但是 CC 是不停刷页面,根本不关心访问的内容,顺时并发让 Web 服务的软件宕机超负载而已

    所以你在说的是什么?
    nguoidiqua
        2
    nguoidiqua  
       2020-04-29 10:09:08 +08:00 via Android   ❤️ 12
    看来 v 站越来越多非技术人士了
    villivateur
        3
    villivateur  
       2020-04-29 10:10:20 +08:00
    别人 DDOS 你的时候,根本就不会去执行脚本,甚至可能连 HTTP 协议都用不上,直接堵塞你的 IP 层
    dapang1221
        4
    dapang1221  
       2020-04-29 10:12:47 +08:00
    你说的这个只能用一个新协议去取代 http 协议,让工作量证明发生在访问之前,否则 js 挖矿人家又不是执行 js 。。
    u6pM63mMZ34z32cE
        5
    u6pM63mMZ34z32cE  
       2020-04-29 10:23:55 +08:00   ❤️ 2
    你见过 curl 会执行脚本的吗?
    wangxiaoaer
        6
    wangxiaoaer  
       2020-04-29 10:25:58 +08:00   ❤️ 3
    楼主,你跟川普是什么关系?挺有想法的,我喜欢。
    yukiloh
        7
    yukiloh  
       2020-04-29 10:32:04 +08:00 via Android
    其实没了解过那些入站要等几秒的我也不知道发生了啥
    silvernoo
        8
    silvernoo  
       2020-04-29 10:32:19 +08:00
    人家估计不会用浏览器 D 你
    koswu
        9
    koswu  
    OP
       2020-04-29 10:32:43 +08:00
    @ohao 是我说错了,CC 攻击也是 DDOS 的一种啊。。。
    并且完全可以工作量证明以后再返回页面啊
    koswu
        10
    koswu  
    OP
       2020-04-29 10:33:21 +08:00
    @mebtte curl 就直接返回一个 js 咯,没有真实界面,像 cloudflare 的 5 秒盾一样
    ohao
        11
    ohao  
       2020-04-29 10:44:24 +08:00
    @koswu

    现阶段,真.大流量 CC 攻击应该算是无解的 (金盾也不行,除了不停封 IP)

    谁告诉你 Cloudflare 没页面的? 5 秒盾就是 CC 的防护
    那个返回的就是页面 他只是机器多 带宽足 防火墙规则 优化的厉害而已
    扛 DDOS 洪水 CF 完全靠他的带宽做流量牵引就能扛住
    如果你免费版 AB 测试也能 502 的

    CC 攻击 就是模拟用户请求页面 注意是”请求“ 不是”访问“
    请求到就算完成攻击

    比如你 8G 内存 部署 NGINX 静态页 并发承载 1W
    如果有 11 台肉鸡 CC 攻击你,每个肉鸡并发 1000 个请求 请求 1.1W 次
    你 NGINX 就处理不了请求 挂起 然后网站变慢 直到访问不了

    Web 服务你首先是要返回内容 无论这个内容是什么 哪怕默认页 或者 js 文件链接 都是目标而已
    koswu
        12
    koswu  
    OP
       2020-04-29 10:46:48 +08:00
    @ohao 一开始返回的不是只有 5 秒盾吗,比如我有一个 web 页面,如果访问需要消耗 sql 性能,我只返回一个静态页面,是不是就可以把这个交给 CDN 来处理了,而真实的主机就不受影响
    Xusually
        13
    Xusually  
       2020-04-29 10:47:21 +08:00
    额。。。楼主这最多算是防采集和非正常用户的浏览器访问?
    eason1874
        14
    eason1874  
       2020-04-29 10:55:35 +08:00
    什么 5 秒盾,我不渲染页面你怎么执行脚本。
    scarleast
        15
    scarleast  
       2020-04-29 11:04:10 +08:00
    网页挖矿,是需要浏览器执行 js 脚本的。

    CC 是请求,不是访问,肉鸡不会执行 js 脚本。

    我想问下,整个环节当中,是谁执行了 js 脚本能让你有收益?
    crab
        16
    crab  
       2020-04-29 11:14:01 +08:00
    DZ 就有这类的功能,开启后要回答验证码才可以进入论坛版面或者帖子。
    ohao
        17
    ohao  
       2020-04-29 11:31:27 +08:00
    @koswu
    是的,这个你理解的没错,后端主机确实不影响
    但是 CDN 的费用你计算没? 你需要支付很高的费用
    如果是阿里云那类 还会需要你买防护包
    这个问题就变为钱可以解决的事了

    你说的挖坑防护的想法 这个想法从起点 适用的场景就错了

    其他的你还是这么理解我真没办法解释了
    举个例子
    你有一个 3 进的房子 1 号门 2 号门 3 号门
    你说的所有行为都需要在 3 号门里才能做
    但是 别人锁的是你的 2 号门 在你之前
    这样能理解吗?

    你先了解下基础的知识 就知道咋回事了
    你不了解基础的 怎么解释也不能理解的

    5 秒盾不仅仅是你看到的那样 后端还有个验证过程,包括特征码 reqid 浏览器 cookies IP 操作系统等等
    而且这个数可以突破的 你可以搜索 cloudlfare bypass 很多开源库支持
    koswu
        18
    koswu  
    OP
       2020-04-29 11:42:16 +08:00 via Android
    @ohao 我懂,我这个想法也没想过是用来做流量防护的,因为静态的 CDN 可以扩容,你说要很多钱,那至少花钱就能解决,如果是后端主机有问题怕是花钱都不好解决,你得重新设计架构才行咯
    我只是想到,可以做这么一个要消耗一点计算资源的验证以后才能访问到后端主机,然后既然要消耗计算资源,不如拿来挖矿可不可行
    kingyifa
        19
    kingyifa  
       2020-04-29 11:52:15 +08:00   ❤️ 1
    @koswu 你还是没搞懂。就像你在家里布置了陷阱,别人访问会掉进去。关键是人家光敲门不进去啊
    koswu
        20
    koswu  
    OP
       2020-04-29 12:01:09 +08:00 via Android
    @kingyifa 敲门不进去那敲的也不是我主要的门了啊
    learningman
        21
    learningman  
       2020-04-29 12:05:53 +08:00 via Android
    先去了解 7 层,再去看一下 HTTP 。最后学一下 js 。
    然后你就会自己把这个问题收回去了。
    已经有这么多人告诉你,你概念理解有问题。你还在抱着自己的观点不放。
    learningman
        22
    learningman  
       2020-04-29 12:06:07 +08:00 via Android
    你真的知道 cdn 是个什么东西吗?
    xiaoxiuaoliang
        23
    xiaoxiuaoliang  
       2020-04-29 12:07:22 +08:00 via Android
    没有人比我更懂 ddos 了 哈哈
    jugelizi
        24
    jugelizi  
       2020-04-29 12:09:57 +08:00 via iPhone
    你是重新定义了 cc
    wunonglin
        25
    wunonglin  
       2020-04-29 12:11:33 +08:00
    @koswu #20 但是正常的人敲门也进不去的知道吗
    imdong
        26
    imdong  
       2020-04-29 12:11:57 +08:00   ❤️ 3
    不太清楚自己的理解对不对,也不知道下面的比喻对不对。

    假设一家咖啡厅可容纳顾客 100 位,同时接受点单 3 位。

    DDoS 攻击:叫 >100 个打手去咖啡厅堵着;
    CC 攻击:叫 10 个人轮流去吧台点单,但不付钱,点完就跑。

    楼主工作量证明:点单需要先答一份问卷调查。
    工作量证明时 CC 攻击:快给老子拿一张卷子,老子要答题,然后转身就走了...

    工作量证明优化:入口处自取问卷,点单时提交问卷。
    优化后 CC 攻击:到入口处不停的拿卷子去卖废纸...
    再优化 CC 攻击:拿了卷子,随便划两下,拿到吧台去要求点单,然后跑路。
    ohao
        27
    ohao  
       2020-04-29 12:14:37 +08:00
    @koswu
    ” 网站能否在被访问之前加入一段挖矿脚本,大约运行个几秒钟,达成一定的工作量证明才能打开。 “

    #1
    我忽然想起来 主流浏览器 /杀毒软件 都基本禁止挖矿类脚本
    你这一开始就 ”卒“ 掉了
    其他都不用考虑了

    #2
    从用户体验来说 这种网站 除非 12306,或银行,大家没的选
    否则都会直接黑名单

    想法很好 但是太脱离实际了
    imdong
        28
    imdong  
       2020-04-29 12:16:39 +08:00
    工作量证明用来防机器人爬虫 /骚扰,倒是可以的,就是 JS 的执行效率吓人,随便用其他语言实现,效率会高很多。

    比如发帖页面加入这个工作量证明,发帖时检查一下,是没毛病,但是机器人实现了这个,恐怕挡不住啥...
    koswu
        29
    koswu  
    OP
       2020-04-29 12:36:10 +08:00 via Android
    @wunonglin
    @imdong
    @learningman
    我更新了一下表述,请再看一下
    wunonglin
        30
    wunonglin  
       2020-04-29 12:44:55 +08:00
    @koswu #29 你说你只返回静态文件,ok,我拿几个肉鸡开去堵塞你前置服务器,你的服务自然不就用不了了吗
    koswu
        31
    koswu  
    OP
       2020-04-29 12:52:38 +08:00 via Android
    @wunonglin 前置服务器可以很容易就扩容,但是后端不容易啊
    learningman
        32
    learningman  
       2020-04-29 13:11:21 +08:00 via Android
    我如果想搞崩你的服务器,最简单的方式就是直接堵死你的端口,我甚至连你这个端口上在跑什么都不需要知道。
    你这个有用的场景只限于攻击者的攻击能力有限,甚至都不能够打满你的带宽,但是说实话基本不太可能吧。
    想挖矿直说,别找理由。
    koswu
        33
    koswu  
    OP
       2020-04-29 13:21:26 +08:00 via Android
    @learningman 至少这样搞的话相当于把问题转化为了一个拼流量的问题,扩容静态页面的流量总比扩容动态页面简单吧

    还有,我不挖矿,没有利益相关,我只是想到既然要有工作量证明,应该能够* 顺便 * 挖矿而已,纯脑洞
    q1angch0u
        34
    q1angch0u  
       2020-04-29 13:25:09 +08:00
    现在的 cdn 不就是这么做的吗……您应该把标题改为,如何将 cc 转化为 ddos
    koswu
        35
    koswu  
    OP
       2020-04-29 13:40:41 +08:00 via Android
    @q1angch0u 可是 cc 就是 ddos 的一种呀,cdn 我已经不敢用这个词了,不然又要有人说我不懂乱说了
    eason1874
        36
    eason1874  
       2020-04-29 13:53:43 +08:00
    @koswu 根据你补充的内容,你所说的是防御 CC,而不是防御 DDOS 。这玩意儿在稍微有一点规模的网站都有了,一般刷新频繁一点就会要求你验证,验证方式通常是输入验证码。

    利用验证过程赚钱的也有,谷歌的验证码项目 reCAPTCHA 就是利用用户输入验证码去做人肉 OCR,把旧书扫描图片分割成小图给用户当验证码输入,然后根据多个用户输入的结果去分析得出对应的文字。

    防 CC 成本也不低的,成功防御的前提是你的前端服务器得扛住所有攻击请求,因为前端要负责发放、验证 Session 和验证码,所以除了带宽要大,计算量也不能低。
    koswu
        37
    koswu  
    OP
       2020-04-29 15:03:02 +08:00 via Android
    @eason1874 我知道很多网站都有了,所以我最开始相问的是,挖矿能否拆分能那么小的单位进行工作量证明的单位
    结果楼歪得全部在说这不是 ddos
    way2explore2
        38
    way2explore2  
       2020-04-29 15:32:41 +08:00
    嗯,我就不讨论 DD 和 CC 了,因为前边已经大量被讨论,有些过于严苛,题注可能感觉不舒服。

    我想说的是别的币我不知道,但比特币绝对不行,

    - 比特币的奖励周期是十分钟!!!!!!!!!!!!!!!!

    另外一点,
    - 即使你自己设计一款区块链加密货币,调整到 0.5s ,你也几乎不可能
    - 因为不是只有你一个人在挖,单用户单 brower 的算力几乎可以忽略不计


    于是乎,最终你的脚本只能沦为,侵入式脚本,在网站上骗用户的算力,给你自己挖矿。

    当然如果你只想要工作量证明。可以,运行这个


    ```
    for (let i =0; i< 999999999999999999999999999999999999999999999;i++){
    console.log('a wu');
    }
    console.log('I did it, I can visit the page now');
    ```
    mizzle
        39
    mizzle  
       2020-04-29 15:44:13 +08:00
    理论上应该是可以的,通过降低挖矿难度,比如运算结果要求 128 位中前 100 位为 0,那么你要求前 60 位为 0 即可通过,找答案的算力要求降到挖矿的 1/2^40,来让用户可以在小片时间算出来。
    然后从这些结果中找是不是有天选之子提供的答案有前 100 位为 0 的,有 ( 1/2^40 * 访问量) 的几率挖矿成功哦。
    dorothyREN
        40
    dorothyREN  
       2020-04-29 15:55:39 +08:00
    在攻击方会执行你的脚本的时候你这个想法才会成立,你猜 cc 攻击方会执行你的脚本吗?
    人家根本就不需要你返回的内容,人家只要把请求发到你的机器上攻击就算完成了。
    cigarzh
        41
    cigarzh  
       2020-04-29 18:30:09 +08:00
    知道 Hashcash 么朋友?
    DoctorCat
        42
    DoctorCat  
       2020-04-29 18:51:57 +08:00
    @dorothyREN
    @cigarzh

    同意两位观点。
    ps: 用肉鸡玩 CC 攻击,这点运算量也不算啥。如果提升出题的难度,那网站的体验也就差了,不太好平衡。
    blackcurrant
        43
    blackcurrant  
       2020-04-29 18:55:56 +08:00
    @koswu #37
    挖矿可以拆分成小目标的,了解下矿池就知道了。就算算力再低也可以接入矿池进行挖矿。
    wisdom
        44
    wisdom  
       2020-04-30 07:58:42 +08:00
    CC 攻击已经有人这样搞过了,DD 不属于这个范畴。
    xcstream
        45
    xcstream  
       2020-04-30 13:32:13 +08:00
    dd 只扔给你一个数据包,你返不反回没区别
    legiorange
        46
    legiorange  
       2020-04-30 16:00:33 +08:00   ❤️ 1
    说几点:
    1.做程序的都知道可以通过 Redis 做缓存层,把热数据缓存,不存在所谓的大量 sql 执行的问题。
    2.对主机资源的耗尽,除非你增加物理设备,否则加上 5 秒盾,流量防护也是没办法的,CDN 挂掉会直接打真实 IP 。
    3.你所谓的工作证明很可能会拿来骗自己,因为真的一点儿用都没有。

    楼主的出发点很好,但是和我一样缺乏基础知识,如果基础牢固的话可能会有更好的想法吧。
    no1xsyzy
        47
    no1xsyzy  
       2020-05-04 02:46:22 +08:00
    把 CC 降级成 DDOS ?
    广义 DDOS 莫不是说的 DOS 攻击

    而且这和网站嵌入挖矿脚本有什么区别

    另外,您大可直说:“不好意思,我不接受高贵的 uMatrix 用户”。
    RadishWind
        48
    RadishWind  
       2020-05-05 07:44:06 +08:00
    这个在 coinhive 的验证码已经有了,不过体验特别不好
    myqoo
        49
    myqoo  
       2020-05-06 10:54:49 +08:00
    “CC 攻击” ( challenge collapsar )貌似只有国内才有这种叫法,正规应该叫 L7 DDOS 。
    myqoo
        50
    myqoo  
       2020-05-06 11:02:22 +08:00
    思路没问题,也用不着 wasm,用 webgl 更快。可参考: https://www.v2ex.com/t/347005

    但用 hashcash 的模式其实不合理,攻击者用矿机之类的硬件比浏览器快几万倍,还是可以制造大量垃圾请求。其实有更好的算法的。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2863 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 14:26 · PVG 22:26 · LAX 06:26 · JFK 09:26
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.