appscan 对api的手工检测

AppScan 在 API 安全测试中的实例介绍

在本项目中,API 遵循标准的的 REST 架构和背端服务器进行通信。针对 API 的功能测试由两部分组成:一部分是用一个 Web 的测试页面直接实现的,另一部分,由于 Web 页面的局限性(比如不能任意修改 HTTP header),所以是通过 Shell 脚本调用 curl 实现的。 并且这个 API 的测试环境没有固定的域名和 IP 地址。针对 Web 应用的安全测试采用 AppScan Standard。项目实施过程中面临这样几个问题:

  • 针对 Web 页面的非 REST API 测试,AppScan Standard 可以很好的胜任工作,但对于 API 部分,由于浏览器下的页面的 HTTP 请求的局限性,API 测试页面本身的对 API 的覆盖率就不够。所以通过 AppScan 扫描调用 API 的页面,也难以保证覆盖率。
  • 系统没有固定的域名或 IP 地址, 导致每次要重新录制和创建测试任务。一个扫描后的 scan 文件内 Starting URL 也是一个只读属性如图 1 所示。

图 1 .导出 Starting URL

在开始介绍解决方法之前,先介绍一下 AppScan 的录制文件。用户通过普通的 Web 程序进行 AppScan 的测试,可以通过 Manual Explorer 录制收集信息。 这样会生成一个 manualExplore_1.exd 的文件在 AppScan 的扫描文件.scan 压缩包里,scan 文件是通过 Deflate 压缩打包的,所以您可以使用一个解压工具查看 scan 文件里的结构和文件。在这里用户可以通过点击菜单栏中的 File-> Export -> Recorded Manual Explore 可以把 manualExplore_1.exd 文件导出,如图 2 所示。

图 2 .导出 manualExplore_1.exd 文件

而当需要时可以通过重新导入这个文件,将之前录制的信息重新导入一个新的 scan 任务。而当测试者要测试某个同样的 Web 实例时,当实例的域名或 IP 各不相同,并且测试者已经对其中一个进行了录制,这样就可以通过简单修改这个 exd 文件然后分别 import 到不同的测试实例中。

这个文件本身是一个 XML 文件,这个文件大体结构,如清单 1。

清单 1 .exd 文件结构

<?xml version="1.0" encoding="utf-16"?>
<!--Automatically created by AppScan at 1/16/2014 11:20:26 AM-->
<!--Do NOT Edit!-->
<requests>
  <request>
  ...
  </request>
  ...
</requests>
<!--Number of Requests in file = 100-->

从注释中我们也可以看出,这个文件是 AppScan 自动产生的文件,因此修改时要特别注意,因为错误的修改可能使 AppScan 会无法识别录制的 HTTP 请求,或者错误的识别 HTTP 的请求。最后一行的注释表明里这里记录了多少个 HTTP 的请求。

这些请求会都放在<requests>里,一个 request 的录制信息结构,如清单 2。

清单 2 .request 的录制结构

<request scheme="https" host="www.ibm.com" path="/" port="443"
	 method="GET" SessionRequestType="Login" ordinal="15">
	<raw encoding="none">
	</raw>
	<cookie name="JSESSIONID" value="XXX" path="/" domain="www.ibm.com"
secure="False" expires="1/1/0001 12:00:00 AM" />
	<parameter name="XXX" captureIndex="0" value="" type="QUERY" linkParamType="simplelink"
separator="&" operator="=" reportName="XXX" />
	<sessionCookies>
	  <cookie name="JSESSIONID" value="XXX path="/" domain="www.ibm.com" secure="False"
expires="1/1/0001 12:00:00 AM" />
	</sessionCookies>
  </request>

其中<raw>部分是原始的请求数据,包括 HTTP Header 和 body 部分的全部数据。 而其他的是从这个原始数据中结构化出来的一些数据,熟悉的 HTTP 的应该对这个结构化的数据并不陌生。比如 scheme 是请求的协议,session 是 HTTP header 里的 session 部分,parameter 是 URL 里的参数。在这里 ordinal 是对 request 在这个录制文件内的一个计数。

熟悉了文件的结构我们就可以对其进行修改或添加自己的 HTTP 录制的信息。来提高测试的覆盖率。

