인증 구성

caution
제품 시스템, 제품 서버 또는 제품 데이터를 포함하는 유효한 자격 증명을 사용하지 마십시오.
caution
인증 스캔(ref:스캔)을 프로덕션 서버에 실행하지 마십시오. 인증된 스캔은 인증된 사용자가 할 수 있는 모든 기능을 수행할 수 있으며, 데이터 수정이나 삭제, 양식 제출, 링크 이동 등이 포함됩니다. 인증된 스캔은 비프로덕션 시스템 또는 서버에 대해만 실행하십시오.

DAST(Dynamic Application Security Testing)는 취약점을 찾을 때 응용 프로그램의 많은 부분을 테스트할 수 있도록 사용자를 로그인시킵니다.

DAST는 브라우저를 사용하여 사용자를 인증하여 로그인 양식에 필요한 JavaScript 및 스타일링이 있는지 확인합니다. DAST는 사용자 이름과 비밀번호 필드를 찾아 각각의 값으로 채웁니다. 로그인 양식이 제출되고 응답이 반환되면 일련의 확인 작업을 통해 인증이 성공했는지 확인합니다. DAST는 대상 응용 프로그램을 크롤링할 때 재사용하기 위해 자격 증명을 저장합니다.

만약 DAST가 인증에 실패하면 스캔이 중지되고 CI 작업이 실패합니다.

인증은 단계별 로그인 양식, 다단계 로그인 양식, 단일 로그인(SSO), 구성된 대상 URL 외의 URL에 대한 인증을 지원합니다.

시작하기

note
분석기의 인증이 애플리케이션의 변경으로 인해 시간이 경과함에 따라 깨지기 쉬우므로 정기적으로 인증이 작동하는지 확인해야 합니다.

