小米短信云同步安全缺陷是谁的责任
2898
手机 2019-03-26 09:46:04 字数:2898

短信验证码缺陷背后是一个很长很长的链条,此文仅是趁着小米短信验证码事件进行初步解析,并非针对小米一家,恰恰在这件事中,枪口仅仅对着小米也是不公平的。


之前发生了因为疑似攻击者通过小米短信云同步功能窃取银行验证短信,从而盗取十万元现金的事件关于背后的责任问题,来仔细分析下。


“双因素认证”


我们知道,信息安全领域有一个原则,就是“不要把鸡蛋放在一个篮子里”,所以一般来说,类似网银转账这样的高安全性要求的操作,应该执行双因素认证。


双因素认证:早期的用户认证方式往往只采用账号和密码,默认持有账号密码的就是用户本人,如果用户的账号密码丢失了,那么整个账号的控制权都会丢失。


随着信息化越来越普及,出现了针对账号密码的各种攻击手段,包括:木马后门、网络窃听、暴力破解、拖库撞库等等。单一地通过账号密码来验证用户身份的方式已经不能很好地保护用户账号的安全性。


因此,大多数重要的系统,都引入了双因素认证,也就是除了账号密码外,还需要通过其他的认证方式再次验证用户身份,从而确保即使用户密码丢失,也不会遭到巨大损失。


双因素认证的方式很多,从早期的动态令牌、U-key到现在最流行的手机验证码,都属于双因素认证。双因素认证极大地提高了用户的账号安全性,使得窃取用户账号的难度比原先提高了很多。


大家会觉得很奇怪,既然网上银行已经采用了双因素认证,那么银行卡被盗的事情应该很少发生,为什么最近却听到不少手机银行被盗刷的事件呢?


手机短信验证存在缺陷


那是因为,采用手机短信验证码来对手机银行进行双因素认证,是非常不称职的。


我们来看一下手机银行的支付过程:


用户——手机银行应用——wifi——运营商网络——银行服务器——短信验证码——用户手机


银行卡密码+短信验证码 双因素验证


我们知道双因素认证能大幅提高安全性的前提是两个不同的认证方式很难被同时破解。


例如电脑版的网上银行,如果采用手机短信验证,那么攻击者需要同时拿下被害人的电脑和手机才能得逞,这比仅仅拿下电脑或者仅仅拿下手机要难了一倍以上(因为确认电脑和手机的关联性也是非常大的工作量)。


但是如上图所示,对于手机银行,情况就完全不同了,短信验证码在终端和通讯链路上,跟手机银行都是共享的:手机银行使用手机作为支付终端、短信也是使用手机作为接收终端,手机银行使用运营商的链路作为数据通道,短信也是使用运营商的链路作为数据通道。这就导致了无论是手机终端,还是运营商通道被攻破,双因素验证都会同时失效,此时的双因素验证,完全不符合“鸡蛋不要放在一个篮子里”的原则。


之前就发生过多次利用手机木马、伪基站、钓鱼Wi-Fi、运营商短信托管服务、SIM卡补卡等方式窃取用户短信验证码,从而盗取银行存款的事件。此次事件疑似通过手机的云备份服务来获取银行验证短信,虽然手段不同,但是作案的思路还是相似的。


那么银行为什么还是选用手机短信作为双因素验证的主要办法呢?


一方面是因为成本,另一方面是因为易用性。


虽然我们说双因素认证的方式很多,从动态令牌(随机产生6位密码的小盒子)到U-Key(可以插在电脑/手机上验证用户身份的小盒子)都在不同的银行有一定的应用范围,但是因为无论是动态令牌还是U-Key都有一定的成本(几块到十几块不等),对银行来说难以大规模推广。而且毕竟多了一个小盒子,携带起来也不方便。而手机短信可以说是既便宜也最方便的手段,不需要额外的购置成本,也无需额外的设备,因此也被广大用户和银行所喜爱。


运营商、手机厂商、银行,谁的责任?


那么短信验证码安全问题频出,银行、运营商、手机厂家、用户,究竟是谁的责任呢?我的看法是大家都有责任,其中银行的责任最大。


