V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
xingL
V2EX  ›  问与答

厂商为什么不担心验证码碰撞?

  •  
  •   xingL · 148 天前 · 5472 次点击
    这是一个创建于 148 天前的主题,其中的信息可能已经有所发展或是发生改变。
    大部分厂商的验证码都是 6 位及以内验证码,对应的就算百万分之一及以上的猜对概率。百万分之一的确风险很低,但有些厂商的 4 位验证码,如果自动化碰撞 4 位验证码的话,效率应该蛮高的,但好像没人关心这件事?
    55 条回复    2023-04-26 01:10:02 +08:00
    wangxiaoaer
        1
    wangxiaoaer  
       148 天前
    这部不是碰撞,这是暴力破解,稍微有点安全意识的都会想办法应对暴力破解吧,起码加个验证码啥的。
    murmur
        2
    murmur  
       148 天前   ❤️ 1
    几次错就锁了
    bjzhush
        3
    bjzhush  
       148 天前   ❤️ 3
    有些确实是存在风险的,如果你关注安全领域就会看到过这种拿验证码暴力遍历进入系统的案例。
    但是稍微有点风险意识就会控制验证码的验证次数,几行代码就能解决,比如单个用户、单个 IP 在一定时间能,只能验证 10 次,这样你说的风险基本上就不存在了
    murmur
        4
    murmur  
       148 天前
    另外有高级验证码,qq 或者微博都有,用你的手机发送 xxxx 到 xxxxx ,这样是不能破解的,必须得有注册手机在手
    xingL
        5
    xingL  
    OP
       148 天前
    想暴力登录一个指定账户有难度,但如果有大量的已注册手机号,每天都可以成功暴力登录几个。
    justfindu
        6
    justfindu  
       148 天前
    爆破可能因为时间短, 所以也不是很担心你, 一般验证码 5 分钟算, 百万次就是每秒请求 3333 次.
    justfindu
        7
    justfindu  
       148 天前
    只能说我们服务器撑不住这么多并发. 尴尬
    jacy
        8
    jacy  
       148 天前
    输错一次或者几次不就要重发了吗
    westoy
        9
    westoy  
       148 天前
    验证码验证之后不论对错都要重置的
    morty0
        10
    morty0  
       148 天前
    会有其他维度的保护, 比如发短信提示账号被登录, 检查客户端环境, 生物验证等等
    8355
        11
    8355  
       148 天前
    有策略的啊
    验证码有效期
    单 ip 连续错误次数
    单账号连续错误次数
    怎么撞啊....换代理 ip 就为了撞个验证码嘛 还不如直接社工库掏一掏来的实在
    XiLingHost
        12
    XiLingHost  
       148 天前
    允许重试的次数太少了,而且有效时间窗口也小,基本上不可能暴力破解
    Felldeadbird
        13
    Felldeadbird  
       148 天前
    以某些短信验证码来说,10 分钟有效期内,你并发过去可以有效转化为正确请求。
    letitbesqzr
        14
    letitbesqzr  
       148 天前
    输错几次就失效了 要重新发
    LaGeNanRen
        15
    LaGeNanRen  
       148 天前
    不是小孩子了,做任何事都有代价和利益的衡量,撞库完了然后呢然后呢?
    GTim
        16
    GTim  
       148 天前
    你以为验证码碰撞是一次提交不删除,然后就能穷举法,但更多公司其实是,一次提交失败,就要重新获取...碰撞,概率而已
    Jooooooooo
        17
    Jooooooooo  
       148 天前
    你多错几次试试就知道了. 点提交之后, 本次验证码就失效了.

    多搞几次就无法再获取验证码了.
    chenmobuys
        18
    chenmobuys  
       148 天前
    这不是很容易控制吗,不会让你一直重试的
    nekoneko
        19
    nekoneko  
       148 天前
    @xingL #5 每个账号被破解的概率是独立的, 哪有每天破解几个这种说法.
    ttgo
        20
    ttgo  
       148 天前
    有很多这种案例。
    wanguorui123
        21
    wanguorui123  
       148 天前
    有过期时间吧
    xingL
        22
    xingL  
    OP
       148 天前
    @nekoneko 如果有几万手机号信息,每天差不多可以成功暴力登录几个
    xingL
        23
    xingL  
    OP
       148 天前
    @LaGeNanRen 的确,没有利益也就没人去利用,厂商也会觉得无所谓
    284716337
        24
    284716337  
       148 天前
    验证码不是输错了就要重新获取验证码嘛,错了几次后都是等待几分钟或者几个小时才能获取了
    SenLief
        25
    SenLief  
       148 天前
    正常的应该有验证才对,比如输入 3 次都错误就要求重新获取。
    LaurelHarmon
        26
    LaurelHarmon  
       148 天前 via Android
    然后呢,你侥幸破了一次能干啥?验证码本来就不是为了绝对安全设计的,它又不是密码,只是为了防止机器暴力访问设计的,输三次全错就暂时 ban 掉(随机情况下这种概率很大),不就可以实现他的目的了吗?至于你成功了,无非是多爬了几条数据,这个对于系统影响太低了,又不是破了用户的的密码。。。
    LaurelHarmon
        27
    LaurelHarmon  
       148 天前 via Android
    奥 我看错了,原来是短信验证码,不是图形验证码;
    @LaurelHarmon
    这个可能考虑到攻击的成本问题,想要通过验证码撞库来登录,你得切换海量 IP 吧,这个成本有点高,但是登上后收益又有点低;
    想要搞其他敏感操作(例如转钱)还得加其他验证。顶多偷窥个聊天记录、购物记录、发帖记录,可是你是随机的手机号又不是定向爆破,这信息对你没啥价值。所以不知道干这个有啥用
    docx
        28
    docx  
       148 天前 via iPhone
    多撞几次就升级验证了,而且还有时间限制,这概率太低了。银行密码还是静态 6 位呢。
    catalysia
        29
    catalysia  
       148 天前
    我还见过先验密码对不对 再验验证码的呢 这个世界就有很多神奇的人 神奇的人里出点神奇的程序员也不是很神奇
    sola97
        30
    sola97  
       148 天前 via Android
    确实遇到过 4 位验证码还没有加频率限制的 app ,基本可以暴力登录任意一个手机号
    littiefish
        31
    littiefish  
       148 天前 via iPhone
    你没遇到过,今天发送太多,请明天重试?

    对,我说的就是大眼夹
    Exdui
        32
    Exdui  
       148 天前
    @xingL #22 你是怎么得出「如果有几万手机号信息,每天差不多可以成功暴力登录几个」这个结论的?
    每个手机号获取一次验证码,然后固定填写 123456 这个,总有一个可以碰巧登录进去?
    还是每个手机号获取一次验证码,然后从 000000 - 999999 一直猜,直到登录后再继续下一个?
    TheCure
        33
    TheCure  
       148 天前
    Interesting
    假设你知道 10000 个手机号, 然后使用的是 4 位数验证码.
    那么每次猜不中的概率是 9999/10000, 连续 10000 次不中的概率是
    >>> math.pow(9999/10000, 10000)
    0.36786104643297046
    所以, 至少有一次中的概率是
    >>> 1 - math.pow(9999/10000, 10000)
    0.6321389535670295
    如果我在你登录之后, 转账时再进行一次验证, 那你成功的概率确实可以忽略
    honamx
        34
    honamx  
       148 天前
    “如果有几万手机号信息,每天差不多可以成功暴力登录几个” 你能成功登录一个比买彩票都难吧。第一有验证频率限制。第二有有效期,大概就 5 到 10 分钟。我想问你哪来的勇气可以暴力登录一个甚至几个?
    honamx
        35
    honamx  
       148 天前
    而且几万手机号不是同一时间发送,你怎么知道你想验证的是哪个号码?
    xingL
        36
    xingL  
    OP
       148 天前
    @Exdui 假设有一万手机号信息,验证码为 4 位,每个手机号获取 3 次验证码,尝试 3 次,根据楼上 TheCure 的计算,总共尝试 3 万次,成功大约 1.89 次,也就是能登录 1.89 个账号。
    xingL
        37
    xingL  
    OP
       148 天前
    @TheCure 的确,资金安全基本不用担心,我担心的是订单信息、地址之类的个人信息泄露
    xingL
        38
    xingL  
    OP
       148 天前
    @xingL 成功的次数应该是 3 ,3 万次乘以万分之一
    iyaozhen
        39
    iyaozhen  
       148 天前
    https://iyaozhen.com/a-typical-user-reg-page-sms-verification-logic-flaws.html

    《典型的用户注册页面短信验证逻辑漏洞》很早之前写过的一篇博客

    正常来说需要图形验证码和短信验证码结合
    Chaconne
        40
    Chaconne  
       148 天前 via iPhone
    攻破短信中心,算不算一个办法?很多这类验证码通知类短信都是找一些中小公司合作的
    rpish
        41
    rpish  
       148 天前
    异地登入二次验证,多次错误需要等待重发,频繁请求接口封 IP ,这很难爆破吧。
    如果挂个代理池爆破,这么频繁的请求,总感觉像 DDos 呀。
    amrnxcdt
        42
    amrnxcdt  
       148 天前
    @TheCure #33 你这个计算方法要成立需要有一个充分必要的条件:验证码都是唯一且不会重复使用。

    正经的 totp 都是根据账号和当前时刻 /时间段等信息生成的,相当于每次尝试都是独立的事件,概率怎么可以直接加在一起。

    举个不恰当的例子:摇色子 5 次,前面 5 次结果分别是 1 、2 、3 、4 、5 ,那么摇第 6 次色子的结果是 6 的概率是多少?
    amrnxcdt
        43
    amrnxcdt  
       148 天前
    @amrnxcdt #42 要对 otp 进行攻击应该是在同一个验证周期里面尽可能的多发送验证请求,但是上面的回复也说了,可以在工程上避免,比如每次验证生成新的验证码、限制单个用户验证的次数、限制单位时间内的验证次数等。
    microka
        44
    microka  
       148 天前
    自以为是。
    SP00F
        45
    SP00F  
       148 天前
    我不管你有多少个号,就算按 4 位验证码来算( 9999 次),你无法得知验证码生成规则,即便是按照随机的好了。你要爆破首先你要解决并发问题(小厂不论,仅讨论大厂相关),解决并发可以利用代理发起并发请求,大厂的安全不是开玩笑的,你这对同一个账号进行并发不异常安全不响应就等着卷铺盖吧。即便你忽略并发问题,一般验证码 5 分钟内有效,算一下你 5 分钟算你单线程,每秒 2 次(含请求到响应)你也不过是 600 余次,更别说你这是单线程没挂代理的直接就 ban 你 IP 了。而且还有短信验证码尝试次数。

    说得好像短信验证码都这么容易爆破似的。
    短信验证码要么是短信中心你有权限可以直接查,要么校验存在逻辑漏洞。
    muzuiget
        46
    muzuiget  
       148 天前
    验证码相当于给你发个临时密码而已,最后还是要和用户名一起判断啊,跟自定义密码一样,输错几次就锁了。
    xiadong1994
        47
    xiadong1994  
       148 天前
    @Exdui 应该说的是第一种,还是有可能的,只是不知道登进去的是哪个账号,能得到的利益太低了。
    yyf1234
        48
    yyf1234  
       147 天前 via iPhone
    这和手机号多少有啥关系?每个号都是独立事件,概率一样的啊
    Juszoe
        49
    Juszoe  
       147 天前
    @amrnxcdt #42 你再看一眼他的公式,是按照独立事件计算的,没有加在一起
    IvanLi127
        50
    IvanLi127  
       147 天前 via Android
    验证码只是 mfa 的一个因素,其他的因素再参与一下,概率不就又小了很多?
    amrnxcdt
        51
    amrnxcdt  
       147 天前
    @Juszoe #49 关键是”独立事件“,前面 9999 次猜不中不会提高第 10000 次的概率,参考那个摇色子的问题:不管前面结果如何,第 n 次摇出 6 的概率都是 1/6 。

    然后原文:”假设你知道 10000 个手机号, 然后使用的是 4 位数验证码.
    那么每次猜不中的概率是 9999/10000, 连续 10000 次不中的概率是”
    那么假如验证码里面有 9999 个是“0000”这种情况呢?所以说他这样的算法是隐含了一个条件:验证码都是唯一且不会重复使用。
    Juszoe
        52
    Juszoe  
       147 天前
    @amrnxcdt #51
    “连续 10000 次不中的概率”≠“第 10000 次不中的概率” 这是两个概念
    math.pow 是幂次方

    没有隐含“不放回条件”,如果非要按这个条件来算,就得用超几何分布了,算出来是 100%
    angrylid
        53
    angrylid  
       147 天前 via Android
    跳出技术,从成本收益的角度去考虑。我只要保证攻击者的收益远远低于成本就行了。或者说你觉得撞别人四位验证码有利可图,但那只是纸上谈兵,实践一下亏到你裤衩子都不剩。
    Michael5
        54
    Michael5  
       140 天前
    怎么弄那么多 IP 呢
    lyc8503
        55
    lyc8503  
       39 天前
    遇到过十分不靠谱的网站,只有四位验证码且尝试错误验证码不失效,成功使用程序暴力破解进去了,但那也是极少数十分劣质的网站,大部分加个频率限制就解决问题。
    关于   ·   帮助文档   ·   博客   ·   nftychat   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   775 人在线   最高记录 5634   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 44ms · UTC 20:52 · PVG 04:52 · LAX 13:52 · JFK 16:52
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.