
크로스사이트 스크립팅(XSS) 공격 기술에 대한 교육 자료로, 비지속적, 지속적, DOM 기반 벡터를 다루며 보안 학습을 위한 실제 예제를 포함합니다.
크로스 사이트 스크립팅(XSS)은 공격자가 제공한 코드를 사용자의 브라우저 인스턴스에 반영시키는 공격 기술입니다. 브라우저 인스턴스는 표준 웹 브라우저 클라이언트이거나 WinAmp, RSS 리더, 이메일 클라이언트와 같은 소프트웨어 제품에 내장된 브라우저 객체일 수 있습니다. 코드 자체는 일반적으로 HTML/JavaScript로 작성되지만, VBScript, ActiveX, Java, Flash 또는 기타 브라우저 지원 기술로 확장될 수도 있습니다. 공격자가 사용자의 브라우저가 자신의 코드를 실행하도록 만들면, 해당 코드는 호스팅 웹사이트의 보안 컨텍스트(또는 영역) 내에서 실행됩니다. 이 수준의 권한으로 코드는 브라우저가 접근할 수 있는 모든 민감한 데이터를 읽고, 수정하고, 전송할 수 있습니다. 크로스 사이트 스크립트 공격을 당한 사용자는 계정이 하이재킹(쿠키 도용)되거나, 브라우저가 다른 위치로 리디렉션되거나, 방문 중인 웹사이트에서 제공하는 사기성 콘텐츠를 볼 수 있습니다. 크로스 사이트 스크립팅 공격은 본질적으로 사용자와 웹사이트 간의 신뢰 관계를 손상시킵니다. 파일 시스템에서 콘텐츠를 로드하는 브라우저 객체 인스턴스를 사용하는 응용 프로그램은 로컬 머신 영역에서 코드를 실행하여 시스템 손상을 초래할 수 있습니다.
크로스 사이트 스크립팅 공격에는 비지속적, 지속적, DOM 기반의 세 가지 유형이 있습니다. 비지속적 공격 및 DOM 기반 공격은 사용자가 악성 코드가 포함된 특수하게 조작된 링크를 방문하거나, 취약한 사이트에 제출될 때 공격을 수행하는 웹 양식이 포함된 악성 웹 페이지를 방문해야 합니다. 악성 양식을 사용하는 경우는 취약한 리소스가 HTTP POST 요청만 수락할 때 자주 발생합니다. 이러한 경우 양식은 피해자가 모르는 사이에 (예: JavaScript를 사용하여) 자동으로 제출될 수 있습니다. 악성 링크를 클릭하거나 악성 양식을 제출하면 XSS 페이로드가 반사되어 사용자의 브라우저에서 해석되어 실행됩니다. 거의 모든 요청(GET 및 POST)을 보내는 또 다른 기술은 Adobe Flash와 같은 임베디드 클라이언트를 사용하는 것입니다. 지속적 공격은 악성 코드가 일정 기간 동안 저장되는 웹사이트에 제출될 때 발생합니다. 공격자의 주요 표적으로는 종종 게시판 게시물, 웹메일 메시지, 웹 채팅 소프트웨어 등이 있습니다. 의심하지 않는 사용자는 추가 사이트/링크(예: 공격자 사이트 또는 이메일로 전송된 악성 링크)와 상호작용할 필요 없이, 단순히 코드가 포함된 웹 페이지를 보기만 하면 됩니다.