분석기 설정 사용자 정의

영역 관리

영역은 대상 응용 프로그램을 크롤링할 때 DAST가 따르는 URL을 제어합니다. 올바르게 관리된 영역은 검사 시간을 최소화하면서 취약점이 대상 응용 프로그램에서만 확인되도록 보장합니다.

영역 유형

영역에는 세 가지 유형이 있습니다.

  • 영역 내
  • 영역 밖
  • 영역에서 제외

영역 내

DAST는 영역 내 URL을 따르고 크롤링을 계속하기 위해 DOM에서 추가 조치를 검색합니다. 기록된 영역 내 HTTP 메시지는 수동으로 취약점을 확인하고 완전한 스캔을 실행할 때 공격을 시도하는 데 사용됩니다.

영역 밖

DAST는 이미지, 스타일시트, 글꼴, 스크립트 또는 AJAX 요청과 같은 문서 이외 콘텐츠 유형을 위한 URL에 대해서만 따릅니다. 인증을 제외하고 DAST는 외부 웹사이트로의 링크를 클릭하는 경우와 같이 완전한 페이지 로드를 위한 영역 밖 URL을 따르지 않습니다. 정보 누출을 찾는 수동 확인을 제외하고, 영역 밖 URL에 대한 기록된 HTTP 메시지는 취약점을 확인하지 않습니다.

영역에서 제외

DAST는 제외된 URL을 따르지 않습니다. 정보 누출을 찾는 수동 확인을 제외하고, 제외된 URL에 대한 기록된 HTTP 메시지는 취약점을 확인하지 않습니다.

인증 중 영역 작동 방식

대상 응용 프로그램 중 많은 애플리케이션은 SSO(Single Sign-On)용 Identity Access Management 공급 업체와 같은 외부 웹사이트에 의존하는 인증 프로세스를 갖고 있습니다. DAST가 이러한 제공 업체를 통해 인증할 수 있도록하려면, 인증 중에 완전한 페이지 로드를 위한 영역 밖 URL을 DAST가 따라야 합니다. DAST는 제외된 URL을 따르지 않습니다.

DAST가 HTTP 요청 차단하는 방법

영역 규칙으로 인해 요청이 차단될 때, DAST는 브라우저에 HTTP 요청을 일반적으로 보내도록 지시합니다. 그러면 해당 요청이 후속적으로 가로채어져 BlockedByClient 이유로 거부됩니다. 이러한 접근 방식은 DAST가 HTTP 요청을 기록하면서도 해당 요청이 대상 서버에 도달하지 않도록 보장합니다. 200.1과 같은 수동 확인은 외부 호스트로 보낸 정보를 확인하기 위해 이러한 기록된 요청을 사용합니다.

영역 구성 방법

기본적으로 대상 응용 프로그램의 호스트와 일치하는 URL은 영역 내로 간주됩니다. 다른 모든 호스트는 영역 밖으로 간주됩니다.

영역은 다음 변수를 사용하여 구성됩니다.

  • DAST_BROWSER_ALLOWED_HOSTS를 사용하여 영역 내 호스트를 추가합니다.
  • DAST_BROWSER_IGNORED_HOSTS를 사용하여 영역 밖 호스트를 추가합니다.
  • DAST_BROWSER_EXCLUDED_HOSTS를 사용하여 제외된 영역 호스트를 추가합니다.
  • DAST_EXCLUDE_URLS를 사용하여 특정 URL을 영역에서 제외하도록 설정합니다.

규칙:

  • 호스트를 제외하는 것이 허용하는 것보다 우선시됩니다. 이는 호스트를 무시하는 것보다 우선시됩니다.
  • 호스트의 영역을 구성하는 것은 해당 호스트의 하위 도메인의 영역을 구성하는 것이 아닙니다.
  • 호스트의 영역을 구성하는 것은 해당 호스트의 모든 포트의 영역을 구성하는 것이 아닙니다.

다음은 전형적인 구성입니다.

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

dast:
  variables:
    DAST_WEBSITE: "https://my.site.com"                   # my.site.com URLs are considered in-scope by default
    DAST_BROWSER_ALLOWED_HOSTS: "api.site.com:8443"       # include the API as part of the scan
    DAST_BROWSER_IGNORED_HOSTS: "analytics.site.com"      # explicitly disregard analytics from the scan
    DAST_BROWSER_EXCLUDED_HOSTS: "ads.site.com"           # don't visit any URLs on the ads subdomain
    DAST_EXCLUDE_URLS: "https://my.site.com/user/logout"  # don't visit this URL

취약점 검출

취약점 검출은 기본 Zed Attack Proxy (ZAP) 솔루션에서 점차 브라우저 기반 분석기로 이관되고 있습니다. 이미 이관된 취약점 검출에 대한 자세한 내용은 브라우저 기반 취약점 검사를 참조하십시오.

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

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

스캔 시간 관리

