Burp Suite · 2026-01-29

Jenkins로 Burp 자동 스캐닝 연동하기

Jenkins와 Burp를 연결해 CI/CD 파이프라인에서 자동 취약점 스캔을 실행하고 결과를 집계·통보하는 구성과 운영 고려사항을 정리한 보안검증

작성일 : 2026-01-29 ㆍ 작성자 : 관리자
post
목차

개요

CI/CD 파이프라인에 취약점 스캐너를 통합하면 배포 전 보안 리스크를 조기에 발견할 수 있다. 이 글은 Burp를 Jenkins와 연동해 자동 스캔을 구성하는 전체 흐름을 설명한다. 초보자도 이해할 수 있게 단계별로 정리하고, 실제 운영에서 유용한 설정과 주의사항을 함께 다룬다.

사전 준비

필수 요소

  • Jenkins(권장 LTS) 설치 및 관리자 권한
  • Burp Suite Enterprise 또는 자동화 가능한 Burp 인스턴스
  • 스캔 대상 애플리케이션에 대한 승인
  • 네트워크 접근 허용(스캐너와 대상 간 통신)
  • API 토큰 또는 인증 정보(환경변수로 관리)

권장 플러그인과 도구

  • Pipeline 플러그인
  • Credentials 플러그인(토큰/비밀 관리)
  • Webhook/Email Notification 플러그인

아키텍처와 흐름

기본 흐름은 다음과 같다. 코드 변경 또는 배포 트리거 발생 → Jenkins가 파이프라인 실행 → 빌드 완료 후 Burp 스캔 요청 → 스캔 완료 확인 및 리포트 수집 → 결과에 따른 알림·정책 적용. 이 과정을 통해 빌드마다 자동으로 취약점 검사를 수행할 수 있다.

Jenkins 파이프라인 구성 단계

1. 자격증명 등록

Jenkins Credentials에 Burp API 토큰과 필요 시 스캔 대상 접근 계정 등록. 환경변수로 불러와 스크립트에서 사용한다.

2. 스캔 트리거 스크립트 작성

Burp Enterprise API나 자동화 가능한 CLI를 호출하는 스크립트를 준비한다. 스크립트는 스캔 생성, 상태 폴링, 결과 다운로드를 포함한다.

3. 파이프라인에 통합

Jenkinsfile에서 빌드 후 단계에 스캔 단계를 추가한다. 스캔이 실패(심각도 임계치 초과)하면 파이프라인을 실패로 처리해 배포 차단이 가능하다.

샘플 Jenkinsfile

pipeline {
  agent any
  environment {
    BURP_API_URL = 'https://burp-enterprise.example/api'
    BURP_TOKEN = credentials('burp-api-token')
    TARGET_URL = 'https://staging.example.com'
  }
  stages {
    stage('Build') {
      steps {
        sh 'echo Building...'
      }
    }
    stage('Run Burp Scan') {
      steps {
        sh './scripts/run_burp_scan.sh "$BURP_API_URL" "$BURP_TOKEN" "$TARGET_URL"'
      }
    }
    stage('Post Process') {
      steps {
        sh 'echo Collecting and evaluating scan results...'
      }
    }
  }
}

샘플 스캔 스크립트(run_burp_scan.sh)

#!/bin/bash
API_URL="$1"
TOKEN="$2"
TARGET="$3"

# 스캔 생성(예시)
CREATE_RESP=$(curl -s -X POST "$API_URL/scans" -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" -d '{"target":"'$TARGET'"}')
SCAN_ID=$(echo "$CREATE_RESP" | jq -r '.id')

# 상태 폴링
STATUS=""
while [ "$STATUS" != "completed" ]; do
  sleep 10
  STATUS=$(curl -s -X GET "$API_URL/scans/$SCAN_ID/status" -H "Authorization: Bearer $TOKEN" | jq -r '.status')
  echo "Scan status: $STATUS"
  if [ "$STATUS" = "failed" ]; then
    echo "Scan failed"
    exit 1
  fi
done

# 보고서 다운로드
curl -s -X GET "$API_URL/scans/$SCAN_ID/report" -H "Authorization: Bearer $TOKEN" -o "burp_report_$SCAN_ID.json"

# 간단한 임계치 검사(예: 심각도 개수)
SEVERE_COUNT=$(jq '.issues | map(select(.severity=="high" or .severity=="critical")) | length' "burp_report_$SCAN_ID.json")
if [ "$SEVERE_COUNT" -gt 0 ]; then
  echo "High severity issues found: $SEVERE_COUNT"
  exit 2
fi

exit 0

결과 분석 및 알림

스캔 결과는 JSON이나 HTML로 받아 파싱한다. Jenkins에서 성공/실패 상태를 전달하고, 심각도별 알림 정책을 설정한다. 예를 들어 심각도 높은 이슈가 발견되면 이메일과 슬랙으로 알리고, 낮은 이슈는 이슈 트래커에 자동 등록한다.

운영 시 고려사항

  • 스캔 빈도 조절: 빌드마다 전체 스캔은 비용과 시간 소모가 크므로 단계별(풀 스캔/증분 스캔)로 나눔
  • 테스트 환경 분리: 실서비스에 영향을 주지 않도록 스캔 대상 환경 분리
  • 자격증명 관리: 토큰은 Jenkins Credentials로 안전하게 저장
  • 로그 보존: 스캔 로그와 리포트를 중앙에 보관해 추적성 확보
  • 정책화: 스캔 결과에 따른 릴리즈 정책을 명확히 정의

베스트 프랙티스

  • 스캔 결과를 개발자에게 친절한 형식으로 제공해 수정 우선순위 결정에 도움
  • 자동화는 반복 가능한 검증을 위해 사용하고, 주기적 수동 검토 병행
  • Burp CI/CD 통합 시 성능과 비용을 고려해 파이프라인 설계

마무리

Jenkins Burp 스캔 자동화는 DevSecOps 실천에 핵심 요소다. Burp 스캔 파이프라인 구성은 초기 설정이 필요하지만, 일단 통합되면 배포 전에 취약점을 발견해 위험을 줄일 수 있다. 본문에 제시한 예제와 절차를 기반으로 환경에 맞게 조정하면 현실적인 자동화 체계를 구축할 수 있다.

Burp CI/CD 통합 Jenkins Burp 스캔 자동화 Burp 스캔 파이프라인 구성 취약점 스캐닝 자동화 CI/CD 보안 Burp Jenkins 연동 보안테스트 파이프라인 DevSecOps