原标题:【拖库和撞库浅析】A站被拖库的那个拖库
关于拖库和撞库
拖库是指黑客盗取了网站的数据库。
撞库是指黑客用拖库获得的用户名和密码在其它网站批量尝试登陆,进而盗取更有价值的东西。
由于一些用户在多个网站用相同的用户名和密码,所以撞库是有一定成功率的。
现在稍微有点责任感的网站都不会将密码明文保存在数据库中,起码会做一次MD5。要想撞库,必须得知道密码的明文,也就是用户真正输入的密码。
我们知道MD5算法是不可逆的,黑客是怎么弄到密码明文的呢?最常用的办法就是MD5字典。
MD5字典是什么
其实就是提前将一些比较简单的密码(比如10位以内的纯数字)做MD5运算,将结果保存下来,破译密码的时候直接查就行了。
比如字符串“123”的MD5值是“202cb962ac59075b964b07152d234b70”,黑客在拖来的数据库中看到某位用户的密码是“202cb962ac59075b964b07152d234b70”,通过字典一查就知道密码明文是“123”了。
当然黑客用字典破译密码不会人工一个一个的查,而是用程序批量查询的。
所有密码都能用MD5字典破译吗
理论上可以,但实际上只能破解比较简单的密码。下面我们看看不同复杂度密码对应的MD5字典有多大。
1、10位以内纯数字
共10^1+10^2+10^3+10^4+10^5+10^6+10^7+10^8+10^9+10^10=10(1-10^10)/(1-10)=11,111,111,110条≈110亿条
保存每条记录至少需要42字节(密码10字节+MD5值32字节),则存储该MD5字典至少需要约467GB空间。
2、10位以内的数字+小写字母
共36(1-36^10)/(1-36)=3,760,620,109,779,060条≈3760万亿条
保存每条记录至少需要42字节(密码10字节+MD5值32字节),则存储该MD5字典至少需要约157946TB空间。
通过以上两个例子可以看到,如果用户的密码是10位以上的数字和字母组合,通过MD5字典破解的概率几乎为零。但并不是所有用户的密码都足够强,黑客拖库后,使用弱密码的账户很容易就被查到明文了。
对于使用弱密码的账户,被拖库的网站就无能为力了吗?
不是的。
办法也很简单,只要在MD5的时候加一个稍微复杂点的盐(比如GUID/UUID),就能极大的提高用户密码的安全性。
加盐后的明文=明文+盐
密文=MD5(加盐后的明文)
以GUID/UUID作为盐为例,哪怕明文再简单,加一个32位的盐,加盐后的明文也在32位以上了,通过MD5字典来破解是不现实的。
如果所有网站都没有加盐,黑客只需建一套MD5字典,所有网站都能通用。如果所有的网站都加了盐,退一万步讲,哪怕盐也被黑客盗了,也不能用通用的MD5字典,得为每一个拖库的网站建一个字典。
这样成本会高很多,如果动力不够,黑客就放弃了。
防止拖库和撞库的对策有很多,我这里只是分析了其中的一点,并提出了相应的对策。办法很简单,相信很多网站也加了盐,或做了更复杂的操作,但没有加盐的网站也很多,要不然就不会经常发生撞库的事了。
尽全力保护用户的信息安全是每个网站应尽的义务,这样才对得起用户对你的信任。一个小小的改变可以让用户的密码更加安全,希望能引起所有网站的重视。
拖库撞库安全防御策略
用户密码的防拖库设计
1、加盐法
大多数主流互联网网站,对账号密码等信息都采用加密存储,(明文存储的不在本文讨论之内),为了防止拖库后被破解,采用加盐 (+salt)的加密已经被广泛认可,笔者认为这的确是一种极好的创新,因此将其列在第一位,同时建议salt位数至少6位。
难易程度: ★ 防范效果:★★★★
2、混淆法
账号密码的登录认证方式由来已久,随着互联网交易的发展,为了加强认证,出现了二次认证的密码。
基于此启发,笔者认为是否 可以将一个账号在数据库存储时,一个UID 用户名对应多个密码保存,只有一个为用户真实的密码密文,而其他作为混淆项,混淆项的 值为用户注册系统时由系统自动生成。
当认证时,系统通过算法匹配与数据库真实的密码密文来验证完成认证。如图:
这样设计数据库账号密码存储的优点、缺点是:
发生拖库时,攻击者无法从数据库中识别出哪一字段为真实密码,只能将所有字段全部“拖走”,同时增加了破解的难度和撞库的难度。
对数据库运维而言,此举便于数据库读取的监控,在建立一定的读取监控策略后,能轻易发现拖库行为,及时告警处置。
认证时,系统的匹配算法或实现的匹配机制需要设计隐蔽,不能被轻易分析识别。
混淆密文的生成算法需合理,被解密后,不能轻易区分出哪一个是真实的密码。
难易程度: ★★★★ 防范效果:★★★
3、陷阱法
陷阱法顾名思义就在数据库敏感的地方设置陷阱,使拖库行为容易被发现、识别并跟踪。笔者设计了两种基本的陷阱法场景供读者参考。
场景一:账号数据表的陷阱
在同一个数据库中至少创建两套与认证相关的账号数据表,一真一假,二者实时更新、同步数据。对假账号表进行读取控制的监 控和告警。
因为攻击者无法区分哪一个表是真正在用的账号表,所以多数情况会一并拖走,这样监控便能及时发现非法行为。如图:
场景二:账号数据值的陷阱
在同一个数据库账号表中,可以随着系统用户的注册增加,按照一定策略“内建”一些“假”(假并不是不能使用,是与网民注册 的真实用户相对)的账号数据。
同场景一一样多数攻击者会将数据全部拖走,这样监控便能及时发现非法行为。如图:
陷阱法设计认证数据表的优点、缺点是:
攻击者无法知道具体策略,多数情况会拖走全部数据,这样便于数据库读取的监控。在建立一定的读取监控策略后,能轻易发 现拖库行为,及时告警处置。
场景二若设计合理的构建陷阱策略,可以便于追查时间点,便于追踪数据。
场景二由于插入陷阱数据,不便于真实用户数据数量的统计。
难易程度: ★★★ 防范效果:★★★★
数据库系统的防拖库识别
除了对数据库结构的防拖库设计,对数据库的访问控制识别、安全运维,也是降低拖库风险的有效措施。
1、数据库系统的访问控制
笔者强烈建议有能力的企业提高对数据库系统设计、维护、管理方面的重视程度,根据自身业务特征、自身IT 技术实力,保障数 据库系统的安全,防范拖库。
在数据库系统与前台交互中,建议设计统一查询接口,便于管理和监控,如图是针对数据库系统访问控制方面的防范思路供参考。
严格通信访问控制,后台DB 只允许与“统一查询接口”通信。
统一数据库查询接口,制定SQL 查询的黑、白名单,并实时监控。
数据库可采用库内、库外甚至专用硬件加密设备。
防非法拷贝数据文件,如采用软指纹技术、加密卡等。
难易程度: ★★★★ 防范效果: ★★★★
2、数据库的运维
在数据库系统维护中,建议使用专用接口维护工具、堡垒机等方式,如图是针对数据库系统运维方面的防范思路供参考。
数据库管理员与系统管理员权限分离。
DBA 使用专用数据库维护工具进行维护,具备加/ 解密能力。
采用加密备份/ 恢复策略维护数据库,数据不脱密。
备份数据具备时间有效期,过期后自动销毁、删除等。
难易程度: ★★★防范效果: ★★
运维监控的防拖库监测
在运维监控中,可以从网络、主机、接口、数据库、审计等多维度进行全面监控,如图是针对运维监控方面的防范思路供参考。
对数据库和查询接口进行读写监控、数据标记甚至数据路径追踪。
对操作系统进行性能、文件、IO、进程、端口等监控,特别是特定文件的读取、变化。
对基础网络进行流量、协议、访问控制、蜜罐等监控。
进行全面审计,包括访问行为、危险操作、异常行为等。
难易程度: ★★★★ 防范效果: ★★★★
转自计算机与网络安全
安全圈综合整理 如有侵权请联系删除
留言与评论(共有 0 条评论) |