Web Security Scanner 개요

Web Security Scanner는 App Engine, Google Kubernetes Engine(GKE), Compute Engine 웹 애플리케이션의 보안 취약점을 확인합니다. 애플리케이션을 크롤링하여 시작 URL 범위 내에 있는 모든 링크를 확인하고 최대한 많은 사용자 입력과 이벤트 핸들러 실행을 시도합니다. 현재 Web Security Scanner 방화벽으로 보호되지 않는 공개 URL과 IP만 지원합니다.

Web Security Scanner는 현재 App Engine 표준 환경 및 App Engine 가변형 환경, Compute Engine 인스턴스, GKE 리소스를 지원합니다.

Web Security Scanner는 기존의 보안 설계 및 개발 프로세스를 보완하도록 설계되었습니다. 거짓양성에 주의가 분산되지 않도록 하기 위해 Web Security Scanner는 지나치다 싶게 보고를 적게 하는 경향이 있으며 신뢰도가 낮은 알림은 표시하지 않습니다. 또한 이 스캐너는 수동 보안 검토를 대신할 수 없으며 이 스캐너를 사용한다고 해서 애플리케이션에 보안 결함이 없는 것은 아닙니다.

스캔 유형

Web Security Scanner는 공개 App Engine, GKE, Compute Engine 서비스 웹 애플리케이션을 위한 관리형 커스텀 웹 취약점 스캔을 제공합니다.

관리형 스캔

Web Security Scanner 관리형 스캔은 Security Command Center에서 구성하고 관리합니다. 관리형 스캔은 매주 자동으로 실행되며 공개 웹 엔드포인트를 감지하고 스캔합니다. 이러한 스캔은 인증을 사용하지 않으며 GET 전용 요청을 전송하므로 실시간 웹사이트에서 양식을 제출하지 않습니다.

관리형 스캔은 커스텀 스캔과 별도로 실행됩니다.

Security Command Center가 조직 수준에서 활성화된 경우 관리형 스캔을 사용하면 개별 프로젝트팀을 구성할 필요 없이 조직 내 프로젝트에 대한 기본 웹 애플리케이션 취약점 감지를 중앙에서 관리할 수 있습니다. 발견 항목이 발견되면 해당 팀과 협력하여 더욱 포괄적인 커스텀 스캔을 설정할 수 있습니다.

Web Security Scanner를 서비스로 사용 설정하면 Security Command Center 취약점 페이지 및 관련 보고서에서 관리형 스캔 발견 항목을 자동으로 사용할 수 있습니다. Web Security Scanner 관리형 스캔을 사용 설정하는 방법에 대한 자세한 내용은 Security Command Center 구성을 참조하세요.

관리형 스캔은 기본 포트(HTTP 연결의 경우 80, HTTPS 연결의 경우 443)를 사용하는 애플리케이션만 지원합니다. 애플리케이션에서 기본이 아닌 포트를 사용하는 경우 커스텀 스캔을 대신 수행하세요.

커스텀 스캔

Web Security Scanner 커스텀 스캔은 오래된 라이브러리, 교차 사이트 스크립팅 또는 혼합 콘텐츠 사용과 같은 애플리케이션 취약점 발견 항목에 대한 세부적인 정보를 제공합니다.

프로젝트 수준에서 커스텀 스캔을 정의합니다.

Web Security Scanner 커스텀 스캔 설정 가이드를 완료하면 Security Command Center에서 커스텀 스캔 발견 항목을 확인할 수 있습니다.

발견 항목 스캔

이 섹션에서는 Web Security Scanner 발견 항목 유형과 관련 규정 준수 표준을 설명합니다.

감지기 및 규정 준수

Web Security Scanner는 OWASP 상위 10개의 카테고리를 지원합니다. 이 문서는 가장 중요한 웹 애플리케이션 보안 위험 상위 10개의 순위를 Open Web Application Security Project(OWASP)에서 결정한 대로 지정하고 해결책을 제공합니다.

규정 준수 매핑은 참조용으로 포함되어 있으며 OWASP 재단에서 제공되거나 검토하지 않습니다.

이 기능은 규정 준수 제어 위반을 모니터링하기 위한 것입니다. 이 매핑은 규제 또는 업계 벤치마크나 표준을 준수하는 제품 또는 서비스의 규정 준수, 인증, 보고를 기반으로 사용하거나 대안으로 제공되지 않습니다.

