본문 바로가기
웹 해킹

Ch 05 XSS 공격

by plum06 2023. 2. 1.

*틀린 부분이 있다면 댓글로 알려주신다면 감사하겠습니다!

 

 

XSS 공격에 대해 말하기 앞서 웹 애플리케이션이 사용자를 인증하는 방법에 대해 간단히 말하고 넘어가려 합니다. 웹 애플리케이션에서는 아이디와 패스워드를 가지고 우선 사용자의 신원을 확인합니다. 확인이 끝나면 웹 애플리케이션이 사용자에게 고유한 값을 전달합니다. 추후 사용자가 다시 웹사이트에 방문할 때마다 로그인할 필요 없이 전에 받은 고유한 값을 가지고 사이트를 이용할 수 있게 됩니다. 웹 애플리케이션에서 사용자를 식별할 때 이 고유한 값을 가지고 진행합니다. 그리고 그 고유한 값을 '쿠키'라고 합니다.

 

 

쿠키(Cookie)

: 사용자들이 웹 사이트를 편리하게 이용할 수 있게 하려고 넷스케이프에서 1994년에 만들어진 기술로, 사용자가 인터넷 웹 사이트에 방문할 때 생기는 4KB 이하의 파일을 말합니다. 프로그램이 아닌 특정 데이터가 들어간 '텍스트 파일'이기 때문에 '실행'되지 않습니다. 그렇기에 바이러스를 전파하지 못하고 컴퓨터 내의 파일을 수정하는 등의 사용자에게 피해를 주는 작업을 할 수 없습니다.

쿠키에 사용자와 웹 사이트를 연결해주는 정보가 들어있어 추후 사용자가 사이트에 접속하면 쿠키 내용으로 사용자 신분을 알 수 있습니다. 쿠키는 다음과 같은 과정으로 생성되어 활용됩니다.

출처: https://raonctf.com/essential/study/web/cookie_connection

 

특정 사이트에 접속한 사용자가 서버에 연결 요청을 보냅니다. 이에 서버는 사용자 브라우저를 확인하는 아이디 번호를 넣은 쿠키를 생성하여 사용자에게 전달합니다. 쿠키를 받은 사용자는 이를 브라우저에 저장합니다. 나중에 같은 웹사이트에 들어가면 사용자는 서버에 요청할 때 쿠키를 함께 보냅니다. 서버는 쿠키를 가지고 누구인지를 확인한 뒤 요청에 따른 응답을 사용자에게 전달합니다.

 

웹 사이트에서 쿠키를 수집하는 용도는 보통 다음과 같습니다.

  • 사이트 개인화 : 아이디, 비밀번호 외에 '사용자의 성향' 파악 가능. 어떤 웹사이트에서 무엇을 많이 보는지 등의 정보가 쿠키에 반영.
  • 장바구니 시스템 : 사용자가 고른 물건을 쿠키에 저장. 이를 통해 사용자 구매 성향을 파악해 이전에 구매한 것과 비슷한 상품 추천
  • 웹 사이트 이용 방식 추적 : 사용자들이 어떤 사이트를 방문했는지에 대한 정보가 들어있어 이를 추적 가능.
  • 타깃 마케팅 : 회사에서 대형 포털 사이트 광고 공간을 사 광고를 사이트 이용자들에게 보여주는데 광고가 얼마나 효과가 있는지 알기 위해 수집.

참고) 쿠키 확인 방법

: 브라우저 켜고 아무 웹사이트에 들어가서 [개발자 도구]-[Application]-[cookie] 클릭하면 볼 수 있음.

쿠키 외 데이터 저장 방식

: 세션

