XSS(Cross Site Scripting)공격 설명
공격 설명
- 악성 스크립트를 통해 사용자의 의도와 상관없는 비 정상적인 동작을 발생시키는 공격
(예: 쿠키값 노출, 피싱, 악성 코드가 실행 가능한 사이트로 리다이렉트 등)
공격 방식
- 공격 방식에는 stored 방식과 reflected 방식 두 가지가 존재함
stored 방식 설명
- 클라이언트 측에서 요청 값이 서버로 전달 -> 서버에서 데이터베이스에 저장
이후 클라이언트 측에서 저장된 값을 요청하게 될 때 서버에서 데이터베이스에 저장된 값을 응답 값으로 전달하여 클라이언트 측에서 실행되는 원리
(주로 게시판 글쓰기를 통하여 저장할 수 있는 곳을 공격포인트로 잡음)
reflected 방식 설명
- 클라이언트 측에서 요청한 값이 데이터베이스에 저장되지 않고 서버에서 바로 응답 값으로 전달 후
클라이언트 측에서 실행되는 원리
* 차이점
- stored 방식은 클라이언트의 요청 값이 데이터베이스에 저장이 된 후 서버에서 응답 값을 통해 전달
refleted 방식은 클라이언트의 요청 값이 데이터베이스에 저장되지 않고 서버 측에서 곧바로 클라이언트 측으로 전달
실습
준비사항 : XSS 취약점이 존재하는 페이지, 프록시 툴
* 해당 실습은 진단을 위해 만들어진 페이지에서 진행되었으며, 일반 페이지에서 따라 하시면 안 됩니다.
1. 게시글 입력 시 내용에 악성 스크립트 삽입
2. 프록시를 이용하여 요청 값 패킷 확인하기
3. 프록시 응답 값 내 패킷 확인하기
4. 등록된 게시글 클릭
5. 악성 스크립트 동작 확인
XSS를 이용한 추가 공격법
- 이렇게 노출된 쿠키 값을 세션하이제킹 공격을 통해 타 사용자가 얻게 되었을 경우 획득한 쿠키 값의 계정 권한으로
페이지를 이용할 수 있다.
해결방안
- XSS의 가장 근본적인 문제점은 입/출력 값 검증이 제대로 이루어지지 않았다는 점이다. 요청 패킷 내 모든 입력값에 대해 악성 스크립트가 삽입될 수 없도록 특수문자, 키워드 필터링이 적용되어야 하며 어떠한 우회 방식을 통해 스크립트가 삽입이 되더라도 실행될 수 없도록 출력 값 검증 또한 이루어져야 한다. 중요한 점은 모든 검증은 우회할 수 없도록 클라이언트 측이 아닌 서버측에서 이루어져야 한다는 점이다.
(요청 패킷 모든 입/출력 값 검증이 필요하다. 쿠키 헤더 부분에서도 발생될 수 있음, 또한 대/소문자, 인코딩 등 까지도 고려하여 검증이 이루어져 우회 되지않도록 해야 함)
필터링
- 특수문자 : < , >, (, ) 등 / 키워드 : script, onclick 등 스크립트 실행을 위한 키워드
악성 스크립트는 cheat sheet를 통해 쉽게 찾아 실습을 해볼 수 있다.
세션하이제킹 실습
- xss 공격이 어떠한 공격과 연계가 되는지 확인하기 위해 준비하였다.
위의 글만 보았을 경우 게시글 클릭 시 노출되는 쿠키값을 공격자가 어떻게 탈취해 갈 것인지 의문이 들었을 것입니다.
이를 위해 간단한 세션하이제킹 시나리오를 추가하여 보여주겠습니다.
환경 구성
준비물 : 파이썬 설치 (3.~ 대 버전 다운로드), 취약한 페이지
1. 파이썬을 이용해 포트를 열고 들어오는 값을 확인
2. 열어놓은 포트로 쿠키값 보내는 스크립트 등록
3. 악성 스크립트 게시글 확인
4. 게시글 클릭
5. 넘어오는 쿠키 값 확인
6. 타 사용자 게시글 클릭 시 쿠키 값 확인
이렇게 얻게 된 타 사용자의 쿠키 값을 통해 타 사용자의 권한으로 페이지 접속 가능.
취약점 진단 시 공격 벡터, 진단 방법
1. XSS 공격 벡터 찾기
- XSS 공격 벡터가 되기 위해서는 요청 값의 파라미터 값이 응답 값의 파라미터에 포함이 되는지 확인을 해주셔야 합니다.
요청 값 내 파라미터가 응답 값에 포함되어야 XSS 가능합니다.
2. 이후 특수문자, 키워드 필터링 확인
요청 값과 응답 값을 확인하며, 적용되어있는 필터링을 확인해야 합니다.
3. 우회할 수 있는 공격 구문을 찾기
응답 값을 통해 어떤 식으로 필터링 적용이 되어있는지 확인 후 우회할 수 있는 공격 구문을 찾는 것입니다.
우회 방법은 특수문자 인코딩, fake 파라미터, 페이크 디렉터리, 주석처리 등 다양한 방법이 있기에 시간이 있다면 모두 적용해보면 됩니다.
'기술보안 > Web' 카테고리의 다른 글
SSTI 개념 정리 (0) | 2021.07.16 |
---|---|
[beebox] SSRF (0) | 2021.07.02 |
파일 다운로드(File Download) 취약점 설명 및 진단법 (0) | 2021.04.30 |
파일 업로드(File Upload Attack) 취약점 설명 (0) | 2021.03.31 |
XXE(XML External Entities) 공격 분석 (0) | 2021.02.28 |