Web Security Scanner 발견 항목 문제 해결

>

Web Security Scanner 발견 항목 해석, 재생산, 수정

취약점 종류

Web Security Scanner는 다음과 같은 종류의 취약점을 감지합니다.

  • 교차 사이트 스크립팅(XSS)
  • 플래시 삽입
  • 혼합 콘텐츠
  • 일반 텍스트 비밀번호
  • 안전하지 않은 자바스크립트 라이브러리 사용

이러한 취약점이 발견되면 자세히 알아볼 수 있도록 결과가 강조표시됩니다.

로그에 미치는 영향

Web Security Scanner 스캔 추적이 로그 파일에 나타납니다. 예를 들어 Web Security Scanner는 ~sfi9876/sfi9876와 같이 비정상적인 문자열에 대한 요청을 생성합니다. 그러면 스캔에서 애플리케이션의 오류 페이지를 검사할 수 있습니다. 이와 같이 의도적으로 잘못된 페이지 요청은 로그에 나타납니다.

Web Security Scanner 발견 항목 문제 해결

다음은 다양한 유형의 Web Security Scanner 발견 항목을 해결하는 방법입니다.

XSS

Web Security Scanner의 교차 사이트 스크립팅(XSS) 삽입 테스트 기능은 사용자가 수정할 수 있는 필드에 무해한 테스트 문자열을 삽입하고 다양한 사용자 작업을 수행하는 방법으로 삽입 공격을 시뮬레이션합니다. 커스텀 감지기는 이 테스트 중에 브라우저와 DOM을 관찰하여 삽입이 성공했는지 여부를 확인하고 악용 가능성을 평가합니다.

테스트 문자열에 포함된 자바스크립트가 순조롭게 실행되면 Chrome 디버거가 시작됩니다. 테스트 문자열을 실행할 수 있으면 페이지에서 자바스크립트를 삽입하고 실행할 수 있습니다. 공격자가 이 문제를 발견한다면 악의적인 링크를 클릭한 사용자(피해자)로 가장하여 원하는 자바스크립트를 실행할 위험이 있습니다.

일부 경우에는 브라우저에서 테스트 문자열이 파싱되기 전에 테스트 대상 애플리케이션이 해당 문자열을 수정할 수도 있습니다. 예를 들어 애플리케이션이 입력의 유효성을 검사하거나 필드의 크기를 제한할 수 있습니다. 브라우저가 이 수정된 테스트 문자열을 실행하려고 하면 실행이 중단되고 자바스크립트 실행 오류가 발생할 수 있습니다. 이는 삽입 문제이지만 악용될 수는 없습니다.

이 문제를 해결하려면 테스트 문자열 수정이 가능한지 수동으로 확인하여 문제가 XSS 취약점인지 확인해야 합니다. 이에 대한 자세한 방법은 교차 사이트 스크립팅을 참조하세요.

이 문제를 해결하는 방법에는 여러 가지가 있습니다. 권장되는 수정은 모든 출력을 이스케이프 처리하고 컨텍스트별 자동 이스케이프 처리를 지원하는 템플릿 시스템을 사용하는 것입니다.

XSS_ANGULAR_CALLBACK

사용자가 제공한 문자열을 Angular로 보간하면 AngularJS 모듈에 교차 사이트 스크립팅(XSS) 취약점이 발생할 수 있습니다. 사용자가 제공한 값을 AngularJS 보간에 삽입하면 다음과 같은 공격이 허용될 수 있습니다.

  • 공격자가 브라우저에 렌더링된 페이지에 임의의 코드를 삽입할 수 있습니다.
  • 공격자가 페이지 원본에서 희생자 브라우저를 대신해서 작업을 수행할 수 있습니다.

이 잠재적 취약점을 재현하려면 스캔을 실행한 후 Google Cloud Console의 재현 URL 링크를 따르세요. 이 링크를 통해 알림 대화상자를 바로 열거나 문자열 XSSDETECTED을 삽입하여 공격자가 코드를 실행할 수 있음을 증명할 수 있습니다. 삽입할 경우 브라우저의 개발자 도구를 열고 XSSDETECTED를 검색하여 정확한 삽입 위치를 찾을 수 있습니다.

XSS_ERROR