규정 준수에 대한 자세한 내용은 보안 벤치마크 규정 준수 평가 및 보고를 참조하세요.

발견 항목 유형

Web Security Scanner 커스텀 스캔 및 관리형 스캔은 다음 발견 항목 유형을 식별합니다. 스탠더드 등급에서 Web Security Scanner는 방화벽으로 보호되지 않는 공개 URL 및 IP를 포함하여 배포된 애플리케이션의 커스텀 스캔을 지원합니다.

카테고리 발견 항목 설명 OWASP 2017 상위 10개 OWASP 2021 상위 10개
Accessible Git repository

API의 카테고리 이름: ACCESSIBLE_GIT_REPOSITORY

GIT 저장소가 공개됩니다. 이 발견 항목을 해결하려면 GIT 저장소에 대한 의도하지 않은 공개 액세스를 삭제합니다.

가격 책정 등급: 스탠더드

이 발견 항목 수정

A5 A01
Accessible SVN repository

API의 카테고리 이름: ACCESSIBLE_SVN_REPOSITORY

SVN 저장소가 공개됩니다. 이 발견 항목을 해결하려면 SVN 저장소에 대한 의도하지 않은 공개 액세스를 삭제합니다.

가격 책정 등급: 스탠더드

이 발견 항목 수정

A5 A01
Cacheable password input

API의 카테고리 이름: CACHEABLE_PASSWORD_INPUT

웹 애플리케이션에 입력한 비밀번호는 보안 비밀번호 스토리지 대신 일반 브라우저 캐시에 캐시될 수 있습니다.

가격 책정 등급: 프리미엄

이 발견 항목 수정

A3 A04
Clear text password

API의 카테고리 이름: CLEAR_TEXT_PASSWORD

비밀번호가 명확한 텍스트로 전송되고 가로채기될 수 있습니다. 이 발견 항목을 해결하려면 네트워크를 통해 전송된 비밀번호를 암호화합니다.

가격 책정 등급: 스탠더드

이 발견 항목 수정

A3 A02
Insecure allow origin ends with validation

API의 카테고리 이름: INSECURE_ALLOW_ORIGIN_ENDS_WITH_VALIDATION

교차 사이트 HTTP 또는 HTTPS 엔드포인트는 Access-Control-Allow-Origin 응답 헤더 내에 반영하기 전에 Origin 요청 헤더의 서픽스만 검사합니다. 이 발견 항목을 해결하려면 예상 루트 도메인이 Access-Control-Allow-Origin 응답 헤더에 반영되기 전에 Origin 헤더 값의 일부인지 확인하세요. 하위 도메인 와일드 카드의 경우 루트 도메인 앞에 마침표를 추가합니다(예: .endsWith(".google.com")).

가격 책정 등급: 프리미엄

이 발견 항목 수정

A5 A01
Insecure allow origin starts with validation

API의 카테고리 이름: INSECURE_ALLOW_ORIGIN_STARTS_WITH_VALIDATION

교차 사이트 HTTP 또는 HTTPS 엔드포인트는 Access-Control-Allow-Origin 응답 헤더 내에 반영하기 전에 Origin 요청 헤더의 프리픽스만 검사합니다. 이 발견 항목을 해결하려면 예상 도메인이 Access-Control-Allow-Origin 응답 헤더에 반영하기 전의 Origin 헤더 값과 완전히 일치하는지 확인합니다(예: .equals(".google.com")).

가격 책정 등급: 프리미엄

이 발견 항목 수정

A5 A01
Invalid content type

API의 카테고리 이름: INVALID_CONTENT_TYPE

리소스가 로드되었지만 응답의 Content-Type HTTP 헤더와 일치하지 않습니다. 이 발견 항목을 해결하려면 X-Content-Type-Options HTTP 헤더를 올바른 값으로 설정합니다.

가격 책정 등급: 스탠더드

이 발견 항목 수정

A6 A05
Invalid header

API의 카테고리 이름: INVALID_HEADER

보안 헤더에 문법 오류가 있으며 브라우저에서 무시됩니다. 이 발견 항목을 해결하려면 HTTP 보안 헤더를 올바르게 설정합니다.

가격 책정 등급: 스탠더드

이 발견 항목 수정

A6 A05
Mismatching security header values