브라우저 기반 크롤러를 실행하는 것이 표준 GitLab DAST 솔루션과 비교했을 때 많은 웹 애플리케이션에 대해 더 나은 커버리지를 제공할 것으로 예상됩니다. 그러나 이는 증가된 스캔 시간이라는 비용이 따를 수 있습니다.

다음과 같은 조치를 통해 커버리지와 스캔 시간 사이의 절충 관계를 관리할 수 있습니다.

  • 러너를 수직으로 확장하고 변수 DAST_BROWSER_NUMBER_OF_BROWSERS를 사용하여 브라우저의 수를 늘립니다. 기본값은 3입니다.
  • 브라우저가 실행하는 작업의 수를 제한하는 데 변수 DAST_BROWSER_MAX_ACTIONS를 사용합니다. 기본값은 10,000입니다.
  • 브라우저 기반 크롤러가 커버리지를 확인하는 페이지의 깊이를 제한하는 데 변수 DAST_BROWSER_MAX_DEPTH를 사용합니다. 크롤러는 너비 우선 검색 전략을 사용하므로, 깊이가 더 작은 페이지가 먼저 크롤링됩니다. 기본값은 10입니다.
  • 대상 응용 프로그램을 크롤하는 데 걸리는 시간을 제한하는 데 변수 DAST_BROWSER_CRAWL_TIMEOUT을 사용합니다. 기본값은 24h입니다. 크롤러 시간이 초과되면 스캔이 수동 및 적극적 확인을 계속합니다.
  • 크롤 그래프를 빌드하기 위해 변수 DAST_BROWSER_CRAWL_GRAPH를 사용하십시오.
  • 크롤을 방지하려면 변수 DAST_EXCLUDE_URLS를 사용하십시오.
  • 선택된 요소를 방지하려면 변수 DAST_BROWSER_EXCLUDED_ELEMENTS를 사용하십시오. 이 변수를 정의하는 것은 각 페이지의 추가 조회를 유발하므로 주의해서 사용하십시오.
  • 대상 응용 프로그램이 최소한으로 렌더링되거나 빠른 경우, 변수 DAST_BROWSER_DOM_READY_AFTER_TIMEOUT을 작은 값으로 줄이는 것을 고려하십시오. 기본값은 500ms입니다.

타임아웃

네트워크 상태가 좋지 않거나 응용 프로그램 부하가 높은 경우 기본 타임아웃은 응용 프로그램에 적용되지 않을 수 있습니다.

브라우저 기반 스캔은 다음 페이지로 이동하는 동안 계속 원활하게 진행되도록 다양한 타임아웃을 조정할 수 있습니다. 이러한 값들은 기간 문자열을 사용하여 구성되며, 접두사를 사용하여 기간을 구성할 수 있습니다: 분당 m, 초당 s, 밀리초당 ms.

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

또한 DAST_BROWSER_NAVIGATION_STABILITY_TIMEOUT, DAST_BROWSER_STABILITY_TIMEOUT, DAST_BROWSER_ACTION_STABILITY_TIMEOUT와 같이 구성할 수 있는 안정성 타임아웃도 있습니다. 안정성 타임아웃은 브라우저 기반 스캔이 페이지를 완전히 로드로 간주하는 시점을 결정합니다. 브라우저 기반 스캔은 페이지를 로드로 간주하기 위해 다음과 같은 사항들을 확인합니다:

  1. DOMContentLoaded 이벤트가 발생했을 때.
  2. JavaScript와 CSS와 같은 중요한 이벤트를 처리하는 데 필요한 요청이 없을 때. 미디어 파일은 보통 중요하지 않습니다.
  3. 브라우저가 탐색을 실행했는지, 강제로 전환되었는지, 또는 액션을 실행했는지에 따라:

    • DAST_BROWSER_NAVIGATION_STABILITY_TIMEOUT, DAST_BROWSER_STABILITY_TIMEOUT, 또는 DAST_BROWSER_ACTION_STABILITY_TIMEOUT 기간 후에 새로운 문서 객체 모델 (DOM) 수정 이벤트가 없을 때.

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

응용 프로그램이 대기 시간을 경험하거나 많은 탐색 실패가 발생하는 경우, 다음 예시처럼 타임아웃 값들을 조정하는 것을 고려해 보세요:

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

dast:
  variables:
    DAST_WEBSITE: "https://my.site.com"
    DAST_BROWSER_NAVIGATION_TIMEOUT: "25s"
    DAST_BROWSER_ACTION_TIMEOUT: "10s"
    DAST_BROWSER_STABILITY_TIMEOUT: "15s"
    DAST_BROWSER_NAVIGATION_STABILITY_TIMEOUT: "15s"
    DAST_BROWSER_ACTION_STABILITY_TIMEOUT: "3s"

참고: 이러한 값들을 조정하면 각 브라우저가 각 활동이 완료될 때까지 기다리는 시간을 조정하므로 스캔 시간에 영향을 줄 수 있습니다.