크로스사이트 스크립팅 (XSS)
쉽게 풀면
게시판에 누군가 "안녕하세요"라고 쓴 척하면서, 사실은 그 글 속에 몰래 작동하는 명령어를 숨겨 놓았다고 생각해 봅시다. 이 글을 다른 사람이 열어보는 순간, 숨겨진 명령어가 그 사람의 브라우저에서 자동으로 실행됩니다. 이렇게 되면 공격자는 피해자의 로그인 정보(쿠키)를 몰래 빼가거나, 피해자 계정으로 원치 않는 행동을 하게 만들 수 있습니다. 웹사이트가 사용자의 입력값(댓글, 검색어 등)을 제대로 걸러내지 않고 그대로 화면에 표시할 때 이런 공격이 가능해집니다.
왜 중요한가
크로스사이트 스크립팅은 오랫동안 웹 애플리케이션 취약점 목록에서 가장 흔하게 보고되는 유형 중 하나로 꼽혀 왔기 때문에, 웹 보안 연구에서 방어 기법과 탐지 시스템을 평가하는 대표적인 시험대로 사용됩니다. 사용자 입력이 그대로 웹페이지에 반영되는 현대 웹 애플리케이션의 구조적 특성상 프레임워크나 프런트엔드 기술이 바뀌어도 근본적인 위험이 계속 남아 있어, 새로운 웹 기술이 등장할 때마다 그에 맞춘 방어기법 연구가 재조명됩니다. 사용자의 세션 정보 탈취나 피싱으로 이어질 수 있어 웹 서비스의 신뢰성과 직결되는 문제로 다뤄집니다.
논문에서는 이렇게 쓰입니다
이 문장은 "게시글 등에 저장되어 나중에 실행되는 저장형 XSS와, 링크 클릭 즉시 실행되는 반사형 XSS를 실험적으로 탐지·차단한 성능을 수치로 제시했다"는 뜻입니다. 웹 보안, 취약점 탐지 시스템을 다루는 논문에서 대표적인 공격 유형으로 자주 다뤄집니다.
서버를 거치지 않고 브라우저 내에서 자바스크립트 실행만으로 발생하는 DOM 기반 XSS를 다루는 최신 웹 보안 연구의 예시입니다.
조금 더 깊게 보면
XSS는 발생 위치와 방식에 따라 서버에 콘텐츠가 저장되어 실행되는 저장형, 요청 파라미터가 그대로 응답에 반영되어 실행되는 반사형, 그리고 서버를 거치지 않고 브라우저의 자바스크립트가 사용자 입력을 처리하는 과정에서 발생하는 DOM 기반 XSS로 구분됩니다. 방어 기법으로는 사용자 입력을 화면에 표시하기 전에 특수문자를 이스케이프 처리하는 출력 인코딩, 스크립트 실행을 제한하는 콘텐츠 보안 정책(CSP) 설정 등이 표준적으로 함께 논의되며, 논문에서는 이러한 방어기법을 우회하는 새로운 공격 벡터와 그에 대응하는 탐지 기법이 함께 다뤄지는 경우가 많습니다.
주의할 점
XSS는 웹페이지에 악성 "코드"를 심는 공격인 반면, SQL 인젝션은 데이터베이스에 보내는 "질의문"에 악성 코드를 심는 공격이라는 점에서 다릅니다. 둘 다 사용자 입력값을 제대로 검증하지 않아서 생기는 취약점이라는 공통점이 있지만, 공격이 실행되는 위치와 대상이 서로 다릅니다.