전재윤_ 2020. 3. 25. 00:00

웹 해킹

본래의 의도와는 다른 동작을 일으키도록 하거나, 주어진 권한 이상으로 정보를 열람, 복제, 변경 가능한 행위가 웹에서 발생하는 것

 

사용자의 입력을 받고 웹 사이트와 통신을 하는 Client-side, 사용자의 요청을 처리하는 Server-side로 크게 두 가지로 나누어 볼 수 있음

 

-Client-side Attack

 

서비스 사용자에 대한 공격을 의미

 

웹 서버가 제공해주는 데이터가 공격자에 의해 변조되었을 경우 웹 브라우저에서 렌더 되는 과정에서 취약점이 발생하는 경우가 대표적인 공격 형태임

 

-Server-side Attack

 

서비스를 운용하는 서버에 대한 공격을 의미

 

다양한 공격 형태가 존재하며, 공격자가 공격에 성공하게 되면 서버의 어플리케이션 코드 또는 다른 사용자의 정보 유출, 서버 탈취 등의 공격으로 발전 가능

 

운영되는 서비스의 구조와 특징에 따라 위협의 형태가 달라지며 서비스의 형태에 따라 가지게 되는 특별한 공격 방법이 존재할 수도 있음

 

웹 기초지식

드림핵 웹 사이트 접속 시 발생하는 과정을 간략히 표현한 그림

Web (=World Wide Web, WWW, W3)

거미줄과 같이 인터넷상에서 각각의 사용자(컴퓨터)가 연결되어 서로 정보를 공유한다는 의미에서 유래

Web Browser (웹 브라우저)

사용자가 웹과 HTTP의 동작 원리를 알지 못해도 웹을 사용할 수 있도록 도와주는 소프트웨어로 HTTP를 통해 인터넷 상에서 통신을 하며 서버로부터 전달받은 다양한 웹 리소스들을 가공함

 

ex) Chrome, Edge, Safari, Firefox

Web Resource

웹 상에 존재하는 모든 콘텐츠로 HTML, CSS, JS, PDF, PNG 등이 있음

URI (URL)

웹 URI 구성 요소

URI(Uniform Resource Identifier): 리소스를 식별하기 위한 식별자

URL(Uniform Resource Locator): 리소스의 위치를 식별하기 위한 URI의 하위 개념임

 

웹에 접속할 때 웹 사이트의 주소를 이용해 접근하는 것은 URL이자 URI를 사용한 것

 

초기 웹에서는 경로 부분이 실제 서버 내에 존재하는 파일의 실제 위치와 직결되는 경우가 잦았으나 최근 웹에서는 본래 목적인 추상화된 경로의 개념으로 더 사용되고 있는 추세임

 

-자주 쓰이는 웹 URI 구성 요소

 

Scheme

웹 서버에 접속할 때 어떤 체계(프로토콜)를 이용할지에 대한 정보를 담고 있음

 

Host

Authority의 일부로써 접속할 웹 서버의 호스트(서버 주소)에 대한 정보를 가지고 있음

 

Port

Authority의 일부로써 접속할 웹 서버의 포트에 대한 정보를 가지고 있음

 

Path

접속할 웹 서버의 경로에 대한 정보를 가지고 있으며 /로 구분됨

 

Query

웹 서버에 전달하는 파라미터 (추가적인 정보)이며 URI에서 ? 뒤에 붙음

 

Fragment

메인 리소스 내에 존재하는 서브 리소스에 접근할 때 이를 식별하기 위한 정보를 담고 있으며 URI에서 # 뒤에 붙음

Domain Name

불규칙한 숫자로 이루어지며 네트워크상에서 통신이 이루어질 때 장치들을 식별하기 위해 사용되는 주소인 IP Address를 사람이 외우기 쉽고, 의미를 부여해 사용하기 위해 사용됨

 

Domain Name을 이용해 Host를 조회할 때는 Domain Name IP Adress 정보를 매핑해 저장하는 Domain Name Server(DNS)에서 조회해 등록된 IP Address를 가져와 사용

Encoding(인코딩)

문자 또는 기호 등의 정보, 형태를 표준화, 보안 등의 목적으로 다른 형태나 형식으로 변환하는 처리 혹은 그 처리 방식으로 알고리즘이 모두 공개되어 있고 키와 같은 요소가 포함되어 있지 않아서 모두가 원래의 정보로 복원이 가능

 

다시 원래 형태로 변경하는 것을 Decoding(디코딩)이라고 함

 

웹에서 사용하는 대표적인 인코딩은 URL HTML Entity가 존재

HTTP (HyperText Transfer Protocol)

웹을 이용하기 위한 통신 규약 (Protocol: 컴퓨터 내부 혹은 컴퓨터 사이에서 어떻게 데이터가 교환되는지 정의하는 규칙 체계)

 

모든 데이터가 평문으로 암호화 없이 전송되므로 상위 네트워크 장비, 같은 네트워크 상의 MITM 공격 등에 의해 통신이 노출될 경우 평문 정보를 그대로 출력되기 때문에 민감한 정보가 노출될 위험이 있음

 