下面介绍一下如何解决前面提到的两个问题。

针对问题一,这里举一个简单的例子:现有一个针对数据库查询的请求,有两个参数分别是 parm1 和 parm2,并且已经有对这个 API 的扫描的 exd 文件如下:

清单 3 .已有的录制信息

<request scheme="https" host="www.site1.com" path="/test/API1" port="443"
 method="POST" SessionRequestType="Login" ordinal="146">
	 <raw encoding="none">POST /test/API1 HTTP/1.1
Host: www.site1.com
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:17.0) Gecko/20100101 Firefox/17.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.7,ja;q=0.3
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
X-Requested-With: XMLHttpRequest
Referer: https://www.site1.com/
Content-Length: 83
Cookie: JSESSIONID=0000F7u3iiCtkF0SIR4G9viBIQr:156f4da9-0cc6-4460-9ac9-f791e0aac903
Pragma: no-cache
Cache-Control: no-cache

parm1=test1&parm2=test2</raw>
	 <cookie name="JSESSIONID" value="0000F7u3iiCtkF0SIR4G9viBIQr:156f4da9-0cc6-4460-9ac9-f791e0aac903"
path="/" domain="www.site1.com" secure="False" expires="1/1/0001 12:00:00 AM" />
	 <parameter name="parm1" captureIndex="0" value="test1" type="BODY" linkParamType="simplelink"
separator="&" operator="=" reportName="parm1" />
	 <parameter name="parm2" captureIndex="0" value="test2" type="BODY" linkParamType="simplelink"
separator="&" operator="=" reportName="parm2" />
	 <sessionCookies>
		<cookie name="JSESSIONID" value="0000F7u3iiCtkF0SIR4G9viBIQr:156f4da9-0cc6-4460-9ac9-f791e0aac903"
 path="/" domain="www.site1.com" secure="False" expires="1/1/0001 12:00:00 AM" />
	 </sessionCookies>
  </request>

现在由于接口的更改,其中一个参数的 name 由原来的 parm1 改为新的 newparm。如果按照常规的流程,我们还需要对整个结构的测试页面进行扫描。而其实我们只用改掉文档里相应的部分,将原来的 exd 的参数部分改成如清单 4。

清单 4 .修改后的 exd 文件

<request scheme="https" host="www.site1.com" path="/test/API1" port="443" method="POST"
SessionRequestType="Login" ordinal="146">
	<raw encoding="none">POST /test/API1 HTTP/1.1
...
Content-Length: 23

newparm=test1&parm2=test2</raw>
	...
	<parameter name="newparm" captureIndex="0" value="test1" type="BODY" linkParamType="simplelink"
separator="&" operator="=" reportName="newparm" />
	...
  </request>

针对第二个问题,使用上面提到的方法,将 exd 文件导出,并修改补充后存档备份。当有新的不同域名或 IP 的任务时,可以通过新建 scan 任务,完成任务配置后,复制一份已经存档的 exd 文件,将文件里所有的域名或 IP 替换成新的域名或 IP 并保存,然后再新建的 scan 文件内导入这个录制文件就可以了。

通过上面的方法,项目的问题很好的得到了解决,即保证了测试覆盖率,又确保了测试灵活性。

回页首

总结

随着 API 的广泛应用,API 安全测试变得越来越重要,本文介绍的 AppScan Standard 在 API 安全测试中的应用方法,是一个简单而有效的方法,可以很好的提高 API 安全测试效率,提高测试覆盖率。

时间: 2024-10-16 08:17:23

appscan 对api的手工检测的相关文章

移动视频技术——新增API可手工修正视频方向

由于Android的开放性,不同的设备存在一些差异,某些设备所采集的视频数据显示出来在方向上存在一定的误差,这通常与硬件设备的驱动相关,新增加的API接口便是在远程显示时,可以支持手工来修正远程视频的方向. 增加的API接口参数定义(以AnyChat for Web SDK为例): // 远程视频方向修正标志定义 var BRAC_ROTATION_FLAGS_MIRRORED       =        0x1000;        // 图像需要镜像翻转 var BRAC_ROTATION

第三十一节,使用谷歌Object Detection API进行目标检测