- 웹사이트에 로그인하고 게시판에 쓰거나 사용자가 이전에 썼던 글을 확인하는 등의 기능을 이용할 수 있는데 이는 각각 다른 클라이언트가 서버에 보내는 요청. 로그인한 사용자와 로그인 후 이전에 쓴 글을 확인하려는 사용자가 동일 인물임을 서버는 모름. 그래서 사용자가 로그인한 상태임을 서버에 인증해야 하는데 이때 사용하는 것이 세션. 사용자가 로그인에 성공하면 서버는 세션 아이디를 만들어 사용자에게 전달하고 서버는 그 사본을 보관. 사용자는 세션 아이디를 쿠키로 저장한 뒤 이후 웹사이트 이용할 때 하는 모든 요청에 사용. 서버는 보관하고 있는 세션 아이디를 파악해 사용자의 쿠키와 동일한지 확인. 메모리 공간을 사용하여 확인 과정 빠르게 처리.

토큰

- 메모리 공간을 많이 차지하는 세션 방식의 대안. 수학적 원리가 적용되어 서버'만'이 발행할 수 있는 유효한 토큰을 사용자에게 전달. 사용자는 이를 쿠키로 저장하여 필요할 때 제시. 서버는 토큰을 따로 저장하지 않음.

캐시

- 웹사이트, 유튜브 등 여러 곳에서 이미지, 동영상 같은 대량의 데이터를 서버로부터 전송받음. 매번 필요할 때 전송받아야 하면 번거롭기에 한 번 전송받은 데이터를 저장해두고 필요할 때 꺼내 사용. 이때 이용되는 기술이 캐시. 데이터 전송량 줄이고 서비스 이용 속도 높이는 데에 사용.

CDN(콘텐츠 전송 네트워크)

- 분산된 여러 개의 캐시 서버들을 사용해 본 서버로 들어오는 요청을 분산 처리하는 서비스. 요청에 따른 웹 콘텐츠를 사용자와 가까운 서버에 전송.

출처: https://hongong.hanbit.co.kr/완벽-정리-쿠키-세션-토큰-캐시-그리고-cdn/

 

 

XSS 공격(Cross Site Scripting)

다른 사용자의 정보를 추출하는 공격 기법입니다. 취약점이 있는 웹 사이트를 직접 공격하는 것이 아니라, 그 웹 사이트를 이용하는 사용자를 공격하는 것입니다. 자동으로 게시되는 것으로 사용자는 자신이 피해를 입고 있다는 걸 알 수 없습니다. 유형은 다음과 같이 나뉘어집니다.

 

1) Stored XSS

: 게시판이나 자료실과 같이 사용자가 글을 저장하는 부분에 정상적인 평문이 아닌 스크립트 코드를 입력하는 것입니다. 다른 사용자가 게시물을 연다면 공격자가 입력한 악성 스크립트가 실행되어 사용자의 쿠키 정보가 유출될 수 있습니다. 공격자가 웹 애플리케이션을 속여 데이터베이스에 악성코드를 저장시키는 공격 기법으로 해당 웹 앱을 이용하는 수많은 사람들 혹은 전체에게 악성 코드를 전송할 수 있습니다. 따라서 이와 같이 취약점이 있는 사이트의 경우 스크립트에 대해 필터링을 해야 할 필요성이 있습니다. 

공격 과정은 다음과 같습니다. 공격자가 보안이 취약한 사이트 게시판에 사용자 정보를 탈취할 수 있는 스크립트를 작성해서 올립니다. 사이트 이용자가 공격자가 작성한 게시글을 읽으면 서버로부터 악성 스크립트가 적힌 게시글 응답을 받습니다. 사용자의 브라우저는 응답 메시지를 실행하면서 그와 동시에 악성 스크립트가 실행됩니다.

사진 출처: https://www.imperva.com/learn/application-security/cross-site-scripting-xss-attacks/

 

2) Reflected XSS

: URL의 변수 부분처럼 스크립트 코드를 입력하는 동시에 결과가 바로 전해지는 공격 기법으로 피싱 공격에서 가장 많이 사용되고 있습니다. 공격자는 스크립트가 포함된 링크를 다른 웹 사이트나 이메일로 보내서 클릭하도록 사용자를 유도하고 이윽고 세션을 하이재킹 할 수 있게 됩니다. 공격 스크립트가 포함된 URL을 그대로 보내면 들킬 수 있으니까 해당 부분을 인코딩하여 전달합니다.