하나의 Request Response의 쌍이 독립적으로 구성되어 통신하는 connectionless, stateless 프로토콜

(connectionless 속성은 하나의 요청에 하나의 응답을 한 후 네트워크 연결을 끝맺는 것을 의미하고 stateless 속성은 네트워크가 연결이 끝맺을 때 상태를 유지하지 않는 것을 의미함)

 

-HTTP Request

 

서버에 대한 요청을 의미

 

<구조>

 

가장 첫 줄에는 사용자가 서버에 요청 시 수행하고자 하는 동작인 Method(각각의 목적을 두고 설계되었지만, 서버에서 설정하는 방식이나 웹 어플리케이션의 처리에 따라 수행하는 방식이 다르게 사용될 수 있음), 요청하는 웹 리소스의 경로인 Path, 사용하는 HTTP의 버전을 나타내는 Version으로 구성됨

 

두 번째 줄에서부터는 Header 부분으로 각 줄은 이름: 값의 형태로 이루어짐. Header 부분의 데이터는 상황에 따라 많은 데이터가 사용될 수 있음. 사용자가 입력한 데이터를 전달하기 위한 부분보다는 사용자와 서버가 상호작용하기 위한 정보를 담는 부분으로 사용

 

마지막으로 사용자의 데이터를 담는 부분인 Body로 구성

-HTTP Response

 

사용자의 요청에 대한 서버의 응답을 의미

 

웹 해킹에서는 사용자의 입력에 의한 서버의 응답을 주목해야 함

ex) 악의적인 입력을 보냈을 때 500 Status code(Internal Server Error)가 응답되면 해당 입력이 서버에 어떠한 영향을 끼쳤다고 짐작할 수 있고 취약점이 있다고 가정해 더 살펴볼 수 있게 된다.

 

<구조>

 

가장 첫 줄에는 Version과 사용자의 요청에 대한 서버의 상태 응답 코드인 Status code 존재

 

두 번째 줄에서부터는 Header 부분으로 각 줄은 이름: 값의 형태로 이루어짐

 

마지막으로 서버의 응답 데이터 부분인 Body로 구성

-Status code 추가 설명-

  • 200번 영역: 사용자의 요청에 대한 서버의 처리가 성공하였음을 나타냄

  • 300번 영역: 사용자가 요청한 리소스가 다른 경로로 변경된 경우를 나타내는 영역

  • 400번 영역: 사용자가 서버에 요청하는 구조 또는 데이터가 잘못되었음을 나타내는 영역

  • 500번 영역: 서버의 에러와 관련된 영역

HTTPS (HyperText Transfer Protocol Secure)

HTTP의 문제점인 평문 전송을 보완하기 위해 등장

 

Transport Layer Security(TLS), Secure Sockets Layer(SSL)를 사용해서 암호화하며 공개키 암호화를 사용해서 클라이언트와 서버가 키를  교환하기 때문에 비교적 안전함

 

HTTP HTTPS의 핵심 구조 및 동작 원리는 동일하기 때문에 일반적으로 HTTP라고 합쳐서 부르기도 함

Cookie

HTTP Response Set-Cookie Header Javascript document. cookie를 통해 웹 브라우저에 저장하는 데이터

 

HTTP 요청마다 새로운 커넥션을 열기 때문에 사용자 인증을 계속하는 해야 하는 단점이 존재하는데 이를 극복하기 위해서 상태를 유지하기 위해 등장함

 

인증 상태를 포함할 수 있으며 사용자의 브라우저에 저장됨

Session(세션)

쿠키에 인증 상태를 포함한 데이터를 저장하면 사용자가 임의 사용자로 인증된 것처럼 요청을 조작할 수 있음. 따라서 서버에 데이터를 저장하기 위해 사용됨

 

세션을 활용하면 데이터를 서버에 저장하고 해당 데이터를 접근할 수 있는 유추할 수 없는 랜덤 문자열 키를 만들어 응답하며, 이를 보통 Session ID라고 부름

 

브라우저는 해당 키를 쿠키에 저장하고 이후에 HTTP 요청을 보내면 서버에서 해당 키에 해당하는 데이터를 가져와 인증 상태를 확인함

Server

인터넷상에서 사용자에게 서비스를 제공하는 컴퓨터

 

웹 서버는 사용자(웹브라우저) HTTP를 이용하여 통신하는 서버임

Web Application

사용자의 요청을 동적으로 처리할 수 있도록 만들어진 어플리케이션

DataBase Management System (DBMS)

데이터베이스 내의 데이터 조회/수정/삽입을 용이하게 사용할 수 있도록 도와주는 서버 어플리케이션

 

SQL Query를 통해 제어되는데, 이때 사용자의 입력 값을 SQL Query에 필터링 없이 사용하게 되면 SQL Injection 공격에 노출되게 됨

 

DataBase (DB): 데이터를 저장하기 위해 사용하는 데이터 저장소. 사용자의 인증, 상품, 문서 등 중요한 개인 정보가 포함된 여러 가지 내용이 존재하기 때문에 보안이 중요

 

 

참조

https://dreamhack.io/learn/6#12