Object Detection API是谷歌开放的一个内部使用的物体识别系统.2016年 10月,该系统在COCO识别挑战中名列第一.它支持当前最佳的实物检测模型,能够在单个图像中定位和识别多个对象.该系统不仅用于谷歌于自身的产品和服务,还被推广至整个研究社区. 一.代码位置与内置的模型 1.Object Detection Object Detection模块的位置与slim的位置相近,同在github.com 中TensorFlow 的models\research目录下.类似slim,

微软Face API体验——人脸检测

微软推出了全新REST API,现在可免费获取密钥,大家可以赶快申请!申请地址:https://cn.projectoxford.ai/subscription 看了网站的API介绍,忍不住赶快体验一把. 写一个简单的console程序: public static void test() { try { HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://api.projectoxford.ai/face/v0

【Demo 1】基于object_detection API的行人检测 3:模型训练与测试

训练准备 模型选择 选择ssd_mobilenet_v2_coco模型,下载地址(https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/detection_model_zoo.md),解压到./Pedestrian_Detection/ssd_mobilenet_v2_coco_2018_03_29. 修改object_detection配置文件 进入目录./Pedestrian_Dete

40多个关于人脸检测/识别的API、库和软件

40多个关于人脸检测/识别的API.库和软件 http://blog.csdn.net/shaoxiaohu1/article/details/10067269 40多个关于人脸检测/识别的API.库和软件 标签: 人脸检测人脸识别api库 2013-08-19 13:13 1023人阅读 评论(0) 收藏 举报  分类: 图像与OpenCV(15)  自从谷歌眼镜被推出以来,围绕人脸识别,出现了很多争议.我们相信,不管是不是通过智能眼镜,人脸识别将在人与人交往甚至人与物交互中开辟无数种可能性.

[转]40多个关于人脸检测/识别的API、库和软件

http://news.cnblogs.com/n/185616/ 英文原文:List of 40+ Face Detection / Recognition APIs, libraries, and software 译者:@吕抒真 译文:链接 自从谷歌眼镜被推出以来,围绕人脸识别,出现了很多争议.我们相信,不管是不是通过智能眼镜,人脸识别将在人与人交往甚至人与物交互中开辟无数种可能性. 为了帮助研究过程中探索人脸识别,我们列出以下人脸检测和识别 API.希望有所帮助! Face Recogn

第三十四节,目标检测之谷歌Object Detection API源码解析

我们在第三十二节,使用谷歌Object Detection API进行目标检测.训练新的模型(使用VOC 2012数据集)那一节我们介绍了如何使用谷歌Object Detection API进行目标检测,以及如何使用谷歌提供的目标检测模型训练自己的数据.在训练自己的数据集时,主要包括以下几步: 制作自己的数据集,注意这里数据集在进行标注时,需要按照一定的格式.然后调object_detection\dataset_tools下对应的脚本生成tfrecord文件.如下图,如果我们想调用create

HTML5 程序设计 - 使用HTML5 Canvas API

请你跟着本篇示例代码实现每个示例,30分钟后,你会高喊:“HTML5 Canvas?!在哥面前,那都不是事儿!” 呵呵.不要被滚动条吓到,很多都是代码和图片.我没有分开写,不过上面给大家提供了目录,方便查看. 学习笔记,纯手工码字,有错别字什么的请指出,觉得好的请点个赞小小的支持下.谢谢亲们. 本篇,我们将探索如何使用HTML5和Canvas API.Canvas API很酷,可以通过它来动态生成和展示图形.图表.图像以及动画. 本篇将使用渲染API(Rendering API)的基本功能来创建

JavaScript 常见安全漏洞及自动化检测技术

序言 随着 Web2.0 的发展以及 Ajax 框架的普及,富客户端 Web 应用(Rich Internet Applications,RIA)日益增多,越来越多的逻辑已经开始从服务器端转移至客户端,这些逻辑通常都是使用 JavaScript 语言所编写.但遗憾的是,目前开发人员普遍不太关注 JavaScript 代码的安全性.据 IBM X-Force 2011 年中期趋势报告揭示,世界五百强的网站及常见知名网站中有 40% 存在 JavaScript 安全漏洞.本文将结合代码向读者展示常见