正文:
随着互联网的普及,互联网企业已经从简单的信息提供者转变为应用提供者。人们可以通过互联网完成购物、社交、拍卖、交易等日常活动,这也导致了拥有数亿用户的 Web应用程序的出现,比如 Facebook 和新浪微博。然而,随着互联网企业不断提供良好的用户体验,加强 Web 应用程序的安全性变得尤为重要。由于服务器数量庞大、Web 应用众多且安全素质参差不齐,企业面临着越来越多的安全挑战。主要的挑战包括攻击数量的增加、攻击来源的团队化以及攻击手段的多样化。常见的攻击手段包括 XSS 跨站攻击、SQL 注入、命令执行、网络钓鱼和恶意代码等。攻击时间可能只需几秒钟到几分钟,就能够窃取数据、植入脚本木马,甚至控制整个数据库或服务器,给企业带来严重的损失。本文将从 Web 应用程序的检测和防御角度来讨论互联网企业面临的安全风险和应对措施。
Web 应用的安全检测可以大致分为三种技术:黑盒测试、白盒代码审计和灰盒测试。灰盒测试实质上是黑盒和白盒两种技术的结合,既相互佐证又相互包含。理论上来说,白盒代码审计的结果应该包含黑盒测试的内容,但由于审计工具的疏漏和人员精力等因素的限制,结果往往会有所偏差。在日常的安全测试中,一般通过黑盒测试和白盒代码审计相互弥补固有的缺陷。Web 防御机制的检测实质上并不是为了绕过多少防御措施进行攻击,而是力求达到 100%的 Web 应用安全测试路径覆盖率。目标不是证明 Web 应用程序存在哪些漏洞,而是证明经过黑盒和白盒两轮测试后,该 Web 应用程序是安全可控的。
Web 应用的黑盒测试主要使用 Web 爬行分析 URL 进行检测。常见的 Web 应用漏洞扫描工具(如 AWVS 和 WebInspect)可以用于此类测试。然而,大型互联企业通常会开发自己的扫描工具,但这些工具的缺陷在于无法检测没有爬行目录或链接的情况。对于稍微有一些逻辑的参数应用,这些工具将无法完成全面的测试,只能通过对比多种扫描器的检测结果和对业务逻辑的理解来弥补。黑盒测试的覆盖范围包括用户访问测试、用户输入测试、异常与错误测试,但根本无法达到 60%的覆盖率。Web 应用的白盒测试采用较成熟的技术,如代码静态分析。商业工具 Fortify 就是一个例子。通过白盒测试可以解决类型变量检查、用户输入检测、高风险函数检测和部分应用逻辑检测等问题。相比黑盒测试,白盒测试的覆盖内容更详细和全面,但仍然会产生漏报和更多的误报。白盒测试的路径覆盖根本无法达到 70%。
虽然以上两种主要的安全测试技术都存在固有的缺陷,但在实际应用中,合理地利用它们的优势和避免它们的短处可以达到安全测试的最终目标。以下是几点 Web 安全测试原则的总结:
1. 理解 Web 应用的业务,明确存在高风险漏洞的类型,将安全测试资源投入到寻找高风险漏洞上。
2. 从不同的测试入口进行核心 Web 应用业务测试,采用多人代码审计的原则。
3. 参考 Web 应用业务的接口函数,构造更多的测试 URL 和不同类型的数据。
虽然 Web 安全测试的覆盖路径无法达到理想的 100%,但使用合理的技术和方法仍然可以确保业务的安全稳健。在其中,人的安全经验是最关键的因素。
简单来说,防御机制就是不相信用户的输入。在建立 Web 应用程序的防御措施时,需要综合考虑处理用户的访问、处理用户的输入和处理异常错误这三个方面。
1. 处理用户的访问
首先,需要建立身份验证、会话管理和访问控制这三个相互关联的安全机制:
(1) 身份验证是 Web 程序最基本的安全机制,用于确定用户的真实身份。常见的验证方式包括基于表单的验证、口令卡或硬件 key、SSL 证书等。然而,出于用户体验的考虑,大多数 Web 应用程序采用最简单的用户名和密码方式,并需要用户的参与。然而,用户的安全意识决定了他们的缺陷,比如使用短密码、常见单词或生日等。攻击者可能通过字典攻击或社交工程来猜解密码。许多用户喜欢使用同一个密码,这会导致安全边界扩展。为了弥补这些缺陷,Web 应用程序会添加手机绑定、邮箱绑定、密码长度检测、密码问题找回等策略。然而,这些策略只是增加了攻击者破解用户名的难度。在具体的对抗中,可能会出现策略之间的冲突,例如在修改绑定手机时,应向旧手机和新手机同时发送密码修改信息。
(2)会话管理是指 Web 应用程序追踪用户的交互状态,通过发布标识会话令牌来保持联系。常见的实现方法有 Http Cookie,隐藏表单传值,Url 传值等,其安全性取决于令牌的安全性。在实际中,可能会面临多个设备之间的通用性,比如 PC 浏览器,手机浏览器等会有很大的区别。一些 Web 应用程序在手机中通常使用一个 Url 传送其令牌,并且为了更好的用户体验通常会使用持久性。然而,这样的实现方法存在的风险是一旦令牌泄露,用户会话将被劫持。因此,在设置会话管理中会增加时间戳、二次令牌、来路判断等措施来提高安全性。
(3)访问控制是 Web 应用程序在身份验证后确认用户访问权限的机制,用于判断是否允许或拒绝用户请求。常见于有用户角色区分的 Web 应用程序,比如某些应用通过一个标识符来区别管理员权限,如 isadmin=true。然而,普通用户在其 URL 添加后同样拥有管理员权限。因此,访问控制的安全性取决于使用的标识符的安全性,包括其在传输过程中的保护、破解强度、存活周期等因素。
从以上分析讨论可以得出,Web 应用程序在处理用户访问的过程中,可能需要使用多种安全策略来防范单一方法的缺陷。可以通过更细化的权限分配来抵抗可能存在的缺陷。
2. 处理用户输入
由于 Web 应用程序需要与用户进行数据交互,处理用户输入内容的原则是[所有用户的输入都是不安全的],即不信任提交的所有数据。在实践中,通常采取以下措施来对抗:
(1)对输入内容的属性进行检测,包括类型、长度、编码等。
对用户输入的内容进行类型检测,例如手机号可以检查是否为数字型,字符型的长度限制,并进行内容编码的强制转换。
(2) 输入内容的黑白名单设计。
输入内容的黑白名单的设计,是基于对可控数据的最小化原则,便于有针对性的检测可控数据。比如富文本的标签白名单限定,将降低绕过的风险。
(3) 输入内容的安全净化。
在输入内容的安全净化中,可以使内容按可控的方式传递保存,比如在 Web 前端进行的 Html 编码,对进入 数据库 的内容进行有针对性的转义,如]’]转成]\’] [\] 转成]\\]等,从而使输入内容安全可控。
3. 处理异常与错误
良好的 Web 应用程序的异常与错误处理机制是为程序编写人员更好的追踪分析 Bug 提供依据,但可能被攻击者使用。比如数据库查询的暴错,类型强制转换,网页响应的返回时间等都可以作为判断 Sql 注入的依据。一般大型的 Web 应用程序其类消息都是屏蔽在前端显现的而自定义了错误内容,将更利于安全性的提高。
Web 应用防御机制的一句话原则就是[怀疑一切用户的输入数据]。 对来自外部的数据处理采用属性控制,内容控制,安全净化等手段来建立其防御机制。
结语:
本文从 Web 应用的防御机制的三个方面:用户的访问,用户的输入和异常错误的处理,详细的阐述的 Web 应用安全的风险和其防御机制的安全测试内容,总结出 Web 安全测试的三条原则,用于指导安全测试的工作
转载请注明:汇站网 » (网站安全)防御机制与安全检测 Web 应用