실습 설정 안내 및 요구사항
계정과 진행 상황을 보호하세요. 이 실습을 실행하려면 항상 시크릿 브라우저 창과 실습 사용자 인증 정보를 사용하세요.

Security Command Center로 애플리케이션 취약점 식별

실습 1시간 15분 universal_currency_alt 크레딧 1개 show_chart 입문
info 이 실습에는 학습을 지원하는 AI 도구가 통합되어 있을 수 있습니다.
이 콘텐츠는 아직 휴대기기에 최적화되지 않음
최상의 경험을 위해 데스크톱 컴퓨터에서 이메일로 전송된 링크를 사용하여 방문하세요.

GSP1262

Google Cloud 사용자 주도형 실습

개요

Web Security Scanner(WSS)는 App Engine, Google Kubernetes Engine(GKE), Compute Engine 웹 애플리케이션의 보안 취약점을 식별하는 데 사용할 수 있는 Security Command Center의 기본 서비스 중 하나입니다.

이 서비스는 애플리케이션을 크롤링하여 시작 URL 범위 내에 있는 모든 링크를 확인하고 최대한 많은 사용자 입력과 이벤트 핸들러 실행을 시도합니다. 교차 사이트 스크립팅(XSS), 플래시 삽입, 혼합 콘텐츠(HTTPS 내 HTTP 삽입), 구버전/취약 라이브러리 등의 일반적인 취약점 4가지를 자동으로 스캔하여 탐지합니다.

Web Security Scanner는 취약점을 조기에 식별할 수 있으며 거짓양성률도 매우 낮습니다. 보안 스캔을 쉽게 설정해서 실행하고, 예약 및 관리할 수 있습니다.

이 실습에서는 Web Security Scanner를 사용하여 Python Flask 애플리케이션의 취약점을 검사합니다.

목표

이 실습에서는 다음 작업을 수행하는 방법을 알아봅니다.

  • Compute Engine 인스턴스에서 취약한 Python Flask 애플리케이션을 실행합니다.
  • Web Security Scanner를 사용하여 애플리케이션을 스캔하고 취약점을 찾습니다.
  • 애플리케이션 취약점을 수정합니다.
  • 애플리케이션을 다시 스캔하고 취약점이 더 이상 존재하지 않는지 확인합니다.

설정 및 요건

각 실습에서는 정해진 기간 동안 새 Google Cloud 프로젝트와 리소스 집합이 무료로 제공됩니다.

  1. 시크릿 창을 사용하여 Qwiklabs에 로그인합니다.

  2. 실습 사용 가능 시간(예: 1:15:00)을 참고하여 해당 시간 내에 완료합니다.
    일시중지 기능은 없습니다. 필요한 경우 다시 시작할 수 있지만 처음부터 시작해야 합니다.

  3. 준비가 되면 실습 시작을 클릭합니다.

  4. 실습 사용자 인증 정보(사용자 이름비밀번호)를 기록해 두세요. Google Cloud Console에 로그인합니다.

  5. Google Console 열기를 클릭합니다.

  6. 다른 계정 사용을 클릭한 다음, 안내 메시지에 실습에 대한 사용자 인증 정보를 복사하여 붙여넣습니다.
    다른 사용자 인증 정보를 사용하는 경우 오류가 발생하거나 요금이 부과됩니다.

  7. 약관에 동의하고 리소스 복구 페이지를 건너뜁니다.

시나리오

Cymbal Bank 로고

Cymbal Bank는 50개 주에 2,000개 이상의 지점을 소유한 미국 소매 은행입니다. 이 은행은 강력한 결제 플랫폼을 기반으로 종합 입출금 서비스를 제공하고 있으며, 현재 기존의 금융 서비스 시스템을 디지털화하고 있습니다.

1920년 설립된 Troxler 은행이 Cymbal Group 소유 ATM에 집중 투자 후 1975년 Cymbal Group에 인수되어 Cymbal Bank로 재탄생했습니다. 이후 전국 선두 은행으로 성장했으며, 2014년 앱을 출시해 디지털 고객 경험 및 영업점 내 오프라인 고객 경험을 현대화하는 데 전략적으로 집중하고 있습니다. 현재 전국적으로 42,000명의 직원을 보유, 2019년 기준 매출은 240억 달러입니다.

