您还未登录! 登录 | 注册 | 帮助  

您的位置: 首页 > 软件测试技术 > 功能测试 > 正文

黑盒自动化WEB安全测试的实施

发表于:2017-01-09 作者:网络转载 来源:

  1.什么是安全测试(What)?
  安全测试就是要提供证据表明,在面对敌意和恶意输入的时候,应用仍然能够充分的满足它的需求。
  a.如何提供证据? 我们通过一组失败的安全测试用例执行结果来证明web应用不满足安全需求。
  b.如何看待安全测试的需求?与功能测试相比,安全测试更加依赖于需求,因为它有更多可能的输入和输出可供筛选。
  真正的软件安全其实际上指的是风险管理,即我们确保软件的安全程度满足业务需要即可。
  2. 如何开展(How to do)?
  基于常见攻击和漏洞并结合实际添加安全测试用例,就是如何将安全测试变为日常功能测试中简单和普通的一部分的方法。
  选择具有安全意义的特殊边界值,以及具有安全意义的特殊等价类,并将这些融入到我们的测试规划和测试策略过程中。
  但是若在功能测试基础上进行安全测试,则需要增加大量测试用例。这意味着必须做两件事来使其便于管理:
  缩小关注的重点和测试自动化。
  黑盒安全测试自动化的实施:
  使用工具:
  1.wapiti
  a.简介:wapiti:开源安全测试漏洞检测工具(Web application vulnerability scanner / security auditor)
Wapiti allows you to audit the security of your web applications. It performs "black-box" scans,
i.e. it does not study the source code of the application but will scans the web pages of the deployed web applications,
looking for scripts and forms where it can inject data. Once it gets this list, Wapiti acts like a fuzzer,
injecting payloads to see if a script is vulnerable. Wapiti can detect the following vulnerabilities:
File Handling Errors (Local and remote include/require, fopen, ...)
Database Injection (PHP/JSP/ASP SQL Injections and XPath Injections)
XSS (Cross Site Scripting) Injection
LDAP Injection
Command Execution detection (eval(), system(), passtru()...)
CRLF Injection (HTTP Response Splitting, session fixation...)
  ---------------------------------------------------------------------------------------
  功能和特点:
  文件处理错误(本地和远程打开文件,readfile ... )
  数据库注入(PHP/JSP/ASP,SQL和XPath注入)
  XSS(跨站点脚本)注入
  LDAP注入
  命令执行检测(eval(), system(), passtru()...)
  CRLF注射入(HTTP响应,session固定... )
  ----------------
  统计漏洞数量
  成功袭击的细节
  漏洞详细信息
  提供解决漏洞的方法
  HTML报告格式
  XML报告格式

  b.使用:wapiti使用比较简单,官网上给出的命令行及参数如下:
