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