분석기 설정 사용자 정의
범위 관리
범위는 대상 응용 프로그램을 크롤링할 때 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’ 이유로 거부됩니다. 이 접근 방식은 대상 서버에 도달하지 않으면서 HTTP 요청을 기록할 수 있도록 하면서, 정보 누출을 확인하는 200.1과 같은 매뉴얼 확인에 이러한 기록된 요청을 사용합니다.
범위 구성 방법
기본적으로 대상 응용 프로그램의 호스트와 일치하는 URL은 범위 내로 간주됩니다. 다른 모든 호스트는 범위 밖으로 간주됩니다.
다음과 같은 구성이 가능합니다:
include:
- template: DAST.gitlab-ci.yml
dast:
variables:
DAST_TARGET_URL: "https://my.site.com" # my.site.com URLs are considered in-scope by default
DAST_SCOPE_ALLOW_HOSTS: "api.site.com:8443" # include the API as part of the scan
DAST_SCOPE_IGNORE_HOSTS: "analytics.site.com" # explicitly disregard analytics from the scan
DAST_SCOPE_EXCLUDE_HOSTS: "ads.site.com" # don't visit any URLs on the ads subdomain
DAST_SCOPE_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 솔루션과 비교했을 때, 브라우저 기반 크롤러를 실행하는 것이 많은 웹 응용 프로그램에 대해 더 나은 커버리지를 제공할 것으로 예상됩니다. 이는 스캔 시간이 증가하는 비용으로 이어질 수 있습니다.
다음과 같은 조치를 통해 커버리지와 스캔 시간 간의 균형을 잡을 수 있습니다:
- 러너를 수직으로 확장하고 variable
DAST_CRAWL_WORKER_COUNT
를 사용하여 더 많은 브라우저를 사용하세요. 기본값은3
입니다. - 브라우저가 실행하는 동작의 수를 제한하려면 variable
DAST_CRAWL_MAX_ACTIONS
를 사용하세요. 기본값은10,000
입니다. - 브라우저 기반 크롤러가 커버리지를 확인하는 데 사용하는 페이지 깊이를 제한하려면 variable
DAST_CRAWL_MAX_DEPTH
를 사용하세요. 크롤러는 너비 우선 검색 전략을 사용하므로 페이지 수가 적은 깊이의 페이지를 먼저 크롤링합니다. 기본값은10
입니다. - 대상 응용 프로그램의 크롤링 시간을 제한하려면 variable
DAST_CRAWL_TIMEOUT
을 사용하세요. 기본값은24시간
입니다. 크롤러가 시간 초과되면 스캔은 패시브 및 능동 확인을 계속합니다. - 크롤 그래프를 빌드하려면 variable
DAST_CRAWL_GRAPH
를 사용하세요. - 크롤을 피할 페이지를 지정하려면 variable
DAST_SCOPE_EXCLUDE_URLS
를 사용하세요. - 선택된 요소를 방지하려면 variable
DAST_SCOPE_EXCLUDE_ELEMENTS
를 사용하세요. 이 변수를 정의하면 각 페이지의 추가 조회가 발생하므로 주의해서 사용하세요. - 대상 응용 프로그램이 최소화되거나 빠르게 렌더링되는 경우, variables
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
로 설정 가능한 안정 시간은 변경할 수도 있습니다. 안정 시간은 브라우저 기반 스캔이 페이지를 완전히 로드된 것으로 간주하는 지점을 결정합니다. 브라우저 기반 스캔은 페이지가 로드된 것으로 간주하고 다음 동작을 시도합니다:
- DOMContentLoaded 이벤트가 발생했습니다.
- JavaScript 및 CSS와 같이 중요하다고 생각되는 열린 또는 미해결된 요청이 없습니다. 일반적으로 미디어 파일은 중요하지 않은 것으로 간주됩니다.
-
브라우저가 네비게이션을 실행하거나 강제로 전환되었는지, 또는 동작:
-
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"