A6 - 敏感信息泄露
Web应用程序一般是搭载在Web服务器,使用Web浏览器通过Internet可以进行远程访问,访问过程中的数据跨越信任边界,一旦保护不当就会被窃取,特别是敏感数据一旦被攻击者获取,就可以利用他们进行网络诈骗,身份仿冒,获取他人财富,或进行其他损害操作,对个人或企业用户带来不可估量的损失,因此在Web应用程序开发过程中,对敏感数据的保护显得尤其重要。
近年来因数据保护不当造成泄密的案例层出不群,如CSDN后台数据库被窃取,更不可思议的是该网站的用户密码竟然是明文存储的,某邮箱也发生过类似案例,大批用户信息泄露,更为可怕的是,很多人很多平台的用户名和密码是一致的,对攻击者来说获取CDSN或邮箱账户就等于获取了支付宝等平台的信息,那么对万千用户来说,个人财产就存在了风险。
因此我们在设计和开发软件的时候,要识别出敏感数据,并对敏感数据进行安全的保管和传输,下面就详细说说什么是敏感数据,如何进行敏感数据保护。
敏感数据,在我看来,有如下几个方面:
1、个人信息,如姓名,身份证ID,电话号码,银行账户,驾驶证号码,社保卡号,护照号码等都是敏感数据;
2、网站登录的用户名、密码,SSL证书,会话ID,加密使用的密钥等都属于敏感信息,这些信息一旦泄露,攻击者就可以以合法用户的身份访问Web系统,随意进行各种攻击操作;
3、Web服务器的OS类型,版本信息,Web容器的名称,版本号,数据库类型,版本号,应用软件使用开源软件信息都属于敏感信息,因为攻击者知道这些软件信息,就会利用这些软件存在的公开漏洞进行专门攻击,提升了系统被攻破的可能性。
那么,我们如何保护敏感信息呢?我觉得应该至少做到如下几点:
1、针对个人数据,必须加密存储,且要使用安全的加密算法,具体可以这么区分,针对本地存储且需要密文明文转换的使用AES128及以上的安全加密算法,对于使用于认证场景的不需要可逆的可以采用SHA256及以上的安全HASH算法,如PBKDF2等,需要加盐值(采用安全随机数,防止彩虹表攻击),而对于夸信任网络传输的敏感数据,需要使用非对称加密算法,公钥加密,私钥解密,如RSA2048及以上算法,特别强调,常见的MD5、DES,SHA1,甚至不能算假面的BSAE64位编码都是不安全的做法,针对加解密这块,大家看不明白也没关系,后续做专题来讲解吧,到时候会附上Java的实现。
2、针对敏感数据传输,需要采用SSL加密通道,每一个请求都应该使用SSL加密通道,因为每个请求里面都带有会话ID,会话ID就是敏感信息,所以并不是只有涉及认证的请求才存在敏感数据,针对SSL通道,需要使用安全的TSL版本如TSL1.1和TSL1.2,其余SSL版本和TSL1.0已经被证明是不安全的。同时要使用安全的加密套件,也就是说SSL协商过程中协商的通道加密算法也要是安全的,否则加密数据还是可以被轻易破解,具体配置是在Web容器里面的,大家可以百度轻易获取,后续针对Web容器加固方面也会进行说明。
3、应用程序运行出错容易造成敏感信息的泄露,如有的网站的程序堆栈信息直接显示在页面上,暴露Web容器的名称和版本信息,这些都是不安全的做法,解决方法就是定制统一出错页面,杜绝显示此类敏感信息到Web客户端。
4、敏感信息禁止明文传递到Web客户端,能不传递就不要传递,禁止将敏感信息打印到堆栈或者日志中,禁止明文存储在文件或数据库中,同时保存敏感信息的文件要严格控制访问权限。
好吧,就说这些吧,欢迎大家拍砖~