분석기 설정 사용자화

범위 관리

범위는 DAST가 대상 애플리케이션을 크롤링할 때 따라가는 URL을 제어합니다. 적절히 관리된 범위는 스캔 실행 시간을 최소화하면서 대상 애플리케이션에서만 취약점을 확인하도록 합니다.

범위의 유형

범위에는 세 가지 유형이 있습니다:

  • 포함된 범위
  • 제외된 범위
  • 범위에서 제외됨

포함된 범위

DAST는 포함된 범위의 URL을 따라가며 다음 단계로 진행하기 위해 DOM에서 추가 작업을 검색합니다.

기록된 포함된 범위의 HTTP 메시지는 취약점에 대해 수동으로 검사되며 전체 스캔을 실행할 때 공격을 구축하는 데 사용됩니다.

제외된 범위

DAST는 이미지, 스타일시트, 글꼴, 스크립트 또는 AJAX 요청과 같은 문서가 아닌 콘텐츠 유형을 위해 제외된 범위의 URL을 따라갑니다.

인증을 제외하고, DAST는 외부 웹사이트의 링크를 클릭할 때와 같이 전체 페이지 로드를 위해 제외된 범위의 URL을 따르지 않습니다.

정보 누출을 검색하기 위한 수동 검사 외에, 제외된 범위의 URL에 대한 기록된 HTTP 메시지는 취약점에 대해 검사되지 않습니다.

범위에서 제외됨

DAST는 범위에서 제외된 URL을 따르지 않습니다.

정보 누출을 검색하기 위한 수동 검사 외에, 범위에서 제외된 URL에 대한 기록된 HTTP 메시지는 취약점에 대해 검사되지 않습니다.

인증 시 범위 작동 방식

많은 대상 애플리케이션은 SSO(단일 로그온)를 위한 ID 액세스 관리 공급자를 사용하는 경우와 같이 외부 웹사이트에 따라 진행되는 인증 프로세스를 가지고 있습니다.

DAST가 이러한 공급자와 인증할 수 있도록 보장하기 위해, DAST는 인증 중 전체 페이지 로드를 위해 제외된 범위의 URL을 따릅니다. DAST는 범위에서 제외된 URL은 따르지 않습니다.

DAST가 HTTP 요청을 차단하는 방법

DAST는 범위 규칙으로 인해 요청을 차단할 때 브라우저에게 HTTP 요청을 평소처럼 하도록 지시합니다. 이후 요청은 가로채어 BlockedByClient라는 이유로 거부됩니다.

이 접근 방식은 DAST가 HTTP 요청을 기록할 수 있게 하면서 해당 요청이 대상 서버에 도달하지 않도록 합니다. 200.1과 같은 수동 검사는 이러한 기록된 요청을 사용하여 외부 호스트에 전송된 정보를 검증합니다.

범위 구성 방법

기본적으로, 대상 애플리케이션의 호스트와 일치하는 URL은 포함된 범위로 간주됩니다. 다른 모든 호스트는 제외된 범위로 간주됩니다.

범위는 다음 변수를 사용하여 구성됩니다:

  • DAST_SCOPE_ALLOW_HOSTS를 사용하여 포함된 범위의 호스트를 추가합니다.
  • DAST_SCOPE_IGNORE_HOSTS를 사용하여 제외된 범위의 호스트를 추가합니다.
  • DAST_SCOPE_EXCLUDE_HOSTS를 사용하여 범위에서 제외된 호스트를 추가합니다.
  • DAST_SCOPE_EXCLUDE_URLS를 사용하여 특정 URL을 범위에서 제외합니다.

규칙:

  • 호스트를 제외하는 것이 무시하는 것보다 우선합니다. 이는 허용하는 것보다 우선합니다.
  • 호스트에 대한 범위를 구성하는 것은 해당 호스트의 서브도메인에 대한 범위를 구성하지 않습니다.
  • 호스트에 대한 범위를 구성하는 것은 해당 호스트의 모든 포트에 대한 범위를 구성하지 않습니다.

다음은 전형적인 구성일 수 있습니다:

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

dast:
  variables:
    DAST_TARGET_URL: "https://my.site.com"                   # my.site.com URL은 기본적으로 포함된 범위로 간주됩니다.
    DAST_SCOPE_ALLOW_HOSTS: "api.site.com:8443"       # 스캔의 일부로 API를 포함합니다.
    DAST_SCOPE_IGNORE_HOSTS: "analytics.site.com"      # 스캔에서 분석을 명시적으로 무시합니다.
    DAST_SCOPE_EXCLUDE_HOSTS: "ads.site.com"           # 광고 서브도메인의 URL은 방문하지 않습니다.
    DAST_SCOPE_EXCLUDE_URLS: "https://my.site.com/user/logout"  # 이 URL은 방문하지 않습니다.

취약점 탐지

취약점 탐지는 기본 Zed Attack Proxy (ZAP) 솔루션에서 브라우저 기반 분석기로 점진적으로 이전되고 있습니다.

이미 이전된 취약점 탐지의 자세한 내용은 브라우저 기반 취약점 검사를 참조하세요.

크롤러는 DAST/ZAP이 프록시 서버로 구성된 브라우저에서 대상 웹사이트를 실행합니다. 이를 통해 브라우저가 생성하는 모든 요청과 응답은 DAST/ZAP에 의해 수동으로 스캔됩니다. 전체 스캔을 실행할 때 DAST/ZAP이 수행하는 능동적 취약점 검사는 브라우저를 사용하지 않습니다. 취약점 검사가 수행되는 방식의 차이가 특정 웹사이트의 기능을 비활성화해야 할 필요성을 유발할 수 있습니다.

