You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无Azure Marketplace插件时,如何集成Burp Suite Enterprise到Azure DevOps CI/CD?

将Burp Suite Enterprise Edition集成至Azure DevOps CI/CD的无插件流程

当Azure Marketplace无官方插件可用时,可通过Burp Suite Enterprise的REST API手动完成集成,以下是具体落地流程:

一、前期准备

  • 持有Burp Suite Enterprise实例的API访问密钥(在Burp控制台用户设置页生成)
  • 提前在Burp Enterprise中创建目标站点(获取对应site_id)和扫描模板(获取scan_template_id)
  • 拥有Azure DevOps项目的Pipeline编辑权限与变量组创建权限
  • 确保Azure DevOps代理(托管/自托管)可访问Burp Enterprise的API端点,且代理已安装curl和jq工具(用于API调用与JSON解析)

二、配置敏感变量

在Azure DevOps项目中创建变量组,存储以下保密变量(设置为「保密」状态避免明文泄露):

  • BURP_API_KEY:Burp Enterprise的API密钥
  • BURP_ENTERPRISE_URL:Burp Enterprise实例的基础URL(示例:https://your-burp-instance.com)
  • BURP_SITE_ID:目标站点的ID
  • BURP_SCAN_TEMPLATE_ID:预定义扫描模板的ID

三、编写CI/CD Pipeline YAML脚本

在Azure DevOps中创建或编辑Pipeline YAML,添加以下核心阶段:

3.1 启动Burp扫描

添加脚本任务调用Burp API启动扫描,并记录扫描ID:

# 构造扫描请求JSON
SCAN_REQUEST=$(cat <<EOF
{
  "site_id": "$(BURP_SITE_ID)",
  "scan_template_id": "$(BURP_SCAN_TEMPLATE_ID)",
  "name": "CI扫描_$(Build.BuildNumber)",
  "schedule": {"start_time": "NOW"}
}
EOF
)

# 调用API启动扫描
SCAN_RESPONSE=$(curl -s -X POST "$(BURP_ENTERPRISE_URL)/api/v1/scans" \
  -H "Authorization: $(BURP_API_KEY)" \
  -H "Content-Type: application/json" \
  -d "$SCAN_REQUEST")

# 提取扫描ID并设置为Pipeline全局变量
SCAN_ID=$(echo "$SCAN_RESPONSE" | jq -r '.id')
echo "##vso[task.setvariable variable=SCAN_ID]$SCAN_ID"
echo "已启动扫描,扫描ID: $SCAN_ID"

3.2 轮询扫描状态

添加循环脚本等待扫描完成,超时则终止Pipeline:

MAX_RETRIES=60  # 最大轮询次数(30秒/次,合计30分钟)
RETRY_COUNT=0

while [ $RETRY_COUNT -lt $MAX_RETRIES ]; do
  # 获取当前扫描状态
  SCAN_STATUS=$(curl -s -X GET "$(BURP_ENTERPRISE_URL)/api/v1/scans/${SCAN_ID}" \
    -H "Authorization: $(BURP_API_KEY)" | jq -r '.status')
  
  echo "扫描状态: $SCAN_STATUS (轮询次数: $((RETRY_COUNT+1))/$MAX_RETRIES)"
  
  case $SCAN_STATUS in
    "COMPLETED")
      echo "扫描完成"
      break
      ;;
    "FAILED")
      echo "扫描执行失败,终止Pipeline"
      exit 1
      ;;
    *)
      RETRY_COUNT=$((RETRY_COUNT+1))
      sleep 30
      ;;
  esac
done

# 超时处理逻辑
if [ $RETRY_COUNT -eq $MAX_RETRIES ]; then
  echo "扫描超时未完成,终止Pipeline"
  exit 1
fi

3.3 处理扫描结果

扫描完成后,下载报告并根据漏洞情况控制构建结果:

# 下载HTML格式扫描报告
curl -s -X GET "$(BURP_ENTERPRISE_URL)/api/v1/scans/${SCAN_ID}/reports/html" \
  -H "Authorization: $(BURP_API_KEY)" \
  -o burp-scan-report.html

# 上传报告至Azure DevOps构建附件
echo "##vso[artifact.upload containerfolder=Burp扫描报告;artifactname=CI扫描报告]$PWD/burp-scan-report.html"

# 统计高危漏洞数量,超过阈值则标记构建失败
HIGH_VULN_COUNT=$(curl -s -X GET "$(BURP_ENTERPRISE_URL)/api/v1/scans/${SCAN_ID}/vulnerabilities" \
  -H "Authorization: $(BURP_API_KEY)" | jq '[.[] | select(.severity == "HIGH")] | length')

echo "发现高危漏洞数量: $HIGH_VULN_COUNT"
if [ "$HIGH_VULN_COUNT" -gt 0 ]; then
  echo "存在高危漏洞,构建失败"
  exit 1
fi

四、异常处理与优化建议

  • 超时控制:通过MAX_RETRIES参数限制轮询时长,避免Pipeline无限挂起
  • 错误捕获:在curl命令中添加-f参数,API调用失败时直接返回非零退出码
  • 复用性:将Burp API调用逻辑封装为Azure DevOps自定义任务,方便多Pipeline复用
  • 漏洞联动:调用Azure DevOps API,将高危漏洞自动创建为Bug类型的Work Item
  • 通知机制:添加邮件或Teams通知任务,扫描完成后发送报告链接

内容的提问来源于stack exchange,提问作者rajasuryars

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 08:15:40