扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
在本系列的第七篇文章中,我将介绍失效的账户和线程管理类的威胁,即它们所带来的安全问题。首先我会介绍此类问题的产生和现象,然后介绍Web应用程序如何避免这种漏洞带来的安全风险。
失效的账户及线程管理涉及到很多内容。实际上,它 包含了与用户验证有关的全部内容以及与活动线程管理有关的全部内容。严重的时候,账户和线程管理的漏洞会导致用户和管理员出现接入问题。而且线程劫持攻击也会更频繁的出现,导致系统中的敏感数据丢失。
在OWASP文档中定义的此类问题一般都伴随着认证功能出现,比如退出登录,密码管理,超时,密码记忆,保密问题,账户升级等。
密码存储
在存储密码时,一定要注意密码保护。保护存储密码的方法有两种,哈希数列演算或者对密码加密。当对密码采用哈希算法后,会产生一个字符串,这个字符串又叫哈希数列,是无法通过逆向运算找到原始密码的。这是密码存储中一个相当安全的方式。
加密方式有些类似于哈希数列演算方式,不过通过某种算法可以从加密后的字符串中破解出原始密码。虽然这种方式要比明文保存密码安全的多,但仍然给黑客留下了破解密码的可乘之机。
最后要记住,千万不要将密码直接写入Web应用程序的源代码中。
保护传输凭证
不论你如何保护用户的密码或其它信息,用户在访问服务的过程中,难免会出现各种问题,而这些问题很可能为黑客获取密码制造了机会。
为了保护信息的安全,首先要遵守的规则就是永远不要用明文形式发送密码。很多开发人员都会采用发送密码哈希字符串的方式代替直接发送密码,这是一个不错的方式。服务器会寻找与之匹配的密码哈希字串,如果字串相符,则确定用户身份。
但是如果黑客在客户机向服务器发送哈希码的时候拦截到了哈希码,黑客就可以从数据包中提取这个哈希码,并通过用户ID以及这个哈希码从服务器获取用户的信息,并直接访问一些需要身份验证才能看到的资源。
因此,在这些情况下应该采用SSL连接,加密全部线程。这样黑客就不会轻易的定位到数据包中的用户ID和密码的哈希数列了。SSL也应该用在其它需要在客户机和服务器间传递敏感信息的情况。
保护线程IDs
这个漏洞与传输凭证过程中存在的漏洞相似,如果黑客在数据包中截获了用户的线程ID,就可以对其进行劫持。Session hijacking就是这样的工具,可以利用合法用户的访问线程,访问任何对合法用户来说有效的资源。防止这种攻击应该遵循一下原则:
1.Session IDs 要足够复杂.
2.Session IDs 在线程过程中要经常变换.
3.系统不能接受用户指定的线程IDs.
4.Session IDs 不能包含 URLs.
就算有以上保护措施,还是应该采用SSL连接来保护所有用户线程。
保护帐号列表
阻止黑客利用用户账户登录系统的一个方法就是保护合法账户的帐户列表。本安全指南对此就不再展开了。作为一个整体的Web程序安全方案,保护好合法账户列表可以增加黑客入侵系统的难度。
管理程序组件的信任关系
Web应用程序组件之间不应该含有内在的信任关系。每个组件在传递敏感信息前,都应该要求其它组件提供验证信息。
一旦策略,标准和指导方案确定下来,你就需要保证各方面的一致性了。我建议采用两种方式,第一是检查代码。不过也许你并没有足够的资源来逐行检查代码。如果没有能力采用自动化的代码安全检查工具,至少要对重点代码进行安全方面的审查。
其次进行渗透性测试。常用的渗透性测试可以帮助你确定Web应用程序组件在用户交互方面以及与其它组件间的交互性上存在的漏洞。
总结
以下是OWASP提供的针对账户和线程管理漏洞的建议:
◆不要接受带有新的,预设的或者非法的线程号的访问请求URL。
◆尽量减少客户cookies中用于验证和线程管理的代码。
◆采用具有足够强度的单一的验证机制,这种机制不要过于复杂,因为越复杂越容易出现安全问题。
◆不要在一个未加密的页面中开始登录过程。
◆在验证成功后应该更新线程号,或者修改线程的特权等级。
◆确保每个页面都有退出登录链接。
◆采用超时机制强行退出一些长时间没有操作的线程。超时长度根据所设计的敏感内容而定。
◆密码恢复或重置应该采用强健的确认问题。诸如父母的姓名这类问题非常容易获取。
◆不要将线程ID或者身份凭证部分或全部加入URL或者日志中。 '
一般来说,身份验证和线程安全对于Web应用的安全来说至关重要。一个Web应用程序就算再强壮,如果在线程管理和密码管理方面存在漏洞,那么就很容易成为黑客攻击的牺牲品。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
去集群 更超群——大容量网络演进之路
2019 IBM 中国论坛
H3C 2019 Navigate 领航者峰会
助推数据中心网络现代化转型 打造灵活可靠基础架构平台