예를 들어, Anti-CSRF 토큰이 포함된 양식을 가진 대상 웹사이트의 경우, 브라우저가 마치 사용자가 페이지를 보고 있는 것처럼 페이지와 양식을 표시하기 때문에 수동 스캔이 의도대로 작동합니다. 그러나 전체 스캔에서 실행되는 능동적 취약점 검사는 Anti-CSRF 토큰이 포함된 양식을 제출할 수 없습니다. 이러한 경우, 전체 스캔을 실행할 때 Anti-CSRF 토큰을 비활성화하는 것을 권장합니다.

스캔 시간 관리

브라우저 기반 크롤러를 실행하면 표준 GitLab DAST 솔루션에 비해 많은 웹 애플리케이션에 대해 더 나은 커버리지를 얻을 것으로 예상됩니다.

이와 동시에 스캔 시간이 증가할 수 있습니다.

다음 조치를 통해 커버리지와 스캔 시간 간의 균형을 관리할 수 있습니다:

  • 실행기를 수직으로 확장하고 변수 DAST_CRAWL_WORKER_COUNT로 더 많은 브라우저를 사용하세요. 기본값은 사용 가능한 논리 CPU의 수에 따라 동적으로 설정됩니다.

  • 변수 DAST_CRAWL_MAX_ACTIONS로 브라우저가 실행하는 액션의 수를 제한하세요. 기본값은 10,000입니다.

  • 변수 DAST_CRAWL_MAX_DEPTH로 브라우저 기반 크롤러가 커버리지를 검사하는 페이지 깊이를 제한하세요. 크롤러는 너비 우선 탐색 전략을 사용하므로 깊이가 작은 페이지가 먼저 크롤링됩니다. 기본값은 10입니다.

  • 변수 DAST_CRAWL_TIMEOUT로 대상 애플리케이션을 크롤링하는 데 걸리는 시간을 제한하세요. 기본값은 24시간입니다. 크롤러가 시간 초과되면 수동 및 능동 검사로 스캔이 계속됩니다.

  • 변수 DAST_CRAWL_GRAPH로 어떤 페이지가 크롤링되고 있는지 확인하기 위한 크롤 그래프를 작성하세요.

  • 변수 DAST_SCOPE_EXCLUDE_URLS를 사용하여 크롤링할 페이지를 방지하세요.

  • 변수 DAST_SCOPE_EXCLUDE_ELEMENTS를 사용하여 요소 선택을 방지하세요. 이 변수를 정의하면 크롤링되는 각 페이지에 대해 추가 조회가 발생하므로 주의해서 사용하세요.

  • 대상 애플리케이션의 렌더링이 최소화되거나 빠른 경우, 변수 DAST_PAGE_DOM_STABLE_WAIT을 더 작은 값으로 줄이는 것을 고려하세요. 기본값은 500ms입니다.

타임아웃

열악한 네트워크 조건이나 애플리케이션 부하가 심한 경우 기본 타임아웃이 귀하의 애플리케이션에 적합하지 않을 수 있습니다.

브라우저 기반 스캔은 페이지에서 페이지로의 원활한 전환을 보장하기 위해 다양한 타임아웃을 조정할 수 있는 기능을 제공합니다. 이러한 값은 Duration string을 사용하여 구성되며, 접두사를 붙여서 설정할 수 있습니다: m은 분, s는 초, ms는 밀리초를 나타냅니다.

탐색 또는 새 페이지를 로드하는 행위는 일반적으로 JavaScript 또는 CSS 파일과 같은 여러 새로운 리소스를 로드하기 때문에 가장 많은 시간을 요구합니다. 이러한 리소스의 크기나 반환되는 속도에 따라 기본 DAST_PAGE_READY_AFTER_NAVIGATION_TIMEOUT이 충분하지 않을 수 있습니다.

DAST_PAGE_DOM_READY_TIMEOUT 또는 DAST_PAGE_READY_AFTER_ACTION_TIMEOUT으로 구성할 수 있는 안정성 타임아웃도 구성할 수 있습니다. 안정성 타임아웃은 브라우저 기반 스캔이 페이지가 완전히 로드되었다고 간주하는 시점을 결정합니다. 브라우저 기반 스캔은 페이지가 다음과 같이 로드되었을 때 로드된 것으로 간주합니다:

  1. DOMContentLoaded 이벤트가 발생했습니다.
  2. JavaScript 및 CSS와 같은 중요하다고 간주되는 열린 또는 연기된 요청이 없습니다. 미디어 파일은 일반적으로 중요하지 않은 것으로 간주됩니다.
  3. 브라우저가 탐색을 실행했는지, 강제 전환되었는지, 또는 액션을 수행했는지에 따라:

    • DAST_PAGE_DOM_READY_TIMEOUT 또는 DAST_PAGE_READY_AFTER_ACTION_TIMEOUT 기간 이후에 새로운 문서 개체 모델(DOM) 수정 이벤트가 없습니다.

이러한 이벤트가 발생한 후에 브라우저 기반 스캔은 페이지가 로드되었고 준비되었다고 간주하며 다음 작업을 시도합니다.

애플리케이션이 지연이 발생하거나 많은 탐색 실패를 반환하는 경우 다음 예제와 같이 타임아웃 값을 조정하는 것을 고려하세요:

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

dast:
  variables:
    DAST_TARGET_URL: "https://my.site.com"
    DAST_PAGE_READY_AFTER_NAVIGATION_TIMEOUT: "45s"
    DAST_PAGE_READY_AFTER_ACTION_TIMEOUT: "15s"
    DAST_PAGE_DOM_READY_TIMEOUT: "15s"
note
이러한 값을 조정하면 스캔 시간에 영향을 미칠 수 있습니다. 이는 각 브라우저가 다양한 작업이 완료될 때까지 대기하는 시간을 조정하기 때문입니다.