程序员会采取简单的方法 而不实施适当的密码安全
最近的一项研究显示,自由职业者需要被明确告知,要编写以安全可靠的方式存储密码的代码。
波恩大学(University of Bonn)的学者们对通过Freelancer.com平台雇佣的43名程序员进行了一项实验,他们发现,开发人员倾向于采用简单的方法,编写以不安全的方式存储用户密码的代码。
在他们的研究中,德国学者要求260名Java程序员为一个虚假的社交网络编写一个用户注册系统。
260名开发人员中,只有43人接受了这项工作,包括使用Java、JSF、Hibernate和PostgreSQL等技术来创建用户注册组件。
在这43位学者中,有一半人支付了100欧元,另一半人支付了200欧元,以确定更高的薪酬是否对密码安全功能的实施产生了影响。
进一步说,他们将开发小组第二次,促使开发人员的一半密码存储在一个安全的方式,和离开另一半存储密码的首选方法,因此形成四个季度开发商支付€100,提示使用安全的密码存储方法(P100),开发者支付€200,提示使用安全的密码存储方法(P200),开发者支付€100但不提示输入密码的安全(其他)而那些支付了200欧元却没有提示输入密码安全(N200)的用户。
研究人员说,开发人员花了三天时间提交他们的工作,当他们第一次发送一个以明文形式存储密码的项目时,他们必须要求43人中有18人重新提交他们的代码,以包含密码安全系统。
在需要重新提交代码的18名开发者中,有15名开发者从未被告知用户注册系统需要安全地存储密码,这表明开发人员在编写代码时并没有考虑到安全性。
另外三名来自被告知使用安全方法存储密码的那一半人,但他们是以明文形式存储密码的。
结果表明,在web开发社区中,对“安全密码”的理解程度有很大差异。
在这项研究中,开发人员选择实现的安全密码存储系统中,只有后两种,即PBKDF2和Bcrypt被认为是安全的。
8-Base6410-MD51-SHA-13-3DES3-AES5-SHA-2561-HMAC/SHA15-PBKDF27-Bcrypt
第一个是Base64,它甚至不是一个加密算法,而是一个编码函数,参与其中的开发人员似乎并不知道。MD5也是如此,它是一个散列函数。
“许多参与者使用哈希和加密作为同义词,”学者团队在他们的研究论文中说。
”的18个参与者收到了额外的安全要求,3决定使用Base64表示,例如:“[我]加密它清晰的密码是不可见的,解密是非常艰难的,”研究人员说,强调研究参与者不知道一些基本区别一个加密算法和一个函数,它只是谜团的人物。
此外,在43名开发人员中,只有15人选择实现salting,通过这个过程,存储在应用程序数据库中的加密密码将更难被破解,因为添加了一个随机数据因子。
研究还发现,43名开发人员中有17人从互联网网站上复制了他们的代码,这表明这些自由职业者不具备从头开发安全系统的必要技能,他们选择使用可能过时甚至漏洞百出的代码。
研究人员说,向开发商支付更高的租金并没有起到多大作用。
然而,研究小组发现,给程序员特定的指令来实现一个安全的密码存储系统,比什么都不说,然后指望开发人员自己考虑安全性,效果更好。
尽管如此,如果没有精确的说明,开发人员会选择他们“相信”的安全密码存储系统,但实际上并非如此,这表明在设计任何类型的安全系统时都需要专业人员的监督。
当我还是一名开发经理时,我在招聘过程中使用了一些非常类似的练习。至少90%的人以纯文本形式存储密码。他们的人数比我猜想的要多。
研究结果清楚地表明,每个自由开发者对网络安全最佳实践的知识因人而异。这可能是过时的培训,或者根本没有培训——这再次成为反对使用没有网络安全经验的开发人员从事此类工作的理由。
在过去的20年里,针对加密算法的攻击被大大方方地揭露了出来,而一个开发人员可能从一本过时的学校手册中学到的东西,在今天可能经不起推敲。这个OWASP备忘单是更好的密码实践的一个很好的起点。
更多关于波恩大学这项研究的细节可以在研究论文《如果你愿意,我可以存储加密密码》中找到。’这是一项针对自由开发者的密码存储领域研究。”
这项研究是2017年和2018年两项类似研究的延续,这两项研究使用学生作为研究对象,而不是自由开发者。
在之前的研究中,学生们表示,如果他们为一家公司创建代码,他们就会实现安全的密码存储。”2019年的研究表明,目前的开发者并不比没有监督的学生好多少。