XSS 공격 기법

OWASP Top 10에 드는 웹 해킹 기법에 대한 복습


OWASP Top 10

  • 3-4년에 한번씩 갱신되는 보안 위험 표준 가이드라인
  • 바뀌는 이유? > 환경과 취약점은 변화되므로 업데이트가 필요. 있다가 없어지는 것은 빈도가 서서히 줄어듦을 의미한다.


🔍 Cross Site Scripting(XSS)

xss

  • 웹 사이트에 악의적인 스크립트를 삽입하는 공격 기법
  • 스크립트가 있는 게시글을 열람하면, 스크립트 발생 -> 사용자 쿠키가 해커에게 전송 -> 세션ID가 포함된 쿠키를 탈취하여 해당 계정으로 로그인
  1. <script>alert(0)</script> 와 같은 간단한 스크립트로 XSS 취약한지 확인
  2. 웹 서버에 띄워진 사이트에 악의적인 스크립트가 담긴 글 작성
  3. 관리자/사용자 접근 -> 아무런 반응(action)이 없음
  4. 스크립트 작동하여 세션이 해커의 서버로 들어오게 됨
  5. 서버를 모니터링하여 들어온 세션을 copy
  6. 해커의 웹 브라우저에 쿠키를 구워 정상 웹 서버에 사용함
  7. 사용자 권한 등 탈취

직접 실습해보았다.

1. Stored XSS(지속형 공격)

xss stored XSS를 통해 확인해보았다.
stored XSS는 지속형 공격. 등록한 글이 DB에 저장되어 지속적으로 공격하므로, 한번의 공격으로 수많은 피해를 입힐 수 있다는 특징이 있다.

2. Reflected XSS(반사형 공격)

xss reflected XSS로도 해보았다.(취약점 발견완료)
Reflected XSS는 반사형 공격.
사용자에게 입력받은 값을 서버에서 되돌려주는 곳에서 발생한다.
검색창에 검색어(입력값)이 그대로 드러나는 곳 등에 삽입되면 서버가 응답할 때 스크립트가 실해된다.
악의적인 스크립트를 살펴보면 검색 인자로 작성한 스크립트를 넘겨준다.

DOM(Document Object Model) XSS

DOM?

  • HTML 및 XML 문서에 접근하는 방법을 표준으로 정의하는 문서 객체 모델
  • 즉, 구조화된 문서를 표현하는 방식(W3C 공식 표준)

DOM XSS
xss

  1. 접속하면 스크립트가 실행되도록 하는 URL을 사용자에게 전달
  2. 클릭
  3. 서버로부터 HTML 문서를 전달 받게 됨
  4. 사용자 브라우저가 받은 HTML 문서를 읽으면서 필요한 스크립트를 실행하는 중에 악성스크립트 동작(사용자가 요청한 브라우저 해석단계에서 동작)
  5. 정보 탈취

보안에 취약한 js 코드 사용X 클라이언트 입력 값 검증 로직 추가 필요!!



xss aaaa 값 대신 악의적 스크립트를 넣으면 충분히 Dom Based XSS가 가능해짐.

정리

1. Stored XSS

  • 스크립트가 서버에 저장
  • 악성 코드가 서버측 저장소(DB)에 저장
  • 스크립트 서버 저장 -> 방문하는 모든 사용자는 피해를 봄

2. Reflected XSS

  • 악성 스크립트가 요청으로 전달되고, 서버가 반사하여 응답함
  • URL 쿼리 파라미터, 요청 헤더, POST 데이터 등에 실려 전달됨
  • 악성 URL을 클릭하면 서버는 URL의 데이터를 포함한 응답을 보내어 스크립트 실행됨
  • 직접 URL 클릭, 악성코드 복사하여 실행할 때 발생

3. DOM-based XSS

  • 스크립트가 클라이언트 측에서 처리
  • 웹 페이지의 DOM을 조작하여 실행 됨.
  • 서버는 악성 코드를 포함한 응답을 반환하지 않음
  • 서버 응답에 의존하지 않기 때문에 서버 측 수정 없이 클라이언트 측에서만 해결해야 하는 공격기법

Stored XSS ➡️ 스크립트가 서버에 저장되어 나중에 다른 사용자에게도 전달
Reflected XSS ➡️ 스크립트가 요청의 일부분으로 반사되어 즉시 실행
DOM-based XSS ➡️ 클라이언트 측에서 DOM을 통해 스크립트 실행




🛡️ XSS 보안 대책

  1. 특정 문자열 제거 및 치환
  2. 불필요한 태그/스크립트 제거
  3. DOM object 재구성
  4. html5 등 주기적인 패턴 업데이트
  5. HttpOnly 권장
Written on July 16, 2024