背景
近期项目交付到客户时,暴露了一些非常基础的安全问题。虽然公司已有相应的 WEB/APP 安全测试人员和方案,但毕竟资源有限,无法覆盖所有的项目。针对这个情况,将 Appscan,AWVS 之类的 WEB 应用扫描工具集成到了 jenkins 上面,方便项目使用,及早的发现和解决一些基础的安全问题。
实施
之前使用 Appscan 和 AWVS,知道两个工具都可以通过非 GUI 方式进行使用的,所以实际实现无非是将对应的 command 整理,建立 jenkins slave 远程调用执行加而已。
AppScan Standard CLI 命令 AppScanCMD.exe 存在于 AppScan 的安装根目录中。打开 DOS 命令窗口,即可以执行 AppScan Standard 的 CLI 命令。
命令调用比较简单,主要包括三个部分:CLI 命令 + CLI 子命令 + 子命令参数。ACLI 命令包括三个子命令:Exec,Report,Help。
Exec 命令会使用指定的起始 URL 创建新扫描,运行和保存此扫描。同时还可以使用它来生成和保存扫描的报告。如果没有指定 CLI 子命令,缺省模式下将会运行 exec 命令。
/starting_url 设置扫描的起始 URL。起始 URL 也可以在 /base_scan 或者 /scan_template 中指定。starting_url 参数会覆盖前两者参数中的起始 URL。
/base_scan 设置源扫描文件(必须包含完整路径),新建扫描文件将使用该源扫描文件中的扫描配置。
/dest_scan 设置新扫描文件的保存位置(必须包含完整路径)。此参数若未设置的话,AppScanCMD 会把新扫描文件保存到 Temp 文件夹,并提示新扫描文件的完整路径。
/scan_template 设置扫描模板文件,新建扫描文件将使用该模板文件中的扫描配置。
/old_host
/new_host /old_host 跟 /new_host 配合使用,新扫描文件将会用 new_host 来替换扫描中所有的 old_host 路径。这个参数非常有利于脚本重用,譬如 FVT 阶段的 AppScan 脚本即可通过这种方式重用到 UAT 环境中。
/login_file 指定新扫描文件需导入的登录序列。
/multi_step_file 指定新扫描文件需导入的多步骤文件
/manual_explore_file 指定新扫描文件需导入的手工探索文件。
/policy_file 指定新扫描文件所使用的测试策略文件。
/additional_domains 指定新扫描文件在扫描中包含的、除起始 URL 之外的域。如果有多个域,建议用分号将它们分隔。
/report_file 设定新扫描文件需生成的报告名称和路径(必须包括完整路径)。
/report_type 设定报告格式。支持 <xml|pdf|rtf|txt|html|rc_ase> 六种报告格式,缺省值为 XML。rc_ase 指的是 AppScan Enterprise 报告,使用时需保证设置好 AppScan Enterprise 的连接参数。
/min_severity 指定要在报告中包含的最低结果严重性(仅适用于非 XML 报告),支持四种严重性 <low|medium|high|informational>,缺省值为 low。
/test_type 指定要在报告中包含哪些类型的测试,支持四大类型 <All|Application|Infrastructure|ThirdParty>,缺省值为 All。
/verbose 包含此标志,则在输出中包含进度行。
/scan_log 包含此标志,则在扫描时显示扫描日志。
/explore_only 包含此标志,则仅运行"探索"阶段。
/test_only 包含此标志,则仅运行"测试"阶段。
/multi-step 包含此标志,则仅测试多步骤操作。
/continue 包含此标志,则继续扫描 base_scan 文件。
>> USAGE: wvs_console /Scan [URL] OR /Crawl [URL] OR /ScanFromCrawl [FILE]
OR /ScanWSDL [WSDL URL]
>> PARAMETERS //参数
/Scan [URL] : Scan specified URL //扫描特定的URL
/Crawl [URL] : Crawl specified URL //检索指定的url
/ScanFromCrawl [FILE] : Scan from crawling results //扫描检索的结果
/ScanWSDL [WSDL URL] : Scan web services from WSDL URL //扫描来自wsdl的参数URL
/Profile [PROFILE_NAME] : Use specified scanning profile during scanning //使用指定的扫描配置进行扫描
/Settings [FILE] : Use specified settings template during scanning //使用指定的设置模板进行扫描
/LoginSeq [FILE] : Use specified login sequence //使用指定的登录序列
/Import [FILE(s)] : Import files during crawl //导入检索的地址进行爬行
/Run [command line] : Run this command during crawl //
/Selenium [FILE] : Execute selenium script during crawl //执行selenium脚本进行爬行
/Save : Save scan results //保存结果
/SaveFolder [DIR] : Specify the folder were all the saved data will be stored //保存记录的目录
/GenerateZIP : Compress all the saved data into a zip file //对所有的数据进行zip压缩
/ExportXML : Exports results as XML //将结果以XML方式导出
/ExportAVDL : Exports results as AVDL //将结果以AVDL方式导出
/SavetoDatabase : Save alerts to the database //把警告数据保存进数据库
/SaveLogs : Save scan logs //保存扫描日志
/SaveCrawlerData : Save crawler data (.CWL file) //保存检索(爬行)数据
/GenerateReport : Generate a report after the scan was completed //扫描完成后生成报告
/ReportFormat [FORMAT] : Generated report format (REP, PDF, RTF, HTML) //生成报告的格式
/ReportTemplate [TEMPLATE]: Specify the report template //特定的报告模板
/Timestamps : Print current timestamp with each line. //打印每行的时间戳
/SendEmail : Send email notification when scan is completed, using scheduler settings. //扫描结束后发送电子邮件
/EmailAddress [EMAIL] : Send email notification to this email address, override scheduler settings. //邮件地址会把之前设置的给覆盖掉
/Verbose : Enable verbose mode //开启细节模式。也就是发送的具体参数
/Password : Application password (if required) //如果有需要写入密码
/? : Show this help screen //没得说,帮助
>> OPTIONS [ ? = TRUE or FALSE ] //选项 =true 或者是=false
--GetFirstOnly=? : Get only the first URL //仅仅获取第一个url
--RestrictToBaseFolder=? : Do not fetch anything above start folder //不扫描当前目录以上的其他目录(扫描二级目录有效)
--FetchSubdirs=? : Fetch files bellow base folder //
--ForceFetchDirindex=? : Fetch directory indexes even if not linked //扫描目录,即使该目录不再链接里面(就是目录匹配)
--RobotsTxt=? : Retrieve and process robots.txt //从robots.txt里面获取目录进行爬行
--CaseInsensitivePaths=? : Use case insensitive paths //
--UseWebKit=? : Use WebKit based browser for discovery //使用基于WebKit的浏览器
--ScanningMode=* : Scanning mode (* = Quick, Heuristic, Extensive) //扫描模式(快速、启发式、广泛的)
--ManipHTTPHeaders=? : Manipulate HTTP headers //http头可以修改(个人暂时理解为可以修改http头进行提交)
--UseAcuSensor=? : Use AcuSensor technology //使用AcuSensor 技术(不明所以)
--EnablePortScanning=? : Enable port scanning //启用端口扫描
--UseSensorDataFromCrawl=*: Use sensor data from crawl(* = Yes, No, Revalidate) //抓取fuzz提交的数据( = 是,否,重新验证)
--HtmlAuthUser=? : Username for HTML based authentication //基于HTTP认证的用户名
--HtmlAuthPass=? : Password for HTML based authentication //基于HTTP认证的密码
--ToolTimeout=? : Timeout for testing tool in seconds //设置提交的超时时间
>> EXAMPLES
wvs_console /Scan http://testphp.vulnweb.com /SaveFolder c:\temp\scanResults\ /Save
wvs_console /ScanWSDL http://test/WS.asmx?WSDL /Profile ws_default /Save
wvs_console /Scan http://testphp.vulnweb.com /Profile default /Save --UseWebKit=false --ScanningMode=Heuristic]]
--ToolTimeout=? : Timeout for testing tool in seconds
>> EXAMPLES
wvs_console /Scan http://testphp.vulnweb.com /SaveFolder c:\temp\scanResults\ /Save
wvs_console /ScanWSDL http://test/WS.asmx?WSDL /Profile ws_default /Save
wvs_console /Scan http://testphp.vulnweb.com /Profile default /Save --UseWebKit=false --ScanningMode=Heuristic
生成 Appscan,AWVS 执行命令
- AWVS
```shell
wvs_console.exe /Scan %URl% /Profile %Profile% --GetFirstOnly=false /save /SaveFolder %WORKSPACE%\Saves /savetodatabase /GenerateReport /ReportFormat PDF --FetchSubdirs=true --RestrictToBaseFolder=true --ForceFetchDirindex=true --SubmitForms=true --RobotsTxt=true --CaseInsensitivePaths=false --UseCSA=true --UseAcuSensor=true --EnablePortScanning=false --UseSensorDataFromCrawl=revalidate --ScanningMode=%ScanningMode%--TestWebAppsOnAllDirs=false --ManipHTTPHeaders=true
使用界面
将相应的参数配置为执行可配置,使用界面 DEMO 如下
邮件接收扫描报告
其他
工具可配置生成 Html 报告,可通过 jenkins 插件直接进行展示。
知道了相应命令,你也可以关联 ANT,maven 进行集成。
WEB 安全 CI 可以集成很多工具来搞,稍后我丢个图上来。