API의 카테고리 이름: MISMATCHING_SECURITY_HEADER_VALUES

보안 헤더에 중복된 불일치 값이 존재하여 정의되지 않은 동작이 발생합니다. 이 발견 항목을 해결하려면 HTTP 보안 헤더를 올바르게 설정합니다.

가격 책정 등급: 스탠더드

이 발견 항목 수정

A6 A05
Misspelled security header name

API의 카테고리 이름: MISSPELLED_SECURITY_HEADER_NAME

보안 헤더가 잘못 입력되어 무시됩니다. 이 발견 항목을 해결하려면 HTTP 보안 헤더를 올바르게 설정합니다.

가격 책정 등급: 스탠더드

이 발견 항목 수정

A6 A05
Mixed content

API의 카테고리 이름: MIXED_CONTENT

리소스가 HTTPS 페이지에서 HTTP를 통해 제공되고 있습니다. 이 발견 항목을 해결하려면 모든 리소스가 HTTPS를 통해 제공되는지 확인합니다.

가격 책정 등급: 스탠더드

이 발견 항목 수정

A6 A05
Outdated library

API의 카테고리 이름: OUTDATED_LIBRARY

알려진 취약점이 있는 라이브러리가 감지되었습니다. 이 발견 항목을 해결하려면 라이브러리를 최신 버전으로 업그레이드합니다.

가격 책정 등급: 스탠더드

이 발견 항목 수정

A9 A06
Server side request forgery

API의 카테고리 이름: SERVER_SIDE_REQUEST_FORGERY

서버 측 요청 위조(SSRF) 취약점이 감지되었습니다. 이 발견 항목을 해결하려면 허용 목록을 사용하여 웹 애플리케이션에서 요청할 수 있는 도메인과 IP 주소를 제한합니다.

가격 책정 등급: 스탠더드

이 발견 항목 수정

해당 없음 A10
Session ID leak

API의 카테고리 이름: SESSION_ID_LEAK

교차 도메인 요청을 수행할 때 웹 애플리케이션은 Referer 요청 헤더에 사용자의 세션 식별자를 포함합니다. 이 취약점은 수신 도메인에 세션 식별자에 대한 액세스 권한을 부여하므로 사용자를 가장하거나 고유하게 식별하는 데 사용될 수 있습니다.

가격 책정 등급: 프리미엄

이 발견 항목 수정

A2 A07
SQL injection

API의 카테고리 이름: SQL_INJECTION

잠재적인 SQL 삽입 취약점이 감지되었습니다. 이 발견 항목을 해결하려면 매개변수화된 쿼리를 사용하여 사용자 입력이 SQL 쿼리 구조에 영향을 미치지 않도록 합니다.

가격 책정 등급: 프리미엄

이 발견 항목 수정

A1 A03
Struts insecure deserialization

API의 카테고리 이름: STRUTS_INSECURE_DESERIALIZATION

취약한 Apache Struts 버전 사용이 감지되었습니다. 이 발견 항목을 해결하려면 Apache Struts를 최신 버전으로 업그레이드합니다.

가격 책정 등급: 프리미엄

이 발견 항목 수정

A8 A08
XSS

API의 카테고리 이름: XSS

이 웹 애플리케이션의 필드는 교차 사이트 스크립팅(XSS) 공격에 취약합니다. 이 발견 항목을 해결하려면 신뢰할 수 없는 사용자 제공 데이터를 검증하고 이스케이프 처리합니다.

가격 책정 등급: 스탠더드

이 발견 항목 수정

A7 A03
XSS angular callback

API의 카테고리 이름: XSS_ANGULAR_CALLBACK

사용자 제공 문자열은 이스케이프 처리되지 않으며 AngularJS가 이를 보간할 수 있습니다. 이 발견 항목을 해결하려면 Angular 프레임워크에서 처리하는 신뢰할 수 없는 사용자 제공 데이터를 검증하고 이스케이프 처리합니다.

가격 책정 등급: 스탠더드

이 발견 항목 수정

A7 A03
XSS error

API의 카테고리 이름: XSS_ERROR

이 웹 애플리케이션의 필드는 교차 사이트 스크립팅 공격에 취약합니다. 이 발견 항목을 해결하려면 신뢰할 수 없는 사용자 제공 데이터를 검증하고 이스케이프 처리합니다.

가격 책정 등급: 스탠더드