1、为什么银行的责任最大?


因为推广手机银行和采用短信验证码来进行二次验证,最主要的得益方是银行。


手机银行可以大大降低银行的运营成本,与传统的开设营业网点相比,电子银行的成本几乎可以忽略不计,而与网上银行之前普遍采用动态令牌或者U-Key相比,手机银行的成本也大为降低。


银行要大力开展创新,压缩成本,提高用户易用性,这无口厚非。但是部分银行在选择手机短信作为双因素验证方法的时候,忽视了对其中存在的信息安全风险进行分析和控制,手机银行采用短信验证码会大幅降低双因素认证的强度,对此银行采取了什么措施?在鼓励用户开通手机银行的时候有没有尽到告知和风险提示义务?银行有没有积极投入资源在技术上对相应的风险进行控制?对因为安全性降低而失窃的用户,有没有进行及时的补偿?


2、运营商:没有对短信验证存在的安全风险有充分准备


另一方面,移动运营商虽然推出了基于短信来进行密码验证的服务(包括且不仅限于银行、邮箱、储值卡等等),但是在技术手段和内部流程上,并没有将短信服务的信息安全要求提升到相应的高度,例如,复制卡、伪装身份补卡、伪基站、假冒短信、短信网关的安全事件层出不穷。部分运营商还提供了短信托管服务,支持在网上远程实时查看短信。这说明移动运营商并没有系统性的规划短信身份验证服务的信息安全,对其可能造成的风险没有充分的认识和准备。


3、同时,部分手机厂商,也未能充分意识到手机短信的敏感性。


有些手机支持应用程序直接读取短信内容,有些手机默认将短信备份在云服务器上,有些手机未能及时修复安全漏洞,在安全防护上出现了种种瑕疵。


而相当程度的用户则缺乏安全意识,开通手机银行时并未仔细阅读用户协议,多个系统(例如手机银行、邮箱、云服务)使用相同的密码。


一方的大力推动、用户的茫然无知和三方的疏忽大意,最终导致了多起事件的出现。最终将缺乏安全意识和技能的普通用户赤裸裸地暴露在黑色产业链的目光之下。


而从后果上来看,此类事情的出现并不仅仅是普通用户的灾难,也将是整个产业的灾难,试想,如果移动支付/金融的安全性得不到保障,还有谁敢继续使用呢?大家应该共同来提高移动金融的安全水平,这样才能保障产业的健康发展。


几点建议


从银行角度,应该平衡业务发展、易用性和风险,采取一定的风险控制措施。


事先对开通手机银行的用户进行风险提示,加强用户的信息安全意识教育,通过应用检测和加固提高手机银行应用的安全水平。


事中控制手机短信验证的转账上限,对手机银行大额转账进行额外的风险控制。


事后积极追查打击针对电子银行的违法犯罪行为,对被害用户进行及时的赔偿。


从运营商角度,要充分认识到短信目前已经不再仅仅是聊天工具而经常性地被应用于身份认证的场合,因此要在用户账号、SIM卡管理、通讯链路、相关增值业务等方面全面地提高短信验证码的安全性。


从手机厂商角度,应该充分尊重用户的隐私和安全性,不要为了发展云服务,就把用户隐私甚至敏感数据存放在云端,默认配置应该不对敏感信息进行云存储,同时也要强化用户账号管理和高危操作的二次验证。


对普通用户来说,要提高安全意识——


不在手机上随便下载不信任的应用;


不使用不安全的Wi-Fi;


不要使用简单密码或多个账号使用同样的密码;


如果有可能,手机银行和短信验证使用两台不同的手机;


开通了手机支付转账的银行卡内不要存放太多现金。


2898站长资源平台网址导航网站排行榜:http://www.2898.com/webmain/wzdh.htm


0人参与回答
  • 未添加任何数据~~


提示信息

