<Javascript> XSS (Cross Site Scripting)

·2023년 6월 15일
0

JavaScript

목록 보기
2/11
post-thumbnail

어제 입사를 희망했던 회사 면접을 보고, 면접에 나왔던 내용이다.
최종 프로젝트 관련하여 질문을 받았는데, 로컬 스토리지에 쿠키를 저장하는 방식을 보시고 XSS를 아시냐고 나에게 질문해주셨다.

정말 솔직하게 처음들어보는 용어였고, 그래서 CSS로 들어버렸다.
그런데 CSS가 로컬 스토리지랑 관련이 있나..? 싶어서 한 번 더 여쭙게 되었고, 결과적으로 XSS에 대해 한 마디도 하지 못했다.

XSS 너란 녀석 무엇인지 한 번 간략하게 알아보자.

Cross-Site Scripting

SQL injection이란?
XSS - Cross Site Scripting

SQL injection과 함께 웹에서 가장 기초적인 취약점 공격 방법의 일종. 악의적인 사용자가 공격하려는 사이트에 스크립트를 넣는 기법을 말한다.

가장 기초적인 취약점 공격 방법의 일종이라고 한다.

Cross-Site Scripting (이하 XSS)의 특징은 아래와 같다.

  • 사이트를 교차해서 스크립트를 발생시킨다.
  • 게시판을 포함한 웹에서 Javascript같은 스크립트 언어를 삽입해 개발자가 의도하지 않은 기능을 작동시킨다.
  • 클라이언트측을 대상으로 한 공격. (서버측 공격 X)

XSS 공격은 2000년도에 최초로 발견되었다고 한다.
'리그 오브 레전드'라는 게임에서도 자바스크립트를 이용한 공격이 등장했다고 한다..
웹에서 빠질 수 없는 자바스크립트이기 때문에, 없어지지 않는 취약점 중에 하나라고 볼 수 있다고 한다.

공격 방법은 Stored XSSReflected XSS가 있다.

Cross Site Scripting(XSS)는 공격방법이 단순하고 가장 기초적이지만, 많은 웹사이트들이 XSS에 대한 방어 조치를 해두지 않아 공격을 받는 경우가 많다.
여러 사용자가 접근 가능한 게시판 등에 코드를 삽입하는 경우도 많으며, 경우 에 따라서 이메일같은 매체를 통해서도 전파된다고 한다.

Stored XSS

사이트 게시판이나 댓글, 닉네임 등 스크립트가 서버에 저장되어 실행되는 방식

Reflected XSS

보통 URL 파라미터(특히 GET 방식)에 스크립트를 넣어 서버에 저장하지 않고 그 즉시 스크립트를 만드는 방식.

해당 공격 방식의 경우 브라우저 자체에서 차단하는 경우가 많아서 상대적으로 공격 성공률이 낮다.

공격 예시

보통 해커의 홈페이지에 PHP 파일을 만든다.
그 뒤에 공격할 사이트에 스크립트를 심은 뒤, 스크립트가 심어진 페이지를 사용자가 볼 경우, 쿠키값이 해커의 홈페이지로 넘어가서 세션 하이재킹이 가능해진다.

  1. 해커 홈페이지를 만들어 놓는다.
  2. 스크립트를 심을 페이지를 탐색 후, 스크립트를 심는다.
  3. 사용자가 스크립트가 심어진 페이지를 보게되어 XSS 공격이 실행.
  4. 쿠키값이 해커의 홈페이지로 넘어가서 세션 하이재킹이 가능해짐.

공격 대처 방법

입력값 검증 및 이스케이핑 (Input Validation and Escaping)

사용자로부터의 입력값을 검증하고, 안전하지 않은 문자나 문자열을 이스케이프하여 안전한 형태로 출력합니다.

  • 입력값 검증서버 측에서 이루어져야 하며, 예상되는 형식과 길이, 유효한 문자 등을 확인하여 안전하지 않은 입력을 걸러낸다.
  • 이스케이핑은 출력할 데이터를 안전한 형식으로 변환하여 사용한다. 이스케이핑을 통해 사용자 입력에 포함된 HTML과 Javascript 태그 등이 그대로 실행되지 않고 문자 그대로 표시된다.
    - 대표적인 이스케이핑 함수로는 HTML 이스케이프가 있다.
    <, >, &, ", ' 등을 대체 문자열로 변환하는 htmlSpecialChars 함수가 있다.

콘텐츠 보안 정책 (Content Security Policy, CSP)

CSP는 웹 응용 프로그램이 로드하는 리소스의 정책을 명시하는 보안 표준입니다.

  • CSP를 사용함으로써 허용되지 않은 외부 리소스의 로드, 인라인 스크립트 실행, 동적 스크립트 실행 등을 제어할 수 있습니다.
  • 스크립트의 출처, 스타일 시트의 출처, 이미지 등의 리소스 출처 등을 명시하여 XSS 공격을 방지할 수 있습니다.
  • 웹 페이지의 HTTP 응답 헤더에 설정하거나, <meta>태그를 사용하여 지정할 수 있습니다.

요약

입력값 검증 및 이스케이핑, 콘텐츠 보안 정책, CSP는 XSS 공격을 방어하기 위한 대표적인 방법이다.
이 방법들은 웹 애플리케이션의 보안을 강화하는 데 매우 효과적이다.


입력값 검증 및 이스케이핑

  • 서버 측에서 사용자의 입력을 검증.
  • 안전하지 않은 문자열을 변환해서 출력한다. ➡️ XSS 공격 방지

    이것은 기본적인 보안 관행이며, 신뢰할 수 없는 데이터를 처리하는 모든 부분에서 적용된다.

콘텐츠 보안 정책, CSP

  • 웹 애플리케이션이 로드하는 리소스의 정책을 설정하여 XSS 공격을 방지.
    ➡️ 허용되지 않은 외부 리소스의 로드와 인라인 스크립트 실행, 동적 스크립트 실행 제한
  • 추가적인 보안 계층을 제공
  • 웹 페이지의 HTTP 응답 헤더나 <meta> 태그를 통해 구현 가능.
profile
- 배움에는 끝이 없다.

0개의 댓글