Usage
Wapiti-2.2.1 - A web application vulnerability scanner
Usage: python wapiti.py http://server.com/base/url/ [options]
Supported options are:
-s
--start
To specify an url to start with
----------
-x
--exclude
To exclude an url from the scan (for example logout scripts)
You can also use a wildcard (*)
Example : -x "http://server/base/?page=*&module=test"
or -x http://server/base/admin/* to exclude a directory
----------
-p
--proxy
To specify a proxy
Exemple: -p http://proxy:port/
----------
-c
--cookie
To use a cookie
----------
-t
--timeout
To fix the timeout (in seconds)
----------
-a
--auth
Set credentials for HTTP authentication
Doesn't work with Python 2.4
----------
-r
--remove
Remove a parameter from URLs
----------
-n
--nice
Define a limit of urls to read with the same pattern
Use this option to prevent endless loops
Must be greater than 0
----------
-m
--module
Set the modules and HTTP methods to use for attacks.
Example: -m "-all,xss:get,exec:post"
----------
-u
--underline
Use color to highlight vulnerables parameters in output
----------
-v
--verbose
Set the verbosity level
0: quiet (default), 1: print each url, 2: print every attack
----------
-f
--reportType
Set the type of the report
xml: Report in XML format
html: Report in HTML format
----------
-o
--output
Set the name of the report file
If the selected report type is "html", this parameter must be a directory
----------
-i
--continue
This parameter indicates Wapiti to continue with the scan from the specified
file, this file should contain data from a previous scan.
The file is optional, if it is not specified, Wapiti takes the default file
from "scans" folder.
----------
-k
--attack
This parameter indicates Wapiti to perform attacks without scanning again the
website and following the data of this file.
The file is optional, if it is not specified, Wapiti takes the default file
from "scans" folder.
----------
-h
--help
To print this usage message
------------------------------------------------------------
  说明:
  将wapiti的执行过程写成shell脚本,由计划任务定时去跑该脚本。然后将wapiti执行结果报告以邮件形式发到测试执行者及项目
  负责人的邮箱(非必要)。具体,在Ubuntu中,使用msmtp(邮件传输代理) + mutt(邮件用户代理) 来实现测试执行报告(邮件)自动
  发送。不使用postfix 、sendmail。msmtp支持TLS/SSL加密传输,比较可靠。而mutt在shell中使用较方便。
  思路:
  脚本AutoTest.sh按行读取文本url,由wapiti执行测试。将结果输出到generated-report.txt文件(执行结果报告)。
  脚本Analysis.sh读取generated-report.txt,wc -l命令统计关键字,得到执行用例数(爬过多少url),用例执行成功数,失败数。
  然后重定向到report.txt,将该report做为邮件的content,发送给项目负责人(非必要)。
  期望的执行结果是该页面没有xss、注入点等等问题。所以,发现该 url 存在xss等则认为用例执行失败,否则用例执行成功。
  发邮件的命令格式:mutt  -s   $主题   guangfu@xxx.com  -a  ~/xxtest/report/generated-report.txt      -s 邮件主题,-a 附件
  (关于mutt,具体上官网:http://www.mutt.org/)。
  扩展:
  根据 wapiti 的判断逻辑,增删测试点。提高测试效率。也就是修改wapiti的脚本,增加、删除测试点。
  另一方面,执行测试脚本需要被测网站的所有url列表。可以自己实现爬虫去动态的抓取,也可以使用工具(用开源的爬虫)。
  OWASP ZAP(Zed Attack Proxy)包含了一个蜘蛛程序,可以满足我们的要求,并且可以将被测站点的所有URL保存为一个文本
  文件。经过简单处理,该文本就可以做为测试脚本的输入。
  cat zap-url-guogf.com.txt  | awk  '{print $2}'  > url-guogf.com   #zap保存的url只有两列
  基本上算是一个半自动化的测试过程,要实现完全自动化,需要构建一个自动化的测试平台。通过平台耦合各个测试模块,最终
  实现测试全流程自动化。
  虽然全流程自动化目前还是一个梦想(目前看起来像一个玩具),但是如果你不去想,那永远也实现不了。先看看人家的自动化
  测试平台怎么设计的,再自己试着动手设计一个。画画功能图,试着写几个接口。
  脚本AutoTest.sh具体如下:
#! /bin/bash
count=1
cat url | while read line
do
echo "------$(date)------" >>generated-report.txt
wapiti $line >>generated-report.txt
echo "execute $count complete"
count=$(($count + 1))
done
exit 0
  3.如何评价(How to audit)?
  黑盒安全测试执行一般是在黑盒功能测试、性能测试完成之后进行。项目的安全建模是在需求分析阶段就加入的,具体流程可参考
  微软的SDL(Security Development Lifecycle)。在日常测试工作中加入黑盒安全自动化测试最易实施,效果可能也最好(考虑成本和安全需求)。
  从流程、组织、技术三方面保证测试质量。评审或是评价安全测试的活动,目前没有资格说。
  测试人员学习、了解安全方面的知识有助于提高测试覆盖率,当然也可以测出更多的BUG。但在系统测试中重点还是功能测试,功能测好了,
  才去考虑性能、安全等方面。
  注:本文关于安全测试方面的知识来源于《WEB安全测试》、《OWASP测试指南v3.0》。