본문 바로가기

1. Web hacking (웹 해킹)/2) 개념 정리

[2020.9.19] DreamHack 개념 정리 - Client-side Basic

1.Client-side Basic

 

- HTTP 웹 서버가 사용자를 식별하기 위해 보편적으로 쿠키와 세션을 사용

 (Connectionless와 Stateless 한 특성)

 

[ 목적 ]

: 사용자로부터 쿠키나 쿠키에 저장된 세션 아이디를 탈취해 사용자 권한을 얻음

 /사용자의 브라우저에서 자바스크립트를 실행하거나 특별한 행위를 수행하도록 함

  => 사용자가 보낸 것처럼 요청을 전송

 

> SOP(Same Origin Policy)

:서로 다른 오리진의 문서 또는 스크립트 들의 상호 작용을 제한

  - Origin의 구성 : 프로토콜(protocol, scheme), 포트(port), 호스트(host)

 

> Cross Origin Resource Sharing(CORS)

:SOP가 적용된 상태에서도 리소스 공유 가능

xhr.withCredentials = true

요청 시 오리진의 쿠키를 함께 요청

OPTIONS /me HTTP/1.1

OPTIONS헤더

Access-Control-Request-Method: POST

POST헤더를 사용하기 위해 확인요청

 

=> 리소스 공유 가능

이 외에도 postMessage, JSON P도 있음

 

 

2. Cross Site Scripting

 

-> 공격자에 의해 작성된 스크립트가 다른 사용자에게 전달되는 것

 

웹 브라우저 내에서 적절한 검증 없이 실행되기 때문에 사용자의 세션을 탈취하거나,

웹 사이트를 변조하거나 혹은 악의적인 사이트 사용자를 이동시킬 수 있다.

 

                            

 

- Stored: 악성 스크립트가 서버 내에 존재하는 데이터베이스 또는 파일 등의 형태로 저장되어 있다가 사용자가 조회하는 순간 발생

- Reflected: 외부로부터의 악성 스크립트를 피해자의 요청 행동에 의해 취약한 웹 서버에 악성 스크립트가 전송되어 실행

   => 차이점 : 지속성, 악성 스크립트의 저장 여부

 

- 화이트 필터링 : 필터링 항목에 지정된 것만을 사용 가능, 그 외에는 제한된다.

- 블랙 필터링 : 필터링 항목에 지정된 것을 사용할 수 없음, 화이트 필터링과 반대 개념

 

- Javascript(자바스크립트) : 사용자의 웹 브라우저에서 화면을 동적으로 보여줄 수 있도록 자동으로 버튼을 누르거나 화면 구성을 바꾸는 등의 작업을 할 때 많이 사용된다.

   -> script 태그를 이용하여 공격자가 입력 데이터로 script 태그를 전송 해 공격자의 자바스크립트가 실행되도록 할 수 있다.

 

[ XSS를 방어하기 위한 방안 ]

Server-side Mitigations, HTTPOnly 플래그 사용, Content Security Policy 사용, X-XSS-Protection 등



3. CSRF

 

- 비 정상적으로 사용자의 의도와 무관하게 다른 사이트에 HTTP 요청을 보내는 것

 

- 사용자가 웹사이트에 로그인한 상태에서 사이트 간 요청 위조 공격 코드가 삽입된 페이지를 열면

이후에는 사용자의 행동과 관계없이 사용자의 웹 브라우저와 공격 대상 웹사이트 간의

상호작용이 이루어져 다양한 공격이 가능하게 됨

 

[ 공격 성공 수행 조건 ]

1. 해당 웹 사이트가 쿠키를 이용한 인증 방식 사용

2. 공격자가 사전에 알 수 없는 파라미터가 존재해서는 안 됨

 

[ 방어 ]

1. CSRF Token: 랜덤 한 수를 사용자의 세션에 저장하여 사용자의 모든 요청(Request)에 대하여

서버단에서 검증하는 방법

 

2. CAPTCHA

3. 정상적인 사용자만 아는 기존의 값 검증 ex. 현재 비밀번호



4. Open Redirect

 

- Redirect(리다이렉트): 사용자의 위치를 이동시키기 위해 사용하는 기능 중 하나 

> 리다이렉트 기능은 서비스적인 측면에서 사용해야 하는 경우가 존재

 

- Open Redirect(오픈 리다이렉트): 이동하는 주소가 공격자에 의해 변경될 경우에 취약점이 발생

           > 피싱사이트로 접속을 유도하거나, 다른 취약점을 연계하여 사용자 공격 가능

 

  [ 공격 방법 ]

리다이렉트(사용자의 위치를 이동시키기 위한 기능)가 발생하는 경로에서

공격자가 입력값으로 리다이렉트 되는 주소가 변경되는 경우에,

해당 경로와 공격자의 값이 함께 전달되도록 사용자를 유도하여

(공격자가 원하는 경로로 사용자의 위치를 이동시키는) 리다이렉트가 실행되도록 하는 방법 

 

  [ 오픈 리다이렉트 취약점을 최소화하는 방법 ]

    기능 구현 시 이동을 허용할 주소들에 대해서만 이동시키는 것

   

  =>  사용자의 입력 값으로 리다이렉트 되는 기능을 사용해야 하는 경우

1. 서버에서 해당 링크에 대한 검증을 거친 후 사용자에게 배포하는 방법

                      2. 외부 링크로 이동하는 것을 /동의를 묻는 화면을 띄우는 등/사용자가 알도록 하는 방법

 

5. Click Jacking

 

 웹 브라우저 화면에 출력되는 내용에 HTML, CSS, JS 등과 같이 화면 출력에 영향을 미치는 요소들을 이용하여

사용자의 눈을 속여 사용자의 클릭을 유도하는 공격 방법

 

사용자의 클릭을 유도하는 페이지를 구성 후, 그 페이지 위에 iframe 등의 태그로 누르게 할 페이지를 로드

 

그리고 CSS opacity(요소의 투명도를 조정)와 같이 사용자의 눈에는 보이지 않도록 숨겨 놓는 방법 등을 이용하여 공격