본문 바로가기
보안과정/이슈거리

XSS란

by Luuii 2017. 11. 11.

kisa에서 제공한 <크로스 사이트 스크립팅(XSS) 공격 종류 및 대응 방법> 문서 참조 및 요약.


XSS(Cross Site Scripting)

1. 위약한 웹사이트에 악성 스크립트를 포함할 수 있는 손쉬운 방법 중 하나.

2. OWASP Top10에도 매년 높은 위험으로 매겨짐.

3. 취약분포도도 '매우 광범위'한 수준으로 본 취약점은 조직의 정보 자산을 보호하는데 가장 큰 위험 중 하나.

4. 탐지도 어려울 뿐만 아니라, 공격이 성공하는 경우 조직 내부의 PC를 해킹하여 내부 시스템 까지 접근할 수 있는 위험이 있음.


HTTP 프로토콜

> 웹 서버와 클라이언트간 서버에 저장된 웹 문서(일반적으로 HTML, 스크립트, 이미지(.gif, .jpeg)등을 클라이언트로 전달하기 위한 표준규약.

> 먼저 클라이언트(브라우저)는 서버로 헤더 정보를 포함하여 관련 정보를 요청(request)하면, 웹 서버는 클라이언트의 요청을 분석하여 요청한 자원 데이터 및 헤더를 포함하여 클라이언트로 응답(response)을 보냄.


1. XSS 공격은 웹  응용에 존재하는 취약점을 기반으로 웹서버와 클라이언트간 통신 방식인 HTTP프로토콜 동작과정 중에 발생.

2. XSS 공격은 브라우저로 전달되는 데이터에 악성 스크립트가 포함되어 개인의 브라우저에서 실행되면서 해킹을 하는 것이며, 이 공격용 악성 스크립트는 공격자가 웹 서버에 구현된 웹 애플리케이션의 XSS 취약점을 이용하여 서버 측 또는 URL에 미리 삽입을 해놓은 것.


XSS 취약점 및 공격

1. OPWAP에 따르면 "XSS는 애플리케이션에서 브라우저로 전송하는 페이지에서 사용자가 입력하는 데이터를 검증하지 않거나, 출력 시 위험 데이터를 무효화 시키지 않을 때 발생한다" 라고 정의.

2. 즉 공격자가 의도적으로 브라우저에서 실행될 수 있는 악성 스크립트를 웹 서버에 입력 또는 이것을 출력시 위험한 문자를 중성화시키지 않고 처리하는 애플리케이션의 개발 과정에서 발생.

3. XSS는 일반적으로 자바스크립트에서 발생하지만, VB 스크립트, ActiveX 등 클라이언트에서 실행되는 동적 데이트를 생성하는 모든 언어에서 발생 가능.

4. XSS 취약점은 비교적 쉽게 공격할 수 있으며 웹 애플리케이션 개발 시 제거되지 않아 매우 광범위하게 분포되어 있음.

5. 악성 스크립트 배포 및 악성코드 배포, 클라이언트 프로그램 해킹 등 개인 및 조직의 보안에 큰 위협.


XSS 공격 종류

저장 XSS Attack 

> 접속자가 많은 웹 사이트를 대상으로 공격자가 XSS 취약점이 있는 웹 서버에 공격용 스크립를 입력시켜 놓으면, 방문자가 악성 스크립트가 삽입되어 있는 페이지를 읽는 순간 방문자의 브라우저를 공격하는 방식.

반사 XSS Attack

> 악성 스크립트가 포함된 URL을 사용자가 클릭하도록 유도하여 RUL을 클릭하면 클라이언트를 공격.

DOM 기반 XSS Attack

> DOM환경에서 악성 URL을 통해 사용자의 브라우저를 공격.


저장 XSS 공격

1. 웹 애플리 케이션 취약점이 있는 웹 서버에 악성 스크립트를 영구적으로 저장해 놓는 방법.

2. 이 때 웹 사이트의 게시판, 사용자 프로필 및 코멘트 필드 등에 악성 스크립트를 삽입해 놓으면, 사용자가 사이트를 방문하여 저장되어 있는 페이지에 정보를 요청할 때, 서버는 악성 스크립트를 사용자에게 전달하여 사용자 브라우저에서 스크립트가 실행되면서 공격한다.

3. 가장 일반적인 방법은 게시판 같은 곳에 HTML 문서에 <script>를 이용하여 이 스크립트 태그 안에 악성 스크립트를 저장하는 방식.

> So, 텍스트만 표시되도록 설계된 어떤 게시판에 <script>"악성 스크립트"</script>과 같은 태그를 포함. 이 경우 게시판에는 태그가 나타나지 않으며 사용자는 확인할 수가 없다.

Ex) <script>alert(document.cookie)</script>가 포함된 어떤 페이지를 사용자가 읽을 때 마다, 브라우저는 이 스크립트를 실행하면서 쿠키 값을 보여주게 된다.