联系电话:
1585150508*
QQ交谈:
小编
站长微信:
站长邮箱: service@qingjiuzhubei.com
257.27msRequest Duration2MBMemory UsageGET zixun/detail/{id?}.htmlRouteAuth status
    • Booting (9.34ms)
    • Application (249.79ms)
      6 templates were rendered
      • site.zixun.detail (resources/views/site/zixun/detail.blade.php)8blade
        Params
        0
        prevArticle
        1
        nextArticle
        2
        newDetail
        3
        comment
        4
        hotnews
        5
        t
        6
        d
        7
        k
      • layouts.site.layout (resources/views/layouts/site/layout.blade.php)18blade
        Params
        0
        obLevel
        1
        __env
        2
        app
        3
        device
        4
        isMobile
        5
        errors
        6
        prevArticle
        7
        nextArticle
        8
        newDetail
        9
        comment
        10
        hotnews
        11
        t
        12
        d
        13
        k
        14
        __empty_1
        15
        __currentLoopData
        16
        loop
        17
        hotnewsVal
      • layouts.site.top (resources/views/layouts/site/top.blade.php)18blade
        Params
        0
        obLevel
        1
        __env
        2
        app
        3
        device
        4
        isMobile
        5
        errors
        6
        prevArticle
        7
        nextArticle
        8
        newDetail
        9
        comment
        10
        hotnews
        11
        t
        12
        d
        13
        k
        14
        __empty_1
        15
        __currentLoopData
        16
        loop
        17
        hotnewsVal
      • layouts.site.bottom (resources/views/layouts/site/bottom.blade.php)18blade
        Params
        0
        obLevel
        1
        __env
        2
        app
        3
        device
        4
        isMobile
        5
        errors
        6
        prevArticle
        7
        nextArticle
        8
        newDetail
        9
        comment
        10
        hotnews
        11
        t
        12
        d
        13
        k
        14
        __empty_1
        15
        __currentLoopData
        16
        loop
        17
        hotnewsVal
      • common.upgrade_vip (resources/views/common/upgrade_vip.blade.php)18blade
        Params
        0
        obLevel
        1
        __env
        2
        app
        3
        device
        4
        isMobile
        5
        errors
        6
        prevArticle
        7
        nextArticle
        8
        newDetail
        9
        comment
        10
        hotnews
        11
        t
        12
        d
        13
        k
        14
        __empty_1
        15
        __currentLoopData
        16
        loop
        17
        hotnewsVal
      • kefu.kefu (resources/views/kefu/kefu.blade.php)18blade
        Params
        0
        obLevel
        1
        __env
        2
        app
        3
        device
        4
        isMobile
        5
        errors
        6
        prevArticle
        7
        nextArticle
        8
        newDetail
        9
        comment
        10
        hotnews
        11
        t
        12
        d
        13
        k
        14
        __empty_1
        15
        __currentLoopData
        16
        loop
        17
        hotnewsVal
      uri
      GET zixun/detail/{id?}.html
      middleware
      web
      controller
      App\Http\Controllers\Site\ZixunController@detail
      namespace
      App\Http\Controllers
      prefix
      /zixun
      where
      as
      zixunDetail
      file
      app/Http/Controllers/Site/ZixunController.php:105-132
      7 statements were executed238.44ms
      • select * from `news` where `news`.`id` = '33302' and `news`.`deleted_at` is null limit 11.78ms/app/Http/Controllers/Site/ZixunController.php:109zzshuju
        Metadata
        Bindings
        • 0. 33302
        Hints
        • Use SELECT * only if you need all columns from table
        • LIMIT without ORDER BY causes non-deterministic results, depending on the query execution plan
        Backtrace
        • 14. /app/Http/Controllers/Site/ZixunController.php:109
        • 22. /vendor/silber/page-cache/src/Middleware/CacheResponse.php:38
        • 56. /public/index.php:53
      • select * from `new_cates` where `new_cates`.`id` in ('47') and `new_cates`.`deleted_at` is null380μs/app/Http/Controllers/Site/ZixunController.php:109zzshuju
        Metadata
        Bindings
        • 0. 47
        Hints
        • Use SELECT * only if you need all columns from table
        Backtrace
        • 19. /app/Http/Controllers/Site/ZixunController.php:109
        • 27. /vendor/silber/page-cache/src/Middleware/CacheResponse.php:38
        • 61. /public/index.php:53
      • select * from `news` where `news`.`deleted_at` is null order by `browse` desc limit 10228.31ms/app/Http/Controllers/Site/ZixunController.php:110zzshuju
        Metadata
        Hints
        • Use SELECT * only if you need all columns from table
        Backtrace
        • 12. /app/Http/Controllers/Site/ZixunController.php:110
        • 20. /vendor/silber/page-cache/src/Middleware/CacheResponse.php:38
        • 54. /public/index.php:53
      • update `news` set `browse` = `browse` + 1, `updated_at` = '2025-08-24 09:20:35' where `id` = '33302' and `news`.`deleted_at` is null5.44ms/app/Http/Model/News/News.php:170zzshuju
        Metadata
        Bindings
        • 0. 2025-08-24 09:20:35
        • 1. 33302
        Backtrace
        • 12. /app/Http/Model/News/News.php:170
        • 13. /app/Http/Controllers/Site/ZixunController.php:111
        • 21. /vendor/silber/page-cache/src/Middleware/CacheResponse.php:38
        • 55. /public/index.php:53
      • select * from `news` where `id` < '33302' and `newscate_id` = '47' and `news`.`deleted_at` is null order by `id` desc limit 11.62ms/app/Http/Controllers/Site/ZixunController.php:115zzshuju
        Metadata
        Bindings
        • 0. 33302
        • 1. 47
        Hints
        • Use SELECT * only if you need all columns from table
        Backtrace
        • 13. /app/Http/Controllers/Site/ZixunController.php:115
        • 21. /vendor/silber/page-cache/src/Middleware/CacheResponse.php:38
        • 55. /public/index.php:53
      • select * from `news` where `id` > '33302' and `newscate_id` = '47' and `news`.`deleted_at` is null order by `id` asc limit 1570μs/app/Http/Controllers/Site/ZixunController.php:116zzshuju
        Metadata
        Bindings
        • 0. 33302
        • 1. 47
        Hints
        • Use SELECT * only if you need all columns from table
        Backtrace
        • 13. /app/Http/Controllers/Site/ZixunController.php:116
        • 21. /vendor/silber/page-cache/src/Middleware/CacheResponse.php:38
        • 55. /public/index.php:53
      • select * from `comments` where `news_id` = '33302'340μs/app/Http/Controllers/Site/ZixunController.php:117zzshuju
        Metadata
        Bindings
        • 0. 33302
        Hints
        • Use SELECT * only if you need all columns from table
        Backtrace
        • 12. /app/Http/Controllers/Site/ZixunController.php:117
        • 20. /vendor/silber/page-cache/src/Middleware/CacheResponse.php:38
        • 54. /public/index.php:53
        web
        array:2 [ "name" => "Guest" "user" => array:1 [ "guest" => true ] ]
        api
        array:2 [ "name" => "Guest" "user" => array:1 [ "guest" => true ] ]
          _token
          2ppf5xIhszzFCgSA1rsM3F50CcqZgA5WENUjWfiF
          _previous
          array:1 [ "url" => "https://data.winndoo.cn/zixun/detail/33302.html" ]
          PHPDEBUGBAR_STACK_DATA
          []
          format
          html
          content_type
          text/html; charset=UTF-8
          status_text
          OK
          status_code
          200
          request_query
          []
          request_request
          []
          request_headers
          array:17 [ "accept-encoding" => array:1 [ 0 => "gzip, deflate, br, zstd" ] "sec-ch-ua-plat...
          request_server
          array:41 [ "USER" => "apache" "HOME" => "/usr/share/httpd" "HTTP_ACCEPT_ENCODING" => "gzip, de...
          request_cookies
          []
          response_headers
          array:5 [ "cache-control" => array:1 [ 0 => "no-cache, private" ] "date" => array:1 [ ...
          path_info
          /zixun/detail/33302.html
          session_attributes
          array:3 [ "_token" => "2ppf5xIhszzFCgSA1rsM3F50CcqZgA5WENUjWfiF" "_previous" => array:1 [ "u...