이번시간에는 XSS(크로스 사이트)
일명 '크사' 라고 불리는 공격에 대하여 간단히
알아보겠습니다.
<세부 목차>
-XSS 공격이란?
-공격방식
1. Stored XSS
2. Reflected XSS
3. DOM Based XSS
-예방법
1. HTML Entity
2. Black list , White list
3. 입력 길이 제한
-XSS 공격이란?
XSS 공격은 '클라이언트 측 공격' 이라는 것이 핵심 키워드입니다.
SQL Injection 공격은 서버컴퓨터 측에서 실행되는 SQL 구문이 타겟이였다면...
XSS 공격의 타겟은 클라이언트 컴퓨터(브라우저)에서 실행되는 스크립트가 타겟입니다.
밑에 예시를 보시면 게시글 제목에 <script> 코드를 추가하였습니다.
그러자 게시글을 열람하기만 해도 제가 의도한 오류메세지가 뜹니다.
즉 제가 원하는 스크립트 코드를 실행할 수 있다는 뜻이 됩니다.
게시글 작성 | 게시글 열람 |
제목에 스크립트 코드를 입력한 것이 저희 브라우저 창에는 자바스크립트 코드로 구현이 된것이 원인입니다.
그렇다는건 어떤 유저든 이 게시글을 열람할 시 제가 설정해놓은 스크립트 코드가 실행이 될것입니다.
(동작원리)
1. 해커가 악성 스크립트를 클라이언트 측에서 실행되도록 게시물 이나 링크에 삽입한다.
2. 클라이언트가 게시글,링크를 클릭하게 되면 악성 스크립트가 실행이 된다.
3. 악성스크립트가 실행된 클라이언트의 브라우저에서 해커가 설정해놓은 동작을 하게 된다.
→ 이로인해 세션하이재킹 혹은 다른사이트로 강제 리다이렉션 이 일어나게 됩니다
- 공격방식
<Stored XSS>
>서버에 악성스크립트가 저장되는 공격입니다.
쉽게 생각하면 게시글 작성시 악성 스크립트 첨부입니다.
예를들어 게시글에 악성스크립트가 저장되고 , 그 게시글을 클릭한 모든 유저들의 브라우저에선
악성 스크립트가 실행될 것 입니다.
이 공격의 문제점은 광역기 라는 것 입니다.
게시글을 열람한 불특정 다수가 전부 타겟이 되는만큼 위험한 취약점 입니다.
<Reflected XSS>
> 서버에서 반사되는 특징을 이용한 xss 공격입니다.
<반사된다는 말이 무슨 의미일까요?>
저희는 url 작성을 할때 GET 방식으로 ?뒤에 변수를 넣어주게 됩니다.
서버는 이 변수가 포함된 페이지에 대한 응답을 저희에게 반사시키듯 응답을 하게되겠죠.
이 변수에 악성 스크립트를 넣어준 후 , 변수가 포함된 페이지의 링크를 클라이언트가 클릭할 시 저희가 유도한 변수를
브라우저 창에 출력하는 하는 사이트로 진입을 하게 됩니다.
그러면 저희가 의도한 스크립트 코드가 실행이 되는 공격입니다.
이 공격의 핵심은 2가지입니다
- 링크를 클릭하는 대상만 공격이 되는 단일기다.
- 반드시 변수가 페이지에 출력이 되어야 사용이 가능하다.
<DOM Based XSS>
> 브라우저에서 조립되어서 script 실행.
URL 에 포함된 변수가 출력되는 점을 이용한 공격이다.
크게 보면 Reflected XSS 랑 크게 다를바 없어 보이지만 큰 차이점이 있다.
Reflected XSS -> 동적페이지를 만드는 과정에서 변수를 서버에서 처리함
DOM Based XSS -> 동적페이지를 만드는 과정에서 변수를 클라이언트 측에서 처리함.
클라이언트 측에서 url에 포함된 변수를 자바스크립트를 사용한 함수를 통해 페이지에 출력하기 때문에 Burp Suite 로 서버에서 온 응답을 본다 한들 우리가 의도한 변수가 출력되는것을 확인하지 못할 것이다.
이것을 확인하려면 스크립트 코드를 차분히 분석해봐야 한다. 분석후 우리가 그 스크립트 코드에 맞춰서 변수값을 넣어
링크에 포함시켜야 한다.
찾는도중 신경써야 하는 키워드는 대표적으로 두가지가 있다.
-> document.write
-> innerHTML
내가 입력한 값이 분명 페이지에 출력은 되는데 응답에서 보이지않는다?
=> 저 두가지가 있는지 체크부터 하자
- 예방법
사실 이 XSS 취약점은 막기가 굉장히 힘들다.
그럼에도 불구하고 최대한 막을수 있는곳은 막는것이 맞다.
1. HTML Entity : 특수문자를 다른문자로 치환하여 쓰도록 하는 방식
-> 애초에 <script> 같은 문자를 못쓰도록 < > 를 < > 로 치환되도록 만드는것이다.
이러면 꺽쇠를 사용하지 못하므로 스크립트 코드를 직접적으로 넣을수는 없을것이다.
2. Black list 방식 , 화이트리스트 방식
=> 블랙리스트 방식은 " , ' , < , > 같은 특수문자를 입력값으로 못넣게 지정하는 방식이다.
화이트리스트 방식은 지정된 문자만 입력값으로 넣게 하는방식이다.
HTML Entity 랑 차이점:
블랙리스트 방식 =>아예 특수문자를 표현도 못하게 막아놓는다
HTML Entity 방식=> 특수문자는 사용할 수 있되 다른문자로 치환을 한다
3. 입력 길이 제한
=> 위에서 보았듯이 악성 스크립트 코드가 꽤나 길다.
그래서 입력길이를 10~20 정도로 제한을 주면 치명적인 악성스크립트 코드 작성은 힘들것이다.
'웹해킹' 카테고리의 다른 글
CSRF(Cross Site Request Forgery)공격 (0) | 2024.07.04 |
---|---|
XSS 공격 대응방안 (0) | 2024.06.30 |
SQL Injection(SQLi) (0) | 2024.05.27 |
File upload vulnerabilities (0) | 2024.01.30 |
SSRF(Server-side request forgery) (0) | 2024.01.29 |