크로스사이트 스크립트(XSS)는 웹 애플리케이션의 취약점을 이용해 사용자 브라우저에서 악성 스크립트를 실행하도록 하는 공격 기법입니다. 주로 입력 필터링이 적절히 이루어지지 않은 웹 애플리케이션에서 발생하며, 공격자가 자바스크립트와 같은 스크립트를 삽입해 사용자의 세션 정보, 쿠키, 개인 정보를 탈취하거나, 피싱 페이지로 리디렉션할 수 있습니다.
XSS 공격에는 크게 세 가지 유형의 방식이 있다.
⦁ 유형 1 : Reflective XSS (or Non-persistent XSS)
- Reflective XSS는 공격 코드를 사용자의 HTTP 요청에 삽입한 후 해당 공격 코드를 서버 응답 내용에 그대로 반사(Reflected)시켜 브라우저에서 실행하는 공격 기법이다.
사용자로 하여금 공격자가 만든 서버로 데이터를 보내도록 해야 한다. 이 방법은 보통 악의적으로 제작된 링크를 사용자가 클릭하도록 유도하는 방식을 수반한다. 공격자는 피해자가 취약한 사이트를 참조하는 URL을 방문하도록 유도하고 피해자가 링크를 방문하면 스크립트가 피해자의 브라우저에서 자동으로 실행 된다. 대부분의 경우 Reflective XSS 공격 메커니즘은 공개 게시판, 피싱(Phishing) 이메일, 단축 URL 또는 실제와 유사한 URL을 사용한다.
⦁ 유형 2 : Persistent XSS (or Stored XSS)
- Persistent XSS는 신뢰할 수 없거나 확인되지 않은 사용자 입력(코드)이 서버에 저장되고, 이 데이터가 다른 사용자들에게 전달될 때 발생한다.
게시글 및 댓글 또는 방문자 로그 기능에서 발생할 수 있다. 해당 기능을 통해 공격자의 악성 콘텐츠를 다른 사용자들이 열람할 수 있다. 소셜 미디어 사이트 및 회원 그룹에서 흔히 볼 수 있는 것과 같이 공개적으로 표시되는 프로필 페이지는 Persistent XSS의 대표적인 공격 대상 중 하나다. 공격자는 프로필 입력 폼에 악성 스크립트를 주입해 다른 사용자가 프로필을 방문하면 브라우저에서 자동으로 코드가 실행되도록 할 수 있다.
⦁ 유형 3 : DOM XSS (or Client-Side XSS)
- DOM XSS은 웹 페이지에 있는 사용자 입력값을 적절하게 처리하기 위한 자바스크립트의 검증 로직을 무효화 하는 것을 목표로 한다. 공격 스크립트가 포함된 악성 URL을 통해 전달된다는 관점에서 Reflective XSS와 유사하다고 볼 수 있다. 그러나 신뢰할 수 있는 사이트의 HTTP 응답에 페이로드를 포함하는 대신 DOM 또는 문서 개체 모델을 수정해 브라우저와 독립적인 공격을 실행한다는 점에서 차이가 있다.
예제
사용자 프로필 페이지에 이름을 표시하는 기능이 있다고 가정해 봅시다. 입력된 이름이 제대로 필터링되지 않고 출력될 경우 다음과 같은 코드를 삽입해 XSS 공격을 할 수 있습니다.
<input name="username" value="<script>alert('XSS 공격');</script>">
이 코드가 필터링 없이 출력되면 브라우저는 <script> 태그를 그대로 실행해 알림창을 띄우게 됩니다. 공격자가 이 방법을 통해 악성 스크립트를 실행하여 사용자의 민감한 정보를 탈취할 수 있습니다.
방어 방법
- 입력 값 필터링: 사용자 입력 값에서 스크립트 태그나 특수 문자를 적절히 이스케이프하거나 필터링합니다.
- 출력 시 인코딩: HTML, JavaScript, URL과 같은 컨텍스트에 맞는 인코딩을 적용해 스크립트가 실행되지 않도록 합니다.
- 보안 헤더 설정:
Content-Security-Policy(CSP) 헤더를 설정하여 외부 스크립트 실행을 제한합니다.
이러한 방법으로 XSS 공격을 방지할 수 있습니다.
'기타' 카테고리의 다른 글
| WAS(Web Application Server)와 Web Server 특징 (0) | 2024.11.07 |
|---|---|
| CSRF (Cross-Site Request Forgery) 간단 설명 (0) | 2024.08.12 |
| CSR과 SSR의 개념과 차이점 (0) | 2024.06.20 |
| SPA와 MPA의 개념과 차이점 (0) | 2024.06.20 |
| 브라우저 라우터와 해시 라우터 비교 (0) | 2024.06.20 |