4. 저장 XSS는 공격자 입장에서 사용자들이 많이 방문하는 사이트가 공격 대상으로 가장 적합한 곳.

> So, 유명 온라인 게시판, 웹 기반 이메일 및 사용자 프로필 등에 악성 스크립트를 포함하면, 다른 방문자들이 해당 페이지를 읽어보는 즉시 악성 스크립트가 브라우저에서 실행되면서 감염되므로 효과적.


반사 XSS 공격

1. 웹 애플리케이션의 지정된 변수를 이용할 때 발생하는 취약점을 이용하는 것으로, 검색 결과, 에러 메시지 등 서버가 외부에서 입력받은 값을 받아 브라우저에게 응답할 때 전송하는 과정에서 입력되는 변수의 위험한 문자를 사용자에게 그대로 돌려주면서 발생.


2. 일반적으로 서버에 검색 내용을 입력하면, 검색 결과가 있는 경우에는 결과 값을 사용자에게 전달 하지만 서버에서 정확한 결과가 없는 경우 서버는 브라우저에 입력한 값을 아래의 <그림>과 같이 그대로 HTML문서에 포함하여 응답.


3. 이 경우 HTML페이지에 포함된 악성 스크립트가 브라우저에서 실행.

> So, 사용자가 서버로 입력 한 값을, 서버는 요청한 사용자의 브라우저로 악성스크립트를 반사시킴.

4, 반사 XSS공격은 주로 사용자에게 악성 URL을 배포하여 사용자가 클릭하도록 유도하여 클릭한 사용자를 바로 공격.

> So, 사용자는 악성 스크립트가 포함된 링크를 클릭한 순간 바로 악성 스크립트가 사용자의 브라우저에서 실행.

5. 반사 XSS공격은 이메일 메시지 또는 다른 웹 사이트와 같이 다양한 경로로 피해자 시스템에게 전달.


일반적인 반사 XSS 공격 단계

ⓐ 공격자는 먼저 A사이트에 XSS취약점이 있는 것을 발견.

ⓑ 민감한 정보를 획득 할 수 있는 공격용 악성 URL을 생성.

ⓒ 공격자는 이 URL을 이메일 메시지에 포함하여 배포.