Cymbal Bank는 Google Cloud 기술을 사용하여 기업 고객을 위한 새로운 뱅킹 애플리케이션을 개발하는 데 관심이 있습니다. 애플리케이션 보안이 매우 중요하므로, CTO는 Google Cloud가 애플리케이션 보안 취약점을 어떻게 식별하고 완화할 수 있는지 알고 싶어 합니다. 여러분은 클라우드 보안 엔지니어로서 Security Command Center의 첨단 애플리케이션 취약점 스캔 기능을 시연하는 과제를 수행해야 합니다.

작업 1. 가상 머신 실행 및 WSS에 대한 방화벽 규칙 만들기

이 작업에서는 Cymbal Bank의 CTO에게 애플리케이션 취약점을 시연하기 위한 인프라를 설정합니다. 구체적으로는 가상 머신을 배포하고 Web Security Scanner가 배포하려는 취약한 애플리케이션에 액세스할 수 있도록 방화벽 규칙을 엽니다.

  1. Google Cloud 콘솔 제목 표시줄에서 Cloud Shell 활성화(Cloud Shell 활성화 아이콘)를 클릭합니다. 메시지가 표시되면 계속을 클릭합니다.

  2. 다음 명령어를 실행하여 취약한 웹 애플리케이션을 스캔하는 데 사용할 수 있는 고정 IP 주소를 만듭니다.

gcloud compute addresses create xss-test-ip-address --region={{{project_0.default_region|lab region}}}
  1. 다음 명령어를 실행하여 방금 생성한 고정 IP 주소를 출력합니다.
gcloud compute addresses describe xss-test-ip-address \ --region={{{project_0.default_region|lab region}}} --format="value(address)"
  1. IP 주소(출력의 한 줄)를 복사하여 메모장에 저장합니다.

  2. 다음 명령어를 실행하여 취약한 애플리케이션을 실행할 VM 인스턴스를 만듭니다.

gcloud compute instances create xss-test-vm-instance \ --address=xss-test-ip-address --no-service-account \ --no-scopes --machine-type=e2-micro --zone={{{project_0.default_zone|lab zone}}} \ --metadata=startup-script='apt-get update; apt-get install -y python3-flask'

시작 스크립트는 간단한 Python 애플리케이션을 실행하여 일반적인 웹 애플리케이션 보안 취약점인 교차 사이트 스크립팅(XSS) 취약점을 보여주는 데 사용되는 웹 애플리케이션 프레임워크인 python-flask를 설치합니다.

  1. 다음 명령어를 실행하여 Web Security Scanner가 취약한 애플리케이션에 액세스할 수 있도록 방화벽 규칙을 엽니다. Web Security Scanner가 애플리케이션을 스캔하는 소스 범위를 기록해 둡니다.
gcloud compute firewall-rules create enable-wss-scan \ --direction=INGRESS --priority=1000 \ --network=default --action=ALLOW \ --rules=tcp:8080 --source-ranges=0.0.0.0/0

내 진행 상황 확인하기를 클릭하여 목표를 확인합니다. 원하는 구성으로 VM 만들기

작업 2. 취약한 애플리케이션을 배포하여 XSS 취약점 트리거

이 작업에서는 애플리케이션 코드를 가져오고 Web Security Scanner가 감지할 수 있는 취약점을 도입합니다. 이는 사용자의 입력을 받아 변경 없이 출력하는 간단한 양식인 애플리케이션의 형태입니다.

  1. Cloud 콘솔의 탐색 메뉴(탐색 메뉴 아이콘)에서 Compute Engine > VM 인스턴스를 클릭합니다.

    첫 초기화는 1분 정도 걸릴 수 있습니다.

  2. 그런 다음 인스턴스 옆에 있는 SSH 버튼을 클릭합니다.

Cloud 콘솔의 SSH 버튼
  1. 브라우저에서 SSH를 통해 VM에 연결하도록 허용할지 묻는 팝업이 표시될 수 있습니다. 승인을 클릭합니다.

