从2款源代码安全审计工具看Hash+Salt的密码保护

       信息系统的密码(password)安全总是成为吸引你注意力的网络安全事件,如:某车票网上订票系统的密码被碰库了,从而有几十万人的个人信息被泄露。再如日前网络上由安全分析专家统计的密码使用习惯,“123456”等密码成为人们常用的系统密码。那这些密码为什么能轻易被统计和碰库,还有更加严重的脱库呢?这其中一个原因是软件工程师设计的信息系统的密码存储使用明文,或者是使用不安全的密码保护方式。那如何来保存我们的密码,是加密吗还是杂凑(Hash)?如何更好使用Hash算法呢?那么看一下信息安全通用漏洞类型定义的2个密码存储保护漏洞类型,一个是CWE-759: Use of a One-Way Hash without a Salt,另一个是CWE-760: Use of a One-Way Hash with a Predictable Salt,通过网上查阅这个2个类型漏洞都使用Hash保护密码password的安全漏洞,未使用Salt和使用可预测Salt都会使暴力破解密码更加容易,尤其当Hash算法为低安全算法时(如:MD5),使用Rainbow table可轻易破解密码。
       那用户每日使用的网络信息系统,无论是邮件系统还是论坛,以及电子商务甚至是电子支付系统的密码存储保护如何呢?这个也许只有系统的开发可能会更加清楚,但不断爆出的碰库或者是脱库事件告诉我们,这些系统设计可不一定安全,在使用时你一定要切记不同系统设置不相同的密码,这样安全策略,你才有可能避免不相关系统的密码泄露,而造成你个人数据泄露和丢失。之所以这样说,那就回到标题的2款源代码安全审计工具来看看我们软件系统中的密码保护如何。使用源代码安全审计工具来分析系统系统密码保护,是因为源代码安全审计工具是分析源代码中的安全漏洞,如CWE-759和CWE-760是工具能够分析和查找的漏洞之一,工具能查出的其他系统代码中的漏洞,那它们自己的设计如何?这是作者比较感兴趣的一点,也促使我进行分析。那就请出这2款工具吧,其中一款是Fortify,另一款是Checkmarx。那故事还要回到几年前说起了。
       首先是Fortify。时间回到2009年,在一个应用系统开发项目中有幸采购和使用了大名鼎鼎的源代码分析工具Fortify SCA,当时还是独立公司,还未被HP收购,也让我第一次领略到软件漏洞工具使用和问题分析方法(专业的商业软件,而非开源的工具),Fortify工具有个360的服务端软件,有个管理界面,并需要密码登陆使用。做完系统配置,我从对密码保护和处理的一种敏感,我当着当时那个技术支持面,导出数据库生成的密码数据,通过使用工具计算和分析,真是令我惊喜,虽然安全规则中定义了Hash+Salt的密码保护规则,但工具本身只是使用SHA1处理的密码,没有不可预测Salt的出现,那个技术支持当时有点茫然,好在这个不是使用源代码工具的重点。这末多年过去,也许现在HP的Fortify修改了这一漏洞吧。
       其次是Checkmarx。无独有偶,时间回到2014年,在工具采购和测试分析,我又有幸试用了另外一款源代码分析工具Checkmarx,同样问题又发生一次,这个工具完全需要使用一个服务端管理工具,用户通过密码认证登录系统,我也用相同的方法导出了用户的密码数据,使用工具计算和分析,又是一次喜悦,这个工具也是简单使用了SHA1做的密码保护处理。可这次的技术支持确是满面从容,也好这个同样不是工具使用的重点了,这个属于安全策略问题。然而,差不多有5,6个月过去了,时间走进了2015年,这次是正式的系统安装和配置,Checkmarx升级了新版本,系统安装部署之后,我又顺便分析下密码,惊奇的发现,Checkmarx升级了密码存储保护机制,使用的是SHA256+Salt,同样让我另一次惊喜,看来密码安全问题已经会让越来越多的系统开发者所重视,同我们相伴的系统信息系统也许真的让你更加值得信任了!
       说到如此,你可能知道了密码保护的重要,无论是传输、存储还有处理都要保护,依赖密码来认证用户有效性还是目前信息时代的主流,像FIDO这样宣称password-less概念的技术还是同我们的常用系统相聚甚远。同时对关心密码保护系统开发者,如果需要交流和讨论密码存储保护和相关设计实现的话,可随时找作者交流。也不具体透露是什么具体的系统,几年前作者为某某重要的网上系统设计和实现强计算的密码保护方案,从用户输入到传输,再到存储的方案,并成功实现了几千万级用户的密码迁移方案,那个系统早已上线了,此时回顾往事除了一种满足感的同时,还有一种伤感染上心头,因为作者已离开那个奋斗过多年的领域了,但知识依在,技术依在,方案依在。
      最后实例化一下Checkmarx升级版本和老版本的数据密码保护格式如下,感兴趣的大拿们可以破解下密码明文:
      老版本SHA1:            32E6BF92DB00F2E0080912B9D520CEB305E4794B
      新版本SHA256+Salt:PMsdZn1WhzJN1FmSxuDfZ/9vPXXArbl0uS2KKKbABSE=   U0jdfkiWDASaRCuwA599LQ==

      最后声明:作者并无对Fortify和Checkmarx这2款产品谁好谁坏的任何观点和评价,无论是那款源代码分析工具(SCA)都是作者在应用安全开发生命周期活动中,碰到过的、使用过的、最优秀的一类安全测试工具。

你可能感兴趣的:(信息安全,加密算法,网络攻防)