프로그래밍공부(Programming Study)/네트워크(Network)

XSS와 CSRF: 웹 보안의 핵심 위협과 예방 방법 및 SameSite 쿠키의 역할

Chaany 2024. 8. 18.
728x90

1. XSS란?

XSS(Cross-Site Scripting)는 웹 애플리케이션에서 자주 발생하는 보안 취약점으로, 공격자가 악성 스크립트를 웹 페이지에 삽입하여 사용자의 브라우저에서 실행되도록 하는 공격입니다. 이를 통해 공격자는 사용자의 세션 정보를 탈취하거나, 악성 코드를 실행하여 사용자에게 피해를 줄 수 있습니다.

2. CSRF란?

CSRF(Cross-Site Request Forgery)는 사용자가 인식하지 못한 상태에서 공격자가 특정 웹 애플리케이션에 사용자를 대신하여 비정상적인 요청을 보내는 공격입니다. 예를 들어, 사용자가 로그인한 상태에서 공격자가 사용자를 대신해 특정 요청(예: 계좌 이체, 비밀번호 변경)을 보내어 피해를 줄 수 있습니다.

3. XSS와 CSRF의 차이점

XSS와 CSRF는 모두 웹 애플리케이션에서 발생하는 보안 취약점이지만, 그 목적과 방법에는 차이가 있습니다:

  • XSS는 사용자의 브라우저에서 악성 스크립트를 실행하는 데 중점을 둡니다. 공격자는 피해자에게 직접 영향을 미치는 스크립트를 삽입하여, 데이터 탈취나 악성 행위를 수행합니다.
  • CSRF는 사용자가 모르게 웹 애플리케이션에 비정상적인 요청을 보내는 데 중점을 둡니다. 공격자는 피해자가 웹사이트에서 수행할 수 있는 정상적인 요청을 가장하여 이를 악용합니다.

4. XSS의 주요 유형과 사례

XSS는 세 가지 주요 유형으로 분류됩니다:

4.1 반사형 XSS

반사형 XSS는 사용자가 웹사이트에 입력한 데이터를 그대로 웹페이지에 반영하여 발생하는 취약점입니다. 예를 들어, 검색창에 악성 스크립트를 입력하면, 그 스크립트가 검색 결과 페이지에 그대로 반영되어 실행됩니다.

4.2 저장형 XSS

저장형 XSS는 서버에 저장된 데이터를 통해 발생하는 취약점입니다. 공격자는 악성 스크립트를 데이터베이스나 서버에 저장하여, 해당 데이터를 사용하는 모든 사용자에게 악성 스크립트가 실행되도록 합니다. 예를 들어, 게시판에 악성 코드를 포함한 글을 작성하면, 그 페이지를 보는 모든 사용자가 공격에 노출됩니다.

4.3 DOM 기반 XSS

DOM 기반 XSS는 클라이언트 측 스크립트(자바스크립트)에서 발생하는 취약점입니다. 이 경우, 악성 스크립트는 서버와의 상호작용 없이 클라이언트 측에서 직접 실행됩니다. 자바스크립트 코드를 통해 웹 페이지의 DOM을 조작하여 공격을 수행합니다.

5. CSRF의 작동 원리와 사례

CSRF 공격은 사용자가 인식하지 못한 상태에서 특정 웹사이트에 비정상적인 요청을 보내도록 하는 방법입니다. 예를 들어, 사용자가 특정 웹사이트에 로그인한 상태에서, 공격자가 만든 악성 링크를 클릭하면, 그 사이트에서 의도하지 않은 요청(예: 계좌 이체)이 자동으로 발생할 수 있습니다.

공격자는 사용자가 신뢰하는 웹사이트의 취약점을 악용하여 사용자가 의도하지 않은 행동을 하도록 유도합니다. 예를 들어, 사용자가 로그인된 상태에서 공격자의 웹사이트에 접속하면, 해당 사이트는 백그라운드에서 사용자의 인증 정보를 사용해 비정상적인 요청을 수행할 수 있습니다.

