那么什么是“彻底测试呢”,彻底测试就是把上面的两个步骤整合起来,“探索”+“测试”;在安全测试过程当中,能够先只进行探索,不进行测试,目的是了解被测的网站结构,评估范围;而后选择“继续仅测试”,只对前面探索过的页面进行测试,不对新发现的页面进行测试。“彻底测试”就是把两个步骤结合在一块儿,一边探索,一边测试。
步骤 1:探索(又叫爬行,爬网)安全

步骤 2:测试(针对找到的页面,生成测试,进行安全攻击)服务器

因此,简言之,AppScan 的核心是提供一个扫描规则库,而后利用自动化的“探索”技术获得众多的页面和页面参数,进而对这些页面和页面参数进行安全性测试。“扫描规则库”,“探索”,“测试”就构成了 AppScan 的核心三要素。而在安全扫描过程当中,如何进行优化,就要结合这三个要素,看哪些部分须要优化,应该如何优化。jsp
AppScan 结果文件ide
同时,对于 AppScan 标准版来讲,扫描的配置和结果信息都保存为后缀名为 Scan 文件,Scan 文件里面主要包括的内容以下:
- 扫描配置信息:扫描配置信息,如扫描的目标网站地址,录制的登录过程脚本等,选择的扫描设置等都保存在 Scan 文件中。
- 全部访问到页面信息:针对每一个发现的页面,即便没有进行测试,在探索过程也会访问该页面并纪录 http request/response 信息;因此若是探索的页面访问的时候返回的页面内容比较多,页面比较大,那么即便只作了探索根本没有扫描,整个 Scan 文件也会很大。
- 测试阶段,记录测试成功的测试变体和页面访问信息:针对每一个页面都会发送屡次测试(测试变体),每次测试都会有 Request/response 信息,这些信息若是测试经过,即发现了一个安全问题,则会把该测试变体对应得 request/response 都会纪录下来,保存在 .scan 文件中;因为 AppScan 的扫描测试用例库全面,对于每种安全威胁漏洞,都会发送多个安全测试变体(Variant)进行测试,好比对于 XSS 问题,AppScan 发送了 100 个变体,其中 30 个执行失败,70 个变体执行成功,则会纪录 70 次执行成功的具体变体信息,以及每一个变体对应的 Request/Response 信息。这就是一个很大的数据量。这些信息保存之后,就能够在不链接在网站的状况下进行结果分析,快速显示当时测试的页面快照等。
咱们以http://demo.testfire.net/bank/customize.aspx 为例,以下就有 74 个变体都发现了 Customize 页面的 Lang 参数存在跨站点脚本执行(XSS)类型的安全漏洞:
因此针对 AppScan 标准版来讲,因为须要保存的信息比较多,结果文件是会比较大的,最根本的方法仍是有针对性地进行扫描和测试,使用排除页面等排除冗余页面,把一个大的系统分解为多个小的扫描任务等。测试
大型网站技术特色分析优化
AppScan 扫描的对象是网站等 Web 应用,而网站规模的大小和使用的技术,都须要针对性的进行扫描设置,咱们遇到的不少问题,都是在扫描规模比较大的网站时候遇到的,如一个网站页面数目超过 2000 个,须要执行的扫描用例是 50,000 个,在扫描这样的网站时候,默认状况下 AppScan 的扫描 scan 文件可能超过 100M 了,扫描效率就可能比较慢,须要长时间的扫描运行时间。
下面,咱们就来分析大型网站中存在的一些可能影响 AppScan 扫描的技术特色。
网站页面多,页面参数多,则 AppScan 须要发送的测试用例多
什么叫大型网站,顾名思义,网站规模大,提供内容多;具体说是页面不少,内容很全。好比 www.sina.com.cn,好比 http://music.10086.cn/,网站中都有多个频道,包括上万个页面。并且除了页面多,可能还有一个特色 --- 页面参数多,即要填写的地方多,和用户的交互多;好比一个网站若是都是静态页面(.html、.jpg 等),没有让用户输入的地方,那么能够利用,能够做为攻击点的地方也就很少。若是页面处处都是有输入有查询,要求用户来参与的,你输入的越多,可能泄露的信息也越多,可能被别人利用的攻击点也就越多,因此和页面参数也是有关系的。
AppScan 产生测试用例的时候,也是根据每一个参数来产生的,简单说,若是一个参数,对应了 200 个安全攻击测试用例,那么一个登录界面至少就对应 400 个了,为何?登录界面至少有用户名(username)和密码(password)两个字段吧?每一个字段 200 个攻击用例。
这个简单吧,还能够更复杂:若是遇到下面的两个地址,那要扫描多少次呢?
http://www.Test.com/focus/satisfy/file.jsp?id=1 http://www.Test.com/focus/satisfy/file.jsp?id=2
上面的两个地址有相似的,“?”号之前的 URL 地址彻底同样,“?”号后面带的参数不一样,这种能够认为是重复页面,那么对于重复页面,是否要重复测试呢?
这取决于“冗余路径设置”,默认的是最多测试 5 次;即,这种类型 URL 出现的前 5 次,那么就是要测试 1000 个攻击用例了。
若是再继续修改下:遇到下面的 URL 呢
http://www.Test.com/focus/satisfy/file.jsp?id=&Item=open http://www.Test.com/focus/satisfy/file.jsp?id=2&Item=close
每一个 URL 里面都有 2 个参数,测试的次数就更多了。想象下,若是这个网页里面的参数若是是 10 个,或者更多的呢?好比不少网站提交注册信息的时候,要填写的栏位就不少,要进行的安全测试用例也就随之不断增长…
这是网站规模的影响,还有一个问题,就出在“每一个参数,发送 200 个安全测试用例”这个假设上。这个假设的前提来源于哪里?来源于咱们选择的扫描规则库。即你关心那些安全威胁,这个须要在测试策略里面选择。一样来参照杀毒软件,你会用杀毒软件来查找一些专用的病毒吗,好比 CIH、木马;应用安全扫描也是同样的道理,若是有明确的安全指标或者安全规则范围,那么就选择之。这些可能来源于企业的规范,来源于政府的法律法规。就要根据你的理解,在这里选择。
在实际工做中,咱们也很难在最开始的阶段,就把扫描规范制定下来,按照项目经理们的口头禅“渐进明细”,“滚动式规划”,在实践中,更多时候也是摸着石头过河,选择了一个扫描策略,而后根据结果分析,看是否须要调整,不断优化。好比选择默认的“缺省值”扫描策略,对网站进行扫描,发现其“敏感信息”里面会去检查页面上是否含有 Email 地址,是否含有信用卡号码等,若是咱们以为这些信息,显示在页面上是正常的业务须要(好比这样的连接:<a href="mailto:admin@www.test.com">有问题请联系 admin@www.test.com</a>),咱们就能够取消掉这些规则,因此扫描规则也很大程度上影响着咱们的扫描效率。
网站采用多种混合的技术,须要不一样的扫描设置
一些大型网站,每每是一个统一的入口,在里面提供不一样的内容,而这些内容可能来源于不一样的技术。如咱们熟悉的门户网站,里面就有“财经”、“体育”、“娱乐”等多个频道;每一个频道的内容,多是采用不一样的技术,对应不一样的服务器。如一个网站的“论坛”频道,就有不少相似的页面:
http://www.Test.com/bbs/showthread.php?id=1 Http://www.Test.com/bbs/showthread.php?id=2 Http://www.Test.com/bbs/showthread.php?id=3
这里的 showthread.php 页面存在屡次,每次都是参数值不一样,访问后发现这些页面除了文本内容外,其余的页面结构等都相同,则这些页面只须要选择几个典型的扫描便可,没有必要所有扫描。
而同时,在另外的一些频道,存在另外类型的页面:
http://www.Test.com/default.aspx?content=inside_community.htm http://www.Test.com/default.aspx?content=inside_press.htm http://www.Test.com/default.aspx?content=inside_executives.htm
这些动态页面,也是网址相同,参数相同,可是具备不一样的参数值,访问时候发现每种类型的参数值都指向了彻底不一样的页面,则须要每种参数值都要测试到。这种状况常常存在跳转页面中。
而这两个频道中,第一种状况,能够选择典型的页面扫描之,而第二种状况则须要进行彻底的扫描,每种参数值都须要考虑到。这就须要不一样的扫描设置。
同时,可能你们也注意到了,第一种状况下的是 php 页面,而第二种状况下的则是 aspx 页面,对应不一样的开发技术,这也可能须要不一样的扫描设置。
因此,总结下,AppScan 的扫描受到以下因素的影响:
- 网站规模(页面个数,页面参数)
- 扫描策略的选择
- 扫描设置
而对于大型的网站,咱们常常须要从几个方面来优化配置
- 选择合适的,最小化的扫描规则
- 分解扫描任务,把一个大的扫描任务分解为多个小的扫描任务
- 根据页面特色,设置能够过滤的相似页面(冗余页面)
参考博主:https://www.cnblogs.com/mawenqiangios/p/8573525.html网站