tautau
V2EX  ›  问与答

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

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

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

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

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

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

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

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

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

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

    没有隐含“不放回条件”,如果非要按这个条件来算,就得用超几何分布了,算出来是 100%
    wakarimasen
    wakarimasen
    Jan 7, 2023 via Android
    53
    跳出技术,从成本收益的角度去考虑。我只要保证攻击者的收益远远低于成本就行了。或者说你觉得撞别人四位验证码有利可图,但那只是纸上谈兵,实践一下亏到你裤衩子都不剩。
    Michael5
    Michael5
    Jan 14, 2023
    54
    怎么弄那么多 IP 呢
    lyc8503
    lyc8503
    Apr 26, 2023
    55
    遇到过十分不靠谱的网站,只有四位验证码且尝试错误验证码不失效,成功使用程序暴力破解进去了,但那也是极少数十分劣质的网站,大部分加个频率限制就解决问题。
    catamaran
    catamaran
    May 24, 2024
    56
    先改一下标题吧,厂商为什么不担心手机验证码碰撞
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2188 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 92ms · UTC 13:21 · PVG 21:21 · LAX 05:21 · JFK 08:21
    ♥ Do have faith in what you're doing.