作者:
ring04h
来源:
http://hi.baidu.com/ring04h/blog/item/0b6b172ac4c774255343c190.html
正文:
今年WebSense安全实验室的调查显示:39%的Web 攻击目的是进行数据窃取,更有20%直接被人刷了库;
年初,乌云平台报告了某上市公司客户资料数据库被窃取,数据库资料包含了用户的手机、密码、邮箱、身份证、住址、家庭成员信息、消费记录(这个比较敏感),他们感到鸭梨很大,所以得此机会,为他们的几千万用户设计数据安全方案;
1、了解骇客
Web 漏洞 -> Web Shell -> 读配置文件想找到数据库配置连接 -> 找到可以连接到数据库的信任服务器 -> 连上数据库拖库、刷库;
进谷歌 找注入
没注入 就旁注
没旁注 用Oday
没Oday 猜目录
没目录 就嗅探
爆账户 找后台
传小马 放大马
拿权限 拖数据
2、针对骇客防御
2.1、Web漏洞
涵盖方向太广,想真正解决问题,找专业的代码审计、风险评估专家,推荐 80vul.com、80sec.com (因为专注,所以靠谱!)
2.2、Web Shell
对程序员进行专业的安全培训,千万不要相信伪专家,找专注的、靠谱的!
2.3、读取配置文件
来到了代码级,你们程序员基本能玩死那些小瘪三骇客了,配置信息加密或者藏起来,自己想办法。
大一点的企业,都是直接SOAP了,写WebService取数据的。。。
2.4、数据库服务器ACL
严格的访问控制,粒度切记细化(数据库用户权限),只允许来自WebService宿主服务器,访问数据库。端口级+静态IP策略。
2.5、数据主动防御
既然骇客的最终目的是窃取数据、篡改数据,那就把数据加密,解密密匙藏起来。
现在的架构是.NET做WebServic为前端多个业务系统提供数据回调,数据库使用的MSSQL,整个数据操作流程如下:
取数据:Web 前端 -> 连接配置数据库取对应的WebService -> WebService取数据 -> DB
提交数据:Web前端 -> 连接配置数据库取对应的WebService -> WebService提交数据库 -> DB
我的建议:
一些关键字段在入库时,先通过AES加密,再将加密后的内容存储进数据库。
AES密匙,写死在WebService端的某个文件内,写好后,用VS自带的DotFuscator将.NET的WEB源代码混淆,PHP可以采用Zend的源代码保护方案。(至少现在还很少有人能够将源代码混淆后的密文完完整整的还原出来。);WEB前端,用密匙解密给客户端。
他们还有一个数据审计部门需要针对用户数据进行数据挖掘:
我的建议:
划分一个数据审计安全VLAN,不允来自任何网络的访问,通过你的密匙还原一份原始数据用来做审计,安全域一定要划分隔离。
财务保护:(今天给他们讲的一个例子,当时想用3DES的,后来想想没那个必要了。)
采用 AES 算法,每个用户设置一个独立的FACEID,作为加密、解密的密匙;
uid = 1063200; FACEID = 8baceca0-15e7-11e1-be50-0800200c9a66;
建立一个 d_encode 和 d_decode 函数,用来针对用户的账户余额(CARD_BALANCE)在SQL中进行计算。
更改用户余额为:1000
update CARD_MEMCARD set CARD_BALANCE=d_encode(‘1000′,’8baceca0-15e7-11e1-be50-0800200c9a66′) where CARD_UID_CD=’1063200′;
查询用户的手机号和余额:
select MEM_MOBIL_PHONE, d_decode(CARD_BALANCE,’8baceca0-15e7-11e1-be50-0800200c9a66′) where CARD_UID_CD=’1063200’;
我当时还想到的一个猥琐方法就是:数据库的表名、字段名进行混淆,不要让骇客一眼就看出CARD_BALANCE是用户余额的字段。
评论关闭。