XSS 란?
- XSS는 웹 해킹 공격 중 하나이다
- Cross site scripting의 약자로 줄임말은 CSS이지만 이미 Cascading Style Sheets가 약어로 사용되고 있어 XSS라고 한다.
- XSS는 게시판이나 웹 메일 등 자바스크립트와 같은 스크립트 코드를 삽입하여 개발자가 고려하지 않은 기능이 작동하게 하는 치명적인 공 격이다.
- 사용자를 대상으로 한 공격이다.
- XSS 공격은 크게 3가지로 분류할 수 있다.
XSS 공격유형
- Reflected XSS
ex)
아래와 같이 id를 입력하면 Welcome id !! 를 출력해주는 페이지가 있다고 가정
이 페이지에 간단한 스크립트를 삽입하면 별다른 필터링 없이 실행이 되는 것을 확인할 수 있다.
- 공격자는 이러한 취약점이 존재하는 페이지를 검색후 ,XSS 공격을 위한 스크립트가 포함 된 URL을 공격 대상자에게 노출시키는 방벅으로 공격을 실행할 수 있다.
Reflected XSS 공격 순서 - 공격자는 유저가 Reflected XSS 공격에 유도될 수 있도록 이메일, 게시판, SNS 등 링크를 남길 수 있는 곳에 피싱
- 사용자는 공격자가 심어넣은 악성 링크 클릭하면 공격 스크립트 실행
- 삽입된 사이트로 이동되고 입력된 스크립트가 반사되어 그대로 웹 사이트 출력
- 브라우저는 자동으로 스크립트 실행하고 세션, 쿠키를 공격자에게 전달
- 공격자는 받은 세션, 쿠키로 사용자 권한을 얻어 웹사이트 사용가능
- Stored XSS
- Stored XSS는 Reflected XSS와는 달리 웹 사이트의 게시판에 스크립트 삽입하는 공격방식이다.
- 공격자는 XSS 공격 스크립트를 웹 사이트 방명록, 혹은 게시판에 삽입한다.
- 그 후 다른 유저들이 방명록, 게시판을 방문해 공격자가 작성한 게시물을 클릭하기를 기다림
- 사용자가 해당 게시물을 클릭하면 스크립트 코드가 사용자에게 전달
- 브라우저는 스크립트 코드를 실행해 세션 쿠키가 공격자에게 전달되고 공격자는 해당 세션, 쿠키로 웹 사이트 접속 가능해짐
- Reflected XSS 공격보다 공격 경로가 다양해 더 위험하다
- DOM Based XSS
🤔 DOM?
DOM이란 Document Object Model의 약자이다
XML, HTML 같은 문서를 브라우저 렌더링 엔진이 브라우저가 이해할 수 있는 구조로 구성해 메모리에 적재하는 것이 DOM입니다.
- DOM은 그림과 같이 트리구조로 되어있다.
- 모든 요소는 document 객체의 자식이다
- 자바스크립트는 DOM 객체에 접근해 이벤트 반응, 새로운 요소, 속성 추가, 생성, 요소, 속셩 변경, 스타일 변경 등을 할 수 있다.
DOM Based XSS ?
피해자의 브라우저에서 DOM 환경을 수정하여 클라이언트 측 코드가 예상치 못한 방식으로 공격 구문이 실행되는 XSS 공격이다.
즉 페이지 자체(HTTP 응답)은 변경되지 않지만, 페이지에 포함된 클라이언트 측 코드는 DOM 환경에서 발생한 악의적인 변조로 인해 공격 구문이 실행된다.
위에서 말한 Stored XSS, Reflected XSS 의 취약점인 경우 서버 측 결함으로 인해 응답 페이지에 악성 스크립트 구문이 포함되어 브라우저로 전달괴는 것
하미잔 DOM BASED XSS는 서버와 관계없이 브라우저에서 발생
DOM Based XSS 영향
- 피해자의 브라우저에서 악성 코드 주입 및 실행 가능
- 악성 사이트로 리다이렉트 처리 가능
- 피해자의 인증정보(쿠키) 탈취가능
XSS 위험성
1. 쿠키 정보 및 세션 id 획득
- 공격자는 XSS에 취약한 페이지 및 게시판에 XSS 공격을 수행함으로써 페이지 이용자의 쿠키 정보, 세션 ID를 획득할 수 있음
- 쿠키는 웹 서버가 브라우저에 보내는 4KB 이하의 작은 텍스트 파일로, 사용자가 웹 사이트를 이용하는동안 사용자 브라우저에 저장하는 파 일이다.
- 주로 사용자의 상태 기록을 위해 쿠키에 로그인 및 버튼 클릭에 대한 정보를 저장
- 만약 세션 ID 등을 쿠키에 포함한 경우 XSS 공격에 의해 페이지 사용자의 세션 ID를 획득해 공격자가 불법적으로 정상 사용자인 척 가장할 수 있음
2. 시스템 관리자 권한 획득
- XSS 취약점이 있는 웹 서버에 다양한 악성 데이터를 포함시킨 후 , 사용자의 브라우저가 악성 데이터를 실행하게 할 수 있다.
- 공격자는 아직 패치되지 않은 취약점에 대한 공격 코드가 실행되도록 해 사용자의 시스템을 통제할 수 있다.
- 회사, 조직의 개인 PC가 해킹될 경우, 조직 내부로 악성 코드가 이동해 내부 중요 정부가 탈취될 수 있다.
3. 악성코드 다운로드
- XSS 공격은 악성 스크립트 자체로 악성 프로그램을 다운로드할 수 없다.
- 사용자가 악성 스크립트 있는 URL 클릭하도록 유도해 악성 프로그램 다운받는 사이트로 리다이렉트(Redirect)하거나 트로이 목마 프로그램을 다운로드하도록 유도할 수 있다.
4. 거짓 페이지 노출
- XSS 공격에 취약한 페이지일 경우 , 스크립트 태그 뿐 아니라 같이 그림을 표시하는 태그 (이미지 태그) 를 사용해 원래 페이지와는 전혀 관련이 없는 페이지도 표시할 수 있다.
- 다른 태그도 사용 가능할 경우 원래 페이지 일부를 변조해 거짓 페이지를 노출할 수 있어 개인정보 유출 등의 위험이 있다.
XSS 방지법
XSS 공격은 IPS, IDS 방화벽 등으로도 방지가 불가하다
따라서 단순히 문자를 필터링 하는 것과 같은 방법만이 존재한다.
1. SCRIPT 문자 필터링
- XSS 공격은 입력값에 대한 검증이 이루어 지지않아 발생하는 취약점
- 사용자의 모든 입력값에 대하여 서버측에서 필터링 해주어야 함
- PHP의 eregi 함수 이용하면 XSS 공격에 주로 사용되는 문자들을 필터링 할 수 있다.
- 주로 스크립트를 실행하기 위한 특수문자를 필터링하며 <,>, ",' 등의 문자가 있다.
2. htmlentites 사용
- PHP 함수 중 htmlentites라는 함수가 있다.
- 이것은 모든 특수문자를 HTML (엔티티로 ) 변환한다.
※HTML 엔티티는 &약어, &#숫자의 형태로 표현하는 것을 말한다.
<는 <, > 는 >로
참고
https://rjswn0315.tistory.com/175
https://4rgos.tistory.com/1
728x90
'CS 및 면접 질문' 카테고리의 다른 글
Node.js 애플리케이션에서 모듈을 어떻게 사용하나요? (0) | 2022.06.26 |
---|---|
package.json파일이 왜 필요한가 ? (0) | 2022.06.26 |
쿠키, 세션, 웹스토리지 차이 (0) | 2022.06.22 |
setTimeout함수를 실행했을 때 일어나는 과정은? (0) | 2022.06.22 |
Nginx를 사용하는 이유 (0) | 2022.06.19 |
댓글