크로스 사이트 스크립팅(Cross Site Scripting, XSS)은 공격자가 상대방의 브라우저에 스크립트가 실행되도록 해 사용자의 세션을 가로채거나, 웹사이트를 변조하거나, 악의적 콘텐츠를 삽입하거나, 피싱 공격을 진행하는 것을 말합니다. XSS 공격은 스크립트 언어와 취약한 코드를 공격 대상으로 합니다. 이 글에서는 크로스 사이트 스크립팅이 무엇인지 알아보고, 크로스 사이트 스크립팅의 공격 유형과 VPN으로 보안을 확보하는 방법에 대해 알아보겠습니다.
Agnė Augustėnė
Dec 19, 2021 · 1분 소요
목차
크로스 사이트 스크립팅은 웹사이트에 악성 스크립트를 주입하는 행위를 말합니다. 해커는 사람들이 친밀하고 안전하다고 생각하는 웹사이트에 악성 스크립트를 주입하고, 악성 스크립트가 포함된 게시글을 열람한 피해자들의 쿠키는 해커에게 전송됩니다. 이를 통해 해커는 피해자의 브라우저에서 스트립트를 실행해 사용자의 세션을 가로채거나, 웹사이트 변조하거나, 악의적인 컨텐츠 삽입하거나, 피싱 공격 등을 시도할 수 있게 됩니다.
크로스 사이트 스크립팅은 스크립트 언어와 취약한 코드를 공격 대상으로 하며, 해킹의 주요 목적은 사용자의 정보를 도용하는 것이며, 로그인 입력란을 감염시켜 로그인 세부 정보와 쿠키를 탈취하는 방식으로 진행됩니다. 악성 소프트웨어는 사용자의 세부 정보를 기록해 해커에게 전송하고, 해커는 해당 정보를 사용해 피해자의 계정을 제어할 수 있게 됩니다.
XSS 공격(XSS Attack)은 10가지 웹 애플리케이션 보안 취약점 목록인 OWASP Top10에 포함되어 있을 정도로 자주 발생하는 공격입니다. 대부분의 경우 사용자가 글을 쓰고 읽을 수 있는 게시판에서 자주 발생하지만, 사용자의 입력 값을 웹페이지에 표시하는 곳에서도 공격이 발생할 수 있습니다.
XSS 공격은 악의적인 사용자가 C&C 서버로 리디렉션하기 위해 리디렉션 스크립트를 주입해 중간 경유지로 활용되기도 하며, 사용자의 쿠키를 탈취해 세션 하이재킹(Session Hijacking) 공격을 수행하는 역할을 하기도 합니다.
크로스 사이트 스크립팅은 쉽게 말해 '공격자'의 웹사이트에서 피해자가 친숙하다고 느끼는 웹사이트에 악성 스크립트를 주입하는 행위를 말합니다. 웹사이트 사이를 넘어서 공격한다는 의미에서 크로스 사이트 스크립팅이라는 용어가 생겨났습니다.
크로스 사이트 스크립트라는 용어는 원래 자바 스크립트만을 지칭하는 데 사용되었습니다. 하지만 현재 XSS는 ActiveX, Flash, HTML 등과 같은 비(非) JS 벡터도 포함되는 용어가 되었습니다.
XSS 공격 방식으로는 쿠키 스니핑(Cookie Sniffing), 스크립트 암호화 및 우회, 악성 스크립트 유포, 키 로거(Key Logger), 마우스 스니퍼(Mouse Sniffer), 거짓 정보 추가 등이 있습니다. XSS 공격은 주로 스크립트 언어와 취약한 코드를 대상으로 합니다. XSS 공격의 세 가지 유형은 다음과 같습니다.
가장 일반적인 유형의 XSS 공격으로 사용자에게 입력 받은 값을 서버에서 되돌려주는 곳에서 발생합니다. 이러한 유형의 XSS 공격은 피해자에게 입력 받은 검색어를 그대로 표시하는 곳이나 피해자가 입력한 값을 오류 메시지와 함께 보여주는 곳에 악성 스크립트를 삽입하며, 스크립트는 서버가 피해자의 입력 값을 포함해 응답을 전송할 때 실행됩니다.
반사형 XSS 공격은 피해자가 직접 스크립트를 실행하도록 유도하기 때문에 1회성 공격이라고 할 수 있습니다. 해커가 주입한 악성 스크립트는 해당 서버를 반사해 오류 메시지나 검색 결과를 통해 피해자의 화면에 표시될 수 있습니다.
악성 스크립트는 링크를 클릭한 사용자의 쿠키 값을 해커에게 전송하도록 설정되어 있습니다. 사용자는 버튼 또는 링크를 클릭함으로써 악성 스크립트를 실행하게 되며, 이 경우 악성 스크립트에 감염된 웹사이트에 입력한 모든 정보가 노출됩니다.
영구적 XSS 공격은 저장형 XSS 공격이라고도 하며, 응용 프로그램이나 웹사이트의 모든 HTTP 응답을 감염시키는 공격을 의미합니다. 영구적 XSS 공격은 반사형 XSS 공격과 달리 지속적으로 피해를 입히는 공격 유형입니다.
영구적 XSS 공격은 해커는 웹 애플리케이션에서 XSS 취약점을 파악하고, 악성 스크립트를 삽입하는 방식으로 진행됩니다. 삽입된 스크립트는 데이터베이스에 저장이 되고, 악성 스크립트가 존재하는 게시글 등을 열람한 사용자들은 쿠키를 탈취당하거나 다른 사이트로 리디렉션되는 공격을 받게 됩니다. 악성 스크립트가 데이터베이스에 저장되어 지속적으로 공격을 실시하기 때문에 많은 피해가 발생할 수 있다는 것이 영구적 XSS 공격의 특징입니다.
영구적 XSS 공격이 가장 많이 발생하는 곳은 게시판이며, 게시판 외에도 사용자가 입력한 값이 데이터베이스에 저장이 되고 저장된 값이 그대로 프론트엔드에 표시되는 곳에서 공격이 발생할 가능성이 높습니다. 일반적으로 XSS 공격은 사용자의 입력 값을 검증하지 않기 때문에 발생한다고 할 수 있습니다.
영구적 XSS가 위험한 이유는 사용자가 링크를 클릭하도록 유인할 필요가 없다는 것입니다. 해커가 할 일은 피해자가 악성 코드가 삽입된 웹사이트에 접속하기만을 기다리는 것뿐입니다.
웹페이지를 여는 즉시 생성되는 문서 객체 모델(Document Object Model, DOM)은 사용자가 서버와 상호 작용하지 않고도 페이지의 모든 콘텐츠에 액세스할 수 있도록 돕는 프로그래밍 인터페이스입니다. DOM 기반 XSS 공격은 피해자의 브라우저에 초점을 맞춘 것이 특징인 공격입니다.
반사형 및 영구적 XSS는 응답 페이지 HTML에서 악성코드가 분명하게 나타나기 때문에 위험 징후를 발견할 수 있지만, DOM 기반 XSS는 웹사이트의 코드를 조사하지 않고는 취약점을 발견할 수 없습니다. 이 때문에 전문 기술 지식을 갖추지 않은 이상 DOM 기반 XSS 공격에 당하기 쉽습니다. 웹사이트를 클릭하기 전 코드를 확인하는 사람은 많지 않기 때문입니다.
안타깝게도 XSS 공격은 미리 방지하기 어려우며, 특히 악성 프로그램은 사용자의 개인 장치가 아닌 사용자가 방문하는 웹사이트를 대상으로 하기에 공격에 노출되기 쉽습니다. 실제로 대한민국에서도 XSS 공격 사례를 확인할 수 있는데, 지난 2002년 가수 겸 프로듀서인 박진영, 탤런트 김민희 등 연예인들의 포털 사이트 계정 비밀번호를 알아내 메일 내용을 훔쳐본 사람들이 구속된 사건이 바로 그 사례입니다. 이때 사용된 공격 방법이 바로 ‘크로스 사이트 스크립트(XSS)’ 취약점을 이용한 공격이었습니다.
일반 해킹l 및 모든 종류의 악성 코드와 마찬가지로 XSS 공격을 방지하는 가장 좋은 방법은 XSS 공격에 대한 지식을 습득하는 것입니다. 실수로 악성 코드를 활성화하기 전 공격 징후를 미리 인식할 수 있도록 해야 합니다. 다음은 XSS 공격을 방지하는 데 도움이 되는 팁입니다.
URL을 계속 확인하는 습관을 들이세요. 만약 웹사이트에서 특이한 점을 발견했다면 주의를 기울여야 합니다.
전문 기술 지식을 보유하고 있다면 방문하는 모든 웹페이지의 코드를 조사하고 악성 스크립트가 있는지 확인하는 것이 좋습니다. 사용자가 입력한 값과 사용자가 입력한 값을 그대로 출력할 때 검증이 실시되고 있는지 확인해야 합니다. 또한 XSS Cheat Sheet에 대한 필터 목록을 생성해 모든 Cheat Sheet에 대응할 수 있는지 확인하고, XSS 공격에 대한 필터링을 적용한 뒤 직접 테스트를 통해 스크립트가 실행되는지 모의 해킹을 진행하는 것도 좋은 방법입니다.
Chrome, Safari 등 대부분의 보안 브라우저에는 반사형 XSS를 탐지하고 차단하는 데 도움이 되는 보안 기능이 내장되어 있습니다. 하지만 이전 버전의 브라우저에는 이러한 기능이 존재하지 않을 수도 있습니다.
NordVPN의 바이러스 및 위협 방지 기능을 이용하면 추가적인 디지털 보안을 확보할 수 있습니다. 바이러스 및 위협 방지는 지속적으로 업데이트되는 악성 웹사이트 블랙리스트를 통해 사용자의 장치에 감염이 발생하지 않도록 위협을 차단합니다.
해커가 중요한 정보에 접근할 수 없도록 해야 합니다. 오늘 NordVPN을 구독하세요. 30일 환불 보장 정책이 포함되어 있습니다.