ⓓ 피해자가 URL을 클릭하면, 바로 공격스크립트가 피해자로 반사되어 A 사이트에 관련된 민감한 정보(ID/패스워드, 세션 정보를 공격자에게 전송.


DOM 기반 XSS 공격

1. DOM(Document Object Model)이란 W3C 표준으로 HTML 및 XML 문서에 접근방법을 표준으로 정의하는 문서객체 모델.

>> W3C에서는 DOM을 '프로그램 및 스크립트가 문서의 컨텐츠, 구조 및 형식을 동적으로 접근 및 업데이트 할 수 있도록 하는 언어 중립적인 인터페이스이다' 라고 정의.

>> DOM은 HTML문서를 계층적으로 보면서 컨텐츠를 동적으로 변경할 수 있다.

2. DOM 기반 XSS 공격은 피해자의 브라우저가 HTML페이지를 구문분석할 때마다 공격 스크립트가 DOM 생성의 일부로 실행되면서 공격.

3. 페이지 자체는 변하지 않으나, 페이지에 포함되어 있는 브라우저 측 코드가 DOM환경에서 악성코드로 실행.

4. 저장 XSS 및 반사 XSS공격의 악성 페이로드가 서버 측 애플리케이션 ㅜ치약점으로 인해, 응답 페이지에 악성 스크립트가 포함되어 브라우저로 전달되면서 공격하느 것인 반면, DOM 기반 XSS는 서버와 관계없이 브라우저에서 발생하는 것이 차이점.


5. 일반적으로 DOM 기반 XSS 취약점은 브라우저를 대상으로 조작된 URL을 이메일을 통해 사용자에게 전송하면, 이 URL링크를 클릭하는 순간 공격 피해를 입게 됨


XSS 공격의 피해

ⓐ 쿠키 정보/세션 ID 획득

>> 쿠키 : 웹 서버가 HTTP 헤더 중 Set_Cookie 필드로 브라우저에게 보내는 4KB 이하의 작은 텍스트 파일

 사용자가 웹 사이트를 이용하는 동안 사용자 브라우저에 저장. 사용자가 웹사이트의 페이지를 클릭할 때마다 브라우저는 웹 서버에게 사용자의 상태를 다시 알려준다. 사용자 상태를 기록하기 위해 쿠키 값에 로그인, 버튼 클릭 등에 대한 정보를 저장.

>> 세션 쿠키는 사용자가 웹사이트를 읽거나 방문하는 동안에만 임시로 메모리에 존재하는 쿠키.

     쿠키 생성 시 쿠키 만료시기 또는 유효성 기간이 설정되어 있지 않은 경우에 세션쿠기가 생성. 브라우저에서는 사용자가 브라우저를 종료하면 세션 쿠키를 삭제

>> 웹 애플리케이션이 세션 ID를 쿠키에 포함하는 경우 XSS 공격을 통해, 클라이언트의 합법적인 세션 ID를 획득하여 불법적으로 정상 사용자로가장 할 수 있다.


ⓑ 시스템 관리자 권한 획득

>> XSS 취약점을 이용하여 사용자 브라우저 취약점을 공격하여 PC를 완전히 통제할 수도 있음.

     공격자는 XSS 취약점 있는 웹 서버에 다양한 악성 데이터를 포함시켜 놓은 후, 사용자의 브라우저가 악성 데이터를 실행하는 경우 자신의 브라우저에 있는 제로데이 취약점 또는 패치되지 않은 취약점을 공격하는 공격코드가 실행되면서 사용자 시스템을 완전히 통제할 수 있음.

>> 회사 등 조직의 개인의 PC가 해킹되는 경우, 조직의 내부 시스템으로 이동하여 내부의 중요 정보를 탈취하는 공격으로 이어질 수 있음.


ⓒ 악성코드 다운로드

>> XSS 공격은 악성 스크립트 자체로만으로는 악성 프로그램을 다운로드 할 수 없지만, 사용자가 악성 스크립트가 있는 URL을 클릭하도록 유도하여 악성 프로그램을 다운로드 받는 사이트로 리다이렉트(redirect)하거나, 트로이목마 프로그램을 다운로드하여 설치할 수 있다.


XSS 취약점 예방 기술

> 많은 조직에서 XSS공격에 대응하기위해 웹 방화벽(WAF)을 도입하고 있으나 대부분의 웹 방화벽은 시그니처 기반의 XSS 공격만을 탐지.

> 그러나 특정 문자열을 탐지하는 기술은 쉽게 우회가 가능하여 방어가 효과적이지 못하다.

> 웹 애플리케이션 개발자는 <scrip> 태그 등 브라우저에서 실행되는 위험한 문자를 중성화 하여 XSS 취약점을 예방.

> 그러나 웹 개발자들이 일일이 수동적으로 위험한 문자를 필터링 및 인코딩 하는 것은 현실적으로 불가능.


ⓐ 입,출력 값 검증 및 무효화

1. XSS 취약점을 근본적으로 제거하기 위해서는 스크립트 등 해킹에 사용될 수 있는 코딩에 사용되는 입력 및 출력 값에 대해서 검증하고 무효화시켜야함. 

2. 입력 값에 대한 유효성 검사는 데이터가 입력되기 전에 가능하면, 입력 데이터에 대한 길이, 문자, 형식 및 사업적 규칙 유효성을 검사.

3. 출력값을 무효화하기 위해서는 XSS공격은 기본적으로 <script>태그를 사용하기 때문에 XSS공격을 차단하기 위해 태그 문자(<,>) 등 위험한 문자 입력 시 문자 참조(HTML entitiy)로 필터링하고, 서버에서 브라우저로 전송 시 문자를 인코딩.

4. 서버에서 브라우저로 전송 시 무자를 인코딩.

>> HTML 문자 참조 : ASCII문자를 동일한 의미의 HTML문자로 변경하는 과정.

ex) 문자 "<"는 동일한 의미의 HTML "&lt;"로 변경한다. HTML 엔터티는 대부분의 인터프리터(특히, 브라우저)에서 특수한 의미를 가지지 않으며, 단순한 문자로 처리됨.

