본문 바로가기

WEB HACKING

[SWING] Web Hacking 02

과제 1

 

 

Cookie

 

Cookie (쿠키)는 웹 브라우저에 저장하는 데이터이다.

클라이언트 상태 정보를 로컬에 저장했다가 선별하여 String 형태로 이루어진 Key-value 쌍의 작은 데이터 파일이다.

사용자 인증이 유효한 시간을 명시하고 그 시간이 경과되기 전에는 브라우저가 종료되어도 인증이 유지된다.

이는 Connectionless(클라이언트에게 응답 후 연결을 끊는 비연결지향), Stateless(연결이 끊김과 동시에 통신이 종료되어 정보와 데이터가 유지되지 않음), 이러한 특성을 갖는 HTTP에서 상태를 유지하기 위함이다.

HTTP 요청마다 새로운 커넥션을 열기 때문에 사용자 인증을 계속해서 해야한다는 점에 대한 해결책이라 볼 수 있다.

 

방문 사이트에 로그인 시 "아이디와 비밀번호를 저장하시겠습니까?" 혹은 "오늘 이 창을 다시 보지 않기" 체크창을 본 적이 있을 것이다. 이때 쿠키가 사용된다.

 

<Cookie 사용 목적>

 

1. 세션 관리

로그인, 접속 시간, 사용자 닉네임 등 개인 정보를 저장하고 관리하기 위함

 

2. 개인 설정 유지

각각의 사용자에게 알맞은 페이지를 출력하기 위함

 

3. 사용자 트래킹

사용자의 행동과 패턴을 기록하고 분석하기 위함

 

<Cookie의 구성 요소>

 

이름은 각각의 쿠키를 구별하는데 사용된다.

값이란 쿠키의 이름과 관련된 값을 말한다.

유효시간은 쿠키의 유지시간을 의미한다.

도메인이란 쿠키를 전송할 도메인을 일컫는다.

경로는 쿠키를 전송할 요청 경로를 말하는 것이다.

 

<Cookie의 동작 방식>

 

쿠키는 클라이언트에 저장되는데 하나의 도메인 당 200개의 쿠키를 가질 수 있으며, 하나의 쿠키는 4KB까지 저장할 수 있다.

 

1. 클라이언트가 페이지를 요청 (=사용자가 웹사이트에 접근)

2. 웹서버가 쿠키 생성

3. 생성한 쿠키의 정보를 담아 HTTP 화면과 함께 클라이언트에게 돌려줌

4. 클라이언트에게 간 쿠키는 로컬 PC에 저장됨

5. 동일한 사이트를 재방문해서 다시 서버에 요청할 때 PC에 쿠키가 있는 경우 요청 페이지와 함께 쿠키 전송

 

Session

Session(세션)은 방문자가 웹 브라우저를 통해 웹 서버에 접속한 시점부터 브라우저를 종료하여 연결이 끊기는 시점까지, 일정 시간 동안 같은 사용자(브라우저)로부터 들어오는 일련의 요구를 하나의 상태로 보고, 그 상태를 유지시키는 기술이다.

 

세션은 쿠키의 보안 단점을 보완하기 위해 등장하였다.

인증 정보를 서버에 전달하고 해당 데이터에 접근할 수 있는 키(유추할 수 없는 랜덤한 문자열)를 만들어 클라이언트에게 전달하는 방식으로 작동한다.

 

세션이 쿠키보다 보안이 높은데도 쿠키도 사용하는 이유는,

세션은 서버에 저장이 되기에 서버 자원에 한계가 있어 사이트 속도가 느려질 수 있기 때문이다.

 

<Session 동작 방식>

 

1. 클라이언트가 페이지를 요청 (=사용자가 웹사이트에 접근)

2. 서버는 클라이언트에게 쿠키를 확인

3. 클라이언트가 해당 세션 아이디를 보낸게 맞는지 확인

4. 세션 아이디가 존재하지 않는다면 서버는 세션 아이드를 생성해서 클라이언트에게 돌려줌

5. 돌려받은 세션 아이디를 쿠키를 사용하여 서버에 저장

6. 클라이언트가 재접속할 시 쿠키를 이용해 세션 아이디를 서버에 전달

 

세션의 사용 예시에는 로그인과 로그아웃이 있다.

로그인을 하면 세션 아이디가 부여된다.

화면을 이동해도 로그아웃 전까지 상태가 유지된다.

 

  Cookie Session
저장 위치 클라이언트 서버
저장 형식 text object
용량 제한 도메인당 20개, 1 쿠키당 4KB 없음
만료 시점 쿠키 저장시 설정 알 수 없음
속도 상대적으로 빠름 상대적으로 느림

 

 

 

XSS

 

Cross Side Scripting. 사이트 간 스크립팅.

(html 스타일 CSS와 혼동을 피하기 위해 XSS를 약자로 사용한다.)

 

클라이언트 사이드 취약점 중 하나로,

공격자가 웹 리소스에 악성 스크립트를 삽입해 이용자의 웹 브라우저에서 해당 스크립트를 실행하는 공격이다.

이용자가 삽입한 내용을 출력하는 기능에서 발생한다.

 

<XSS 공격 기법>

 

Stored XSS (저장형 공격)

: 서버의 데이터 베이스 또는 파일 등의 형태로 저장된 악성 스크립트 조회할 때 발생한다. 주로 서버에서 제공하는 게시판이 공격 대상이다. 악성 스크립트가 저장된 후에 클라이언트의 브라우저로 전달되는 것을 이용한다.

 

