InfoGrab DocsInfoGrab Docs

튜토리얼: 웹 애플리케이션 스캔을 위한 DAST 설정

요약

Dynamic Application Security Testing(DAST)을 CI/CD 파이프라인에 통합하는 방법을 알아봅니다. 정적 분석은 소스 코드에서 취약점을 찾습니다. Tanuki Shop 애플리케이션 설정 이 튜토리얼의 Tanuki Shop 애플리케이션은 인증이 필요하지 않습니다.

Dynamic Application Security Testing(DAST)을 CI/CD 파이프라인에 통합하는 방법을 알아봅니다.

정적 분석은 소스 코드에서 취약점을 찾습니다. DAST는 애플리케이션이 실제 환경에서 실행되고 서비스 및 사용자 워크플로와 상호작용할 때만 나타나는 런타임 보안 이슈를 식별합니다. GitLab에 통합된 DAST 솔루션을 사용하면, 코드를 테스트 환경에 배포할 때마다 GitLab DAST가 이러한 이슈를 자동으로 검사하도록 설정할 수 있습니다.

이 튜토리얼에서 배울 내용:

이 튜토리얼의 Tanuki Shop 애플리케이션은 인증이 필요하지 않습니다. 애플리케이션에 로그인이 필요한 경우, DAST 인증을 참조하세요.

시작하기 전에#

  • GitLab Ultimate 구독.

  • 프로젝트에 대한 Maintainer 권한.

Tanuki Shop 애플리케이션 설정#

먼저 Tanuki Shop을 포크합니다.

Tanuki Shop 리포지터리로 이동합니다.

오른쪽 상단 모서리에서 Fork를 선택합니다.

네임스페이스(개인 또는 그룹)를 선택하고 Fork project를 선택합니다.

포크된 리포지터리에는 애플리케이션 코드와 초기 CI/CD 구성을 포함하여 이 튜토리얼에 필요한 모든 파일이 포함되어 있습니다. 다음 단계에서 구성을 수정합니다.

Settings > General로 이동합니다.

Visibility, project features, permissions를 펼칩니다.

Container registry 토글이 켜져 있는지 확인합니다.

컨테이너 레지스트리가 작동하는지 확인합니다:

Deploy > Container registry로 이동합니다.

  • 빈 레지스트리가 표시되어야 합니다. 오류가 표시되면 프로젝트 권한을 확인하세요.

컨테이너 레지스트리는 파이프라인에서 빌드된 Docker 이미지를 저장합니다. 이 단계가 실패하면 빌드 job이 나중에 실패합니다.

빌드 job 정의#

이제 애플리케이션이 포함된 Docker 이미지를 생성하고 컨테이너 레지스트리에 푸시하는 빌드 job을 구성합니다.

프로젝트에서 .gitlab-ci.yml 파일을 편집합니다.

기존 내용을 다음 CI/CD 구성으로 교체합니다:

stages:
  - build
  - dast

include:
  - template: Security/DAST.gitlab-ci.yml

# Build: Create the Docker image and push to the container registry
build:
  services:
    - name: docker:dind
      alias: dind
  image: docker:20.10.16
  stage: build
  script:
    - docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY
    - docker pull $CI_REGISTRY_IMAGE:latest || true
    - docker build --tag $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA --tag $CI_REGISTRY_IMAGE:latest .
    - docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
    - docker push $CI_REGISTRY_IMAGE:latest

DAST job 정의#

빌드 job 구성이 완료되었으므로 이제 DAST job을 구성합니다.

이 구성은 services 기능을 사용하여 DAST job과 병렬로 애플리케이션 컨테이너를 실행합니다. 애플리케이션은 URL http://yourapp:3000에서 dast job이 접근할 수 있습니다.

DAST job을 구성하려면:

.gitlab-ci.yml 파일 하단에 다음을 추가합니다:

# DAST: Scan the application running in a Docker container
dast:
  services:
    - name: $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
      alias: yourapp
  variables:
    DAST_TARGET_URL: http://yourapp:3000

패시브 스캔 및 액티브 스캔 구성#

DAST는 보안 커버리지와 스캔 시간의 균형을 맞추는 두 가지 스캔 모드를 지원합니다. 패시브 스캔은 빠른 피드백을 제공합니다. 액티브 스캔은 조작된 요청으로 애플리케이션을 테스트할 때만 나타나는 취약점을 발견하며, 코드가 프로덕션에 도달하기 전에 더 철저한 보안 검증을 제공합니다.

