교차 사이트 스크립팅이란?

교차 사이트 스크립팅 공격은 웹 브라우저를 속여 악성 코드를 실행하도록 유도합니다.

학습 목표

이 글을 읽은 후에 다음을 할 수 있습니다:

  • 교차 사이트 스크립팅 이해
  • 클라이언트 측 코드의 정의
  • 교차 사이트 스크립팅 공격의 결과 설명
  • 반영된 스크립팅과 영구 교차 사이트 스크립팅의 차이점 설명
  • 교차 사이트 스크립팅을 완화하기 위한 전략 목록

관련 콘텐츠


계속 알아보시겠어요?

인터넷에서 가장 인기 있는 인사이트를 한 달에 한 번 정리하는 Cloudflare의 월간 요약본 theNET를 구독하세요!

Cloudflare가 개인 데이터를 수집하고 처리하는 방법은 Cloudflare의 개인정보 취급방침을 참조하세요.

글 링크 복사

교차 사이트 스크립팅이란?

교차 사이트 스크립팅(XSS)은 공격자가 합법적인 웹 사이트에 코드를 첨부하여 피해자가 웹 사이트를 로드할 때 이 코드가 실행되도록 하는 익스플로잇입니다. 이 악성 코드는 여러 가지 방법으로 삽입될 수 있습니다. 가장 많이 사용되는 방법은 URL 끝에 추가하거나 사용자가 생성한 콘텐츠를 표시하는 페이지에 직접 게시하는 것입니다. 교차 사이트 스크립팅은 좀 더 기술적인 용어로는 클라이언트 측 코드 삽입 공격입니다.

교차 사이트 스크립팅 공격

클라이언트 측 코드란?

클라이언트 측 코드는 사용자 컴퓨터에서 실행되는 JavaScript 코드입니다.웹 사이트의 경우 클라이언트 측 코드는 일반적으로 브라우저가 웹 페이지를 로드한 후 웹 브라우저에서 실행되는 코드입니다.이 코드는 호스트의 웹 서버에서 실행되는 서버 측 코드와 대조됩니다.클라이언트 측 코드는 인터랙티브 웹 페이지에서 매우 유용하며, 상호작용이 있을 때마다 사용자의 컴퓨터가 웹 서버와 통신할 필요가 없으므로 인터랙티브 콘텐츠가 더 빠르고 안정적으로 실행됩니다.브라우저 기반 게임은 클라이언트 측 코드가 연결 문제와 관계없이 게임이 원활하게 실행되도록 보장할 수 있으므로 클라이언트 측 코드에 널리 사용되는 플랫폼 중 하나입니다.

클라이언트 측에서 실행되는 코드는 최신 웹 개발에서 매우 인기가 있으며 대부분의 최신 웹 사이트에서 활용됩니다. 교차 사이트 코드는 최신 웹의 필수 요소이므로 교차 사이트 스크립팅은 가장 자주 보고되는 사이버 보안 취약점 중 하나가 되었으며, 교차 사이트 스크립팅 공격으로 YouTube, Facebook, Twitter 등의 주요 사이트가 피해를 입었습니다.

교차 사이트 스크립팅의 예는?

교차 사이트 스크립팅 공격의 한 가지 유용한 예는 검증되지 않은 댓글 포럼이 있는 웹 사이트에서 흔히 볼 수 있습니다. 이 경우 공격자는 '<script>< /script>' 태그로 감싼 실행 코드로 구성된 댓글을 게시합니다. 이 태그는 웹 브라우저에 태그 사이의 모든 내용을 JavaScript 코드로 해석하도록 지시합니다. 해당 댓글이 페이지에 게시되면 다른 사용자가 해당 웹 사이트를 로드할 때 스크립트 태그 사이의 악성 코드가 웹 브라우저에서 실행되므로 그 사용자가 공격의 피해자가 될 수 있습니다.

공격자가 교차 사이트 스크립팅을 사용하여 피해를 입힐 수 있는 방법은 무엇일까요?

JavaScript 교차 사이트 스크립팅 공격은 JavaScript가 신원 도용 및 기타 악의적인 목적으로 사용될 수 있는 일부 중요한 데이터에 액세스할 수 있으므로 널리 사용됩니다. 예를 들어, JavaScript는 쿠키*에 액세스할 수 있으며, 공격자는 XSS 공격을 사용하여 사용자의 쿠키를 훔쳐 온라인에서 사칭할 수 있습니다. JavaScript는 또한 HTTP 요청을 생성하므로 도난당한 쿠키와 같은 데이터를 공격자에게 다시 전송하는 데 사용될 수 있습니다. 또한 클라이언트 측 JavaScript는 공격자가 지리적 위치 좌표, 웹캠 데이터 등 중요한 정보가 포함된 API에 액세스하는 데 도움이 될 수 있습니다.

일반적인 교차 사이트 스크립팅 공격의 흐름은 다음과 같습니다.

  1. 피해자가 웹 페이지를 로드하면 악성 코드가 사용자의 쿠키를 복사합니다
  2. 그런 다음 그 코드는 요청 본문에 탈취한 쿠키를 포함시켜 공격자의 웹서버로 HTTP 요청을 전송합니다.
  3. 그런 다음 공격자는 해당 쿠키를 사용하여 소셜 엔지니어링 공격을 목적으로 해당 웹 사이트의 사용자를 가장하거나 은행 계좌 번호 또는 기타 중요한 데이터에 액세스할 수 있습니다.