영구적 XSS 공격이라고도 하며, 응용 프로그램이나 웹사이트의 모든 HTTP 응답을 감염시키는 공격을 의미한다. 반사형 XSS 공격과 달리 지속적으로 피해를 입히는 공격 유형이다.

해커는 웹 애플리케이션에서 XSS 취약점을 파악하고, 악성 스크립트를 삽입하는 방식으로 진행된다. 삽입된 스크립트는 데이터베이스에 저장이 되고, 악성 스크립트가 존재하는 게시글 등을 열람한 사용자들은 쿠키를 탈취당하거나 다른 사이트로 리디렉션되는 공격을 받게 된다.

악성 스크립트가 데이터베이스에 저장되어 지속적으로 공격을 실시하기 때문에 많은 피해가 발생할 수 있다.

 

저장형 XSS 공격이 가장 많이 발생하는 곳은 게시판이며, 게시판 외에도 사용자가 입력한 값이 데이터베이스에 저장이 되고 저장된 값이 그대로 프론트엔드에 표시되는 곳에서 공격이 발생할 가능성이 높다. 일반적으로 XSS 공격은 사용자의 입력 값을 검증하지 않기 때문에 발생한다고 할 수 있다.

저장형 XSS가 위험한 이유는 사용자가 링크를 클릭하도록 유인할 필요가 없다는 것이다. 해커가 할 일은 피해자가 악성 코드가 삽입된 웹사이트에 접속하기만을 기다리는 것뿐이다.

 

1. 공격자가 보안이 취약한 사이트를 발견하고 악성 스크립트를 작성

2. 악성 스크립트가 포함된 게시글을 웹 사이트에 게시

3. 사용자가 공격자의 게시글을 읽음

4. 서버로부터 악성 스크립트를 전달받고 실행됨

 

Reflected XSS (반사형 공격)

: 서버가 악성 스크립트가 담긴 요청을 출력 시 발생

 

가장 일반적인 유형의 XSS 공격으로 사용자에게 입력 받은 값을 서버에서 되돌려주는 곳에서 발생한다. 이러한 유형의 XSS 공격은 피해자에게 입력 받은 검색어를 그대로 표시하는 곳이나 피해자가 입력한 값을 오류 메시지와 함께 보여주는 곳에 악성 스크립트를 삽입하며, 스크립트는 서버가 피해자의 입력 값을 포함해 응답을 전송할 때 실행된다.

피해자가 직접 스크립트를 실행하도록 유도하기 때문에 1회성 공격이라고 할 수 있다. 해커가 주입한 악성 스크립트는 해당 서버를 반사해 오류 메시지나 검색 결과를 통해 피해자의 화면에 표시될 수 있다.

악성 스크립트는 링크를 클릭한 사용자의 쿠키 값을 해커에게 전송하도록 설정되어 있다. 사용자는 버튼 또는 링크를 클릭함으로써 악성 스크립트를 실행하게 되며, 이 경우 악성 스크립트에 감염된 웹사이트에 입력한 모든 정보가 노출된다.

 

Dom based XSS (DOM 기반 공격)

 

웹페이지를 여는 즉시 생성되는 문서 객체 모델(Document Object Model, DOM)은 사용자가 서버와 상호 작용하지 않고도 페이지의 모든 콘텐츠에 액세스할 수 있도록 돕는 프로그래밍 인터페이스이다. DOM 기반 XSS 공격은 서버가 아닌 피해자의 브라우저에 초점을 맞춘 것이 특징이다.

반사형 및 저장형 XSS는 응답 페이지 HTML에서 악성코드가 분명하게 나타나기 때문에 위험 징후를 발견할 수 있지만, DOM 기반 XSS는 웹사이트의 코드를 조사하지 않고는 취약점을 발견할 수 없다. 이 때문에 전문 기술 지식을 갖추지 않은 이상 DOM 기반 XSS 공격에 당하기 쉽다. 웹사이트를 클릭하기 전 코드를 확인하는 사람은 많지 않기 때문이다.

 

1. 공격자가 보안에 취약한 사이트를 발견 후 사용자에게 정보 탈취가 가능한 스크립트가 담긴 URL을 만들어서 전송

2. 사용자가 링크를 클릭

3. 서버로부터 html 문서를 전달받음

4. 사용자의 브라우저가 응답받은 문서를 읽음

5. 필요한 스크립트 실행 중 공격자가 심어놓은 악성 스크립트가 동작

6. 악성 스크립트를 통해 사용자의 정보가 공격자에게 전달됨

 

<XSS 대응 방안>

 

1. 입력 값 제한

사용자의 입력 값을 제한해 스크립트를 삽입하지 못하도록 해야 함

 

2. 입력 값 치환

HTML 문자 참조를 통해 ASCII 문자를 동일한 의미의 HTML 문자로 치환

 

3. 스크립트 영역에 출력 자제

이벤트 핸들러 영역에 스크립트가 삽입되는 경우 보호기법 우회가 가능하기에 사용자의 입력을 출력하는 것을 최대한 자제해야 함

 

 

 

'WEB HACKING' 카테고리의 다른 글

[SWING] Web Hacking 06  (0) 2022.11.19
[SWING] Web Hacking 05  (0) 2022.11.12
[SWING] Web Hacking 04  (0) 2022.11.06
[SWING] Web Hacking 03  (0) 2022.09.24
[SWING] Web Hacking 01  (0) 2022.09.11