패시브 스캔(기본값, 약 2-5분):

  • 잠재적으로 유해한 요청을 보내지 않고 애플리케이션 응답을 분석합니다.

  • HTTP 헤더, 쿠키, 응답 콘텐츠, SSL/TLS 구성을 검사합니다.

  • 어떤 환경에서도 안전하게 실행할 수 있습니다.

  • CI/CD 파이프라인에서 빠른 피드백을 얻기에 적합합니다.

액티브 스캔(애플리케이션 크기에 따라 약 10-30분):

  • 취약점을 트리거하도록 설계된 조작된 요청을 전송합니다.

  • 인젝션 결함, 인증 이슈, 비즈니스 로직 취약점을 테스트합니다.

  • 더 철저하지만 느립니다.

  • main으로 머지하기 전 기능 브랜치에 가장 적합합니다.

프로덕션 서버에 대해 DAST 스캔을 실행하지 마세요. 버튼 선택이나 양식 제출과 같이 사용자가 할 수 있는 모든 기능을 수행할 수 있을 뿐만 아니라, 버그를 트리거하여 프로덕션 데이터가 수정되거나 손실될 수 있습니다. DAST 스캔은 테스트 서버에서만 실행하세요.

패시브 스캔 및 액티브 스캔을 구성하려면:

.gitlab-ci.yml 파일 하단에 다음을 추가합니다:

  rules:
    - if: $CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH
      variables:
        DAST_FULL_SCAN: "false"  # Passive scan only for main branch (~2-5 mins)
    - if: $CI_COMMIT_REF_NAME != $CI_DEFAULT_BRANCH
      variables:
        DAST_FULL_SCAN: "true"   # Active scan for feature branches (~10-30 mins)

설정 확인#

DAST가 실행 중인 애플리케이션에서 취약점을 성공적으로 발견할 수 있는지 확인합니다.

파이프라인 편집기에서 Commit changes를 선택하고 gitlab 브랜치에 커밋합니다.

파이프라인이 즉시 시작됩니다.

Build > Pipelines로 이동하여 최신 파이프라인이 성공적으로 완료되었는지 확인합니다.

예상 소요 시간:

빌드 Stage: 2-3분(Docker 이미지 빌드)

  • DAST Stage: 2-5분(패시브 스캔)

파이프라인이 성공적으로 완료된 후 Secure > Vulnerability report로 이동합니다.

취약점을 검토합니다. 각 취약점을 처리하는 방법에 대한 도움말은 취약점 수정 방법을 참조하세요.

Tanuki Shop 애플리케이션은 데모 목적으로 의도적으로 취약하게 만들어져 있습니다. 보안 정책, 개인 식별 정보(PII) 노출, 기타 일반적인 웹 취약점과 관련된 결과를 확인할 수 있습니다.

다음 단계#

이 튜토리얼을 완료한 후 다음을 수행할 수 있습니다:

문제 해결#

빌드 job이 인증 오류로 실패하는 경우#

인증 오류는 컨테이너 레지스트리 자격 증명을 사용할 수 없을 때 발생합니다.

문제를 해결하려면:

컨테이너 레지스트리가 활성화되어 있는지 확인합니다:

Settings > General로 이동합니다.

  • Visibility, project features, permissions를 펼칩니다.

  • Container registry 토글이 켜져 있는지 확인합니다.

프로젝트에 유효한 CI/CD 토큰이 있는지 확인합니다. GitLab은 자동으로 $CI_REGISTRY_USER$CI_REGISTRY_PASSWORD를 제공합니다.

DAST job은 완료되었지만 취약점이 발견되지 않는 경우#

이 이슈는 DAST가 애플리케이션에 접근할 수 없거나 애플리케이션이 취약하지 않을 때 발생합니다.

이 이슈를 해결하려면:

애플리케이션이 실행 중인지 확인합니다:

curl "http://yourapp:3000"

연결과 관련된 오류에 대해 DAST job 로그를 확인합니다.

