DAST 브라우저 기반 분석기


Tier: Ultimate
Offering: GitLab.com, Self-managed, GitLab Dedicated

- 일반 사용 가능 in GitLab 15.7 (GitLab DAST v3.0.50).

경고:
GitLab 17.0에서 DAST 버전 4 브라우저 기반 분석기가 DAST 버전 5로 대체되었습니다. DAST 버전 5로 이주하는 방법에 대한 지침은 이주 가이드를 참조하십시오.

브라우저 기반 DAST는 웹 애플리케이션의 보안 약점 (CWEs)을 식별하는 데 도움이 됩니다. 웹 애플리케이션을 배포한 후에는 배포 전에 감지할 수 없는 여러 유형의 새로운 공격에 노출됩니다. 예를 들어, 애플리케이션 서버의 잘못된 구성이나 보안 제어에 대한 잘못된 가정은 소스 코드에서는 보이지 않을 수 있지만, 브라우저 기반 DAST로는 감지할 수 있습니다.

동적 애플리케이션 보안 테스트 (DAST)는 배포된 환경에서 응용 프로그램을 취약점으로 조사합니다.

개요는 동적 애플리케이션 보안 테스트 (DAST)를 참조하십시오.

경고:
생산 서버에 DAST 스캔을 실행하지 마십시오. 사용자가 수행할 수있는 모든 기능을 수행할 뿐만 아니라 버그를 유발하여 생산 데이터를 수정하거나 손실로 이어질 수 있습니다. DAST 스캔은 테스트 서버에서만 실행하십시오.

DAST 브라우저 기반 분석기는 GitLab이 현대적인 웹 애플리케이션의 취약점을 검사하기 위해 개발했습니다. 스캔은 JavaScript에 많이 의존하는 애플리케이션에 최적화되어 브라우저에서 실행됩니다. 자바스크립트가 많이 사용되는 단일 페이지 애플리케이션과 같은 애플리케이션에 대한 자세한 내용은 DAST가 애플리케이션을 어떻게 스캔하는지를 참조하십시오.

분석기를 CI/CD 파이프라인에 추가하려면 분석기 활성화를 참조하십시오.

DAST가 애플리케이션을 어떻게 스캔하는지

스캔은 다음 단계를 수행합니다:

  1. 인증 (구성된 경우)
  2. 타겟 애플리케이션을 크롤하여 사용자의 동작 (링크 따라가기, 버튼 클릭, 폼 작성 등)을 수행하여 애플리케이션의 표면 영역을 발견합니다.
  3. 크롤 단계에서 발견된 페이지에서 취약점을 검색하는 수동 스캔을 수행합니다.
  4. 크롤 단계에서 기록된 HTTP 요청에 대해 취약점을 검색하기 위해 능동 스캔을 수행합니다.

애플리케이션 크롤

“탐색”이란 버튼을 클릭하거나 폼을 작성하는 것과 같은 페이지에서 사용자가 수행할 수 있는 동작입니다. “탐색 경로”는 사용자가 애플리케이션을 어떻게 탐색할 수 있는지를 나타내는 탐색 동작의 시퀀스입니다. DAST는 탐색 경로를 사용하여 크롤하여 페이지 및 콘텐츠를 발견하고 탐색 경로를 식별합니다.

크롤링은 특별히 제작된 Chromium 브라우저에서 타깃 애플리케이션 URL을 로드하는 한 개의 탐색을 포함하는 탐색 경로로 초기화됩니다. 그런 다음 DAST는 탐색 경로가 모두 크롤될 때까지 탐색 경로를 크롤합니다.