공격 과정은 다음과 같습니다. 공격자가 보안이 취약한 사이트에서 사용자 정보를 탈취할 수 있는 스크립트를 넣은 URL을 생성해 사용자에게 보냅니다. 사용자는 받은 URL을 클릭하여 해당 사이트로 요청을 전달합니다. 사용자의 브라우저에서 응답 메시지를 실행함과 동시에 악성 스크립트가 실행됩니다.

사진 출처: https://www.imperva.com/learn/application-security/reflected-xss-attacks/

 

3) DOM based XSS

: 웹페이지를 여는 것과 동시에 문서 객체 모델(Document Object Model, DOM)이 생성됩니다. DOM은 사용자가 서버와의 상호 작용 없이 웹페이지의 모든 콘텐츠에 접근할 수 있게 돕는 프로그래밍 인터페이스로, 이 공격은 보안에 취약한 자바스크립트 코드로 DOM 객체를 제어하는 과정에서 발생합니다.

공격 과정은 다음과 같습니다. 공격자가 악성 스크립트를 심은 URL을 사용자에게 메일 등으로 보냅니다. 사용자는 받은 URL 클릭하여 서버로부터 HTML 문서를 전달받습니다. 사용자의 브라우저가 읽는 과정에서 필요한 스크립트를 실행하는 도중에 악성 스크립트가 동작합니다. 이에 따라 사용자의 정보가 공격자의 서버로 보내집니다.

사진 출처: https://brightsec.com/blog/dom-based-xss/

 

출처) https://junhyunny.github.io/information/security/spring-mvc/stored-cross-site-scripting/

https://junhyunny.github.io/information/security/spring-mvc/reflected-cross-site-scripting/

https://junhyunny.github.io/information/security/dom-based-cross-site-scripting/

https://nordvpn.com/ko/blog/xss-attack/

https://portswigger.net/web-security/cross-site-scripting#dom-based-cross-site-scripting

 

참고) Reflected XSS와 DOM based XSS의 차이

: URL 주소와 함께 작성된 악성 스크립트가 사전에 서버에 전달되어야 하는 Reflected XSS와 달리, DOM based XSS는 처음에 HTML 문서를 서버로부터 받은 이후 서버로 요청을 보낼 필요 없이 악성 스크립트를 심을 수 있음.

출처: https://junhyunny.github.io/information/security/dom-based-cross-site-scripting/

CSRF(Cross-Site Request Forgery, 사이트 간 요청 위조)

: 피해자가 인지하지 못하는 상태에서 피해자의 브라우저가 특정 사이트에 강제적으로 리퀘스트를 보내도록 하는 기법. 사용자가 원하지 않았는데도 공격자가 개인정보 수정 혹은 회원 탈퇴 등의 행위를 의도. 공격자는 사용자의 요청을 위조함으로써 사용자 몰래 회원 정보 수정, 회원 탈퇴, 송금, 제품 구입 등의 특정 행위를 수행하도록 함.

XSS와 CSRF는 사용자의 브라우저를 대상으로 하는 공격이란 점에서 공통점을 가짐. 그러나 XSS는 인증된 세션 없이 공격할 수 있다는 사실을 이용, 사용자가 특정 사이트를 신뢰한다는 점을 바탕으로 한 공격. 반면에 CSRF는 웹 애플리케이션이 인증된 사용자의 요청을 신뢰한다는 사실을 이용, 사용자의 인증된 세션을 악용한다는 점에서 차이점 생김.

출처 https://nordvpn.com/ko/blog/csrf/

'웹 해킹' 카테고리의 다른 글

Ch 06 소스코드 취약점 분석(+실습)  (0) 2023.02.08
Ch 05 XSS 공격(실습)  (0) 2023.02.01
Ch 04 SQL 인젝션 공격(실습)  (0) 2023.01.25
Ch 04 SQL 인젝션 공격  (0) 2023.01.25
Ch03 인증 기술과 접근 통제(실습)  (0) 2023.01.18