공격자가 웹 사이트에 악성 스크립트를 주입할 수 있는 보안 공격
- 사용자 입력값에 대한 검증이 미흡하거나 출력 시 필터링 되지 않을 경우 발생
- 쿠키 값 또는 세션 등 사용자의 정보를 탈취하거나 피싱 사이트로의 접근 유도, 취약한 사이트를 가장하여 사용자의 컴퓨터에서 다른 악의적인 작업을 수행 등 사용자에게 직접적인 피해를 줄 수 있음
공격자가 삽입한 악성 스크립트가 사용자 측에서 어떻게 동작하는지에 따라 크게 세 가지로 분류할 수 있다.
공격자의 악성 스크립트가 데이터베이스에 저장되고, 이 값을 출력하는 페이지에서 피해가 발생하는 취약점
- 공격자는 악성 스크립트가 포함된 게시물을 작성해 업로드하고, 이때 사용자가 악성 스크립트가 포함된 게시물을 요청하면
공격자가 삽입한 악성스크립트가 사용자 측에서 동작 - 악성 스크립트가 서버에 저장되어 불특정 다수를 대상으로 공격에 이용될 수 있어 Reflected XSS보다 공격 대상의 범위가 훨씬 큼
사용자가 요청한 악성 스크립트가 사용자 측에서 반사(Reflected)되어 동작하는 취약점
- 공격자의 악성 스크립트가 데이터베이스와 같은 저장소에 별도로 저장되지 않고 사용자의 화면에 즉시 출력되면서 피해가 발생
- 공격자는 악성 스크립트가 포함된 URL을 이메일, 메신저 등을 통해 사용자가 클릭할 수 있도록 유도하고, 사용자가 악성스크립트가 삽입된 URL을 클릭했을 때 사용자의 브라우저에서 악성스크립트가 실행
공격자의 악성스크립트가 DOM 영역에서 실행됨으로써 서버와의 상호작용 없이 브라우저 자체에서 악성 스크립트가 실행되는 취약점
- DOM 영역에 변화가 생기면 브라우저는 서버로 패킷을 보내지 않고 DOM 영역에서 페이지를 변환시킨다. 따라서 DOM의 일부로 실행되기 때문에 브라우저 자체에서 악성스크립트가 실행
- Stored XSS과 Reflected XSS는 서버에서 악성스크립트가 실행되고 공격이 이뤄지는 반면, DOM Based XSS는 서버와 상호작용 없이 브라우저에서 악성스크립트가 실행되고 공격이 이뤄짐
-
입력값 검증을 통해 악성 스크립트가 삽입되는 것을 방지
-
악성 스크립트가 입력되어도 동작하지 않도록 출력값을 무효화
-
웹 서버에서 HTTP TRACE 지원 끄기
document.cookie가 비활성화되었거나 클라이언트에서 지원되지 않는 경우에도 공격자는 Javascript를 통해 쿠키 데이터를 훔칠 수 있다. 사용자가 링크를 클릭하면 서버에서 사용자의 쿠키 정보를 수집하는 비동기 HTTP 추적 호출이 트리거되고, 이를 수집하는 다른 악성 서버로 보낸다. 공격자가 세션 하이재킹 공격을 수행할 수 있도록 쿠키 정보를 제공한다. 이는 모든 웹 서버에서 HTTP TRACE에 대한 지원을 제거함으로써 쉽게 완화된다.
-
XSS 필터 관련 외부 라이브러리 활용
- Lucy-XSS-Filter
- OWASP ESAPI
인증된 사용자가 웹 애플리케이션에 특정 요청을 보내도록 유도하는 공격
- 공격자의 요청이 사용자의 요청인 것처럼 속이는 공격 방식이기에 크로스 사이트 요청 위조라는 명칭이 붙음
- 사용자가 인증한 세션에서 웹 애플리케이션이 정상적인 요청과 비정상적인 요청을 구분하지 못하는 점을 악용하는 공격 방식
- 사용자의 요청이 실제 사용자가 전송한 것인지 확인하지 않는 경우에 자주 발생
- 사용자의 정보 탈취보다는 특정 작업을 무단으로 진행하기 위한 목적으로 이루어지는 경우가 많음
- 제품 구입, 계정 설정, 기록 삭제, 비밀번호 변경, 문자 전송 등 데이터의 값을 변경하는 요청을 대상으로 함
- 공격자는 자금 송금이나 로그인 정보 변경 등 원하는 요청을 위조한 후,
- 이메일이나 웹사이트에 요청이 삽입된 하이퍼링크를 심어 놓는다.
- 사용자가 해당 하이퍼링크를 클릭하면 요청이 자동으로 전송된다.
- 세션 고유 CSRF 토큰이 서버에서 브라우저로 제공
- 민감한 작업에 사용되는 쿠키는 SameSite 속성이 Strict 또는 Lax로 설정된 짧은 수명을 가져야
- CSRF 토큰과 SameSite 쿠키를 모두 제공
사용자의 브라우저를 대상으로 한다는 공통점이 있다.
XSS | CSRF | |
---|---|---|
목적 | 사용자 PC에서 스크립트를 실행해 사용자의 정보를 탈취 | 요청을 위조함으로써 사용자 몰래 송금과 제품 구입 등 특정 행위를 수행 |
이용 취약점 | 사용자가 특정 사이트를 신뢰한다는 사실을 이용 | 웹 애플리케이션이 인증된 사용자의 요청을 신뢰한다는 사실을 이용 |
스크립트 실행 위치 | 사용자 | 서버 |
사용자의 인증된 세션 필요 여부 |
O | X |