DAST_TARGET_URL 변수가 올바르게 설정되어 있는지 확인합니다(http://yourapp:3000이어야 합니다).

Tanuki Shop 애플리케이션에는 취약점이 있어야 합니다. 취약점이 발견되지 않으면 올바른 포크된 리포지터리를 사용하고 있는지 확인하세요.

관련 항목#

튜토리얼: 웹 애플리케이션 스캔을 위한 DAST 설정

GitLab v19.1
원문 보기
요약

Dynamic Application Security Testing(DAST)을 CI/CD 파이프라인에 통합하는 방법을 알아봅니다. 정적 분석은 소스 코드에서 취약점을 찾습니다. Tanuki Shop 애플리케이션 설정 이 튜토리얼의 Tanuki Shop 애플리케이션은 인증이 필요하지 않습니다.

Dynamic Application Security Testing(DAST)을 CI/CD 파이프라인에 통합하는 방법을 알아봅니다.

정적 분석은 소스 코드에서 취약점을 찾습니다. DAST는 애플리케이션이 실제 환경에서 실행되고 서비스 및 사용자 워크플로와 상호작용할 때만 나타나는 런타임 보안 이슈를 식별합니다. GitLab에 통합된 DAST 솔루션을 사용하면, 코드를 테스트 환경에 배포할 때마다 GitLab DAST가 이러한 이슈를 자동으로 검사하도록 설정할 수 있습니다.

이 튜토리얼에서 배울 내용:

이 튜토리얼의 Tanuki Shop 애플리케이션은 인증이 필요하지 않습니다. 애플리케이션에 로그인이 필요한 경우, DAST 인증을 참조하세요.

시작하기 전에#

  • GitLab Ultimate 구독.

  • 프로젝트에 대한 Maintainer 권한.

Tanuki Shop 애플리케이션 설정#

먼저 Tanuki Shop을 포크합니다.

Tanuki Shop 리포지터리로 이동합니다.

오른쪽 상단 모서리에서 Fork를 선택합니다.

네임스페이스(개인 또는 그룹)를 선택하고 Fork project를 선택합니다.

포크된 리포지터리에는 애플리케이션 코드와 초기 CI/CD 구성을 포함하여 이 튜토리얼에 필요한 모든 파일이 포함되어 있습니다. 다음 단계에서 구성을 수정합니다.

Settings > General로 이동합니다.

Visibility, project features, permissions를 펼칩니다.

Container registry 토글이 켜져 있는지 확인합니다.

컨테이너 레지스트리가 작동하는지 확인합니다:

Deploy > Container registry로 이동합니다.

  • 빈 레지스트리가 표시되어야 합니다. 오류가 표시되면 프로젝트 권한을 확인하세요.

컨테이너 레지스트리는 파이프라인에서 빌드된 Docker 이미지를 저장합니다. 이 단계가 실패하면 빌드 job이 나중에 실패합니다.

빌드 job 정의#

이제 애플리케이션이 포함된 Docker 이미지를 생성하고 컨테이너 레지스트리에 푸시하는 빌드 job을 구성합니다.

프로젝트에서 .gitlab-ci.yml 파일을 편집합니다.

기존 내용을 다음 CI/CD 구성으로 교체합니다:

stages:
  - build
  - dast

include:
  - template: Security/DAST.gitlab-ci.yml

# Build: Create the Docker image and push to the container registry
build:
  services:
    - name: docker:dind
      alias: dind
  image: docker:20.10.16
  stage: build
  script:
    - docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY
    - docker pull $CI_REGISTRY_IMAGE:latest || true
    - docker build --tag $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA --tag $CI_REGISTRY_IMAGE:latest .
    - docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
    - docker push $CI_REGISTRY_IMAGE:latest

DAST job 정의#

빌드 job 구성이 완료되었으므로 이제 DAST job을 구성합니다.

이 구성은 services 기능을 사용하여 DAST job과 병렬로 애플리케이션 컨테이너를 실행합니다. 애플리케이션은 URL http://yourapp:3000에서 dast job이 접근할 수 있습니다.

DAST job을 구성하려면:

.gitlab-ci.yml 파일 하단에 다음을 추가합니다:

# DAST: Scan the application running in a Docker container
dast:
  services:
    - name: $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
      alias: yourapp
  variables:
    DAST_TARGET_URL: http://yourapp:3000

패시브 스캔 및 액티브 스캔 구성#

DAST는 보안 커버리지와 스캔 시간의 균형을 맞추는 두 가지 스캔 모드를 지원합니다. 패시브 스캔은 빠른 피드백을 제공합니다. 액티브 스캔은 조작된 요청으로 애플리케이션을 테스트할 때만 나타나는 취약점을 발견하며, 코드가 프로덕션에 도달하기 전에 더 철저한 보안 검증을 제공합니다.

패시브 스캔(기본값, 약 2-5분):

  • 잠재적으로 유해한 요청을 보내지 않고 애플리케이션 응답을 분석합니다.

  • HTTP 헤더, 쿠키, 응답 콘텐츠, SSL/TLS 구성을 검사합니다.

  • 어떤 환경에서도 안전하게 실행할 수 있습니다.

  • CI/CD 파이프라인에서 빠른 피드백을 얻기에 적합합니다.

액티브 스캔(애플리케이션 크기에 따라 약 10-30분):

  • 취약점을 트리거하도록 설계된 조작된 요청을 전송합니다.

  • 인젝션 결함, 인증 이슈, 비즈니스 로직 취약점을 테스트합니다.

  • 더 철저하지만 느립니다.

  • main으로 머지하기 전 기능 브랜치에 가장 적합합니다.

프로덕션 서버에 대해 DAST 스캔을 실행하지 마세요. 버튼 선택이나 양식 제출과 같이 사용자가 할 수 있는 모든 기능을 수행할 수 있을 뿐만 아니라, 버그를 트리거하여 프로덕션 데이터가 수정되거나 손실될 수 있습니다. DAST 스캔은 테스트 서버에서만 실행하세요.

패시브 스캔 및 액티브 스캔을 구성하려면:

.gitlab-ci.yml 파일 하단에 다음을 추가합니다:

  rules:
    - if: $CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH
      variables:
        DAST_FULL_SCAN: "false"  # Passive scan only for main branch (~2-5 mins)
    - if: $CI_COMMIT_REF_NAME != $CI_DEFAULT_BRANCH
      variables:
        DAST_FULL_SCAN: "true"   # Active scan for feature branches (~10-30 mins)

설정 확인#

DAST가 실행 중인 애플리케이션에서 취약점을 성공적으로 발견할 수 있는지 확인합니다.

파이프라인 편집기에서 Commit changes를 선택하고 gitlab 브랜치에 커밋합니다.

파이프라인이 즉시 시작됩니다.

Build > Pipelines로 이동하여 최신 파이프라인이 성공적으로 완료되었는지 확인합니다.

예상 소요 시간:

빌드 Stage: 2-3분(Docker 이미지 빌드)

  • DAST Stage: 2-5분(패시브 스캔)

파이프라인이 성공적으로 완료된 후 Secure > Vulnerability report로 이동합니다.

취약점을 검토합니다. 각 취약점을 처리하는 방법에 대한 도움말은 취약점 수정 방법을 참조하세요.

Tanuki Shop 애플리케이션은 데모 목적으로 의도적으로 취약하게 만들어져 있습니다. 보안 정책, 개인 식별 정보(PII) 노출, 기타 일반적인 웹 취약점과 관련된 결과를 확인할 수 있습니다.

다음 단계#

이 튜토리얼을 완료한 후 다음을 수행할 수 있습니다:

문제 해결#

빌드 job이 인증 오류로 실패하는 경우#

인증 오류는 컨테이너 레지스트리 자격 증명을 사용할 수 없을 때 발생합니다.

문제를 해결하려면:

컨테이너 레지스트리가 활성화되어 있는지 확인합니다:

Settings > General로 이동합니다.

  • Visibility, project features, permissions를 펼칩니다.

  • Container registry 토글이 켜져 있는지 확인합니다.

프로젝트에 유효한 CI/CD 토큰이 있는지 확인합니다. GitLab은 자동으로 $CI_REGISTRY_USER$CI_REGISTRY_PASSWORD를 제공합니다.

DAST job은 완료되었지만 취약점이 발견되지 않는 경우#

이 이슈는 DAST가 애플리케이션에 접근할 수 없거나 애플리케이션이 취약하지 않을 때 발생합니다.

이 이슈를 해결하려면:

애플리케이션이 실행 중인지 확인합니다:

curl "http://yourapp:3000"

연결과 관련된 오류에 대해 DAST job 로그를 확인합니다.

DAST_TARGET_URL 변수가 올바르게 설정되어 있는지 확인합니다(http://yourapp:3000이어야 합니다).

Tanuki Shop 애플리케이션에는 취약점이 있어야 합니다. 취약점이 발견되지 않으면 올바른 포크된 리포지터리를 사용하고 있는지 확인하세요.

관련 항목#