이 발견 항목 수정

A7 A03
XXE reflected file leakage

API의 카테고리 이름: XXE_REFLECTED_FILE_LEAKAGE

XXE(XML External Entity) 취약점이 감지되었습니다. 이 취약점으로 인해 웹 애플리케이션이 호스트에서 파일을 유출할 수 있습니다. 이 발견 항목을 해결하려면 외부 항목을 허용하지 않도록 XML 파서를 구성하세요.

가격 책정 등급: 프리미엄

이 발견 항목 수정

A4 A05
Prototype pollution

API의 카테고리 이름: PROTOTYPE_POLLUTION

애플리케이션이 프로토타입 오염에 취약합니다. 이 취약점은 Object.prototype 객체의 속성에 공격자가 제어할 수 있는 값을 할당할 수 있는 경우에 발생합니다. 이 프로토타입에 할당된 값은 일반적으로 교차 사이트 스크립팅, 유사한 클라이언트 측 취약점, 로직 버그로 변환되는 것으로 가정됩니다.

가격 책정 등급: 스탠더드

이 발견 항목 수정

A1 A03

사용 시 주의사항

Security Command Center의 IAM 역할은 조직, 폴더, 프로젝트 수준에서 부여할 수 있습니다. 발견 항목, 애셋, 보안 소스를 보거나 수정하거나 만들거나 업데이트할 수 있는 기능은 액세스 권한이 부여된 수준에 따라 다릅니다. Security Command Center 역할에 대해 자세히 알아보려면 액세스 제어를 참조하세요.

Web Security Scanner를 사용할 때는 다음과 같은 다른 중요 사항을 알아두어야 합니다.

  • Web Security Scanner는 지속적으로 개선되기 때문에 현재 스캔에서 보고되지 않은 문제가 향후 스캔에서 보고될 수 있습니다.
  • 애플리케이션의 일부 기능 또는 섹션이 테스트되지 않을 수도 있습니다.
  • Web Security Scanner는 발견되는 모든 컨트롤 및 입력을 활성화하려고 시도합니다.
  • 테스트 계정이 권한을 갖고 있는 상태 변경 작업을 노출할 경우 Web Security Scanner가 해당 작업을 활성화하게 될 수 있습니다. 이로 인해 원치 않는 결과가 발생할 수 있습니다.
  • Web Security Scanner에는 프로젝트당 스캔이 15개로 제한됩니다. 스캔이 동시에 실행되기 때문에 이 제한에 도달한 사용자는 스캔별 시작 URL을 여러 개 추가하거나 한도에 아직 도달하지 않은 다른 프로젝트에 스캔을 추가하는 것이 좋습니다.

누가 보안 스캔을 실행할 수 있나요?

Web Security Scanner에 사용할 수 있는 Identity and Access Management(IAM) 역할에 대한 자세한 내용은 액세스 제어를 참조하세요.

보안 스캔에 얼마나 많은 시간이 필요한가요?

보안 스캔은 즉시 실행되는 것이 아니라, 대기열에 추가되었다가 이후에 실행되며, 시스템 부하에 따라서는 몇 시간 후에 실행될 수도 있습니다. 스캔이 실행되기 시작한 후 완료될 때까지 걸리는 시간은 애플리케이션의 크기에 따라 다릅니다. URL이 많은 대규모 애플리케이션은 완료하는 데 몇 시간이 걸릴 수도 있습니다.

대상 제한

Web Security Scanner에는 스캔 대상을 해당 스캔이 생성된 특정 App Engine 인스턴스로 제한하는 필터가 설정되어 있습니다. 다른 App Engine 프로젝트 또는 외부 도메인의 URL에 액세스하면 오류 메시지가 표시됩니다.

Compute Engine 및 GKE에 대한 스캔은 동일 프로젝트에 대해 예약된 정적 외부 IP 주소 및 동일 프로젝트에 속하는 정적 외부 IP 주소로 매핑되는 도메인으로 제한됩니다. 프로젝트의 IP 주소 예약에 대한 안내는 다음 링크를 참조하세요.

App Engine은 애플리케이션에 고정 IP 주소를 매핑하는 방법을 제공하지 않습니다. 하지만 Cloud Load Balancing 및 서버리스 네트워크 엔드포인트 그룹을 사용하여 부하 분산기의 고정 IP 주소를 예약한 후 트래픽을 애플리케이션으로 보낼 수 있습니다. 가격 책정에 대한 자세한 내용은 외부 IP 주소 가격 책정을 참조하세요.

