공시 한 판

정보보호론 개념서 · 응용 프로그램 취약점

크로스사이트 스크립팅(XSS)

설명 영상 크로스사이트 스크립팅(XSS) · 2:12

핵심 정리

크로스사이트 스크립팅(XSS)은 웹 취약점을 노리는 공격이다. 웹 애플리케이션이 신뢰할 수 없는 데이터를 적절히 검증하거나 제한하지 않은 채 웹 브라우저로 보내면 취약점이 생긴다. 이 공격의 핵심은 공격자가 만든 클라이언트 측 스크립트를 다른 사용자의 브라우저에서 실행하는 데 있다. 공격자는 게시글이나 이메일처럼 다른 사람이 읽는 곳에 스크립트를 삽입하고, 해당 글을 여는 사용자가 피해를 입게 한다. 서버를 직접 뚫는 공격과 달리 피해가 다른 사용자의 브라우저에서 발생한다는 점이 XSS를 구별하는 기준이다.

XSS는 게시글이나 이메일에 악성 스크립트를 삽입해 다른 사용자의 쿠키나 세션 정보를 탈취하는 공격이다. 피해자의 브라우저에서 스크립트가 실행되면 스크립트는 피해자의 권한으로 동작한다. 따라서 피해는 세션 탈취에 그치지 않고 웹 사이트 변조나 악의적인 사이트로의 이동으로 이어질 수 있다. 피해자 브라우저에서 실행된다는 점은 이 공격의 요건이자 피해가 발생하는 출발점이다.

XSS는 악성 스크립트가 머무는 위치와 실행 경로에 따라 여러 유형으로 나뉜다. 서버에 저장되어 여러 사용자에게 영향을 주는 유형, 요청에 실려 응답으로 되돌아와 실행되는 유형, 클라이언트 측 DOM 조작으로 발생하는 유형이 있다. 유형을 구분할 때는 정식 명칭과 각 유형의 실행 위치를 함께 확인해야 한다. 자세한 내용은 뒤에서 쟁점별로 다룬다.

XSS에 대응하려면 사용자 입력의 유효성을 검사해야 한다. 구체적으로 HTML 마크업을 구성하는 < 와 & 문자를 필터링해야 한다. 다만 대응에는 한계가 있다. 일부 브라우저에는 반사형 공격을 부분적으로 막는 기능이 있지만, 악성 코드가 데이터베이스에 저장되는 경우와 같은 다른 XSS 공격에는 여전히 취약하다. 따라서 XSS를 완전히 예방하려면 서버 측에서 웹 애플리케이션을 올바르게 설계해야 한다.

자세히

유형 체계

XSS의 정식 유형은 반사형, 저장형, DOM 기반이며 Reflash XSS라는 유형은 없다. 반사형(Reflected) XSS는 입력값이 응답에 즉시 반영되어 발생하는 정식 유형이다. DOM 기반 XSS도 클라이언트 측 DOM 조작으로 발생하는 정식 유형이다. 세 유형은 악성 스크립트가 어디에 머무르고 어디서 실행되는지를 기준으로 구분하면 헷갈리지 않는다. 다음 표는 이 기준을 정리한 것이다.

구분반사형저장형DOM 기반
악성 스크립트의 위치요청에 담겨 응답으로 되돌아옴서버 데이터베이스에 저장됨클라이언트 측 DOM에 머무름
실행 계기악성 링크를 클릭해 요청할 때다른 사용자가 게시글을 열 때페이지의 DOM 조작 과정에서

공격의 정의와 피해

공격자는 게시글이나 이메일에 악성 스크립트를 삽입한 뒤, 해당 글을 열거나 이메일을 읽은 사용자의 컴퓨터에서 스크립트가 실행되게 한다. 크로스사이트 스크립팅은 검증되지 않은 입력에 포함된 스크립트가 실행되는 공격이다. 따라서 공격을 식별하려면 검증되지 않은 입력이 있는지와 그 입력이 스크립트로 실행되는지를 함께 살펴야 한다.

피해 범위는 쿠키와 세션 정보에 한정되지 않는다. 피해자의 권한으로 뱅킹 같은 애플리케이션에 접근해 비밀 정보를 공개하거나 승인 없이 거래를 일으킬 수도 있다. 세션 탈취는 인증 및 세션 관리 취약점과 결과가 겹쳐 보일 수 있다. 그러나 XSS의 원인은 공격자가 피해자의 브라우저에서 스크립트를 실행하는 데 있다.

저장형 XSS

저장형 XSS의 특징은 악성 스크립트가 서버 쪽에 남는다는 점이다. 공격 코드를 서버에 저장해 두었다가 다른 사용자가 해당 게시글을 열면 브라우저에서 실행되게 하는 공격이다. 한 번 저장된 글은 그 글을 여는 사용자에게 반복해서 노출될 수 있으므로 피해 범위가 넓어진다.

이어지는 내용

로그인하면 하루 5페이지까지 무료로 전체를 읽을 수 있습니다.

앱에서 이 절 읽기