V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
xieqiqiang00
V2EX  ›  信息安全

为什么没有基于工作量证明机制的防火墙应用?

  •  3
     
  •   xieqiqiang00 · 2021-07-01 11:19:29 +08:00 · 2984 次点击
    这是一个创建于 1022 天前的主题,其中的信息可能已经有所发展或是发生改变。
    昨天脑子里冒出来一个想法,Cloudflare 有一个 5 秒盾防火墙,我想着能不能增加他的复杂度或者安全性。
    我设想的是这样的:
    1.浏览器向服务器发起请求,服务器生成一个一次性私钥,然后用私钥加密一段文本,把加密后的内容发送给浏览器
    2.浏览器收到密文后进行暴力破解,把破解后的私钥再发回服务器
    3.服务器验证通过,生成新的密钥,加密文本后把加密后的密文和内容一起发回浏览器,
    4.浏览器展示内容,并同时破解新的密文,在下次请求时发回服务器
    ...循环

    后面和朋友讨论了一下之后发现这个和比特币的 PoW 机制非常像,并且我搜索了一下,用这种工作量证明来做防火墙居然就写在维基百科的头部:
    “工作量证明( Proof-of-Work,PoW )是一种对应服务与资源滥用、或是拒绝服务攻击的经济对策。 一般要求用户进行一些耗时适当的复杂运算,并且答案能被服务方快速验算,以此耗用的时间、设备与能源做为担保成本,以确保服务与资源是被真正的需求所使用。”
    https://zh.wikipedia.org/wiki/%E5%B7%A5%E4%BD%9C%E9%87%8F%E8%AD%89%E6%98%8E

    但这种看起来复杂又先进的防火墙技术似乎并没有被哪个商业产品应用,这是为什么?
    32 条回复    2021-07-19 17:29:09 +08:00
    SaltyLeo
        1
    SaltyLeo  
       2021-07-01 12:03:02 +08:00 via iPhone
    原因大概是用户体验差,各端的性能不一样,如果运行一样的代码,pc 可能 200ms,移动端可能 1000ms 甚至超时。
    DeWjjj
        2
    DeWjjj  
       2021-07-01 13:31:16 +08:00 via Android
    浏览器暴力破解就离谱了。。。
    那他同时发起访问你还是得崩。
    xieqiqiang00
        3
    xieqiqiang00  
    OP
       2021-07-01 13:51:09 +08:00
    @SaltyLeo 只要访问者付出的算力大于服务器的算力就可以防滥用 /攻击了,也不用算很久的吧。
    xieqiqiang00
        4
    xieqiqiang00  
    OP
       2021-07-01 13:51:47 +08:00
    @DeWjjj 防火墙层面的,不碰到业务逻辑,服务器的工作量应该都很小。
    xieqiqiang00
        5
    xieqiqiang00  
    OP
       2021-07-01 13:53:15 +08:00
    @SaltyLeo 单说时间的话,Cloudflare 的五秒盾的等待时间经常都超过 5 秒,但也铺开并大面积应用了
    Aruforce
        6
    Aruforce  
       2021-07-01 14:35:32 +08:00   ❤️ 1
    只攻击你工作任务下发的接口就行啊。。。也就是你的第一步
    反正占着你的 connection 不释放....
    你拿我怎么办?
    xieqiqiang00
        7
    xieqiqiang00  
    OP
       2021-07-01 15:47:45 +08:00
    @Aruforce 我针对的是 CF5 秒盾的改进想法,cf 本来就是抗攻击的,你又不可能打死 cf,cf 保护的是后面的网站和业务不受影响
    FS1P7dJz
        8
    FS1P7dJz  
       2021-07-01 15:59:25 +08:00
    在第一个阶段用大量肉鸡冲垮你就行了
    谁说我非要正常访问你了?

    攻击防御永远都是资源力量的比拼
    套 CF 只是借用 CF 强大的力量而已
    xieqiqiang00
        9
    xieqiqiang00  
    OP
       2021-07-01 16:15:19 +08:00
    @FS1P7dJz 我问的就是 CF 这种防御商为什么都没有用 PoW 防火墙
    chenluo0429
        10
    chenluo0429  
       2021-07-01 16:44:01 +08:00
    简直就像银行怕排队的人太多,要求大家一起在大厅做俯卧撑,先做完 1000 个才能办理业务?
    xieqiqiang00
        11
    xieqiqiang00  
    OP
       2021-07-01 17:22:31 +08:00
    @chenluo0429 类似吧,如果你真的要攻击的话,得伤敌 800 自损 1000 或者更多
    Aruforce
        12
    Aruforce  
       2021-07-01 17:29:27 +08:00
    @xieqiqiang00 你非要这么说的话...
    那就是
    下发工作任务比给个 5 秒盾页面的占用的网络资源多...
    除此之外
    正常的请求

    要改造代码支持每个请求返回数据不一致,浪费 CPU 而且降低 CDN 的性能。。
    改造业务方代码或者改造浏览器 支持静态资源自动解密。。浪费客户端计算资源。。。
    xieqiqiang00
        13
    xieqiqiang00  
    OP
       2021-07-01 17:38:44 +08:00
    @Aruforce 虽然不能接受,但成本原因是我觉得唯一的可能性,现在的攻击源可能连简单的 JS 验证都绕不过,现有的方案绰绰有余了。
    但未来的话 emmm,比如说控制了物联网设备或者边缘计算设备进行 CC 攻击,攻击源有能力执行 JS 代码的话,现有的 5 秒盾可以说不堪一击吧。
    Aruforce
        14
    Aruforce  
       2021-07-01 18:02:48 +08:00
    @xieqiqiang00
    现在:
    5 秒盾 对于正常用户来说就算是一种工作量证明,但是现在 DDOS 的人家才不管你这套 ...
    一方面 CDN 判断失误的....导致 请求漏到后端网站 直接占的你的 connection 不释放...影响正常用户使用
    另一方面 即使 CDN 没判断失误... CDN 抗 DDOS 的流量也是要买的而肉鸡流量不要钱的....


    攻击源有能力算 js 之后:
    1. CDN 判断正确 你是 DDOS
    1.1 你想打到后端网站的话 你得遵从 CF 规则假装成正常请求 等 5 秒之后 CF 才会放过你 替你去后端网站拉数据过来...
    这样就拉长了时间 降低了后端网站流量负载....所以不能说 5 秒盾不堪一击...
    1.2. 如果 你不等 5 秒 那就是 CF 就拦截了你的请求 ...
    2. CDN 判断失误
    你就流量打到了后端网站.. 这种没办法只能后端网站硬抗。。
    xieqiqiang00
        15
    xieqiqiang00  
    OP
       2021-07-01 18:11:20 +08:00
    @Aruforce
    1.cloudflare 这种流量不计费,cf 像是保姆式的保护,开启之后一切都是自动完成,我最上面的那种模式理论上也可以自动嵌入已有网站
    2.不断地有请求发出,等 5 秒以后抵达应用服务器,cf 的 5 秒盾只有首次请求验证,后面就放行,最后还是能达到正在的服务器上,如果用我的这种工作量证明进行验证,攻击源就要花费大量的 CPU 来计算,一台电脑同一时间发不出太多有效请求,大大降低攻击力度了
    no1xsyzy
        16
    no1xsyzy  
       2021-07-01 19:22:37 +08:00
    一方面体验不均衡
    二来容易被人造谣说你在盗用用户 CPU 挖矿,回头你还是只能把这个技术给打入冷宫
    三是不环保

    @Aruforce 你好像理解错了,主题说的是由 CDN 的末端节点来作 PoW 验证,去占任务下发 connection 就是等于 CDN 完全抗下来了,源服务器一点没影响。
    wdlth
        17
    wdlth  
       2021-07-01 22:22:14 +08:00
    有吧,我见过用 Canvas 指纹做的。
    ihipop
        18
    ihipop  
       2021-07-01 22:59:42 +08:00 via Android
    @chenluo0429 然后大家都进大厅不做俯卧撑,把大厅沾满。。。
    jim9606
        19
    jim9606  
       2021-07-01 23:51:50 +08:00
    类似技术在电子邮件反垃圾有应用。Web 网站搞这个的麻烦在于你不知道 PoW 难度要怎么定,PC 和手机算力差好远的。

    另外 PoW 挑战和验证要占额外资源,如果 CDN 连静态 GET flooding 或者 SYN flooding 都扛不住,那 PoW 更没戏。

    还有 API 网关咋办?你的客户端能接受 CDN 给你返回一个带 js 的网页?
    msg7086
        20
    msg7086  
       2021-07-02 04:43:32 +08:00
    有一些 captcha 就属于 PoW 。比如著名的看图识物就是一种 PoW,这里的 Work 是人脑 Work 。
    yefee
        21
    yefee  
       2021-07-02 08:50:13 +08:00
    赞同 @msg7086 的说法。
    不管是短信验证码也好、拼图也好、旋转也好、点击也好也好,全都是工作量证明。而且是很典型的:电脑需要很高成本,而人脑需要极低成本的工作量证明。
    xieqiqiang00
        22
    xieqiqiang00  
    OP
       2021-07-02 09:05:42 +08:00 via Android
    @jim9606 请求资源是 html 的话就插入一段 js,然后把结果记在 cookie 里,api 接口的话的确不太好自动防护
    xieqiqiang00
        23
    xieqiqiang00  
    OP
       2021-07-02 09:10:36 +08:00 via Android
    @msg7086 思路新奇
    那有些要半个小时才能通过的验证码就是拿人脑挖矿呢😂
    ykrank
        24
    ykrank  
       2021-07-02 10:31:17 +08:00
    一开网页就 CPU 100%,风扇狂赚,你网站只会被立刻投诉挂马和挖矿
    xieqiqiang00
        25
    xieqiqiang00  
    OP
       2021-07-02 11:53:50 +08:00 via Android
    @ykrank js 是单线程的
    xieqiqiang00
        26
    xieqiqiang00  
    OP
       2021-07-02 11:56:15 +08:00 via Android
    @ykrank 而且事实告诉我们,喂用户吃屎用户也是反抗不了的
    Aoang
        27
    Aoang  
       2021-07-02 13:14:16 +08:00 via Android
    PoW 只适用于验证,例如区块链是验证是不是进行计算了,传统的验证码是用来验证是不是机器人。
    对于攻击而言…它可不会管验证不验证的。

    #10 说的例子就是一个典型,别人压根本就不做俯卧撑,只是把你大厅占满。
    xieqiqiang00
        28
    xieqiqiang00  
    OP
       2021-07-02 13:20:49 +08:00
    @Aoang 对于抗攻击服务的提供商,他们的大厅可以认为是无限大的(尤其是 cloudflare 这种),服务商把他们拦住不让进业务就是他们的使命
    cwyalpha
        29
    cwyalpha  
       2021-07-03 06:08:15 +08:00
    不如改成访问前必须挖个 b 挖到才让你上
    xieqiqiang00
        30
    xieqiqiang00  
    OP
       2021-07-03 11:19:03 +08:00 via Android
    @cwyalpha 技术上是差不多的
    qbqbqbqb
        31
    qbqbqbqb  
       2021-07-07 13:27:45 +08:00
    以前是有的。臭名昭著的挖矿脚本提供商 CoinHive (现在已经倒闭),以前就提供过一款 PoW 挖矿验证码,UI 很像 reCaptcha,但它不区分人类和机器人,而是要求客户端的浏览器给站长挖几秒钟矿才能放行,不是直接阻挡而是通过消耗爬虫的计算资源来阻止爬虫,同时站长还能获得挖矿收益。这款产品后来与恶意挖矿脚本一样被一并封杀了。
    xcstream
        32
    xcstream  
       2021-07-19 17:29:09 +08:00
    其实那东西就叫验证码
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5642 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 02:34 · PVG 10:34 · LAX 19:34 · JFK 22:34
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.