프로젝트 내에서 Web Security Scanner는 자동으로 로그아웃 URL과 스캔에 부정적인 영향을 줄 수 있는 그 밖의 일반 위치를 피하려고 시도합니다. 하지만 확실히 하려면 스캔 설정을 사용하여 수동으로 URL을 제외할 수 있습니다.

검증

스캔 구성은 생성될 때와 각 스캔 전에 검사됩니다. Web Security Scanner는 Security Command Center 설정과 애플리케이션의 인증 사용자 인증 정보를 확인하여 스캔이 올바르게 구성되고 애플리케이션에 성공적으로 로그인할 수 있는지 확인합니다. 최대 스캔 속도를 포함한 구성 매개변수도 지원되는 범위 내에 있는지 확인합니다.

스캔을 생성하거나 업데이트하기 전에 오류를 해결해야 합니다. 초기 구성 이후에 변경된 애플리케이션은 스캔 중에 오류가 발생할 수 있습니다. 예를 들어 도메인이 더 이상 프로젝트에서 소유한 IP 주소를 가리키지 않으면 리소스는 스캔되지 않고 스캔 구성 페이지에 오류가 보고됩니다.

권장사항

Web Security Scanner는 필드를 채우고 버튼을 누르고 링크를 클릭하고 다른 사용자 작업을 수행하므로 특히 프로덕션 리소스를 스캔하는 경우에는 신중하게 사용해야 합니다. Web Security Scanner에서 데이터나 시스템의 상태를 변경하는 기능이 활성화되어 있어 원치 않는 결과가 발생할 수 있습니다.

예를 들면 다음과 같습니다.

  • 공개 댓글을 허용하는 블로그 애플리케이션에서 Web Security Scanner가 모든 블로그 기사에 대한 댓글로 테스트 문자열을 게시할 수 있습니다.
  • 이메일 등록 페이지에서 Web Security Scanner가 다수의 테스트 이메일을 생성할 수 있습니다.

다음 기법을 개별적으로 또는 조합하여 사용하면 원치 않는 결과를 방지할 수 있습니다.

  1. 테스트 환경에서 스캔을 실행합니다. 별도의 App Engine 프로젝트를 만들고 애플리케이션과 데이터를 해당 프로젝트로 로드하여 테스트 환경을 설정합니다. Google Cloud CLI를 사용하는 경우 앱을 업로드할 때 대상 프로젝트를 명령줄 옵션으로 지정할 수 있습니다.
  2. 테스트 계정을 사용하세요. 민감한 정보나 유해한 작업에 액세스할 수 없는 사용자 계정을 만들고 앱을 스캔할 때 사용합니다. 많은 애플리케이션에서는 사용자가 처음으로 로그인할 때 약관 동의, 프로필 생성 등의 특별한 워크플로가 진행됩니다. 이처럼 워크플로가 다르기 때문에 초기 사용자의 테스트 계정을 사용할 경우에는 기존 사용자 계정을 사용할 때와는 다른 스캔 결과가 생성될 수 있습니다. 최초 로그인 과정이 완료된 후 일반적인 사용자 상태에 있는 계정으로 스캔하는 것이 가장 좋습니다.
  3. CSS 클래스 inq-no-click을 적용하여 활성화하지 않으려는 개별 사용자 인터페이스 요소를 차단합니다. 이 요소에 연결된 이벤트 핸들러는 적절한 이벤트 핸들러 속성을 설정하여 인라인 자바스크립트이거나 addEventListener를 사용하여 연결되었는지 여부와 관계없이 크롤링 및 테스트 중에 활성화되지 않습니다.
  4. 백업 데이터를 사용합니다. 스캔하기 전에 데이터를 백업하는 것이 좋습니다.
  5. 제외되는 URL입니다. 크롤링 또는 테스트하지 않을 URL 패턴을 지정할 수 있습니다. 문법에 대한 자세한 내용은 URL 제외를 참조하세요.

스캔하기 전에 애플리케이션을 주의 깊게 감사하여 원하는 스캔 범위를 넘어 데이터, 사용자 또는 시스템에 영향을 미칠 수 있는 기능이 있는지 확인하세요.

다음 단계