이 페이지에서는 Web Security Scanner 발견 항목을 해석, 재생성, 구제하는 방법을 설명합니다.
Security Command Center의 IAM 역할은 조직, 폴더, 프로젝트 수준에서 부여할 수 있습니다. 발견 항목, 애셋, 보안 소스를 보거나 수정하거나 만들거나 업데이트할 수 있는 기능은 액세스 권한이 부여된 수준에 따라 다릅니다. Security Command Center 역할에 대해 자세히 알아보려면 액세스 제어를 참조하세요.
취약점 종류
Web Security Scanner는 다음과 같은 종류의 취약점을 감지합니다.
- 교차 사이트 스크립팅(XSS)
- 서버 측 요청 위조
- 플래시 삽입
- 혼합 콘텐츠
- 오래되었거나 취약한 라이브러리
- 일반 텍스트 비밀번호
- 안전하지 않은 출처 검증
- 잘못된 헤더
- 철자 오류가 있는 헤더
- 액세스할 수 있는 저장소
- SQL 삽입
- XML 삽입
- 프로토타입 오염
이러한 취약점이 발견되면 자세히 알아볼 수 있도록 결과가 강조표시됩니다.
로그에 미치는 영향
Web Security Scanner 스캔의 trace가 로그 파일에 나타납니다. 예를 들어 Web Security Scanner는 ~sfi9876
및 /sfi9876
과 같이 비정상적인 문자열에 대한 요청을 생성합니다. 이 프로세스는 스캔이 애플리케이션의 오류 페이지를 검사할 수 있도록 합니다. 이와 같이 의도적으로 잘못된 페이지 요청은 로그에 나타납니다.
해결 후 발견 항목 비활성화
취약점을 해결한 후 Web Security Scanner는 해당 Security Command Center 발견 항목 상태를 INACTIVE
로 자동으로 설정하지 않습니다.
상태를 수동으로 변경하지 않는 한 Security Command Center에서 Web Security Scanner에 의해 생성된 발견 항목 상태는 ACTIVE
로 유지됩니다.
Web Security Scanner의 독립형 버전을 사용하는 경우 취약점을 해결하고 Web Security Scanner에서 더 이상 감지할 수 없게 되면 후속 취약점 보고서에 해당 취약점이 포함되지 않습니다. 취약점 기록은 이전 취약점 보고서에 남아 있습니다.
Web Security Scanner는 매주 관리형 스캔을 실행합니다.
Web Security Scanner 스캔에 대한 자세한 내용은 스캔 유형을 참고하세요.
Web Security Scanner 발견 항목 문제 해결
이 섹션에서는 다양한 유형의 Web Security Scanner 발견 항목 문제를 해결하는 방법을 설명합니다. OWASP 상위 10개 옵션에 설명된 일반적인 애플리케이션 수준 공격을 방어하기 위한 전략은 Google Cloud의 OWASP 완화 상위 10개 옵션을 참조하세요.
XSS
API의 카테고리 이름: XSS
Web Security Scanner의 교차 사이트 스크립팅(XSS) 삽입 테스트 기능은 사용자가 수정할 수 있는 필드에 무해한 테스트 문자열을 삽입하고 다양한 사용자 작업을 수행하는 방법으로 인젝션 공격을 시뮬레이션합니다. 커스텀 감지기는 이 테스트 중에 브라우저와 DOM을 관찰하여 삽입이 성공했는지 여부를 확인하고 악용 가능성을 평가합니다.
테스트 문자열에 포함된 자바스크립트가 순조롭게 실행되면 Chrome 디버거가 시작됩니다. 테스트 문자열을 실행할 수 있으면 페이지에서 자바스크립트를 삽입하고 실행할 수 있습니다. 공격자가 이 문제를 발견한다면 악의적인 링크를 클릭한 사용자(피해자)로 가장하여 원하는 자바스크립트를 실행할 위험이 있습니다.
일부 경우에는 브라우저에서 테스트 문자열이 파싱되기 전에 테스트 대상 애플리케이션이 해당 문자열을 수정할 수도 있습니다. 예를 들어 애플리케이션이 입력의 유효성을 검사하거나 필드의 크기를 제한할 수 있습니다. 브라우저가 이 수정된 테스트 문자열을 실행하려고 하면 실행이 중단되고 자바스크립트 실행 오류가 발생할 수 있습니다. 이 오류는 삽입 문제를 나타내지만 악용에 해당하진 않습니다.
이 문제를 해결하려면 테스트 문자열 수정을 회피할 수 있는지 수동으로 확인하여 문제가 XSS 취약점인지 확인해야 합니다. 이 취약점을 확인하는 자세한 방법은 교차 사이트 스크립팅을 참조하세요.
이 문제를 해결하는 방법에는 여러 가지가 있습니다. 권장되는 수정은 모든 출력을 이스케이프 처리하고 컨텍스트별 자동 이스케이프 처리를 지원하는 템플릿 시스템을 사용하는 것입니다.
XSS angular callback
API의 카테고리 이름: XSS_ANGULAR_CALLBACK
Angular가 사용자가 제공한 문자열을 보간하면 AngularJS 모듈의 교차 사이트 스크립팅(XSS) 취약점이 발생할 수 있습니다. 사용자가 제공한 값을 AngularJS 보간 유형에 삽입하면 다음과 같은 공격이 허용될 수 있습니다.
- 공격자가 브라우저에 렌더링된 페이지에 임의의 코드를 삽입할 수 있습니다.
- 공격자가 페이지 원본에서 희생자 브라우저를 대신해서 작업을 수행할 수 있습니다.
이 잠재적 취약점을 재현하려면 스캔을 실행한 후 Google Cloud 콘솔의 재현 URL 링크를 따르세요. 이 링크는 알림 대화상자를 바로 열거나 XSSDETECTED
문자열을 삽입하여 공격자가 코드를 실행할 수 있음을 증명합니다. 문자열이 삽입되면 브라우저의 개발자 도구를 열고 XSSDETECTED
를 검색하여 정확한 삽입 위치를 찾을 수 있습니다.
XSS error
API의 카테고리 이름: XSS_ERROR
XSS_ERROR
발견 항목은 자바스크립트 결함으로 인한 XSS 버그일 가능성이 있습니다. 일부 경우에는 브라우저에서 테스트 문자열이 파싱되기 전에 테스트 대상 애플리케이션이 해당 문자열을 수정할 수도 있습니다. 브라우저가 이 수정된 테스트 문자열을 실행하려고 하면 실행이 중단되고 자바스크립트 실행 오류가 발생할 수 있습니다. 이 오류는 삽입 문제를 나타내지만 악용에 해당하진 않습니다.
이 문제를 해결하려면 테스트 문자열 수정을 회피할 수 있는지 수동으로 확인하여 문제가 XSS 취약점인지 확인해야 합니다. 이 취약점을 확인하는 자세한 방법은 교차 사이트 스크립팅을 참조하세요.
Server side request forgery
API의 카테고리 이름: SERVER_SIDE_REQUEST_FORGERY
SERVER_SIDE_REQUEST_FORGERY
취약점을 사용하면 웹 애플리케이션 사용자가 서버로 하여금 제한된 서비스 엔드포인트에 대한 요청(예: HTTP 요청)을 강제로 수행하도록 하여 내부 데이터에 액세스할 수 있습니다. 예를 들어 공격자는 이 취약점을 악용하여 Google Cloud 메타데이터 서비스에서 데이터를 검색할 수 있습니다.
이 문제를 해결하려면 허용 목록을 사용하여 웹 애플리케이션에서 요청할 수 있는 도메인과 IP 주소를 제한합니다.
Rosetta flash
API의 카테고리 이름: ROSETTA_FLASH
Web Security Scanner는 요청 매개변수의 값이 응답 시작 부분에 다시 반영되는지 확인할 수 있습니다(예: JSONP를 사용하는 요청). 이 취약점은 플래시 삽입이라고도 합니다. 일부 경우에 공격자는 자신이 의도한 응답이 보안상 취약한 웹 애플리케이션에서 제공된 플래시 파일인 것처럼 위장하여 브라우저에서 해당 응답이 실행되도록 할 수 있습니다.
이 문제를 해결하려면 HTTP 응답의 시작 부분에 사용자가 제어할 수 있는 데이터를 포함하지 않습니다.
Mixed content
API의 카테고리 이름: MIXED_CONTENT
Web Security Scanner는 수동적으로 HTTP 트래픽을 관찰하고 HTTPS 페이지의 컨텍스트에서 HTTP를 통해 자바스크립트 또는 CSS 파일에 대한 요청이 수행될 때 이를 감지합니다. 이 시나리오에서는 중간 공격자가 HTTP 리소스를 변조하여 리소스를 로드하는 웹사이트에 대한 전체 액세스 권한을 획득하거나 사용자의 작업을 모니터링할 수 있습니다.
이 문제를 해결하려면 관련 HTTP 링크를 사용합니다. 예를 들어 http://
를 //
로 바꿉니다.
Outdated library
API의 카테고리 이름: OUTDATED_LIBRARY
Web Security Scanner는 포함 라이브러리 버전에 보안 문제가 있는 것으로 알려져 있는지 확인할 수 있습니다. Web Security Scanner는 서명 기반 스캐너로서 사용 중인 라이브러리의 버전을 확인하고 이를 알려진 취약 라이브러리 목록과 대조합니다. 버전 감지에 실패하거나 라이브러리가 수동으로 패치된 경우에는 거짓양성 결과가 나타날 수 있습니다.
이 문제를 해결하려면 포함 라이브러리를 안전한 것으로 알려진 버전으로 업데이트합니다.
Struts insecure deserialization
API의 카테고리 이름: STRUTS_INSECURE_DESERIALIZATION
Web Security Scanner는 웹 애플리케이션에서 원격 명령어 삽입 공격에 취약한 Apache Struts 버전을 사용하고 있는지 확인할 수 있습니다. 영향을 받은 Struts 버전이 공격자의 잘못된 Content-Type HTTP 헤더를 잘못 파싱할 수 있습니다. 이 취약점으로 인해 웹 서버의 권한으로 악성 명령어가 실행될 수 있습니다.
취약한 Apache Struts 버전은 다음과 같습니다.
- 2.3.32 이전의 2.3.x 버전
- 2.5.10.1 이전의 2.5.x 버전
이 문제를 해결하려면 Apache Struts를 최신 버전으로 업그레이드합니다.
Apache Struts 취약점에 대한 자세한 내용은 CVE-2017-5638을 참조하세요.
Cacheable password input
API의 카테고리 이름: CACHEABLE_PASSWORD_INPUT
Web Security Scanner는 웹 애플리케이션이 비밀번호 입력에 type
속성이 password
로 설정되지 않은 <input>
요소를 사용한다는 것을 확인할 수 있습니다.
이로 인해 브라우저가 보안 비밀번호 스토리지 대신 일반 브라우저 캐시에 사용자가 입력한 비밀번호를 캐시할 수 있습니다.
이 문제를 해결하려면 <input>
요소에서 type
속성을 추가하고 password
로 설정합니다(예: <input type="password">
).
이 속성은 사용자가 비밀번호 필드에 입력하는 문자를 가립니다.
Clear text password
API의 카테고리 이름: CLEAR_TEXT_PASSWORD
Web Security Scanner는 애플리케이션이 비밀번호 필드를 일반 텍스트로 전송하는 것으로 보이는지 확인할 수 있습니다. 공격자가 네트워크 트래픽을 도청하고 비밀번호 필드를 스니핑할 수 있습니다.
클라이언트와 서버 간에 전달되는 민감한 정보를 보호하려면 다음과 같은 예방 조치를 취합니다.
- TLS/SSL 인증서를 사용합니다.
- 비밀번호 필드가 포함된 페이지에서는 항상 HTTPS를 사용합니다.
- 양식 작업 속성이 항상 HTTPS URL을 가리키는지 확인합니다.
Insecure allow origin ends with validation
API의 카테고리 이름: INSECURE_ALLOW_ORIGIN_ENDS_WITH_VALIDATION
Web Security Scanner는 교차 사이트 HTTP 또는 HTTPS 엔드포인트가 Access-Control-Allow-Origin
응답 헤더 내에 반영하기 전의 Origin
요청 헤더의 서픽스만 검증할 수 있는지 확인할 수 있습니다. 유효성 검사가 잘못 구성된 경우 엔드포인트는 허용 목록에 추가된 도메인과 동일한 서픽스를 가지는 악성 도메인에 대한 액세스 권한을 부여할 수 있습니다. 예를 들어 엔드포인트의 검사기가 *google.com
과 같은 도메인과 일치하면 maliciousdomaingoogle.com
에 대한 액세스 권한이 잘못 부여될 수 있습니다.
이 문제를 해결하려면 예상 루트 도메인이 Access-Control-Allow-Origin
응답 헤더에 반영되기 전의 Origin
헤더 값 일부인지 확인하세요. 하위 도메인 와일드 카드의 경우 루트 도메인 앞에 마침표를 추가합니다(예: .endsWith(".google.com")
).
Insecure allow origin starts with validation
API의 카테고리 이름: INSECURE_ALLOW_ORIGIN_STARTS_WITH_VALIDATION
Web Security Scanner는 교차 사이트 HTTP 또는 HTTPS 엔드포인트가 Access-Control-Allow-Origin
응답 헤더 내에 반영하기 전의 Origin
요청 헤더의 프리픽스만 검증할 수 있는지 확인할 수 있습니다. 유효성 검사가 잘못 구성된 경우 엔드포인트는 허용 목록에 추가된 도메인과 동일한 프리픽스를 가지는 악성 도메인에 대한 액세스 권한을 부여할 수 있습니다. 예를 들어 엔드포인트의 검사기가 요청하는 도메인에 google.com
이 있는지만 확인하면 google.com.maliciousdomain.com
에 대한 액세스 권한이 잘못 부여될 수 있습니다.
이 발견 항목을 해결하려면 예상 도메인이 Access-Control-Allow-Origin
응답 헤더에 반영하기 전의 Origin
헤더 값과 완전히 일치하는지 확인합니다(예: .equals(".google.com")
).
Session ID leak
API의 카테고리 이름: SESSION_ID_LEAK
Web Security Scanner는 웹 애플리케이션의 교차 도메인 요청의 Referer
요청 헤더에서 세션 식별자를 확인할 수 있습니다.
Referer
를 수신하는 도메인은 세션 식별자를 사용하여 사용자를 가장하거나(토큰 사용) 사용자를 고유하게 식별할 수 있습니다.
이 발견 항목을 해결하려면 URL 대신 세션 식별자를 쿠키에 저장하세요. 또한 다음 속성을 사용하여 쿠키를 보호합니다.
Invalid content type
API의 카테고리 이름: 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
API의 카테고리 이름: 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
을 지원하지 않으며, 여러 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
API의 카테고리 이름: MISSPELLED_SECURITY_HEADER_NAME
Web Security Scanner는 보안 헤더 이름에 철자 오류가 있는지 확인할 수 있습니다. 형식에 철자 오류가 있으면 해당 보안 헤더가 적용되지 않으므로 헤더를 수정해야 합니다.
이 취약점을 재현하려면 브라우저 개발자 도구의 네트워크 탭에서 철자 오류를 확인합니다.
Mismatching security header values
API의 카테고리 이름: MISMATCHING_SECURITY_HEADER_VALUES
Web Security Scanner는 응답에 서로 충돌하는 값을 가진 보안 관련 응답 헤더가 중복되어 있는지 확인할 수 있습니다. 일부 보안 관련 HTTP 헤더는 응답에서 서로 일치하지 않는 값으로 두 번 선언될 경우 정의되지 않은 동작을 보입니다.
이 문제를 해결하려면 이러한 불일치 헤더 중 하나만 유지합니다.
액세스할 수 있는 저장소
Web Security Scanner는 애플리케이션에서 액세스할 수 있는 GIT 또는 SVN 저장소를 찾을 수 있습니다. 이러한 상황으로 구성 및 소스 코드 유출이 발생할 수 있습니다.
취약점을 재현하려면 발견 항목 보고서에서 재현 URL을 클릭합니다.
XXE reflected file leakage
API의 카테고리 이름: XXE_REFLECTED_FILE_LEAKAGE
Web Security Scanner는 사용자 입력에서 XML을 파싱하는 웹 애플리케이션에서 XML 외부 항목(XXE) 취약점을 찾을 수 있습니다. 공격자가 외부 항목을 포함하는 XML을 제공할 수 있습니다. 이 외부 항목은 애플리케이션이 액세스할 수 있는 콘텐츠(예: 애플리케이션의 호스트 머신에 있는 파일)를 참조할 수 있습니다. 애플리케이션의 XML 파서가 악성 XML을 처리할 때 호스트의 파일 콘텐츠가 유출될 수 있습니다.
이 발견 항목을 수정하려면 외부 항목을 허용하지 않도록 XML 파서를 구성하세요.
이 취약점에 대한 자세한 내용은 XML 외부 항목(XXE) 처리를 참조하세요.
SQL injection
API의 카테고리 이름: SQL_INJECTION
Web Security Scanner는 SQL 삽입 취약점을 찾을 수 있습니다. 공격자는 서버에서 실행되는 기본 SQL 쿼리의 쿼리 구조를 조작하는 입력을 만들 수 있습니다. 공격자는 이러한 입력을 사용하여 데이터베이스에서 데이터를 유출하고 경우에 따라 데이터를 수정할 수 있습니다. 이 발견 항목을 해결하려면 매개변수화된 쿼리를 사용하여 사용자 입력이 SQL 쿼리 구조에 영향을 미치지 않도록 합니다.
이 취약점에 대한 자세한 내용은 SQL 삽입을 참조하세요.
Prototype pollution
API의 카테고리 이름: PROTOTYPE_POLLUTION
Web Security Scanner는 객체 속성에 공격자가 제어할 수 있는 값이 할당된 웹 애플리케이션의 프로토타입 오염 취약점을 찾을 수 있습니다. 공격자는 애플리케이션을 교차 사이트 스크립팅 또는 기타 클라이언트 측 취약점에 취약하게 만드는 입력을 만들 수 있습니다.
이 발견 항목을 해결하려면 지원 중단된 proto
속성을 삭제하고 Object.prototype
객체를 변경할 수 없게 만듭니다.
이 완화 방법이 코드와 호환되지 않으면 공격자가 제어할 수 있는 입력에서 예상 값만 복사하도록 취약한 코드 부분을 변경하세요.
문제 확인
Web Security Scanner가 문제를 보고하면 문제의 위치를 확인해야 합니다. 이 섹션에서는 발견 항목 보고서를 사용하여 취약점을 재현하고 확인하는 방법을 설명합니다.
Google Cloud 콘솔에서 Web Security Scanner 페이지로 이동합니다.
프로젝트를 선택합니다. 관리형 커스텀 스캔 목록이 있는 페이지가 나타납니다.
스캔 구성에서 확인할 발견 항목이 포함된 스캔을 선택합니다. 스캔 세부정보가 있는 페이지가 열립니다.
결과 탭으로 이동하여 카테고리를 펼치고 발견 항목을 선택하여 세부정보를 확인합니다.
확인 방법은 발견 항목 카테고리에 따라 다릅니다. 테스트 브라우저를 사용하고 아래 안내를 따릅니다.
- 교차 사이트 스크립팅: 재현 URL을 따라가면 스캔으로 스크립트에 올바른 코드가 성공적으로 삽입되었음을 나타내는 빈 팝업이 표시됩니다.
- 오래된 라이브러리: 취약 URL을 따라가면 스캔으로 스크립트에 올바른 코드가 성공적으로 삽입되었음을 나타내는 'Exploited'라는 텍스트가 있는 페이지가 반환됩니다.
- 혼합 콘텐츠 HTTPS 페이지의 URL을 따라가면 혼합 콘텐츠 취약점에 대한 경고가 반환됩니다. 발견 항목 보고서는 HTTP를 통해 제공되는 리소스의 URL에서 취약한 리소스를 식별합니다.
- 플래시 삽입: Web Security Scanner는 이 카테고리에서 발견 항목을 반환할 수 있지만 대부분의 최신 브라우저는 플래시 삽입으로부터 보호됩니다. 이러한 발견 항목은 악용될 가능성이 낮습니다.
- 프로토타입 오염: 재현 URL 필드의 URL을 따라서 다음 JavaScript 스니펫을 사용하여 페이로드에 의해 도입된
Object.prototype
객체의 변경 사항을 검색합니다.({}).__secret_injected_property
({}).__defineGetter__.__secret_injected_property
({}).hasOwnProperty.__secret_injected_property
콘텐츠 보안 정책(CSP)이 적용되어 여전히 JavaScript 코드가 실행되지 않을 수 있습니다. 이러한 상황으로 XSS를 재현하기가 더 어려워질 수 있습니다. 이 문제가 나타나면 브라우저 로그 콘솔에서 발생한 CSP 위반을 자세히 확인하세요.