5. 이렇게 인코딩하면 사용자는 <script>가 <script>로 보이지만 HTML 문서에서는 &lt;script&gt;로 나타나서 브라우저에서 일반 문자로 인식하고 스크립트로 해석되어 실행되지는 않는다.

6. 악성 스크립트는 많은 HTML 태그안에 포함을 할 수 있으므로 반드시 위 <그림>에 있는 위험문자의 경우 출력 값을 이스케이핑 해야한다.


ⓑ 보안 라이브러리

1. AntiXSS

>> 마이크로 소프트사에서 개발한 공개용 XSS취약점 예방 라이브러리.

>> ASP.net 애플리케이션 개발환경에서 사용.

>> 입력 값을 검증하여 서버로 악성 스크립트로 입력되지 못하는 기능과 위험한 문자를 인코딩하는 함수를 제공.


2. OWASP ESAPI 라이브러리

>> OWASP는 포괄적인 애플리케이션 보안을 위해 웹 응용 취약점을 대응할 수 있는 오픈소스 ESAPI를 개발하여 제공.

>> ESAPI에는 총 14개의 API가 존재. 이 중 XSS취약점을 예방하기 위한 API는 validator와 encoder 가 있음.

>> validator는 입력 값을 필터링하는 기능을 하고 있으며, encoder는 출력 값을 인코딩 및 디코딩 기능을 가짐.

>> 자바, PHP, NET, ASP, 자바 스크립트 및 파이썬 등 다양한 애플리케이션 개발언어를 지원.


ⓒ 브라우저 확장 프로그램

> 애플리케이션 개발시 이용하는 라이브러리 이외에도 사용자가 XSS 공격을 예방할 수 있는 프로그램도 있음.

> NoScript는 파이어폭스 등 모질라 기반의 브라우저에서 실행되는 오픈소스 확장 프로그램.

>> 화이트 리스트 기반으로 신뢰된 사이트의 자바스크립트, 플래쉬, 실버라이트 및 액티브X 등 동적 스크립트만 브라우저에서 실행하도록 하여 XSS 공격을 예방.


결론은 개발단계에서 XSS 취약점을 제거하지 않고서는 다양한 XSS형태의 공격과 우회 공격을 방어하기는 힘들다. 그리고 애플리케이션 개발단계에서 위험한 데이터 입,출력을 검증하고 인코딩하는 방법을 선택해야 한다. 

또한 각 조직에서는 XSS취약점을 효과적으로 제거하기 위해 웹 애플리케이션 및 소프트웨어 개발 시 공개된 다양한 오픈소스 라이브러리를 조직에 맞게 사용하여 XSS취약점을 근본적으로 제거해야한다.


반응형

'보안과정 > 이슈거리' 카테고리의 다른 글

쉘쇼크(Shell shock)  (0) 2017.11.02