Marriott用户信息泄露后的深思——SQL Server敏感数据审计
当地时间3月31日
万豪(Marriott)国际集团表示正在调查一起涉及多达520万客户个人信息泄露事件。
在官网的声明中万豪表示涉及到的客户信息包括:
姓名、公司、生日、住址、电话号码、邮箱地址、会员账号,以及积分余额、关联的航空公司等。
声明同时表示:
目前事件仍在调查中,目前来看,客户的支付卡信息、护照、身份证号或驾照号码等信息还没有受到影响。
新浪博客前不久刚爆出信息泄漏,万豪集团又在三年后第二次泄漏用户信息,数据安全已经迫在眉睫。作为数据安全人员,如何审计公司的敏感数据,以确保较小可能性泄漏,规避组织数据泄漏风险,是我们要重点考虑的事情。我在数据安全方面已经发布了数篇文章,包括访问数据权限的限定,数据库备份的加密,数据敏感信息列的加密等,但这些还远远不够,后续还会陆续为大家分享数据安全方面的内容。
就万豪集团这次泄密来看,其已经对部分用户的敏感数据做安全防护,但是却没有全面覆盖。那么我们该如何发现我们组织或应用中存在哪些敏感数据?这些数据是否足够安全?本文将给出SQL Server数据库中敏感数据的审计方案,以供参考。
首先我们需要界定什么样的数据为敏感数据,如下我们给出百度百科的一段描述:
隐私保护研究下的隐私可界定为:隐私是指个体的敏感信息,群体或组织的敏感信息可以表示为个体的公共敏感信息。Banisar等人把用户隐私分为4类:①信息隐私,即个人数据的管理和使用,包括身份证号、银行账号、收入和财产状况、婚姻和家庭成员、医疗档案、消费和需求信息(如购物、买房、车、保险)、网络活动踪迹(如IP地址、浏览踪迹、活动内容)等;②通信隐私,即个人使用各种通信方式和其他人的交流,包括电话、QQ、E-mail、微信等;③空间隐私,即个人出入的特定空间或区域,包括家庭住址、工作单位以及个人出入的公共场所;④身体隐私,即保护个人身体的完整性,防止侵入性操作,如药物测试等.互联网中的用户隐私是指,个人、机构等实体不愿被外部世界知晓的信息,如用户的身份、轨迹、位置等敏感信息。
我们依据这样的一个隐私数据的界定,通过一个简单的脚本,即可以发现我们SQL Server数据库中存储有哪些显著的敏感数据,脚本如下:
EXEC sp_msforeachDB 'USE [?]
SELECT db_name() as [DB],
object_name(o.object_id) AS [Object],
c.name AS [Column]
FROM sys.columns c
LEFT JOIN sys.types t
ON c.system_type_id=t.system_type_id AND c.user_type_id=t.user_type_id
JOIN sys.objects o
ON c.object_id = o.object_id
WHERE o.type IN (''U'',''V'') /* 表和视图 */
AND (c.name like ''%mail%''
OR c.name like ''%name%''
OR c.name like ''%birth%''
OR c.name like ''%sex%''
OR c.name like ''%address%''
OR c.name like ''%phone%''
OR c.name like ''%QQ%''
OR c.name like ''%weixin%''
OR c.name like ''%weibo%''
OR c.name like ''%blog%''
OR c.name like ''%gender%''
OR c.name like ''%card%''
OR c.name like ''%identity%''
OR c.name like ''%identity%'')
AND db_name() NOT IN (''msdb'',''tempdb'',''master'')
AND t.name NOT IN(''binary'',''varbinary'')'
脚本中使用sp_msforeachDB循环除系统库msdb、tempdb、master库以外的所有库,查询字段中包括邮箱mail、姓名name、生日birth、性别sex或gender、住址address、电话号码phone、QQ、微信weixin、微博weibo、博客blog、卡号card、身份证identity、密码pwd等敏感信息,排除了以二进制存储的内容(说明已经加密了)。我上面说该脚本可以查询的是显著的敏感信息,是因为您的组织命名规则会极大的影响这个结果,如您的组织使用汉字作为字段名称而非英文,或者使用的是对应名称的拼音,或者是英文简写,或者根本就是随意给的字符。这样的话,我们需要根据命名规则对上面模糊匹配的内容进行调整,以便列出敏感信息字段。
当然,我们最终还是需要向开发人员去核实用户信息记录的表及字段。以便能全面覆盖所有敏感信息。
之后,我们可以选择限制访问权限,或者加密明文的敏感信息,加密有敏感信息的数据库等安全措施,以保障数据的安全。
上一篇: 初夏小谈: LC:快乐数问题