본 포스팅은 DreamHack 사이트의 Client-side Basic 강의 내용을 요약한 것입니다.

이 글은 저의 취향에 맞춘 정리글이므로 Dreamhack 사이트의 내용을 보시기 바랍니다.
https://dreamhack.io/

 

해커들의 놀이터, DreamHack

해킹과 보안에 대한 공부를 하고 싶은 학생, 안전한 코드를 작성하고 싶은 개발자, 보안 지식과 실력을 업그레이드 시키고 싶은 보안 전문가까지 함께 공부하고 연습하며 지식을 나누고 실력 향상을 할 수 있는 공간입니다.

dreamhack.io


HTTP는 Connectionless와 Stateless한 특성을 가지고 있기 때문에 웹 서버는 쿠키와 세션을 사용합니다.

공격자는 이 쿠키나 쿠키에 저장된 세션 아이디를 탈취해 사용자의 권한을 얻거나, 자바스크립트를 실행하거나 하는 등의 행위를 수행하고 이를 사용자가 보낸 것처럼 요청을 전송하는 것이 Clinet-side 취약점의 주 목적입니다.

 

Same Origin Policy(SOP)

웹 브라우저를 통해 대상 호스트에 요청 시 사용자의 정보를 담고 있는 쿠키도 함께 전송되기 때문에 외부 리소스를 불러오는 요소를 자바스크립트로 관리할 수 있다면 사용자의 동의 없이 해당 내용을 읽거나 변조할 수 있습니다.

이런 공격으로부터 웹 브라우저가 사용자를 보호하기 위해 Same Origin Policy 정책을 만들었습니다.

동일한 오리진이라 할 수 있는 경우는 프로토콜(http, https), 포트, 호스트가 모두 동일한 경우입니다.

동일한 오리진이 아닌 경우에 웹 브라우저가 사용자를 보호하기 위해 다른 오리진의 문서를 읽지 못하게 합니다.

 

Cross Origin Resource Sharing(CORS)

SOP가 적용된 상태에서 리소스를 공유하는 방법

 


Cross Site Scripting (XSS)

공격자의 입력값이 크로스 사이트의 자바스크립트 일부로 웹 브라우저에서 실행되는 취약점을 말합니다.

XSS는 아래 두 가지 조건이 충족되어야 합니다.

1. 입력 데이터에 대한 충분한 검증 과정이 없어야 합니다.

2. 서버의 응답 데이터가 웹 브라우저 내 페이지에 출력 시 충분한 검증 과정이 없어야 합니다.

한마디로 허술해야 한다고 합니다.

XSS의 종류에는 악성 스크립트가 전달되는 방식에 따라 Stored XSS, Reflected XSS 등으로 분류됩니다.

XSS with Javascript

대표적으로 XSS공격 시 많이 사용되는 언어는 자바스크립트입니다. 자바 스크립트는 사용자의 웹 브라우저에서 자동으로 버튼을 누르거나 화면 구성을 바꾸는 등의 작업을 할 때 많이 사용됩니다. 또한 사용자의 정보를 조회, 변경하는 등의 요청을 주고받는 것도 가능합니다. 이외에도 페이지의 내용을 조작하거나, 주소를 변경할 수도 있습니다.

자바스크립트를 실행하는 대표적인 방법은 script 태그를 이용하는 방식이 있으며 입력 데이터로 태그를 전송해 다른 사용자의 응답에 포함되면 공격자의 자바스크립트가 실행됩니다. 이외에도 on* 이벤트를 이용할 수도 있습니다.

Stored XSS

악성 스크립트가 서버 내에 존재하는 데이터베이스, 파일 등의 형태로 저장되어 있다가 사용자가 저장된 악성 스크립트를 조회하는 순간 발생하는 형태의 XSS입니다. 이는 서비스의 형태와 접근성, 해당 서비스를 통해 얻을 수 있는 정보나 행위에 따라 파급력은 달라질 수 있습니다.(게시글의 접근성이 좋다면 파급력이 커집니다)

Reflected XSS

악성 스크립트가 사용자의 요청 시 전송되는 형태의 XSS입니다. 이는 사용자의 요청 데이터가 서버의 응답에 포함되는 과정에서 HTML 등의 악성 스크립트가 그대로 출력되어 발생하게 됩니다.

사용자의 요청 데이터에 의해 취약점이 발생하기 때문에 변조된 데이터가 사용자의 요청으로 전송되는 형태를 유도해야 합니다. Click Jacking, Open Redirect 등과 연계하여 발생시킬 수도 있습니다.

방어

1. 태그방지(특수문자를 태그로 인식하지 않도록 수정

2. 자바스크립트에서 해당 쿠키에 접근하는 것을 금지

3. 사이트에서 로드하는 리소스들의 출처를 제한

4. X-XSS-Protection Header

 

Cross Site Request Forgery(CSRF)

비정상적으로 사용자의 의도와 무관하게 HTTP 요청을 보내는 것을 말합니다. 이 공격을 통해 공격자는 해당 세션 쿠키를 가진 사람만 사용할 수 있는 기능을 요청할 수 있습니다.

CSRF는 아래 두 가지 조건을 요구합니다.

1. 해당 웹 사이트가 쿠키를 이용한 인증 방식을 사용해야 합니다.

2. 공격자가 사전에 알 수 없는 파라미터가 존재해서는 안됩니다. (자동입력방지문자)

방어

1. 세션 쿠키 대신 커스텀 헤더를 사용하여 사용자 인증

2. 공격자가 예측할 수 없는 파라미터 추가 및 검증 (Captcha)

3. Samesite Cookie

Open Redirect

Redirect 기능을 악용해 피싱사이트로 접속을 유도하거나, 다른 취약점을 연계하여 사용자를 공격할 수 있습니다.

방어

1. 리다이렉트 기능 구현 시 이동을 허용할 주소들에 대해서만 이동

 

Click Hijacking

웹 화면에 출력되는 내용에 HTML, CSS, JS 등과 같이 화면 출력에 영향을 미치는 요소들을 이용하여 사용자의 눈을 속여 사용자의 클릭을 유도하는 공격 방법입니다.

방어

모두 페이지의 URL을 제한하는 방식으로 방어합니다.

1. X-Frame-Option

2. Frame-Ancestors

'Hacking-기초 > WebHacking' 카테고리의 다른 글

파일 업로드/다운로드 취약점 공격  (0) 2020.05.27
Client-Side Advanced  (0) 2020.04.28
OWASP Top 10  (0) 2020.04.26
Server-Side Basic  (0) 2020.04.22
Introduction of Webhacking  (0) 2020.04.18

+ Recent posts