티스토리 뷰

보안

보안취약점 XSS와 CSRF

토마's 2023. 1. 13. 12:08

안녕하세요. 오늘은 업무를 하던 도중에 웹 보안진단 중 웹 취약점이 발견되어서 그 발견된 취약점 중 XSS와 CSRF에 대한 내용을 기록으로 남기려고 합니다. 저 뿐만 아니라 저와 같이 모르셨거나 잠시 잊어버리신 분들은 참고할 만한 글이 되었으면 하는 점에서 포스팅을 진행하려고 합니다.

 

XSS(Cross-Site Scripting)

크로스 사이트 스크립팅(사이트 간 스크립팅)은 가장 기초적인 취약점 공격 방법 중에 하나이며, 다른 목적을 품은 악의적인 사용자가 공격하려는 사이트에 스크립트를 집어 넣어 공격하는 방법을 얘기합니다. 주로 다른 웹사이트들과의 통신(정보 교환) 하는 식으로 작동하기에 “사이트 간 스트립팅”이라고 부르고 있습니다.

이 XSS 취약점은 웹 어플리케이션 사용자로 부터 입력받은 값을 제대로 필터링 하거나 검사하지 않는 경우에 나타나며, 일단 공격에 성공하고 나면 사이트에 접속한 사용자는 삽입된 스크립트가 실행되게 됩니다. 일반적으로 의도하지 않는 행위를 실행하거나 쿠키나 세션에 대한 중요한 정보를 탈취하게 됩니다.

CSRF(Cross-Site Request Fogery)

사이트 간 요청 위조(또는 크로스 사이트 요청 위조, CSRF, XSRF)라고 불리고 있으며, 웹 사이트 취약점 공격 방법 중 하나입니다. 즉, 사용자가 자신의 의지와는 무관하게 공격자가 의도한 행위(C: 등록/U: 수정/D : 삭제)를 특정 웹 사이트에 요청하게 되는 공격 형태를 얘기합니다.

사이트 간 스크립팅(XSS)을 이용한 공격이 사용자가 특정 웹사이트를 신뢰한다는 점을 노린 공격이라면, 사이트 간 요청 위조(CSRF)는 특정 웹사이트가 사용자의 웹 브라우저를 신뢰하는 상태를 노리는 것입니다. 즉, 사용자가 웹 사이트에 로그인 한 상태에서 사이트 간 요청 위조 공격 코드가 삽입된 페이지를 열게 되면 공격 대상이 되는 웹 사이트는 위조된 공격 명령이 신뢰하는 사용자로 부터 발송된 것으로 인식하게 되기에 공격에 노출이 됩니다.

CSRF는 공격자가 사용자의 디바이스를 감염시키거나 사이트 해킹을 하여 이루어지는 공격이 아니기 때문에 공격이 성공하려면 다음과 같은 전제가 필요합니다.

  1. 위조 요청을 전송하는 서비스(특정 사이트)에 사용자가 로그인이 되어 있어야 합니다.
  2. 희생자는 공격자가 만든 피싱 사이트에 접속해야합니다

XSS vs CSRF 비교

XSS(Cross-Site Scripting) CSRF(Cross-Site Request Fogery)
악성코드가 클라이언트(Client)에서 실행됨 권한을 도용당한 클라이언트가 변조된 요청을 서버에 전송함
공격 대상이 클라이언트이다. 공격 대상이 서버이다.
쿠키, 세션 등의 탈취 및 웹 사이트 변조(위조) 권한 도용

XSS 공격과 CSRF는 사용자의 브라우저를 목표로 하는 것은 비슷한 경향이 있지만, XSS는 사이트 변조나 백도어를 통해 클라이언트 대상으로 악성 스크립트를 심어 공격을 하며, 인증된 세션이 없어도 공격을 할 수 있고, 자바 스크립트를 이용해 공격합니다.

그리고, CSRF는 요청을 위조하여 사용자의 권한을 이용해 서버에 대해 악성 공격을 하고, 인증된 세션을 악용하며, 특정한 행위를 실행하게 하는 공격이라는 점에서 두 가자의 공격은 서로 차이점이 있습니다.

 

공격 방지 및 방어 대책

XSS 방지 대책

  • 쿠키에 중요한 정보를 담지 않고 서버에 중요한 정보를 저장하는 방법
  • 정보를 암호화 하는 방법
  • httponly 속성 on (자바스크립트의 document.cookie를 이용해서 쿠키에 접속하는 것을 막는 옵션 - 가져가는 행위 방지)
  • Secure Coding
  • Encoding : 특정 플랫폼에서 문자를 표현하기 위한 규약
  • 건바이 건으로 처리하기도 하나 네이버에서 제공하는 lucy-filter와 multipart filter를 사용해서 방지

CSRF 방지 대책

  • Referer 검증 - Backend에서 request의 referer를 확인하여 도메인이 일치하는지 검증
  • Security Token 사용 - Referer 환경이 불가할 때, 사용하며 사용자 세션에 임의의 난수 값을 저장하고 사용자의 요청마다 해당 난수 값을 포함하여 전송한다. Backend에서 요청을 받을 때 마다 세션에 저장된 토큰 값과 요청 파라미터에 전달되는 토큰이 일치하는지 검증

 

마무리

이렇게 해서 오늘은 보안 취약점 중의 XSS와 CSRF에 대해서 알아보았고, 다음 기회에는 OWASP-10라고 웹 보안 취약점들에 대해서 어떠한 종류가 있고, 어떠한 취약점인지에 대해서 알아 볼 수 있는 시간을 가질 수 있도록 하겠습니다. 이걸로 포스팅을 마치겠습니다.

안녕하세요. 오늘은 업무를 하던 도중에 웹 보안진단 중 웹 취약점이 발견되어서 그 발견된 취약점 중 XSS와 CSRF에 대한 내용을 기록으로 남기려고 합니다. 저 뿐만 아니라 저와 같이 모르셨거나 잠시 잊어버리신 분들은 참고할 만한 글이 되었으면 하는 점에서 포스팅을 진행하려고 합니다.