6. SameSite 쿠키란?

SameSite 쿠키는 웹 애플리케이션이 특정 쿠키가 어떤 상황에서 전송될 수 있는지를 제어할 수 있도록 도와주는 보안 기능입니다. 이를 통해 CSRF 공격을 방지하는 데 중요한 역할을 합니다. SameSite 속성은 쿠키에 추가되어 쿠키가 특정 상황에서만 전송되도록 제한할 수 있습니다.

SameSite 속성의 값

SameSite 쿠키는 세 가지 주요 옵션을 가집니다: Strict, Lax, None. 각각의 값은 쿠키가 전송되는 상황을 다르게 제한합니다.

  • SameSite=Strict: Strict 모드는 쿠키가 절대적으로 같은 사이트에서만 전송되도록 제한합니다. 이 모드는 보안성이 매우 높지만, 사용자 경험이 다소 제한될 수 있습니다.
  • SameSite=Lax: Lax 모드는 쿠키가 같은 사이트 요청과 일부 다른 사이트 요청에서 전송되도록 허용합니다. 이 옵션은 로그인 쿠키나 인증 관련 쿠키에서 사용하기에 적합한 모드입니다.
  • SameSite=None: None 모드는 쿠키가 모든 상황에서 전송될 수 있도록 허용합니다. 이 모드를 사용할 경우, 쿠키는 Secure 속성도 함께 설정되어 있어야 하며, HTTPS 연결에서만 전송이 가능합니다.

SameSite 속성을 설정함으로써, CSRF 공격을 방지할 수 있는 효과적인 방법을 제공할 수 있습니다. 예를 들어, SameSite=Lax나 Strict 모드로 설정된 쿠키는 외부 도메인에서 악의적인 요청이 발생하더라도 쿠키가 전송되지 않기 때문에, 공격자가 사용자의 세션을 악용하는 것을 방지할 수 있습니다.

7. XSS와 CSRF 예방 방법

XSS와 CSRF 공격을 예방하기 위해 다음과 같은 보안 조치를 취할 수 있습니다:

7.1 입력 검증과 인코딩
  • XSS 방지: 모든 사용자 입력 데이터를 철저히 검증하고, HTML, 자바스크립트, URL 등에서 사용할 수 없는 특수 문자를 인코딩합니다. 이를 통해 악성 스크립트가 실행되지 않도록 합니다.
  • CSRF 방지: 사용자의 입력 데이터를 포함한 모든 요청에서, 예상치 못한 데이터를 필터링하고, 허용된 값만 처리되도록 합니다.
7.2 보안 토큰(CSRF 토큰)
  • CSRF 방지: CSRF 토큰을 사용하여 각 요청마다 고유한 토큰을 포함시키는 방법으로, 요청이 올바른 사용자의 행동인지 확인합니다. 서버는 요청 시 토큰을 검증하고, 유효하지 않은 경우 요청을 거부합니다.
7.3 SameSite 쿠키 설정
  • CSRF 방지: 쿠키의 SameSite 속성을 설정하여, 외부 사이트에서의 요청에 의해 쿠키가 전송되지 않도록 합니다. 이를 통해 다른 도메인에서 악의적인 요청이 발생하는 것을 방지할 수 있습니다.

8. 결론

XSS와 CSRF는 웹 애플리케이션에서 자주 발생하는 심각한 보안 취약점입니다. 각각의 공격은 사용자의 데이터를 탈취하거나 비정상적인 요청을 수행하여 큰 피해를 초래할 수 있습니다. 그러나 철저한 입력 검증, 보안 토큰 사용, SameSite 쿠키 설정 등 기본적인 보안 조치를 통해 이러한 공격을 효과적으로 예방할 수 있습니다. 웹 개발자와 보안 담당자는 이러한 위협을 이해하고, 예방책을 적절히 구현함으로써 안전한 웹 환경을 구축해야 합니다.

728x90

댓글