XSS_ERROR 발견 항목은 자바스크립트 결함으로 인한 잠재적인 XSS 버그입니다. 일부 경우에는 브라우저에서 테스트 문자열이 파싱되기 전에 테스트 대상 애플리케이션이 해당 문자열을 수정할 수도 있습니다. 브라우저가 이 수정된 테스트 문자열을 실행하려고 하면 실행이 중단되고 자바스크립트 실행 오류가 발생할 수 있습니다. 이는 삽입 문제이지만 악용될 수는 없습니다.

이 문제를 해결하려면 테스트 문자열 수정이 가능한지 수동으로 확인하여 문제가 XSS 취약점인지 확인해야 합니다. 이에 대한 자세한 방법은 교차 사이트 스크립팅을 참조하세요.

ROSETTA_FLASH

Web Security Scanner는 요청 매개변수의 값이 응답 시작 부분에 다시 반영되는 것을 발견할 수 있습니다(예시: JSONP를 사용하는 요청). 이를 플래시 삽입이라고도 합니다. 일부 경우에 공격자는 자신이 의도한 응답이 보안상 취약한 웹 애플리케이션에서 제공된 플래시 파일인 것처럼 위장하여 브라우저에서 해당 응답이 실행되도록 할 수 있습니다.

이 문제를 해결하려면 HTTP 응답의 시작 부분에 사용자가 제어할 수 있는 데이터를 포함하지 마세요.

MIXED_CONTENT

Web Security Scanner는 수동적으로 HTTP 트래픽을 관찰하고 HTTPS 페이지의 컨텍스트에서 HTTP를 통해 자바스크립트 또는 CSS 파일에 대한 요청이 수행될 때 이를 감지합니다. 이 시나리오에서 중간에 데이터를 가로채는 공격자가 HTTP 리소스를 변조하여 리소스를 로드하는 웹사이트에 대한 전체 액세스 권한을 획득하거나 사용자가 수행한 작업을 모니터링할 수 있습니다.

이 문제를 해결하려면 상대 HTTP 링크를 사용합니다. 예를 들어 http:////로 바꿉니다.

OUTDATED_LIBRARY

Web Security Scanner는 포함 라이브러리 버전에 보안 문제가 있는 것으로 알려져 있는지 확인할 수 있습니다. Cloud Security Scanner는 서명 기반 스캐너로서, 사용 중인 라이브러리의 버전을 확인하고 이를 알려진 취약 라이브러리 목록과 대조합니다. 버전 감지에 실패하거나 라이브러리가 수동으로 패치된 경우에는 거짓양성 결과가 나타날 수 있습니다.

이 문제를 해결하려면 안전한 것으로 알려진 버전의 포함 라이브러리로 업데이트합니다.

CLEAR_TEXT_PASSWORD

Web Security Scanner는 애플리케이션이 비밀번호 필드를 일반 텍스트로 전송하는 것으로 보이는지 확인할 수 있습니다. 공격자가 네트워크 트래픽을 도청하고 비밀번호 필드를 스니핑할 수 있습니다.

클라이언트와 서버 간에 전달되는 중요한 정보를 보호하려면 다음과 같은 예방 조치를 취합니다.

  • TLS/SSL 인증서를 사용합니다.
  • 비밀번호 필드가 포함된 페이지에서는 항상 HTTPS를 사용합니다.
  • 양식 작업 속성이 항상 HTTPS URL을 가리키는지 확인합니다.

INVALID_CONTENT_TYPE

Web Security Scanner는 응답의 Content-Type HTTP 헤더와 일치하지 않는 리소스가 로드되었음을 발견할 수 있습니다. 이 시나리오에서 애플리케이션은 잘못된 콘텐츠 유형이 있거나 X-Content-Type-Options: nosniff 헤더가 없는 민감한 콘텐츠를 반환합니다.

이 취약점을 해결하려면 다음을 확인합니다.

  • JSON 응답은 Content-Type 헤더 application/json로 제공됩니다.
  • 기타 민감한 응답은 적절한 MIME 유형으로 제공되어야 합니다.
  • HTTP 헤더 X-Content-Type-Options: nosniff로 콘텐츠 제공

INVALID_HEADER

Web Security Scanner는 보안 헤더에 구문 오류가 있는지 확인하고 잘못된 형식이나 잘못된 값을 가져올 수 있습니다. 따라서 해당 헤더는 브라우저에서 무시됩니다.

