요구 사항

권장 사항

  • 러너를 항상 풀 정책으로 구성하여 분석기의 최신 버전을 실행하세요.

  • 기본적으로 API 퍼징은 파이프라인의 이전 작업에서 정의한 모든 아티팩트를 다운로드합니다. 만약 당신의 API 퍼징 작업이 테스트할 URL을 정의하기 위해 environment_url.txt나 이전 작업에서 생성된 다른 파일에 의존하지 않는다면, 아티팩트를 다운로드하지 않기를 권장합니다. 아티팩트를 다운로드하지 않도록 하려면, 분석기 CI/CD 작업을 확장하여 의존성이 없도록 지정하세요. 예를 들어, DAST 프록시 기반 분석기에서 다음을 .gitlab-ci.yml 파일에 추가하세요:

    apifuzzer_fuzz:
      dependencies: []
    

애플리케이션 배포 옵션

API 퍼징은 스캔할 수 있는 배포된 애플리케이션이 필요합니다.

타겟 애플리케이션의 복잡성에 따라 API 퍼징 템플릿을 배포하고 구성하는 몇 가지 옵션이 있습니다.

리뷰 앱

리뷰 앱은 API 퍼징 타겟 애플리케이션을 배포하는 가장 복잡한 방법입니다. 이 과정을 지원하기 위해, Google Kubernetes Engine(GKE)를 사용한 리뷰 앱 배포를 생성했습니다. 이 예제는 우리의 리뷰 앱 - GKE 프로젝트에서 찾을 수 있으며, DAST에 대한 리뷰 앱을 구성하는 방법에 대한 자세한 지침은 README.md에 있습니다.

도커 서비스

애플리케이션이 도커 컨테이너를 사용하는 경우, API 퍼징으로 배포 및 스캔할 수 있는 다른 옵션이 있습니다. 도커 빌드 작업이 완료되고 이미지가 컨테이너 레지스트리에 추가된 후, 해당 이미지를 서비스로 사용할 수 있습니다.

.gitlab-ci.yml에서 서비스 정의를 사용하여 DAST 분석기로 서비스를 스캔할 수 있습니다.

작업에 services 섹션을 추가할 때, alias는 서비스에 접근하는 데 사용할 수 있는 호스트 이름을 정의하는 데 사용됩니다. 다음 예제에서 dast 작업 정의의 alias: yourapp 부분은 배포된 애플리케이션의 URL이 yourapp을 호스트 이름으로 사용함을 의미합니다 (https://yourapp/).

stages:
  - build
  - fuzz

include:
  - template: API-Fuzzing.gitlab-ci.yml

# 컨테이너를 GitLab 컨테이너 레지스트리에 배포
deploy:
  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

apifuzzer_fuzz:
  services: # dast 작업에 애플리케이션 컨테이너를 연결하기 위해 서비스 사용
    - name: $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
      alias: yourapp

변수:
  FUZZAPI_TARGET_URL: https://yourapp

대부분의 애플리케이션은 데이터베이스 또는 캐싱 서비스와 같은 여러 서비스에 의존합니다. 기본적으로, services 필드에 정의된 서비스는 서로 통신할 수 없습니다. 서비스 간 통신을 허용하려면 FF_NETWORK_PER_BUILD 기능 플래그를 활성화하세요.

변수:
  FF_NETWORK_PER_BUILD: "true" # 모든 서비스가 동일한 네트워크에서 통신할 수 있도록 빌드별 네트워크 활성화

서비스: # 컨테이너를 dast 작업에 연결하기 위해 서비스 사용
  - name: mongo:latest
    alias: mongo
  - name: $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
    alias: yourapp