그러면 새 창에서 VM 인스턴스에 대한 SSH 연결이 열립니다.

  1. 이 SSH 창(Cloud Shell이 아님)에서 다음 명령어를 실행하여 취약한 웹 애플리케이션 파일을 다운로드하고 추출합니다.
gsutil cp gs://cloud-training/GCPSEC-ScannerAppEngine/flask_code.tar . && tar xvf flask_code.tar
  1. 이제 다음 명령어를 실행하여 애플리케이션을 배포합니다.
python3 app.py
  1. 잠시 후 애플리케이션이 실행 중임을 나타내는 메시지가 표시됩니다.

출력:

* Serving Flask app "app" (lazy loading) * Environment: production WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. * Debug mode: off * Running on http://0.0.0.0:8080/ (Press CTRL+C to quit)
  1. 앞서 메모장에 복사한 VM의 고정 IP 주소를 찾습니다.

  2. 아래 URL 필드의 YOUR_EXTERNAL_IP를 해당 IP 주소로 바꾸고 새 브라우저 탭에서 URL을 엽니다.

http://<YOUR_EXTERNAL_IP>:8080 참고: Google Cloud 콘솔에서도 외부 IP 주소를 찾을 수 있으며, 여기서는 VM 인스턴스와 연결된 필드로 나열됩니다. 참고: 외부 IP가 보안 연결을 지원하지 않는다는 팝업이 표시되면 사이트로 이동을 클릭합니다.

웹 양식이 있는 Cymbal Bank 기업 뱅킹 포털이 표시됩니다.

  1. 웹 양식에 다음 문자열을 입력합니다.
<script>alert('This is an XSS Injection')</script>
  1. 이제 게시 버튼을 클릭합니다.

다음과 같은 알림 창이 표시됩니다.

브라우저의 알림 창

이것은 웹 애플리케이션의 일반적인 취약점인 교차 사이트 스크립팅 취약점입니다. 교차 사이트 스크립팅(XSS)은 공격자가 애플리케이션의 컨텍스트에서 사용자 브라우저에 악성 스크립트를 실행할 수 있게 하는 취약점입니다. 브라우저가 문자열을 합법적인 JavaScript로 해석하고 실행합니다.

XSS 버그를 사용하여 HTML 페이지에 JavaScript를 삽입하는 공격자는 페이지를 방문하는 피해자의 로그인 세션에 거의 무제한으로 액세스할 수 있습니다. 공격자는 사용자 데이터를 도용하거나, 조작하거나, 개인 정보 보호 또는 보안 설정을 변경하거나, 제품의 형태와 작동 방식을 완전히 바꿀 수도 있습니다. 더욱이 하나의 애플리케이션에서 있는 XSS 취약점은 아무리 사소하더라도 동일한 도메인 내의 다른 콘텐츠를 위태롭게 할 수 있습니다.

이는 Web Security Scanner로 식별할 수 있는 수많은 애플리케이션 취약점 중 하나입니다.

내 진행 상황 확인하기를 클릭하여 목표를 확인합니다. VM에 취약한 웹 애플리케이션 파일 다운로드

작업 3. Web Security Scanner API 사용 설정

취약한 애플리케이션이 실행되었으므로 이제 CTO에게 Web Security Scanner의 기능을 시연할 차례입니다. 하지만 먼저 WSS에서 실행하는 데 사용하는 API를 구성해야 합니다.

  1. Cloud 콘솔 브라우저 탭으로 다시 전환합니다.

  2. 탐색 메뉴(탐색 메뉴 아이콘)에서 API 및 서비스 > 라이브러리를 선택합니다.

  3. API 및 서비스 검색 필드에 Web Security Scanner를 입력하고 Enter 키를 누릅니다.

  4. Web Security Scanner API를 선택합니다.

  5. 사용 설정을 클릭하여 Web Security Scanner API를 사용 설정합니다.

내 진행 상황 확인하기를 클릭하여 목표를 확인합니다. Web Security Scanner API 사용 설정

작업 4. WSS로 배포된 애플리케이션 스캔