*쿠키는 사용자의 컴퓨터에 저장된 임시 로그인 자격 증명입니다. 예를 들어 사용자가 Facebook과 같은 사이트에 로그인하면 사이트에서 쿠키가 제공됩니다. 그러므로 브라우저 창을 닫고 그날 나중에 Facebook으로 돌아가더라도 쿠키를 통해 자동으로 인증되어 다시 로그인할 필요가 없습니다.

교차 사이트 스크립팅에는 어떤 유형이 있을까요?

가장 많이 사용되는 두 가지 유형의 교차 사이트 스크립팅 공격은 반사형 교차 사이트 스크립팅과 지속적 교차 사이트 스크립팅입니다.

반사형 교차 사이트 스크립팅

이는 가장 흔히 볼 수 있는 교차 사이트 스크립팅 공격입니다. 반사형 공격의 경우 웹 사이트 URL 끝에 악성 코드가 추가되는데, 이 웹 사이트는 신뢰할 수 있는 합법적인 웹 사이트인 경우가 많습니다. 피해자가 웹 브라우저에서 이 링크를 로드하면 브라우저에서는 URL에 삽입된 코드가 실행됩니다. 공격자는 일반적으로 어떤 형태의 소셜 엔지니어링을 사용하여 피해자가 링크를 클릭하도록 속입니다.

예를 들어, 사용자가 은행에서 보낸 것으로 자처하며 정상적으로 보이는 이메일을 받을 수 있습니다. 이 이메일에서는 은행 웹 사이트에서 몇 가지 조치를 취하도록 요청하고 링크를 제공합니다. 링크는 다음과 같은 모습일 수 있습니다.

http://legitamite-bank.com/index.php?user=<script>여기에 악성 코드가 있습니다!</script>

URL의 앞 부분에는 안전해 보이고 신뢰할 수 있는 웹 사이트의 도메인이 들어 있지만, URL 끝에 삽입된 코드는 악성일 수 있습니다.

영구적인 교차 사이트 스크립팅

예를 들어 댓글 포럼이나 소셜 미디어 사이트와 같이 다른 사용자가 볼 수 있는 콘텐츠를 게시할 수 있는 사이트에서 이런 일이 발생합니다. 사이트에서 사용자 생성 콘텐츠의 입력값을 제대로 검증하지 않으면 공격자는 페이지가 로드될 때 다른 사용자의 브라우저가 실행하는 코드를 삽입할 수 있습니다. 예를 들어 공격자가 온라인 데이트 사이트에 접속하여 프로필에 다음과 같은 내용을 입력할 수 있습니다.

"안녕하세요! 저는 Dave입니다. 저는 해변에서 오래 산책하는 것을 즐기고 <스크립트>여기에 악성 코드가 있음</script>"

Dave의 프로필에 액세스하려고 시도하는 모든 사용자는 Dave의 지속적 교차 사이트 스크립팅 공격의 피해자가 됩니다.

교차 사이트 스크립팅을 방지하는 방법

Cross-site scripting을 완화하기 위한 단일 전략은 없으며, 웹 애플리케이션 유형에 따라 각기 다른 수준의 보호가 필요합니다. 여러 가지 보호 조치를 취할 수 있으며, 아래에서 몇 가지를 간략하게 설명하겠습니다.

가능한 경우 입력에서 HTML을 피하기 - 지속적 교차 사이트 스크립팅 공격을 방지하는 아주 효과적인 방법 중 하나는 사용자가 양식 입력 란에 HTML을 게시하지 못하도록 하는 것입니다.마크다운 및 WYSIWYG 편집기와 같이 HTML을 사용하지 않고도 풍부한 콘텐츠를 만들 수 있는 다른 옵션이 있습니다.

입력 유효성 검사 - 유효성 검사는 사용자가 특정 기준을 충족하지 못하는 양식에 데이터를 게시하지 못하도록 하는 규칙을 구현하는 것을 의미합니다.예를 들어 사용자의 '성'을 묻는 입력에는 영숫자로 구성된 데이터만 제출할 수 있도록 하는 유효성 검사 규칙을 말합니다.유효성 검사 규칙을 설정하여 교차 사이트 스크립팅에서 일반적으로 사용되는 태그나 문자(예: "<script>" 태그)를 거부할 수도 있습니다.

데이터 삭제 - 데이터 삭제는 유효성 검사와 유사하지만, 데이터 삭제는 데이터가 이미 웹 서버에 게시된 후 다른 사용자에게 표시되기 전에 이루어집니다.HTML을 삭제하고 악성 코드 삽입을 필터링할 수 있는 여러 온라인 도구가 있습니다.

쿠키 보안 조치 취하기 - 웹 애플리케이션에서 교차 사이트 스크립팅 공격을 통한 쿠키 도용을 완화할 수 있는 쿠키 처리에 대한 특수 규칙을 설정할 수도 있습니다.쿠키는 특정 IP 주소에 연결될 수 있으므로 교차 사이트 스크립팅 공격자가 해당 쿠키에 액세스할 수 없습니다.또한 JavaScript가 쿠키에 액세스하지 못하도록 차단하는 규칙을 설정할 수도 있습니다.

WAF 규칙 설정 - WAF를 구성하여 반사형 교차 사이트 스크립팅을 방지하는 규칙을 적용할 수도 있습니다.이러한 WAF 규칙은 교차 사이트 스크립팅 공격을 포함하여 서버에 대한 비정상적인 요청을 차단하는 전략을 사용합니다.Cloudflare WAF는 턴키 설치를 제공하며 교차 사이트 스크립팅, DDoS 공격, SQL 삽입, 기타 일반적인 위협으로부터 웹 애플리케이션을 보호합니다.