인증된 DAST 스캔을 실행하려면:

  • 인증에 대한 필수 조건을 읽으십시오.
  • 인증 사용자의 랜딩 페이지로 타겟 웹사이트(#update-the-target-website)를 업데이트하십시오.
  • 로그인 양식에 사용자 이름, 비밀번호 및 제출 버튼이 단일 페이지에 있는 경우 CI/CD 변수를 사용하여 단계별 로그인 양식 인증을 구성하십시오.
  • 로그인 양식에 사용자 이름과 비밀번호 필드가 서로 다른 페이지에 있는 경우 CI/CD 변수를 사용하여 다단계 로그인 양식 인증을 구성하십시오.
  • 스캔 중에 사용자가 로그아웃되지 않도록 확인하십시오.

Prerequisites

  • 스캔 중에 인증을 받을 사용자의 사용자 이름과 비밀번호가 있습니다.
  • DAST가 애플리케이션에 대해 인증을 수행할 수 있는지 확인하기 위해 알려진 제한 사항을 확인했습니다.
  • 양식 인증을 사용하는 경우 필수 조건을 충족했습니다.
  • 인증이 성공했는지를 검증하는 방법을 고려했습니다.

양식 인증

  • 애플리케이션의 로그인 양식의 URL을 알고 있습니다. 또는 인증 URL에서 로그인 양식으로 이동하는 방법을 알고 있습니다 (로그인 양식으로 이동 참조).
  • DAST가 각각의 값을 입력하는 데 사용하는 사용자 이름 및 비밀번호 HTML 필드의 셀렉터를 알고 있습니다.
  • 로그인 양식을 선택하여 제출하는 데 사용되는 요소의 셀렉터를 알고 있습니다.

사용 가능한 CI/CD 변수

CI/CD variable Type Description
DAST_AUTH_AFTER_LOGIN_ACTIONS string 로그인 후 로그인 확인 전에 실행할 동작의 쉼표로 구분된 디렉터리. 현재 ‘click’ 동작을 지원합니다. 예시: click(on=id:change_to_bar_graph),click(on=css:input[name=username]).
DAST_AUTH_BEFORE_LOGIN_ACTIONS selector DAST_AUTH_USERNAMEDAST_AUTH_PASSWORD를 로그인 양식에 입력하기 전에 클릭할 요소를 나타내는 쉼표로 구분된 셀렉터 디렉터리. 예시: "css:.navigation-menu,css:.login-menu-item".
DAST_AUTH_CLEAR_INPUT_FIELDS boolean 매뉴얼 로그인을 시도하기 전에 사용자 이름 및 비밀번호 필드를 지우는 것을 비활성화합니다. 기본값은 false입니다.
DAST_AUTH_COOKIE_NAMES string 인증에 사용되는 쿠키를 지정하는 쉼표로 구분된 쿠키 이름 디렉터리입니다.
DAST_AUTH_FIRST_SUBMIT_FIELD selector 다단계 로그인 프로세스의 사용자 이름 양식을 제출하는 데 클릭하는 요소를 설명하는 셀렉터. 예시, css:button[type='user-submit'].
DAST_AUTH_PASSWORD_FIELD selector 로그인 양식에서 비밀번호를 입력하는 데 사용되는 요소를 설명하는 셀렉터. 예시: id:password
DAST_AUTH_PASSWORD string 웹사이트에서 인증할 비밀번호. 예시: P@55w0rd!.
DAST_AUTH_REPORT boolean 인증 프로세스 중에 수행된 단계를 자세히 설명하는 보고서를 생성하려면 true로 설정하십시오. 또한 생성된 보고서에 액세스하려면 CI 작업 artifact로 ‘gl-dast-debug-auth-report.html’을 정의해야 합니다. 보고서 내용은 인증 실패를 디버깅하는 데 도움이 됩니다.
DAST_AUTH_SUBMIT_FIELD selector 단일 페이지 로그인 양식의 로그인 양식 또는 다단계 로그인 양식의 비밀번호 양식을 제출하는 데 클릭하는 요소를 설명하는 셀렉터. 예시: css:button[type='submit'].
DAST_AUTH_SUCCESS_IF_AT_URL URL 브라우저의 URL과 비교하기 위해 사용되는 인증이 제출된 후 성공 여부를 결정하는 URL. 예시: "https://example.com/loggedin_page".
DAST_AUTH_SUCCESS_IF_ELEMENT_FOUND selector 로그인 양식이 제출된 후 성공 여부를 확인하는 데 사용되는 존재 여부를 나타내는 요소를 설명하는 셀렉터. 예시: css:.user-photo.
DAST_AUTH_SUCCESS_IF_NO_LOGIN_FORM boolean 로그인 양식이 제출된 후 로그인 양식의 부재를 확인하여 성공한 인증을 확인합니다.
DAST_AUTH_TYPE string 사용할 인증 유형. 예시: basic-digest.
DAST_AUTH_URL URL 대상 웹사이트의 로그인 양식이 있는 페이지의 URL입니다. DAST_AUTH_USERNAMEDAST_AUTH_PASSWORD은 인증된 스캔을 생성하는 데 사용됩니다. 예시: https://login.example.com.
DAST_AUTH_USERNAME_FIELD selector 로그인 양식에서 사용되는 사용자 이름을 입력하는 데 사용되는 요소를 설명하는 셀렉터. 예시: name:username.
DAST_AUTH_USERNAME string 웹사이트에서 인증할 사용자 이름. 예시: admin.
DAST_SCOPE_EXCLUDE_URLS URLs 인증된 스캔 중 스킵할 URL; 쉼표로 구분됩니다. 정규 표현식 구문을 사용하여 여러 URL을 일치시킬 수 있습니다. 예를 들어 .*는 임의의 문자 시퀀스와 일치합니다.

타겟 웹사이트 업데이트

CI/CD 변수 DAST_TARGET_URL을 사용하여 정의된 타겟 웹사이트는 DAST가 응용 프로그램을 크롤링하기 시작하는 URL입니다.

인증된 스캔에서 최상의 크롤 결과를 얻으려면 타겟 웹사이트는 사용자가 인증된 후에만 액세스할 수 있는 URL이어야 합니다. 대체로 이는 사용자가 로그인한 후 랜딩하는 페이지의 URL입니다.

예시: ```yaml include: - template: DAST.gitlab-ci.yml

dast: variables: DAST_TARGET_URL: “https://example.com/dashboard/welcome” DAST_AUTH_URL: “https://example.com/login” ```

HTTP 인증 구성

HTTP authentication scheme과 같은 Basic Authentication과 같은 인증 체계를 사용하려면 DAST_AUTH_TYPE 값을 basic-digest로 설정할 수 있습니다. 다른 Negotiate 또는 NTLM과 같은 체계도 작동할 수 있지만 현재 자동화된 테스트 커버리지 부족으로 공식적으로 지원되지는 않습니다.

구성에는 DAST 작업을 위해 DAST_AUTH_TYPE, DAST_AUTH_URL, DAST_AUTH_USERNAME, DAST_AUTH_PASSWORD라는 CI/CD 변수가 정의되어야 합니다. 고유한 로그인 URL이 없는 경우에는 DAST_AUTH_URLDAST_TARGET_URL과 동일한 URL로 설정하십시오.

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

dast:
  variables:
    DAST_TARGET_URL: "https://example.com"
    DAST_AUTH_TYPE: "basic-digest"
    DAST_AUTH_URL: "https://example.com"

YAML 작업 정의 파일에서 DAST_AUTH_USERNAMEDAST_AUTH_PASSWORD를 정의하지 않도록 주의하십시오. 이렇게 하면 보안 문제가 발생할 수 있습니다. 대신, GitLab UI를 사용하여 이를 마스킹된 CI/CD 변수로 만드는 것이 좋습니다. 자세한 내용은 Custom CI/CD variables을 참조하십시오.

단계별 로그인 폼 구성

단계별 로그인 폼은 모든 로그인 폼 요소가 단일 페이지에 있는 폼입니다. 구성에는 DAST 작업을 위해 DAST_AUTH_URL, DAST_AUTH_USERNAME, DAST_AUTH_USERNAME_FIELD, DAST_AUTH_PASSWORD, DAST_AUTH_PASSWORD_FIELD, 그리고 DAST_AUTH_SUBMIT_FIELD라는 CI/CD 변수가 정의되어야 합니다.

예를 들어 작업 정의 YAML에서 URL 및 필드의 선택기를 설정해야 합니다.

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

dast:
  variables:
    DAST_TARGET_URL: "https://example.com"
    DAST_AUTH_URL: "https://example.com/login"
    DAST_AUTH_USERNAME_FIELD: "css:[name=username]"
    DAST_AUTH_PASSWORD_FIELD: "css:[name=password]"
    DAST_AUTH_SUBMIT_FIELD: "css:button[type=submit]"

YAML 작업 정의 파일에서 DAST_AUTH_USERNAMEDAST_AUTH_PASSWORD를 정의하지 않도록 주의하십시오. 이렇게 하면 보안 문제가 발생할 수 있습니다. 대신, GitLab UI를 사용하여 이를 마스킹된 CI/CD 변수로 만드는 것이 좋습니다. 자세한 내용은 Custom CI/CD variables을 참조하십시오.

다단계 로그인 폼 구성

다단계 로그인 폼은 이중 페이지를 가집니다. 첫 번째 페이지에는 사용자 이름 폼과 다음 제출 버튼이 있습니다. 사용자 이름이 유효한 경우, 다음 페이지의 두 번째 폼에는 비밀번호와 폼 제출 버튼이 있습니다.

구성에는 DAST 작업을 위해 다음과 같은 CI/CD 변수가 정의되어야 합니다:

  • DAST_AUTH_URL
  • DAST_AUTH_USERNAME
  • DAST_AUTH_USERNAME_FIELD
  • DAST_AUTH_FIRST_SUBMIT_FIELD
  • DAST_AUTH_PASSWORD
  • DAST_AUTH_PASSWORD_FIELD
  • DAST_AUTH_SUBMIT_FIELD

예를 들어 작업 정의 YAML에서 URL 및 필드의 선택기를 설정해야 합니다.

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

dast:
  variables:
    DAST_TARGET_URL: "https://example.com"
    DAST_AUTH_URL: "https://example.com/login"
    DAST_AUTH_USERNAME_FIELD: "css:[name=username]"
    DAST_AUTH_FIRST_SUBMIT_FIELD: "css:button[name=next]"
    DAST_AUTH_PASSWORD_FIELD: "css:[name=password]"
    DAST_AUTH_SUBMIT_FIELD: "css:button[type=submit]"

YAML 작업 정의 파일에서 DAST_AUTH_USERNAMEDAST_AUTH_PASSWORD를 정의하지 않도록 주의하십시오. 이렇게 하면 보안 문제가 발생할 수 있습니다. 대신, GitLab UI를 사용하여 이를 마스킹된 CI/CD 변수로 만드는 것이 좋습니다. 자세한 내용은 Custom CI/CD variables을 참조하십시오.

단일 로그인(SSO)에 대한 구성

대부분의 경우 사용자가 애플리케이션에 로그인할 수 있는 경우, DAST도 로그인할 수 있습니다. 싱글 사인 온을 사용하는 응용 프로그램의 경우 DAST의 경우 single-step 또는 multi-step 로그인 폼 구성 가이드를 사용하여 DAST 인증을 구성해야 합니다.

DAST는 사용자가 외부 신원 공급자 사이트로 리디렉션되어 로그인하는 인증 프로세스도 지원합니다. SSO 인증 프로세스가 지원되는지 여부를 결정하려면 DAST 인증의 알려진 제한 사항을 확인하십시오.

로그인 폼으로 이동하도록 클릭

DAST_AUTH_URL에서부터 클릭할 요소의 경로를 제공하는 DAST_AUTH_BEFORE_LOGIN_ACTIONS를 정의하십시오. 이 방법은 로그인 폼을 팝업(모달) 창에 표시하는 응용 프로그램이나 로그인 폼이 고유한 URL이 없는 경우에 적합합니다.

예를 들어:

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

dast:
  variables:
    DAST_TARGET_URL: "https://example.com"
    DAST_AUTH_URL: "https://example.com/login"
    DAST_AUTH_BEFORE_LOGIN_ACTIONS: "css:.navigation-menu,css:.login-menu-item"

로그아웃 URL 제외하기

인증된 스캔을 실행하는 동안 DAST가 로그아웃 URL을 크롤링하면 사용자가 로그아웃되어 스캔의 나머지 부분이 인증되지 않은 상태로 유지됩니다. 따라서 CI/CD 변수 DAST_SCOPE_EXCLUDE_URLS를 사용하여 로그아웃 URL을 제외하는 것이 좋습니다. DAST는 제외된 URL에 액세스하지 않으므로 사용자가 로그아웃 상태로 유지됩니다.

제공된 URL은 기본 URL의 상대적인 URL 경로의 절대 URL이거나 정규식일 수 있습니다. 예:

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

dast:
  variables:
    DAST_TARGET_URL: "https://example.com/welcome/home"
    DAST_SCOPE_EXCLUDE_URLS: "https://example.com/logout,/user/.*/logout"

요소 선택기 찾기

선택기는 브라우저의 페이지에 표시된 요소의 위치를 지정하는 데 CI/CD 변수에서 사용됩니다. 선택기는 타입:검색 문자열 형식을 갖고 있습니다. DAST는 타입에 따라 검색 문자열을 기반으로 선택기를 검색합니다.

선택기 유형 설명
css css:.password-field 제공된 CSS 선택기를 가진 HTML 요소를 검색합니다. 성능상의 이유로 선택기는 가능한 구체적이어야 합니다.
id id:element 지정된 요소 ID를 가진 HTML 요소를 검색합니다.
name name:element 지정된 요소 이름을 가진 HTML 요소를 검색합니다.
xpath xpath://input[@id="my-button"]/a 지정된 XPath를 가진 HTML 요소를 검색합니다. XPath 검색은 다른 검색보다 성능이 예상보다 낮을 것으로 예상됩니다.
지정되지 않음 a.click-me 기본적으로 CSS 선택기를 사용하여 검색됩니다. cautionDeprecated in GitLab 15.8. Replaced by explicitly declaring the selector type.

구글 크롬에서 선택기 찾기

Chrome DevTools 요소 선택 도구는 선택기를 찾는 효과적인 방법입니다.

  1. Chrome을 열고, 예를 들어 사이트의 로그인 페이지로 이동하십시오.
  2. macOS의 경우 키보드 단축키 Command + Shift + c, Windows 또는 Linux의 경우 Ctrl + Shift + c를 사용하여 Chrome DevTools에서 요소 탭을 엽니다.
  3. 페이지에서 요소를 선택하여 선택하려면 도구를 선택합니다. search-elements
  4. 선택한 페이지의 필드를 하이라이트합니다.
  5. 도구가 활성화되면 상세 정보, 즉 선택기의 후보가 될 수 있는 속성을 볼 수 있습니다. highlight
  6. 예를 들어 id="user_login"가 좋은 후보인 것으로 보입니다. 이를 DAST 사용자 이름 필드의 선택기로 사용하기 위해 DAST_AUTH_USERNAME_FIELD: "id:user_login"로 설정할 수 있습니다.

위 예에서, DAST_AUTH_USERNAME_FIELD: "id:user_login"로 설정하여 DAST 사용자 이름 필드의 선택기로 사용할 수 있습니다.

올바른 셀렉터 선택

순간적인 셀렉터 선택은 애플리케이션의 변경에 견고한 스캔을 유도합니다.

순서대로, 셀렉터를 선택해야 하는 경우:

  • id 필드. 이러한 필드는 일반적으로 페이지에서 고유하며, 드물게 변경됩니다.
  • name 필드. 이러한 필드는 일반적으로 페이지에서 고유하며, 드물게 변경됩니다.
  • 해당 필드에 특정한 class 값, 예를 들어 css:.username와 같은 셀렉터를 사용하여 username 필드의 username 클래스와 같은 특정한 클래스 값을 사용합니다.
  • 필드별 데이터 속성의 존재, 예를 들어 data-username 필드가 username 필드에 어떤 값이든 존재하는 경우 "css:[data-username]"와 같은 셀렉터를 사용합니다.
  • 여러 class 계층 값, 예를 들어 css:.login-form .username과 같은 셀렉터를 사용하여 여러 요소가 username 클래스를 가지고 있지만 login-form 클래스가 있는 요소 내에 하나만 중첩되어 있는 경우.

특정 필드를 찾기 위해 셀렉터를 사용할 때 다음에서 검색하는 것을 피해야 합니다:

  • 동적으로 생성된 id, name, 속성, class, 또는 value.
  • column-10dark-grey와 같은 일반적인 클래스 이름.
  • 다른 셀렉터 검색보다 성능이 덜 한 XPath 검색.
  • css:*xpath://*로 시작하는 스코프가 없는 검색과 같은 스코프검색.

인증이 성공적으로 확인

DAST가 로그인 양식을 제출한 후, 검증 프로세스가 진행되어 인증이 성공했는지 여부를 결정합니다. 인증에 실패하면 스캔이 오류로 중지됩니다.

로그인 양식을 제출한 후, 다음의 경우 인증이 성공하지 못한 것으로 판명됩니다:

  • 로그인 제출 HTTP 응답에 400 또는 500 시리즈 상태 코드가 있는 경우.
  • 어떤 검증 체크가 실패한 경우.
  • 충분히 무작위 값을 갖는 인증 토큰이 인증 프로세스 중에 설정되지 않은 경우.

검증 체크

검증 체크는 인증이 완료된 후 브라우저 상태를 확인하여 추가적으로 인증이 성공했는지 여부를 결정합니다.

검증 체크가 구성되지 않은 경우, DAST는 로그인 양식이 없음을 확인하기 위해 로그인 양식의 부재를 확인합니다.

URL을 기준으로 확인

DAST_AUTH_SUCCESS_IF_AT_URL을 로그인 양식이 성공적으로 제출된 후 브라우저 탭에 표시된 URL로 정의합니다.

DAST는 인증 후 브라우저의 URL과 검증 URL을 비교합니다. 둘이 같지 않은 경우 인증이 실패합니다.

예:

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

dast:
  variables:
    DAST_TARGET_URL: "https://example.com"
    DAST_AUTH_SUCCESS_IF_AT_URL: "https://example.com/user/welcome"

요소의 존재를 기준으로 확인

DAST_AUTH_SUCCESS_IF_ELEMENT_FOUND를 로그인 양식이 성공적으로 제출된 후 페이지에서 하나 또는 여러 요소를 찾는 셀렉터로 정의합니다. 요소를 찾을 수 없는 경우, 인증이 실패합니다. 로그인에 실패한 페이지에서 셀렉터를 찾는 것은 요소가 없어야 합니다.

예:

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

dast:
  variables:
    DAST_TARGET_URL: "https://example.com"
    DAST_AUTH_SUCCESS_IF_ELEMENT_FOUND: "css:.welcome-user"

로그인 양식의 부재를 기준으로 확인

DAST_AUTH_SUCCESS_IF_NO_LOGIN_FORM"true"로 정의하여 DAST가 로그인 양식을 성공적으로 제출한 후 페이지에서 로그인 양식을 검색하도록 지정합니다. 로그인 후에도 로그인 양식이 여전히 존재하는 경우, 인증이 실패합니다.

예:

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

dast:
  variables:
    DAST_TARGET_URL: "https://example.com"
    DAST_AUTH_SUCCESS_IF_NO_LOGIN_FORM: "true"

인증 토큰

DAST는 인증 프로세스 중에 설정된 인증 토큰을 기록합니다. 인증 토큰은 DAST가 새 브라우저에 로드될 때 적용되며, 사용자가 스캔 도중 로그인된 상태를 유지할 수 있습니다.

인증 토큰을 기록하기 위해 DAST는 인증 프로세스 전에 응용 프로그램에 의해 설정된 쿠키, 로컬 리포지터리, 세션 리포지터리 값을 스냅샷으로 촬영합니다. DAST는 인증 후에도 마찬가지로 수행하고 차이를 확인하여 인증 프로세스에서 생성된 값을 결정합니다.

DAST는 충분히 “무작위” 값을 가진 쿠키, 로컬 리포지터리 및 세션 리포지터리 값을 인증 토큰으로 간주합니다. 예를 들어 sessionID=HVxzpS8GzMlPAc2e39uyIVzwACIuGe0H은 인증 토큰으로 볼 수 있으며, ab_testing_group=A1은 그렇지 않습니다.

CI/CD 변수 DAST_AUTH_COOKIE_NAMES을 사용하여 DAST가 사용하는 인증 쿠키의 이름을 지정하고 DAST가 사용하는 무작위성 검사를 우회할 수 있습니다. 이는 인증 프로세스를 보다 견고하게 만들 뿐만 아니라, 인증 토큰을 검사하는 취약성을 증가시킬 수 있습니다.

예:

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

dast:
  variables:
    DAST_TARGET_URL: "https://example.com"
    DAST_AUTH_COOKIE_NAMES: "sessionID,refreshToken"

알려진 제약 사항

  • DAST는 인증 흐름에 CAPTCHA를 우회할 수 없습니다. 스캔되는 응용 프로그램의 테스트 환경에서 이러한 기능을 끄십시오.
  • DAST는 SMS, 생체 인증 또는 인증자 앱을 사용하여 일회용 비밀번호 (OTP)와 같은 다중 인증을 처리할 수 없습니다. 스캔되는 응용 프로그램의 테스트 환경에서 이러한 기능을 끄십시오.
  • DAST는 로그인 중에 인증 토큰을 설정하지 않는 응용 프로그램에 대한 인증을 처리할 수 없습니다.
  • DAST는 두 개 이상의 입력이 필요한 응용 프로그램에 대한 인증을 처리할 수 없습니다. 두 개의 입력, 즉 사용자 이름 및 비밀번호를 제공해야 합니다.

문제 해결

로그는 DAST가 인증 프로세스 중에 하는 일과 예상하는 것에 대한 통찰력을 제공합니다. 더 자세한 정보는 인증 보고서를 구성하십시오.

특정 오류 메시지나 상황에 대한 자세한 정보는 알려진 문제를 참조하십시오.

사용자의 인증을 인증하는 데 사용하는 브라우저 기반 분석기를 위해 고급 문제 해결을 위해 브라우저 기반 문제 해결을 참조하십시오.

로그 읽기

DAST CI/CD 작업의 콘솔 출력은 AUTH 로그 모듈을 사용하여 인증 프로세스에 대한 정보를 보여줍니다. 예를 들어 로그인 양식을 제출한 다음에 홈페이지가 표시되어야 한다는 이유로 다단계 로그인 양식에 대한 인증 실패가 표시됩니다.

2022-11-16T13:43:02.000 INF AUTH  인증을 시도 중
2022-11-16T13:43:02.000 INF AUTH  로그인 페이지 로드 중 LoginURL=https://example.com/login
2022-11-16T13:43:10.000 INF AUTH  다단계 인증 감지
2022-11-16T13:43:15.000 INF AUTH  사용자 제출이 성공적인지 확인 중 true_when="HTTP 상태 코드 < 400"
2022-11-16T13:43:15.000 INF AUTH  요구 사항 충족, 로그인 HTTP 메시지가 없음 want="HTTP 상태 코드 < 400"
2022-11-16T13:43:20.000 INF AUTH  로그인 시도가 성공적인지 확인 중 true_when="HTTP 상태 코드 < 400 and has authentication token and no login form found (no element found when searching using selector css:[id=email] or css:[id=password] or css:[id=submit])"
2022-11-16T13:43:20.000 INF AUTH  요구 사항 미충족, 로그인 양식이 발견됨 want="no login form found (no element found when searching using selector css:[id=email] or css:[id=password] or css:[id=submit])"
2022-11-16T13:43:21.000 INF AUTH  로그인 시도 실패 error="authentication failed: failed to authenticate user"

인증 보고서 구성

caution
인증 보고서에는 로그인을 수행하는 데 사용된 자격 증명과 같은 민감한 정보가 포함될 수 있습니다.

인증 보고서는 인증 실패의 원인을 이해하는 데 도움이 되도록 CI/CD 작업 artifact로 저장할 수 있습니다.

보고서에는 로그인 프로세스 중에 수행된 단계, HTTP 요청 및 응답, 문서 객체 모델(DOM) 및 스크린샷이 포함되어 있습니다.

dast-auth-report

인증 디버그 보고서가 내보내어진 예제 구성은 다음과 같이 보일 수 있습니다:

dast:
  variables:
    DAST_TARGET_URL: "https://example.com"
    DAST_AUTH_REPORT: "true"

알려진 문제

로그인 양식을 찾을 수 없음

DAST는 로그인 URL을로드할 때 로그인 양식을 찾지 못하여 실패했습니다. 이는 인증 URL을로드하지 못했기 때문입니다. 로그에는 다음과 같은 치명적 오류가 보고됩니다:

2022-12-07T12:44:02.838 INF AUTH  loading login page LoginURL=[authentication URL]
2022-12-07T12:44:11.119 FTL MAIN  authentication failed: login form not found

제안된 조치:

  • HTTP 응답을 확인하려면 인증 보고서를 생성하세요.
  • 대상 응용 프로그램의 인증이 배포되었고 실행 중인지 확인하세요.
  • DAST_AUTH_URL이 올바른지 확인하세요.
  • GitLab Runner가 DAST_AUTH_URL에 액세스할 수 있는지 확인하세요.
  • 사용하는 경우 사용자 지정이 필요한 경우 DAST_AUTH_BEFORE_LOGIN_ACTIONS를 확인하세요.

스캔이 인증된 페이지를 크롤하지 않음

인증 프로세스 중에 DAST가 잘못된 인증 토큰을 캡처하면 스캔은 인증된 페이지를 크롤할 수 없습니다. 쿠키와 저장된 인증 토큰의 이름이 로그에 기록됩니다. 예를 들어:

2022-11-24T14:42:31.492 INF AUTH  authentication token cookies names=["sessionID"]
2022-11-24T14:42:31.492 INF AUTH  authentication token storage events keys=["token"]

제안된 조치:

  • 인증 보고서를 생성하고 로그인 제출에서 스크린샷을 확인하여 로그인이 예상대로 작동하는지 확인하세요.
  • 기록된 인증 토큰이 응용 프로그램에서 사용하는 토큰인지 확인하세요.
  • 쿠키를 사용하여 인증 토큰을 저장하는 경우 DAST_AUTH_COOKIE_NAMES를 사용하여 인증 토큰 쿠키의 이름을 설정하세요.

선택기로 요소를 찾을 수 없음

DAST는 사용자 이름, 비밀번호, 첫 번째 제출 버튼 또는 제출 버튼 요소를 찾지 못했습니다. 로그에는 다음과 같은 치명적 오류가 보고됩니다:

2022-12-07T13:14:11.545 FTL MAIN  authentication failed: unable to find elements with selector: css:#username

제안된 조치:

  • 인증 보고서를 생성하고 로그인 페이지에서 페이지가 올바르게 로드되었는지 확인하기 위해 스크린샷을 사용하세요.
  • 브라우저에서 로그인 페이지를로드하고 DAST_AUTH_USERNAME_FIELD, DAST_AUTH_PASSWORD_FIELD, DAST_AUTH_FIRST_SUBMIT_FIELD, DAST_AUTH_SUBMIT_FIELD에 구성된 선택기가 올바른지 확인하세요.

사용자 인증에 실패함

DAST가 실패한 로그인 확인 검사로 인해 인증에 실패했습니다. 로그에 다음과 같은 치명적 오류가 보고됩니다:

2022-12-07T06:39:49.483 INF AUTH  verifying if login attempt was successful true_when="HTTP status code < 400 and has authentication token and no login form found (no element found when searching using selector css:[name=username] or css:[name=password] or css:button[type=\"submit\"])"
2022-12-07T06:39:49.484 INF AUTH  requirement is satisfied, HTTP login request returned status code 303 url=http://auth-manual:8090/login want="HTTP status code < 400"
2022-12-07T06:39:49.513 INF AUTH  requirement is unsatisfied, login form was found want="no login form found (no element found when searching using selector css:[name=username] or css:[name=password] or css:button[type=\"submit\"])"
2022-12-07T06:39:49.589 INF AUTH  login attempt failed error="authentication failed: failed to authenticate user"
2022-12-07T06:39:53.626 FTL MAIN  authentication failed: failed to authenticate user

제안된 조치:

  • 로그에서 requirement is unsatisfied를 찾아 해당 오류에 대응하세요.

요구 사항 미충족, 로그인 양식이 발견됨

일반적으로 응용 프로그램은 사용자가 로그인하면 대시보드를 표시하고 사용자 이름 또는 비밀번호가 잘못되었을 때 로그인 양식과 함께 오류 메시지를 표시합니다.

DAST가 사용자를 인증한 후에 표시된 페이지에서 로그인 양식을 감지했을 때 발생하는 오류로, 로그인 시도가 실패했음을 나타냅니다.

2022-12-07T06:39:49.513 INF AUTH  requirement is unsatisfied, login form was found want="no login form found (no element found when searching using selector css:[name=username] or css:[name=password] or css:button[type=\"submit\"])"

제안된 조치:

  • 사용된 사용자 이름과 암호/인증 자격 증명이 올바른지 확인하세요.
  • 인증 보고서를 생성하여 로그인 제출요청이 올바른지 확인하세요.
  • 사용자 인증 보고서 로그인 제출 요청과 응답이 비어 있는 경우가 있습니다. 이는 웹소켓이나 AJAX를 사용하여 로그인 양식을 제출할 때와 같이 전체 페이지를 다시로드하는 요청이 없는 경우 발생합니다.
  • 사용자 인증 후 표시된 페이지에 실제로 로그인 양식 선택기와 일치하는 요소가 있는 경우 DAST_AUTH_SUCCESS_IF_AT_URL 또는DAST_AUTH_SUCCESS_IF_ELEMENT_FOUND를 사용하여 로그인 시도를 확인하는 다른 방법을 구성하세요.

요구 사항 미충족, 선택기로 반환된 결과 없음

DAST는 사용자 로그인 후에 표시된 페이지에서DAST_AUTH_SUCCESS_IF_ELEMENT_FOUND에 제공된 선택기와 일치하는 요소를 찾을 수 없습니다.

2022-12-07T06:39:33.239 INF AUTH  requirement is unsatisfied, searching DOM using selector returned no results want="has element css:[name=welcome]"

제안된 조치:

  • 인증 보고서를 생성하고로그인 제출에서 예상 페이지가 표시되는지 스크린샷을 확인하세요.
  • DAST_AUTH_SUCCESS_IF_ELEMENT_FOUND선택기가 올바른지 확인하세요.

요구 사항 미충족, 브라우저가 URL에 있지 않음

DAST는 사용자 로그인 후에 표시된 페이지가DAST_AUTH_SUCCESS_IF_AT_URL에 따라 예상되는 URL과 다른 URL을 가지고 있음을 감지했습니다.

2022-12-07T11:28:00.241 INF AUTH  requirement is unsatisfied, browser is not at URL browser_url="https://example.com/home" want="is at url https://example.com/user/dashboard"

제안된 조치:

  • 인증 보고서를 생성하고로그인 제출에서 예상 페이지가 표시되는지 스크린샷을 확인하세요.
  • DAST_AUTH_SUCCESS_IF_AT_URL이 올바른지 확인하세요.

요구 사항 미충족, HTTP 로그인 요청 상태 코드

로그인 양식을로드하거나 양식을 제출할 때 HTTP 응답의 상태 코드가 400(클라이언트 오류) 또는 500(서버 오류)였습니다.

2022-12-07T06:39:53.626 INF AUTH  requirement is unsatisfied, HTTP login request returned status code 502 url="https://example.com/user/login" want="HTTP status code < 400"
  • 사용된 사용자 이름과 암호/인증 자격 증명이 올바른지 확인하세요.
  • 인증 보고서를 생성하고로그인 제출요청이 올바른지 확인하세요.
  • 대상 응용 프로그램이 예상대로 작동하는지 확인하세요.

요구 사양 미준수, 인증 토큰 없음

DAST는 인증 프로세스 중에 생성된 인증 토큰을 감지하지 못했습니다.

2022-12-07T11:25:29.010 INF AUTH  인증 토큰 쿠키 이름=[]
2022-12-07T11:25:29.010 INF AUTH  인증 토큰 저장 이벤트 키=[]
2022-12-07T11:25:29.010 INF AUTH  요구 사양 미준수, 기본 인증, 쿠키 또는 저장 이벤트 인증 토큰이 감지되지 않았습니다 want="인증 토큰이 있어야 함"

제안된 조치:

  • 인증 보고서를 생성하고 로그인 제출에서 스크린샷을 확인하여 로그인이 예상대로 작동했는지 확인하세요.
  • 브라우저의 개발자 도구를 사용하여 로그인 중에 생성된 쿠키 및 로컬/세션 저장 객체를 조사하세요. 충분히 무작위 값으로 생성된 인증 토큰이 있는지 확인하세요.
  • 인증 토큰을 저장하기 위해 쿠키를 사용하는 경우 DAST_AUTH_COOKIE_NAMES을 사용하여 인증 토큰 쿠키의 이름을 설정하세요.