유효한 헤더는 다음 섹션에 설명되어 있습니다.

Referrer-Policy 헤더

유효한 리퍼러 정책에는 다음 값 중 하나가 포함됩니다.

  • 빈 문자열
  • no-referrer
  • no-referrer-when-downgrade
  • same-origin
  • origin
  • strict-origin
  • origin-when-cross-origin
  • strict-origin-when-cross-origin
  • unsafe-url

X-Frame-Options 헤더

올바른 X-Frame-Options 헤더에는 다음 값만 포함될 수 있습니다.

  • DENY: 모든 프레이밍 금지
  • SAMEORIGIN: 최상위 URL 원본이 동일한 경우 프레이밍을 허용합니다.
  • ALLOW-FROM URL

ALLOW-FROM URL은 Chrome에서 지원되지 않습니다. 여러 X-Frame-Options는 허용되지 않습니다.

X-Content-Type-Options 헤더

올바른 X-Content-Type-Options 헤더에는 하나의 값, 즉 nosniff만 포함될 수 있습니다.

X-XSS-Protection 헤더

올바른 X-XSS-Protection 헤더는 0('사용 중지') 또는 1('사용 설정')로 시작해야 합니다. 그런 다음 보호 조치를 사용 설정하는 경우에만 최대 2개의 옵션을 추가할 수 있습니다.

  • mode=block는 XSS를 필터링하는 대신 빈 페이지를 표시합니다.
  • report=URL에서 URL에 보고서를 보냅니다.

옵션은 세미콜론으로 구분해야 합니다(예시: 1; mode=block; report=URI). 후행 세미콜론이 없는지 확인합니다.

MISSPELLED_SECURITY_HEADER_NAME

Web Security Scanner는 보안 헤더 이름에 철자 오류가 있는지 확인할 수 있습니다. 형식에 철자 오류가 있으면 해당 보안 헤더가 적용되지 않으므로 헤더를 수정해야 합니다.

이 취약점을 재현하려면 브라우저 개발자 도구의 네트워크 탭에서 철자 오류를 확인합니다.

MISMATCHING_SECURITY_HEADER_VALUES

Web Security Scanner는 응답에 서로 충돌하는 값을 가진 보안 관련 응답 헤더가 중복되어 있는지 확인할 수 있습니다. 일부 보안 관련 HTTP 헤더는 응답에서 서로 일치하지 않는 값으로 두 번 선언될 경우 정의되지 않은 동작을 보입니다.

이 취약점을 해결하려면 이러한 불일치 헤더 중 하나만 유지합니다.

액세스할 수 있는 저장소

Web Security Scanner는 애플리케이션에서 액세스 가능한 GIT 또는 SVN 저장소를 찾을 수 있습니다. 이로 인해 구성 및 소스 코드 유출이 발생할 수 있습니다.

취약점을 재현하려면 결과 보고서에서 재현 URL을 클릭합니다.

문제 확인

Web Security Scanner가 문제를 보고하면 문제의 위치를 확인해야 합니다. XSS 보호가 사용 중지된 브라우저에서 이 작업을 수행합니다. 별도의 Chrome 테스트 인스턴스를 사용하는 것이 가장 좋지만 XSS 보호를 사용 중지할 수 있는 대부분의 최신 브라우저를 사용할 수 있습니다.

Chrome에서 XSS 보호 기능을 사용 중지하는 방법은 다음과 같습니다.

  • Linux를 사용하는 경우 다음과 같은 Linux Chrome 명령어를 호출합니다.

    chrome --user-data-dir=~/.chrometest --allow-running-insecure-content \
      --disable-xss-auditor --disable-sync --bwsi
    
  • macOS를 사용하는 경우 다음과 같이 Chrome 명령어를 호출합니다.

    open -n /Applications/Google\ Chrome.app/ --args --disable-xss-auditor \
      --user-data-dir=/tmp/xssrepro
    

콘텐츠 보안 정책(CSP)이 적용되어 자바스크립트 코드가 실행되지 않을 수도 있습니다. 이로 인해 XSS를 재현하기가 더 어려워질 수 있습니다. 이 문제가 나타나면 브라우저 로그 콘솔에서 발생한 CSP 위반을 자세히 확인하세요.