1. XSS 공격이란?
XSS 공격은 사용자 브라우저에 전달되는 데이터에 악성 스크립트를 포함시킨 뒤, 사용자 브라우저에 실행되면서 해킹하는 공격이다.
SQL Injection과 함께 웹 취약점 중 가장 기초적인 취약점으로 알려져 있으며 공격 패턴이 다양하고 변화도 다양하게 이루어지기 때문에 파급효과가 무궁무진하다.
웹 취약점 진단의 기준이 되는 주요정보통신기반시설 기술적 취약점 분석 가이드에서도 크로스사이트 스크립팅을 찾아볼 수 있다.
2. XSS 공격 유형
1) Reflected XSS
Reflected XSS는 스크립트가 포함된 공격용 악성 URL을 만든 뒤, 사용자가 해당 URL을 클릭했을 때 정보를 획득하는 공격이다. URL이 길면 클라이언트가 의구심을 가질 수 있기 때문에 URL 단축을 이용해 짧은 URL로 만들어 공격하기도 한다.
사용자가 특정 파라미터에 입력한 값을 서버가 응답으로 반사해서 보내줄 때 발생하며, 서버에 스크립트를 저장하는 것이 아니므로 서버의 필터링을 피할 수 있다.
- URL을 만들어서 클릭해서 실행되게 하는 방식으로 특정인을 대상으로 함
- URL 파라미터 데이터가 그대로 서버 응답에 삽입되어 오는 곳에서 발생 (요청과 응답 페이지가 동일해야 함)
- 데이터 전달은 GET 방식이여야 함 (POST 방식은 공격에 활용할 여지가 없음)
2) Stored XSS
Stored XSS는 취약한 웹 서버에 악성 스크립트를 심어놓고, 사용자가 접근하면 해당 스크립트가 실행되는 공격이다.
보통 서버에서 필터링을 하기 때문에 공격을 우회하기 어렵지만, 한 번 성공하면 관리자 입장에서는 눈치채기 힘들고 광범위한 피해를 줄 수 있다는 것이 특징이다.
- 데이터가 저장되고, 출력되는 곳 (저장되는 페이지와 출력되는 페이지는 달라도 상관 없음)
- 접근하는 모든 사람에게 공격이 가능하기 때문에 광역기 수준의 위험도를 가짐
3) DOM based XSS
Reflected XSS와 Stored XSS 공격이 서버의 취약점을 이용해서 악성 스크립트가 포함된 응답 페이지를 전달하는 것이다. 반면 DOM XSS는 서버와 관련없이 클라이언트 단에서 파라미터를 처리할 때 발생한다.
DOM XSS 공격은 사용자가 공격자가 조작한 URL을 클릭하는 순간, 악성 스크립트가 실행되면서 사용자 브라우저를 공격하는 방법이다.
3. XSS 공격 대응
XSS는 사용자의 입력 값(파라미터)에서부터 발생하기 때문에 HTML Entity로 입력 값 조작을 방지하는 것이 가장 근본적인 방법이다.
HTML Entity란?
HTML 예약어라고 하며, 이는 일부 특수문자가 HTML 문법과 충돌할 수 있어 변환시켜 전송하는 것이다.
기호 | HTML Entity |
< | < |
> | > |
" | " |
' | ' |
& | & |
HTML Entity를 사용하면 사용자가 <script>를 입력하면, 서버에는 <script>로 저장되어 태그로 인식되지 않아 XSS를 방지할 수 있다. 만약 서버에 HTML Entity로 문자를 치환하고 있다면 마땅한 우회방법이 없기 때문에 XSS는 웬만하면 터지지 않는다.
4. 공격 시나리오
xss 공격 시나리오는 아래 게시글에 작성해두었다. 추가적으로 필터링이 대응 방안이 될 수 없는 이유도 작성해 두었으니 참고하면 좋을듯 하다.
https://studysteadily.tistory.com/26
'웹 해킹 > XSS' 카테고리의 다른 글
[XSS] 키로거를 이용한 개인정보 탈취 (공격 실습) (0) | 2024.01.08 |
---|