이 작업에서는 보안 취약점이 발견되는지 검사할 수 있도록 애플리케이션의 스캔을 구성하고 설정합니다.

  1. 탐색 메뉴(탐색 메뉴 아이콘)를 열고 보안 > Web Security Scanner를 선택합니다.

  2. + 새 스캔을 클릭합니다.

  3. 시작 URL 섹션의 시작 URL 1 필드에는 고정 IP 주소가 미리 입력되어 있어야 합니다.

  4. 시작 URL이 다음과 같이 되도록 포트 번호 8080을 추가합니다.

http://<EXTERNAL_IP>:8080
  1. 시작 URL 2가 있는 경우 삭제합니다.

  2. 잠시 시간을 내어 새 스캔 만들기 화면의 나머지 필드를 검토합니다.

  • 인증: 스캐너가 스캔하는 동안 앱에 인증할 수 있도록 애플리케이션 사용자 인증 정보를 제공하는 데 사용할 수 있는 속성입니다.
  • 일정: 스캔을 자동으로 실행하도록 예약하는 데 사용할 수 있는 속성입니다.
  • Security Command Center로 내보내기: 스캔이 완료되면 스캔 구성 및 스캔 결과를 Cloud Security Command Center에 자동으로 내보낼 수 있는 속성입니다.
  1. 인증이 여전히 없음으로 설정되어 있고 일정예약 안함으로 설정되어 있는지 확인합니다.

  2. 더보기를 클릭하여 나머지 설정을 살펴봅니다.

  3. 저장을 클릭하여 스캔을 만듭니다.

참고: 이렇게 하면 스캔이 생성되지만 아직 실행하지는 마세요. 아직 예약을 만들지 않았으므로 현재는 수동으로 실행해야 합니다.
  1. 실행을 클릭하여 스캔을 시작합니다.
참고: 가능한 테스트의 수를 감안하면 스캔하는 데 10분이 조금 넘게 걸릴 수 있습니다.
  1. 별도의 브라우저 창에서 SSH 세션으로 돌아갑니다.

세션이 타임아웃된 경우 다음 명령어를 실행하여 애플리케이션을 다시 시작합니다.

python3 app.py

SSH 창에 아래 예시와 비슷한 로그가 생성되기 시작합니다. 이는 잠재적 취약점이 있을 수 있는 모든 URL을 테스트하는 Web Security Scanner입니다.

출력:

34.29.3.21 - - [23/Mar/2023 23:30:41] "GET /output HTTP/1.1" 200 - 35.184.129.44 - - [23/Mar/2023 23:31:06] "GET /output HTTP/1.1" 200 - 35.184.129.44 - - [23/Mar/2023 23:31:07] "GET /favicon.ico HTTP/1.1" 404 - 34.68.231.45 - - [23/Mar/2023 23:31:09] "POST / HTTP/1.1" 302 - 34.68.231.45 - - [23/Mar/2023 23:31:09] "GET /output HTTP/1.1" 200 - 34.68.231.45 - - [23/Mar/2023 23:31:09] "GET /favicon.ico HTTP/1.1" 404 - 35.184.129.44 - - [23/Mar/2023 23:31:17] "POST / HTTP/1.1" 302 - 35.184.129.44 - - [23/Mar/2023 23:31:17] "GET /output HTTP/1.1" 200 -

다음 HTTP 상태 코드가 포함된 로그 구문이 표시될 수 있습니다.

  • 200: HTTP 서버가 OK 응답으로 응답한 성공적인 요청입니다.
  • 302: 리소스가 Location 헤더에 따라 일시적으로 다른 곳에 있음을 나타냅니다.
  • 404: 하나 이상의 리소스를 찾을 수 없음을 나타냅니다.

자세한 내용은 HTTP 상태 및 오류 코드 문서를 확인하세요.

스캔이 실행되는 동안 결과, 크롤링된 URL, 세부정보 탭을 살펴보세요. 시작하기 동영상 또는 취약점 스캔 동영상에서 Web Security Scanner에 관해 자세히 알아볼 수도 있습니다.

  1. 스캔이 완료되면 결과 탭에 교차 사이트 취약점이 표시됩니다.
취약점이 있는 Web Security Scanner 결과

Web Security Scanner는 모든 시작 URL을 스캔하고 Cymbal Bank 애플리케이션의 XSS 취약점을 감지할 수 있었습니다. 이와 같이 중요한 취약점을 자동으로 감지하는 능력은 Cymbal Bank와 같은 보안 중심 조직에 중요한 이점입니다.

