最近一直在做web application的安全测试,作一个总结,放在这.希望能得到一些反馈和指导. 最近的测试工作包括两个flex为前台的restful应用,一个jsp为前台的旧系统,都位于weblogic Portal之后,以apache+ssl作反向代理,以及一个extJS +flex为前台,部署在云计算平台的虚拟机上。
Web系统主要有三个方面的漏洞:1、服务器操作系统漏洞。2、web服务器漏洞。3、web程序本身的漏洞。由于漏洞1和漏洞2解耦于应用程序的代码本身,并且具有通用性,作为一个程序开发者,最需要关注的是web系统本身的漏洞。而作为一个专业的网站,主要 的漏洞也存在于web系统本身,因为这些漏洞几乎是不可避免的。
一、操作系统漏洞可见于各种操作系统漏洞跟踪网站。除了查看这些漏洞并按其指导的方法进行更新或配置,我们似乎也无能为力了。可以使用端口扫描工具 扫描开放端口,关闭不必要的漏洞. 使用工具主要为NMAP。
二、web服务器漏洞:Web服务器主要有Apache,IIS,tomcat等。漏洞主要因为服务器使用某些功能引起的,包括缓冲区溢出、路径遍历、编码与规范化漏洞 等,可进行OS注入之类的攻击。具有普遍性,可用nikto,nessus等进行扫描。
三、最常见web系统本身的安全漏洞包括:
a、跨站脚本攻击(XSS).
b、Injection.(SQL Injection及其他脚本注入)
c、不安全的访问控制措施.
d、不安全的验证措施.
e、不安全的会话管理机制
f 、信息泄漏(包括服务器信息,可根据它们使用已发现的漏洞进行攻击)
应对这些漏洞,目前我们通过以下步骤展开我们的工作.
一、测试准备
如果运用工具进行漏洞扫描,提供给工具一个合适并且真实的接口是有必要的。
例如我们的测试中包含了一组Restful API的测试,对这些API主要执行相应的SQL Injection测试,DoS测试和权限控制测试。我们需要测试工具提供一些HTML输入接口,并将对这些接口的输入转换为对API的输入(如格式化的XML数据)。 还需要提供对登录session的保存,使得批量的数据提交成为可能。
二、用工具扫描
目前网络上已有大量的漏洞扫描工具,包括许多开源的和曾经开源的工具。有些已经包括的大量的攻击特征码库,能够直接提供漏洞分析扫描功能;另一部分需要用户将需要扫描的对象(如SQL注入)的对应插件安装好。这些工具包括有NetSparker, Paros proxy, WebScarab等进行扫描.
扫描过程为:获取访问权--->抓取页面--->根据攻击数据库输入数据--->根据特征码验证输出结果。
三、对扫描结果进行分析。
扫描结果分析是一件令人头痛且耗费精力的事,需要测试者拥有较好的经验和对系统程序的熟悉程度。因为漏洞扫描工具通常会有很多误判(False Positive),将大量正常的运行结果作为漏洞出现在结果里。我们的测试小小组包括了QA和后台程序员,结合对业务和程序的理解,以及对测试报告的掌握展开测试,这是很有必要的。
四、代码审核
如果你足够幸运或者不幸的话,你可能会拥有整个系统的源代码。拥有源代码,对SQL Injection和资源的访问是很有益处的。光通过web.xml,你就能够获取大量的访问资源列表,作为渗透测试,你已经完成了一小半--得到大量的隐藏资源。
五、手动测试
对权限控制等方面,结果对业务的理解,手动测试也是必不可少的。
先说到这,具体的细节,还需要长久的学习和尝试。
希望咱的网站越来越安全!