크로스 사이트 스크립팅_XSS[Cross Site Script]
크로스 사이트 스크립팅(Cross Site Scripting, XSS)
공격자가 상대방의 브라우저에 스크립트가 실행되도록 해 사용자의 세션을 가로채거나,
웹사이트를 변조하거나, 악의적 콘텐츠를 삽입하거나, 피싱 공격을 진행하는 것을 말함.
XSS 공격은 스크립팅 언어와 취약한 코드를 공격 대상으로 합니다.
XSS공격은 악의적인 사용자가 C&C 서버로 리다이렉션 하기 위해 리다이렉션 스크립트를 주입해 중간 경유지로 활용되기도 하며, 사용자의 쿠키를 탈취해 세션 하이재킹(Session Hijacking) 공격을 수행하는 역할을 하기도 함.
XSS 공격 방식으로는 쿠키 스니핑(Cookie Sniffing), 스크립트 암호화 및 우회, 악성 스크립트 유포, 키 로거(Key Logger), 마우스 스니퍼(Mouse Sniffer), 거짓 정보 추가 등이 있습니다.
XSS 공격은 주로 스크립트 언어와 취약한 코드를 대상으로 합니다.
XSS 공격의 세 가지 유형은 다음과 같다.
- Reflected XSS(반사형 XSS)
- Stored of Persistent XSS(저장형 XSS)
- DOM 기반 XSS(DOM Based XSS)
Reflected XSS(반사형 XSS)
가장 일반적인 유형의 XSS 공격으로 사용자에게 입력 받은 값을 서버에서 되돌려주는 곳에서 발생함.
이러한 유형의 XSS 공격은 피해자에게 입력 받은 검색어를 그대로 표시하는 곳이나 피해자가 입력한 값을 오류메시지와 함께 보여주는 곳에서 악성 스크립트를 삽입하며, 스크립트는 서버가 피해자의 입력 값을 포함해 응답을 전송할 때 실행됨.
피해자가 직접 스크립트를 실행하도록 유도하기 때문에 1회성 공격이라고 할 수 있음.
주입한 악성 스크립트는 해당 서버를 반사해 오류 메시지나 검색 경과를 통해 피해자의 화면에 표시될 수 있음.
악성 스크립트는 링크를 클릭한 사용자의 쿠키 값을 해커에게 전송하도록 설정되어 있음
사용자는 버튼 또는 링크를 클릭함으로써 악성 스크립트를 실행하게 되며, 이 경우 악성 스크립트에 감염된 웹 사이트에 입력한 모든 정보가 노출됨.
Stored of Persistent XSS(저장형 XSS)
지속적으로 피해를 입히는 XSS 공격
삽입된 스크립트는 데이터베이스에 저장이 되고, 저장된 악성스크립트가 있는 게시글 등을 열람한 사용자들은 악성스크립트가 작동하면서 쿠키를 탈취당한다던가, 혹은 다른 사이트로 리다이렉션 되는 공격을 받게됨.
데이터베이스에 저장이 되어 지속적으로 공격한다고 하여 Presistent XSS라고 부르며, 데이터베이스에 저장이 되므로 Stored XSS 공격이라고 부르기도 함.
한번의 공격으로 악성 스크립트를 삽입하여 수많은 피해를 입힐 수 있다는 점이 특징.
게시판에서 많이 발생되며, 게시판이 아니더라도 사용자가 입력한 값이 데이터베이스에 저장이 되고, 저장된 값이 그대로 프론트엔드 단에서 보여주는 곳이 공격 가능성이 큼.
DOM based XSS
DOM(Document Object Model)?
HTML 및 XML 문서용 API
문서의 논리적 구조와 문서에 액세스하고 조작하는 방식
=> XML이나 HTML 문서에 접근하기 위한 일종의 인터페이스
즉, 구조화된 문서를 표현하는 방식으로 W3C의 공식 객체 모델으로, 다음과 같이 계층구조로 표현됨.
예제)
<TABLE>
<ROWS>
<TR>
<TD>Shady Grove</TD>
<TD>Aeolian</TD>
</TR>
<TR>
<TD>Over the River, Charlie</TD>
<TD>Dorian</TD>
</TR>
</ROWS>
</TABLE>
악의적인 스크립트가 포함된 URL을 사용자가 요청하게 되어 브라우저를 해석하는 단계에서 발생하는 공격
악의적인 스크립트로 인해서 클라이언트 측 코드가 원래 의도와는 다르게 실행됨.
다른 XSS 공격과는 다르게 서버 측에서 탐지가 어렵다.
피해자의 브라우저에서 DOM환경을 수정하여 클라이언트 측 코드가 예상치 못한 방식으로 공격구문이 실행되는 XSS공격
즉, 페이지 자체(HTTP 응답)는 변경되지 않지만, 페이지에 포함된 클라이언트 측 코드는 DOM환경에서 발생한 악의적인 변조로 인해 공격 구문이 실행됨.