내 진행 상황 확인하기를 클릭하여 목표를 확인합니다. Web Security Scanner 스캔 실행 및 애플리케이션 취약점 감지

작업 5. 취약점 수정 후 다시 스캔

Web Security Scanner가 XSS 취약점을 감지할 수 있음을 입증했으므로 이제 취약점을 해결하고 애플리케이션 스캔을 다시 실행합니다.

  1. VM 인스턴스에 연결된 SSH 창으로 돌아갑니다.
  2. Ctrl + C를 눌러 실행 중인 애플리케이션을 중지합니다.
  3. 다음 명령어를 실행하여 nano 편집기로 app.py 파일을 편집합니다.
nano app.py
  1. 출력 문자열을 설정하는 두 줄을 찾습니다.
# output_string = "".join([html_escape_table.get(c, c) for c in input_string]) output_string = input_string
  1. 첫 번째 줄에서 # 기호를 삭제하고 다음 줄의 시작 부분에 추가합니다(코드를 적절하게 들여쓰기해야 함).

마지막 줄은 다음과 같아야 합니다.

@app.route('/output') def output(): output_string = "".join([html_escape_table.get(c, c) for c in input_string]) # output_string = input_string return flask.render_template("output.html", output=output_string) 참고: html_escape_table은 '<' 기호와 같은 특수 HTML 문자와 텍스트 표현을 일대일로 매칭하는 사전입니다. 양식이 제출을 원시 텍스트로만 수집하고 해석하도록 이 테이블을 사용하여 특수 HTML 문자를 이스케이프 처리합니다. 자세한 내용은 HTML 이스케이프란 무엇인가요? 문서를 참고하세요.
  1. 이제 Ctrl+X, Y, Enter를 차례로 입력하여 변경사항을 저장합니다.

  2. 애플리케이션을 다시 실행합니다.

python3 app.py
  1. Google Cloud 콘솔 브라우저 탭으로 돌아갑니다(Web Security Scanner 페이지가 여전히 열려 있어야 함).

  2. 페이지 상단에서 실행을 클릭합니다.

SSH 창에 Web Security Scanner가 애플리케이션 URL에서 잠재적인 취약점을 테스트할 때 생성되는 로그가 표시되기 시작합니다.

출력:

34.29.3.21 - - [23/Mar/2023 23:30:41] "GET /output HTTP/1.1" 200 - 35.184.129.44 - - [23/Mar/2023 23:31:06] "GET /output HTTP/1.1" 200 - 35.184.129.44 - - [23/Mar/2023 23:31:07] "GET /favicon.ico HTTP/1.1" 404 - 34.68.231.45 - - [23/Mar/2023 23:31:09] "POST / HTTP/1.1" 302 - 34.68.231.45 - - [23/Mar/2023 23:31:09] "GET /output HTTP/1.1" 200 - 34.68.231.45 - - [23/Mar/2023 23:31:09] "GET /favicon.ico HTTP/1.1" 404 - 35.184.129.44 - - [23/Mar/2023 23:31:17] "POST / HTTP/1.1" 302 - 35.184.129.44 - - [23/Mar/2023 23:31:17] "GET /output HTTP/1.1" 200 -
  1. 스캔 결과를 기다리는 동안 브라우저를 사용하여 별도의 탭에서 http://<EXTERNAL_IP>:8080 URL에 로그인합니다.

    웹 양식이 다시 표시됩니다.

  2. 웹 양식에 이전에 입력한 것과 동일한 문자열을 입력합니다.

<script>alert('This is an XSS Injection')</script>
  1. 이제 게시 버튼을 클릭합니다.

  2. 이번에는 브라우저에서 다음 문자열을 수신하는지 확인합니다.

텍스트 문자열로 표시되는 입력 참고: 이 기법은 이와 같이 간단한 시나리오에서는 작동하지만 웹 애플리케이션을 제대로 보호하려면 이 실습의 범위를 벗어나는 더 고급 기법과 프레임워크를 사용해야 합니다.

아래 링크에서 더 많은 리소스를 살펴보세요.
  1. Google Cloud 콘솔로 돌아가서 Web Security Scanner 페이지에서 중단한 부분부터 다시 시작합니다.

  2. 페이지 상단의 실행을 클릭하여 애플리케이션을 다시 스캔합니다.

  3. 잠시 후 결과에 더 이상 XSS 취약점이 없다는 것을 알 수 있습니다.

취약점이 없는 Web Security Scanner 출력

내 진행 상황 확인하기를 클릭하여 목표를 확인합니다. Web Security Scanner로 취약점 수정 후 애플리케이션 다시 스캔

수고하셨습니다

Google Cloud의 강력한 Web Security Scanner 솔루션을 사용하여 XSS 취약점을 식별하고 해결하는 방법을 Cymbal Bank CTO에게 성공적으로 시연했습니다.

실습 종료하기

실습을 완료하면 실습 종료를 클릭합니다. Google Cloud Skills Boost에서 사용된 리소스를 자동으로 삭제하고 계정을 지웁니다.

실습 경험을 평가할 수 있습니다. 해당하는 별표 수를 선택하고 의견을 입력한 후 제출을 클릭합니다.

별점의 의미는 다음과 같습니다.

  • 별표 1개 = 매우 불만족
  • 별표 2개 = 불만족
  • 별표 3개 = 중간
  • 별표 4개 = 만족
  • 별표 5개 = 매우 만족

의견을 제공하고 싶지 않다면 대화상자를 닫으면 됩니다.

의견이나 제안 또는 수정할 사항이 있다면 지원 탭을 사용하세요.

Google Cloud 교육 및 자격증

Google Cloud 기술을 최대한 활용하는 데 도움이 됩니다. Google 강의에는 빠른 습득과 지속적인 학습을 지원하는 기술적인 지식과 권장사항이 포함되어 있습니다. 기초에서 고급까지 수준별 학습을 제공하며 바쁜 일정에 알맞은 주문형, 실시간, 가상 옵션이 포함되어 있습니다. 자격증은 Google Cloud 기술에 대한 역량과 전문성을 검증하고 입증하는 데 도움이 됩니다.

설명서 최종 업데이트: 2025년 2월 2일

실습 최종 테스트: 2025년 2월 27일

Copyright 2026 Google LLC All rights reserved. Google 및 Google 로고는 Google LLC의 상표입니다. 기타 모든 회사명 및 제품명은 해당 업체의 상표일 수 있습니다.

시작하기 전에

  1. 실습에서는 정해진 기간 동안 Google Cloud 프로젝트와 리소스를 만듭니다.
  2. 실습에는 시간 제한이 있으며 일시중지 기능이 없습니다. 실습을 종료하면 처음부터 다시 시작해야 합니다.
  3. 화면 왼쪽 상단에서 실습 시작을 클릭하여 시작합니다.

시크릿 브라우징 사용

  1. 실습에 입력한 사용자 이름비밀번호를 복사합니다.
  2. 비공개 모드에서 콘솔 열기를 클릭합니다.

콘솔에 로그인

    실습 사용자 인증 정보를 사용하여
  1. 로그인합니다. 다른 사용자 인증 정보를 사용하면 오류가 발생하거나 요금이 부과될 수 있습니다.
  2. 약관에 동의하고 리소스 복구 페이지를 건너뜁니다.
  3. 실습을 완료했거나 다시 시작하려고 하는 경우가 아니면 실습 종료를 클릭하지 마세요. 이 버튼을 클릭하면 작업 내용이 지워지고 프로젝트가 삭제됩니다.

현재 이 콘텐츠를 이용할 수 없습니다

이용할 수 있게 되면 이메일로 알려드리겠습니다.

감사합니다

이용할 수 있게 되면 이메일로 알려드리겠습니다.

한 번에 실습 1개만 가능

모든 기존 실습을 종료하고 이 실습을 시작할지 확인하세요.

시크릿 브라우징을 사용하여 실습 실행하기

이 실습을 실행하려면 시크릿 모드 또는 시크릿 브라우저 창을 사용하세요. 개인 계정과 학생 계정 간의 충돌로 개인 계정에 추가 요금이 발생하는 일을 방지해 줍니다.