TL:DR – 出生日期或社会保险号码不是确保访问数据的好主意。
拼图 – 下面的两张图片有什么区别?
但是,让我们从头开始。 不幸的是,与 IT 世界通常的情况一样,便利性与安全性不齐。 我觉得这次差不多。 但是,有一组敏感数据不能做出妥协。 此类数据包括但不限于有关我们健康的信息。
我的朋友 Kacpra 发来一条关于如何获得实验室结果的消息,对此我感到震惊,因此我决定更详细地调查负责此问题的解决方案。
如上图所示 – 要通过"简化登录"功能访问您的结果,您需要两个信息:
- 订单 ID,后续订单数量正在增加:
- 订购人的出生日期[天=X=月]X=X]
根据某些假设,可分配到订单 ID 的出生日期组合数量仅为约 19,000 组合。 不难猜出,生成所有此类组合并检查它们是否与订单号匹配并不是一个大问题。
事实证明,我的假设是正确的,经过几百次列举后,设法匹配访问数据:
这允许敏感的患者信息,如:
- 名字;
- 名称:
- 佩塞尔:
- 出生日期;
- 居住地址;
- 测试结果;
成功列举尝试的另一个例子:
一旦我确认了我的易感性,我向负责的软件报告了此错误,以及维修建议:
怎么办,怎么生活?
针对此类攻击最常见的安全措施之一是实施 captcha。 在几次(例如三次)访问订单数据的尝试失败后,应用程序的用户将被要求重写显示的 captcha 代码。 但是,请注意,实施这种机制只是(或直到)攻击者减速,在最简单的情况下,攻击者将能够使用OCR扫描仪或专用的captcha阅读服务进一步简化出生日期。
更好和推荐的安全功能是通过 一个足够长的随机密码访问订单结果,该密码将进入客户的电话号码。
幸运的是,通过从谷歌实施重新CAPTCHA机制,错误很快就修复了: