Dynamic Application Security Testing (DAST)
Dynamic Application Security Testing (DAST)는 웹 응용 프로그램 및 API에서 취약점을 찾기 위해 자동으로 침투 테스트를 실행합니다. DAST는 해커의 접근 방식을 자동화하고 실제 공격을 시뮬레이션하여 교차 사이트 스크립팅(XSS), SQL 삽입(SQLi), 교차 사이트 요청 위조(CSRF)와 같은 중요한 위협에 대한 취약점과 잘못된 구성을 발견합니다. 이는 다른 보안 도구에서 감지할 수 없는 취약점 및 구성 오류를 찾아냅니다.
DAST는 완전히 언어에 구약하고 있으며, 외부에서 내부로 응용 프로그램을 검토합니다. 테스트 환경에서 실행 중인 응용 프로그램과 함께 DAST 스캔은 CI/CD 파이프라인에서 자동화될 수 있고, 일정에 따라 자동화되거나 요청에 따라 독립적으로 실행될 수 있습니다. 소프트웨어 개발 수명주기 동안 DAST를 사용하면 팀은 응용 프로그램이 제품화되기 전에 취약점을 발견할 수 있습니다. DAST는 소프트웨어 보안의 기초적인 컴포넌트이며 SAST, 의존성 및 라이선스 스캐닝, 비밀 감지와 함께 사용하여 응용 프로그램의 포괄적인 보안 평가를 제공해야 합니다.
GitLab의 Browser-based DAST 및 DAST API는 현대적인 웹 응용 프로그램과 API에 대한 넓은 보안 커버리지를 제공하는 프로프리어터리 런타임 도구입니다.
개요는 Dynamic Application Security Testing (DAST)에서 확인할 수 있습니다.
GitLab DAST
GitLab은 다음과 같은 DAST 분석기를 제공하며, 테스트하는 응용 프로그램의 종류에 따라 하나 이상이 유용할 수 있습니다.
웹 사이트를 스캔하는 경우:
- 전통적인 단순한 HTML을 제공하는 전통적인 애플리케이션을 스캔하는 데 DAST 프록시 기반 분석기를 사용하십시오. 프록시 기반 분석기는 자동으로 또는 요청에 따라 실행할 수 있습니다.
- JavaScript를 많이 사용하는 애플리케이션을 스캔하는 데 DAST 브라우저 기반 분석기를 사용하십시오. 이에는 싱글 페이지 웹 애플리케이션이 포함됩니다.
API를 스캔하는 경우:
- 웹 API를 스캔하는 데 DAST API 분석기를 사용하십시오. GraphQL, REST, SOAP과 같은 웹 API 기술을 지원합니다.
분석기는 애플리케이션을 보호하기에 설명된 아키텍처적 패턴을 따릅니다. 각 분석기는 CI 템플릿을 사용하여 파이프라인에서 구성할 수 있으며, Docker 컨테이너에서 스캔을 실행합니다. 스캔 결과의 차이를 기반으로 GitLab은 DAST 보고서 아티팩트를 사용하여 발견된 취약점을 결정합니다.
시작하기
준비 사항
- Linux/amd64에서
docker
executor가 있는 GitLab Runner이 있어야 합니다. - 대상 응용 프로그램이 배포되어 있어야 합니다. 자세한 내용은 배포 옵션을 읽어보세요.
-
CI/CD 파이프라인 정의에
dast
단계를 추가해야 합니다. 예를 들어, 배포 단계 이후에 추가해야 합니다.:stages: - build - test - deploy - dast
권장 사항
- 파이프라인이 각 실행에서 동일한 웹 서버에 배포되도록 구성했는지 주의해야 합니다. 서버가 업데이트되는 동안 DAST 스캔을 실행하면 부정확하고 결정론적이지 않은 결과로 이어집니다.
- 항상 가져오는 정책을 사용하여 러너를 구성하여 분석기의 최신 버전을 실행하도록 해야 합니다.
-
기본적으로 DAST는 파이프라인의 이전 작업에서 정의된 모든 아티팩트를 다운로드합니다. DAST 작업이
environment_url.txt
를 사용해 테스트 중인 URL 또는 이전 작업에서 작성된 다른 파일에 의존하지 않는 경우 아티팩트를 다운로드하지 않는 것이 좋습니다. 아티팩트를 다운로드하지 않으려면 분석기 CI/CD 작업에서 의존성을 지정하세요. 예를 들어 DAST 프록시 기반 분석기의 경우 다음을.gitlab-ci.yml
파일에 추가하세요:dast: dependencies: []
분석기 구성
분석기별 구체적인 구성 지침은 DAST 프록시 기반 분석기, DAST 브라우저 기반 분석기또는 DAST API 분석기에서 확인할 수 있습니다.
스캔 결과 보기
- GitLab 13.1에서 도입됨.
발견된 취약점은 Merge Request, 파이프라인 보안 탭, 그리고 취약점 보고서에 나타납니다.
- 모든 발견된 취약점을 보려면 다음 중 하나를 선택하세요:
- 프로젝트에서 보안 및 컴플라이언스, 그런 다음 취약점 보고서를 선택합니다.
- 파이프라인에서 보안 탭을 선택합니다.
- Merge Request에서 보안 스캔 위젯을 선택하고 전체 보고서 탭을 선택합니다.
-
DAST 취약점의 설명을 선택합니다. 다음 필드는 DAST 분석기가 기본 원인의 조사 및 개선을 지원하기 위해 생성할 수 있는 예시 필드입니다. 각 분석기는 다른 필드를 출력할 수 있습니다.
필드 설명 설명 취약성에 대한 설명. 증거 취약점을 확인한 데이터의 증거. 요청 또는 응답 조각으로, 이를 사용하여 결과가 취약점인지 확인할 수 있습니다. 식별자 취약성의 식별자. 링크 발견된 취약점에 대한 자세한 내용을 나타내는 링크. 메소드 취약점을 감지하는 데 사용된 HTTP 메소드. 프로젝트 취약점이 감지된 네임스페이스 및 프로젝트. 요청 헤더 요청의 헤더. 응답 헤더 응용 프로그램에서 받은 응답의 헤더. 응답 상태 애플리케이션에서 받은 응답 상태. 스캐너 유형 취약성 보고서의 유형. 심각도 취약성의 심각도. 솔루션 취약점에 대한 권장 솔루션의 세부 정보. URL 취약점이 감지된 URL.
스캔된 URL 디렉터리
DAST가 스캔을 완료하면 Merge Request 페이지에 스캔된 URL 수가 나타납니다. 웹 콘솔 출력을 보려면 세부 정보 보기를 선택하십시오. 여기에는 스캔된 URL 디렉터리이 포함되어 있습니다.
애플리케이션 배포 옵션
DAST는 스캔 가능한 배포된 애플리케이션이 필요합니다.
대상 애플리케이션의 복잡성에 따라 DAST 템플릿을 배포하고 구성하는 몇 가지 옵션이 있습니다. 예시 애플리케이션 세트는 DAST 데모 프로젝트에 해당 구성으로 제공되었습니다.
레뷰 애플리케이션
레뷰 애플리케이션은 DAST 대상 애플리케이션을 배포하는 가장 복잡한 방법입니다. 프로세스를 지원하기 위해 Google Kubernetes Engine (GKE)를 사용하여 레뷰 애플리케이션 배포를 생성했습니다. 이 예시는 레뷰 앱 - GKE 프로젝트에서 확인할 수 있으며, DAST에 대한 레뷰 앱을 구성하는 방법은 README.md에 자세히 안내되어 있습니다.
도커 서비스
애플리케이션이 Docker 컨테이너를 사용하는 경우 DAST로 배포 및 스캔하는 또 다른 옵션이 있습니다. Docker 빌드 작업이 완료되고 이미지가 컨테이너 레지스트리에 추가된 후 이미지를 서비스로 사용할 수 있습니다.
.gitlab-ci.yml
에서 서비스 정의를 사용하여 DAST 분석기로 서비스를 스캔할 수 있습니다.
작업에 services
섹션을 추가할 때 alias
는 서비스에 액세스하는 데 사용될 호스트 이름을 정의하는 데 사용됩니다. 다음 예시에서 dast
작업 정의의 alias: yourapp
부분은 배포된 애플리케이션에 yourapp
을 호스트 이름으로 사용한다는 것을 의미합니다(https://yourapp/
).
stages:
- build
- dast
include:
- template: DAST.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
dast:
services: # 서비스를 사용하여 앱 컨테이너를 dast 작업에 연결합니다
- name: $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
alias: yourapp
variables:
DAST_WEBSITE: https://yourapp
DAST_FULL_SCAN_ENABLED: "true" # 전체 스캔 수행
DAST_BROWSER_SCAN: "true" # 브라우저 기반 GitLab DAST 크롤러 사용
대부분의 애플리케이션은 데이터베이스 또는 캐싱 서비스와 같은 다중 서비스에 의존합니다. 기본적으로 서비스 필드에 정의된 서비스는 서로 통신할 수 없습니다. 서비스 간 통신을 허용하려면 FF_NETWORK_PER_BUILD
피처 플래그를 활성화하십시오.
variables:
FF_NETWORK_PER_BUILD: "true" # 빌드 당 네트워크를 활성화하여 모든 서비스가 동일한 네트워크에서 통신하도록 합니다
services: # 서비스를 사용하여 컨테이너를 dast 작업에 연결합니다
- name: mongo:latest
alias: mongo
- name: $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
alias: yourapp