技术层面的web安全构架

今年WebSense安全实验室的调查显示:39%的Web 攻击目的是进行数据窃取,更有20%直接被人刷了库;

年初,乌云平台报告了某上市公司客户资料数据库被窃取,数据库资料包含了用户的手机、密码、邮箱、身份证、住址、家庭成员信息、消费记录(这个比较敏感),他们感到鸭梨很大,所以得此机会,为他们的几千万用户设计数据安全方案;

0x01 了解骇客

Web 漏洞 -> Web Shell -> 读配置文件想找到数据库配置连接 -> 找到可以连接到数据库的信任服务器 -> 连上数据库拖库、刷库;

涵盖方向太广,想真正解决问题,找专业的代码审计、风险评估专家.

0x02 Web Shell

对程序员进行专业的安全培训,千万不要相信伪专家,找专注的、靠谱的!如何鉴别伪专家呢?所谓伪专家就是那种喜欢说经过自己的处理后你的系统一定不会有事 就像《信息安全常见误区》一文中写的:

有个安全专家给我们诊断过了,说我们系统坚如磐石,万无一失。

那么请向那位专家竖起您的中指。

0x03 读取配置文件

来到了代码级,你们程序员基本能玩死那些小瘪三骇客了,配置信息加密或者藏起来,自己想办法。大一点的企业,都是直接SOAP了,写WebService取数据的。。。

0x04 数据库服务器ACL

严格的访问控制,粒度切记细化(数据库用户权限),只允许来自WebService宿主服务器,访问数据库。端口级+静态IP策略。

0x05 数据主动防御

既然骇客的最终目的是窃取数据、篡改数据,那就把数据加密,解密密匙藏起来。

现在的架构是.NET做WebServic为前端多个业务系统提供数据回调,数据库使用的MSSQL,整个数据操作流程如下:

取数据:Web前端->连接配置数据库取对应的WebService->WebService取数据->DB

提交数据:Web前端->连接配置数据库取对应的WebService->WebService提交数据库->DB

我的建议

一些关键字段在入库时,先通过AES加密,再将加密后的内容存储进数据库。

AES 密匙,写死在WebService端的某个文件内,写好后,用VS自带的DotFuscator将.NET的WEB源代码混淆,PHP可以采用Zend的 源代码保护方案。(至少现在还很少有人能够将源代码混淆后的密文完完整整的还原出来。);WEB前端,用密匙解密给客户端。

他们还有一个数据审计部门需要针对用户数据进行数据挖掘:

我的建议

划分一个数据审计安全VLAN,不允来自任何网络的访问,通过你的密匙还原一份原始数据用来做审计,安全域一定要划分隔离。

0x06 财务保护:(今天给他们讲的一个例子,当时想用3DES的,后来想想没那个必要了。)

采用 AES 算法,每个用户设置一个独立的FACEID,作为加密、解密的密匙;

uid = 1063200; FACEID = 8baceca0-15e7-11e1-be50-0800200c9a66;

建立一个 dencode 和 ddecode 函数,用来针对用户的账户余额(CARD_BALANCE)在SQL中进行计算。

更 改用户余额 为:1000update 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是用户余额的字段。

文章作者ring04h本文由网络安全攻防研究室(www.91ri.org)信息安全小组收集整理,转载请注名出处!