XSS란 무엇인가?
cross-site scripting
XSS 공격이란, 동적으로 출력하는 페이지에 대해 클라이언트 언어로 작성된 악의적인 스크립트를 삽입해서 비정상적인 행위를 하는 공격.
scripting: 클라이언트 측 화면이 실행되었다는 의미
cross site: 교차 사이트.
사이트가 이동하는 것.
대부분 이동하는 순간에 공격이 일어남.
OWASP Top 10 (2017)에도 7위로 거론된 공격이다.
공격 대상
1. 기능적인 공격 대상
웹 사이트 기능. 게시판, 검색 등등
2. 엔드 포인트 단의 공격 대상
서버가 아닌 사용자.
기능적인 공격 대상
사용자 입력값을 받고, 웹 페이지를 구성하는 기능들은 전부 공격 대상이 된다.
동적인 웹페이지가 되므로. (보통 화면에 출력됨)
value="hello+world"
이런 식으로 웹 브라우저에 출력되지 않아도 공격 대상이 될 수 있다.
웹 브라우저 말고, 웹 프록시를 통해서 본다면 어디에 입력되는지 볼 수 있고, 공격 형식에 대해 이해도 가능해진다.
엔드 포인트 단의 공격 대상
사용자를 대상으로 공격한다. 공격자가 사용자 정보 세션 하이재킹을 한 후 웹 서버에 사용자인 것처럼 접근할 수 있다.
클라이언트 언어로 작성되어 있어서, 웹 서버 단에서는 scripting이 되지 않는다.
공격 유형
악성코드 유포
해커의 웹 서버로 접속하게 만듦. 웹 브라우저 취약점을 활용한다. 제로데이 공격도 가능하고, 악성코드 다운로드와 실행을 하게끔 만든다.
Drive-by Download (DBD라고도 부름)
랜섬웨어가 가장 유명하다. 악의적인 사이트에 접속하게 되면, DBD 취약점을 이용해서 랜섬웨어 파일을 다운로드하고, 내부 파일들이 암호화되는 과정이 따른다.
대부분 취약한 웹브라우저를 사용하고 있다는 것이 특징이다.
웹브라우저가 최신 버전의 크롬을 사용한다면, 조금 더 안전할 수 있다. 그러나 제로데이 공격을 수행할 경우 의미없을 수도 있다.
XSS Tunnel
Shell이라고 부르기도 한다.
XSS 채널을 이용하여 공격자가 피해자 pc를 통해 접속하는 등 여러가지 행위가 가능하다.
세션 하이재킹
XSS scripting의 대부분. 세션 탈취 공격.
상대방인 것처럼 행세하는 것.
공격 기법
1. DOM-BASED XSS
2. REFLECTED XSS
3. STORED XSS
1. DOM-BASED XSS
DOM: 문서 객체 모델. 표준 API라고 보면 된다.
악성 스크립트가 담긴 URL을 사용자가 호출할 경우 악성 스크립트가 발생하는 것.
서버 측에서 페이지를 구성하지 않고, 웹 브라우저에서 사용자 입력값에 따라 페이지를 구성한다.
예시)
?id=admin
이렇게 URL에 입력했는데 웹 페이지에 admin이 출력되는 경우.
DOM API를 이용해서 문서에 접근하는 것.
파라미터가 페이지에 출력되는 것.
물론 서버 측에 전달이 되지 않을 수도 있음. 그러나 입력값에 따라 결과가 달라진다는 것이 중요하다.
2. REFLECTED XSS
악성 스크립트가 담긴 URL을 사용자 웹브라우저에서 호출할 경우.
DOM BASED는 웹 브라우저지만, 여기선 서버 측에서 일어난다.
?id=admin
을 입력했을 때, 서버 측에서 admin이란 String이 담긴다면, reflected xss 공격을 시도해볼 수 있다.
DOM-BASED보다 많이 일어난다.
3. STORED XSS
데이터베이스에 저장된 데이터를 통해 동적 페이지를 구성한다.
해커가 DB에 저장할 때 악의적인 스크립트를 저장한다. 사용자가 악성 스크립트가 담긴 DB를 참조하게 된다. 악성 코드를 그대로 불러오고, scripting이 발생하게 된다.
게시글을 접속할 경우에 악의적인 script가 실행될 수 있다.
persistent한 것이 특징. (지속적이다)
공격 활용도를 봤을 때 stored xss가 더 뛰어나다.
1,2는 nonpersistent. 지속적이지 않다. url을 통해 scripting을 해야 하므로.
결론
DOM BASED XSS: web browser(client side)
REFLECTED XSS: web application (server side)
STORED XSS: back-end database
공격 원리 분석
1. 공격자가 악성 스크립트가 담긴 url을 던져준다. 안전한 사이트라고 생각하고 사용자는 접속하게 된다. 도메인만 보고 클릭하게 되는 것. 이때 피싱을 유도하는 링크면 접속할 확률이 높을 것이다.
2. 웹 브라우저 엔진 (해석기)에서 악성 스크립트가 담긴 페이지를 구성한다. 이때 dom을 사용하는 것.
문서에 접근할 수 있게끔 dom을 활용한다. url을 참조해서 페이지로 구성하고 자바 스크립트를 실행한다. 이때 scripting이 발생하고, 공격자가 의도한 서버로 접근하게 된다.
악성 url을 전달하는 것은 dom based와 동일하다. 사용자가 url에 접속한다.
웹 서비스에 접속해서 악성 스크립트가 담긴 페이지가 구성된다. 악성 스크립트가 담기게 되고, 사용자에게 악성 스크립트가 전달되고, 실행된다. 그래서 공격자가 의도한 공격자 서버로 접근하게 된다.
공격자는 사용자에게 url을 전달하는 게 아니라, 웹 서비스로 악성 스크립트를 저장해둔다. 대표적인 예시로는 게시글과 댓글이 있다. 타 사용자가 읽게 되는 기능으로 주요 공격 대상을 삼는다.
그 후, 데이터베이스에 저장된다. 사용자가 특정 게시글을 읽게 된다. 악성 스크립트가 담긴 웹 페이지가 구성된다. 사용자에게 전달하면, scripting이 발생되고 공격자가 의도한대로 공격자 서버에 접속된다.
+
추가로, dom-based xss와 reflected xss의 차이에 대해 헷갈려서 챗지피티에게 물어보았다.
훨씬 이해가 쉬워졌다.
'웹 해킹 & 시큐어 코딩' 카테고리의 다른 글
웹 해킹 & 시큐어 코딩 (19) (0) | 2025.01.30 |
---|---|
웹 해킹 & 시큐어 코딩 (18) (0) | 2025.01.28 |
웹 해킹 & 시큐어 코딩 (16) (0) | 2025.01.28 |
웹 해킹 & 시큐어 코딩 (15) (0) | 2025.01.23 |
웹 해킹 & 시큐어 코딩 (14) (0) | 2025.01.21 |