크로스 사이트 스크립팅(XSS, Cross-Site Scripting) 개념
공격자가 다른 사용자가 보는 웹 페이지에 악성 코드를 주입할 수 있도록 하는 웹 취약성의 일종이다. XSS 공격에서 공격자는 사용자 입력의 유효성을 제대로 검사하거나 검사하지 않는 웹 응용 프로그램을 이용하여 페이지를 보는 다른 사용자가 실행할 웹 페이지에 스크립트를 삽입할 수 있다.
XSS 공격에는 여러 가지 유형이 있지만 가장 일반적인 것은 “반영된 XSS”로 알려져 있다. XSS 공격에서 공격자는 특수하게 조작된 스크립트가 포함된 링크를 공격 대상자에게 전송하고 해당 링크를 클릭하게 만든다. 그런 다음 공격자의 브라우저에 의해 스크립트가 실행되어 공격자가 중요한 정보를 훔치거나 공격자의 계정을 제어할 수 있게 된다.
사이트 간 스크립팅 공격의 기본 원칙 및 방법
- 악성 코드 주입
- XSS 공격은 다른 사용자가 보는 웹 페이지에 악성 코드(일반적으로 자바스크립트)를 주입하는 것을 포함한다.
- 입력 유효성 검사 부족
- XSS 공격을 허용하는 취약성은 일반적으로 웹 응용 프로그램의 입력 유효성 검사 또는 검사 부족으로 인해 발생한다. 애플리케이션이 악성 코드에 대한 사용자 입력을 제대로 확인하지 않는다는 것을 의미한다.
- 사용자 입력 사용
- 공격자는 양식 필드, 검색 쿼리, 쿠키 및 HTTP 헤더를 비롯한 다양한 사용자 입력을 사용하여 XSS 취약성을 이용할 수 있다.
- 스크립트 실행
- 공격 대상자가 주입된 악의적인 스크립트가 포함된 웹 페이지를 보면 공격 대상자의 브라우저가 스크립트를 실행하여 공격자가 공격 대상자의 세션을 제어할 수 있다.
- 데이터 도난
- 공격자는 공격 대상자의 세션을 제어하여 로그인 자격 증명 또는 재무 정보와 같은 중요한 데이터를 도용할 수 있게 된다.
XSS 공격을 수행 방법
- 반영된 XSS
- 언급한 바와 같이 반영된 XSS 공격에서 공격자는 특수하게 조작된 스크립트가 포함된 링크를 공격 대상자에게 전송한다. 공격자는 링크를 클릭하게 되고 공격자의 브라우저에 의해 스크립트가 실행되어 공격자가 중요한 정보를 훔치거나 공격자의 계정을 제어할 수 있다.
- Stored XSS
- 저장된 XSS 공격에서 공격자는 서버에 저장된 웹 페이지에 악성 코드를 주입하여 페이지를 보는 모든 사용자가 코드를 실행하게 된다. 이는 유명한 포럼이나 소셜 미디어 사이트와 같이 많은 사용자가 웹 페이지를 보는 경우 특히 위험할 수 있다.
- DOM 기반 XSS
- DOM 기반 XSS 공격에서 공격자는 공격 대상자 브라우저의 DOM(Document Object Model)의 취약성을 이용한다. 이러한 유형의 공격에는 DOM을 조작하여 중요한 정보를 훔치거나 공격 대상자의 세션을 제어하는 스크립트를 실행하는 것이 포함된다.
XSS 공격 대응 방법
XSS 공격을 방지하려면 웹 응용 프로그램이 모든 사용자 입력을 유효성 검사 및 검사하여 악성 코드가 포함되지 않도록 해야 하고 여기에는 입력 유효성 검사 라이브러리 또는 프레임워크와 정기적인 보안 감사를 사용하여 취약성을 식별하고 패치를 적용하는 작업이 포함될 수 있다. 웹 개발자는 CSP(콘텐츠 보안 정책) 헤더를 사용하여 웹 페이지에서 실행할 수 있는 코드 유형을 제한하여 공격자가 XSS 공격을 수행하기 어렵게 만들 수도 있다.