탐색 경로를 크롤하려면 DAST는 브라우저 창을 열고 그 안에 모든 탐색 동작을 수행하도록 지시합니다. 브라우저가 최종 작업의 결과를로드하면 DAST는 사용자가 수행할 수 있는 동작을 검사하고 각각 찾은대로 새로운 탐색을 만들어 새로운 탐색 경로를 형성합니다. 예를 들면:

  1. DAST가 탐색 경로 LoadURL[https://example.com]를 처리합니다.
  2. DAST가 LeftClick[class=menu]LeftClick[id=users] 두 사용자 동작을 발견합니다.
  3. DAST가 LoadURL [https://example.com] -> LeftClick[class=menu]LoadURL[https://example.com] -> LeftClick[id=users] 두 개의 새로운 탐색 경로를 만듭니다.
  4. 크롤링이 두 개의 새로운 탐색 경로에서 시작됩니다.

하나의 HTML 요소가 메뉴에 표시되는 것처럼 응용 프로그램의 여러 위치에 존재하는 것이 일반적입니다. 중복 요소는 크롤러가 동일한 페이지를 다시 크롤하거나 루프에 걸리는 것을 일으킬 수 있습니다. DAST는 HTML 속성을 기준으로 한 요소의 고유성 계산을 사용하여 이전에 크롤 한 새로운 탐색 동작을 버립니다.

수동 스캔

수동 스캔은 크롤 단계 동안 발견된 페이지에서 취약점을 검색합니다. 수동 스캔은 기본적으로 활성화되어 있습니다.

체크는 HTTP 메시지, 쿠키, 스토리지 이벤트, 콘솔 이벤트 및 DOM에서 취약점을 검색합니다. 수동 체크의 예로는 노출된 신용 카드, 노출된 비밀 토큰, 누락된 콘텐츠 보안 정책, 및 신뢰할 수없는 위치로의 redirection을 검색하는 것 등이 있습니다.

개별 체크에 대한 자세한 내용은 체크를 참조하십시오.

능동 스캔

능동 스캔은 크롤 단계 동안 기록된 HTTP 요청에 대해 취약점을 검색하기 위해 공격 페이로드를 주입하는 것입니다. 능동 스캔은 공격적인 공격의 특성으로 인해 기본적으로 비활성화되어 있습니다.

DAST는 각 기록된 HTTP 요청을 주입 위치 (쿼리 값, 헤더 값, 쿠키 값, 폼 게시물 및 JSON 문자열 값 등)에 대해 분석합니다. 공격 페이로드는 주입 위치에 주입되어 새로운 요청을 형성합니다. DAST는 대상 애플리케이션에 새로운 HTTP 요청을 보내어 HTTP 응답을 사용하여 공격의 성공 여부를 결정합니다.

능동 스캔에는 두 가지 유형의 능동 체크가 있습니다:

  • 일치 응답 공격(Response Attack)은 공격의 성공 여부를 결정하기 위해 응답 콘텐츠를 분석합니다. 예를 들어 공격이 시스템 암호 파일을 읽으려고 시도하는 경우 응답 본문에 암호 파일의 증거가있을 때 발견이 만들어집니다.
  • 타이밍 공격은 응답 시간을 사용하여 공격의 성공 여부를 결정합니다. 예를 들어 공격이 대상 애플리케이션을 sleep로 강제하려고 시도하는 경우 응답 시간이 sleep 시간보다 길 경우 발견이 만들어집니다. 타이밍 공격은 거짓 경보를 최소화하기 위해 여러 번 다른 공격 페이로드로 반복됩니다.

단순화된 타이밍 공격은 다음과 같이 작동합니다:

  1. 크롤 단계는 HTTP 요청을 기록합니다 https://example.com?search=people.
  2. DAST는 URL을 분석하여 https://example.com?search=[INJECT]의 URL 매개 변수 주입 위치를 찾습니다.
  3. 능동 체크에서 sleep 10와 같이 리눅스 호스트를 10초 간 sleep 모드로 만드는 페이로드를 정의합니다.
  4. DAST는 주입된 페이로드 https://example.com?search=sleep%2010를 사용하여 대상 애플리케이션에 새로운 HTTP 요청을 보냅니다.
  5. 대상 애플리케이션이 시스템 명령을 확인없이 쿼리 매개 변수 값을 실행하는 경우 system(params[:search])와 같이 취약하게 됩니다.
  6. DAST는 응답 시간이 10초보다 길 경우 발견을 생성합니다.