저번 CRLF injection을 공부하면서 웹에 관한 전반적인 이해가 필요할 것 같아 HTTP와 TCP/IP에대해 간략하게 정리해보았다. 다음 글은 아마 HTTP의 요청과 응답에 대해 학습하고 정리해볼 것 같다.
1. HTTP란
네트워크를 사용해 통신하기 위해서는 서로 정해진 절차와 데이터 형식을 지켜야 한다. 이것을 지키기 위해 미리 정해둔 약속을 프로토콜이라고 한다. 웹에서 자주 사용되는 프로토콜은 HTTP이다. WWW를 구성하는 기술은 문서를 작성하는 언어인 HTML, 문서 전송 프로토콜인 HTTP, 문서의 위치를 지정하는 방법인 URL로 제안돼있다.
2. TCP/IP와 HTTP의 관계
인터넷을 포함해 일반적으로 사용되는 네트워크는 TCP/IP라는 프로토콜을 통해 통신을 한다. HTTP는 그중 하나다. 인터넷 관련 프로토콜을 통틀어 TCP/IP라고 한다. (IP라는 프로토콜을 이용한 모든 통신을 TCP/IP로 총칭한다.) TCP/IP 의 중요한 개념 중 하나로 '계층'이라는 것이 있다. TCP/IP 에는 '응용 프로그램 계층', '전송계층','네트워크계층',연결계층' 총 4개의 계층이 있다.
-TCP/IP(Transmission Control Protocol/Internet Protocol)
-인터넷 표준 프로토콜이라고 불린다.
-여러 네트워크를 연결해서 데이터를 주고 받는 프로토콜
TCP/IP에서 쓰는 주소 : 물리주소(MAC 주소), 논리주소(IP 주소), 포트주소(port)
(좀 더 공부한 후 네트워크 OSI 7계층에 대해서도 업로드 해야겠다)
TCP/IP로 통신할 때 계층의 순서를 따라 상대방과 통신을 수행한다. 출발지에서는 응용프로그램 계층으로부터 내려가며 도착지에서는 응용프로그램 계층으로 올라간다.
HTTP를 예로 들어 설명하면 먼저 출발지 클라이언트의 응용 프로그램 계층(HTTP)에서 어떤 웹 페이지를 보기 위해 HTTP요청을 지시한다. 전송계층(TCP)에서는 응용프로그램 계층에서 받은 데이터를 통신하기 좋은 크기로 자른 후 번호와 포트를 부여하고 네트워크 계층으로 전달한다. 네트워크 계정(IP)에서는 전송할 곳의 IP 주소를 추가하고 연결계층으로 전달한다. 이것으로 네트워크를 통해 HTTP 요청을 전달 할 준비가 끝난다. 도착지 서버는 연결 계층에서 데이터를 받아 상위계층으로 전달해 응용프로그램 계층까지 전달한다. 응용프로그램 계층에 도착하면 비로소 클라이언트가 보낸 HTTP 요청 내용을 받을 수 있다.
2.1 TCP 데이터 캡슐화란
출발지에서는 각각의 계층을 지날 때 반드시 그 계층에 필요한 헤더 정보를 추가한다. 도착지에서는 반대로 각 계층으을 지날 때 사용한 헤더를 제거(Dexapsulation)한다. 이런 일련의 과정을 '캡슐화'라고 한다.
-캡슐화는 출발지에서 이루어지며 (Dexapsulation)는 도착지에서 이루어진다.
-캡슐화가 이루어지면 사람이 해석을 할 수 있는 계층은 응용계층 뿐이다.
3. HTTP와 깊게 연관된 프로토콜 (IP/TCP/DNS)
3.1 전송을 담당하는 IP
IP는 계층으로 따지면 네트워크 계층에 해당한다. 인터넷 프로토콜이라는 이름에서 알 수 있듯이 실제로 인터넷을 활용하는 모든 시스템이 IP를 사용하고 있다. IP의 역할은 각 패킷을 상대방에게 전달하는 것이다. 패킷이 상대방에게 전달되기 위해서는 여러가지 조건이 필요하다. 그 중에서도 각 노드의 위치를 나타내는 IP주소의 역할은 중요하다. 목적지까지 중계를 해주는 도중의 컴퓨터 또는 라우터와 같은 네트워크 장비는 목적지에 도착하기 위한 대략적인 행선지만 알고있다. 이런 구조를 라우팅이라고 한다.
택배 배달을 예로 들면, 택배를 보내는 사람은 짐을 보내기 위해 택배를 접수하는 곳에 가야한다는 것을 알고 있다. 그리고 택배 접수처는 이 짐이 어느 지역으로 배달되어야 하는지 알고있다. 해당지역의 물류 창고는 대략적인 지역 위치를 바탕으로 각 배달원에게 짐을 할당한다. 배달원은 운송장을 보고 짐이 어디에 배달되어야 하는지 정확히 알 수 있다. 각 부분은 정확히 알지 못하지만 결국 택배를 보낸 사람은 원하는 곳으로 짐을 보낼 수 있다.
3.2 신뢰성을 담당하는 TCP
TCP는 전송계층에 해당하는 프로토콜로 신뢰성을 가진 바이트스트림을 사용한다. 바이트 스트림은 커다란 데이터를 보내기 쉽도록 TCP세그먼트라고 하는 단위의 패킷으로 작게 나누어 전송한다. 이때 각 패킷에는 번호가 붙기 때문에 누락된 패킷이 있는지 검증할 수 있고 신뢰도를 담보할 수 있다. 즉 TCP는 큰 데이터를 보내기 쉽도록 자른 후 확실히 상대에게 잘 도착했는지 확인하는 역할을 한다. TCP는 패킷에 플래그를 갖게 되는데, 플래그를 변경해서 몇 기능을 사용 할 수 있다.
+ 3way hand shaking : 확실하게 상대방에 데이터를 전달하는 일
확실하게 상대와 통신하기 위해 TCP는 3way hand shaking이라는 방법을 사용해 통신을 개시한다. TCP는 패킷을 보낼 수 있는지 여부를 상대에게 확인하는데, SYN과 ACK라는 TCP플래그를 사용해 확인한다.통신 상대가 SYN를 받고 연결이 가능하다면 ACK를 반환하기 때문이다. 출발지에서 제일 처음 SYN으로 상대에게 연결함과 동시에 패킷을 보내면 도착지에서는 SYNACK로 출발지에 연결함과 통시에 패킷을 받은 사실을 알려준다. 그러면 마지막으로 출발지에서 ACK을 보내 교환이 완료되었다는 사실을 알려준다. 이 과정중 연결이 끊어진다면 TCP는 동일한 패킷을 다시 보내 같은 절차를 실시한다. TCP는 3way hand shaking 외에도 통신의 신뢰성을 보증하기 위한 다양한 기능이 있다.
*전공인 융합보안개론에서 배운 바로는 이 취약점을 이용한 공격이 Dos Attack - syn flooding 라고 한다.
3.3 이름 변환을 담당하는 DNS
네트워크를 이용하는 컴퓨터는 IP주소와는 별개로 호스트 이름 www를 붙일 수 있다. DNS는 HTTP와 같은 응용프로그램 계층 시스템으로 주로 호스트 이름이나 도메인 이름 IP주소의 이름 변환을 제공한다. 이름 변환이란 사람이 쉽게 외우기 힘든 IP주소를 사람이 좀 더 외우기 쉬운 도메인 이름으로 변경하거나 반대로 도메인 이름을 IP주소로 변경하는 작업을 말한다.
'정보보안 공부 > 웹' 카테고리의 다른 글
[웹] 민감데이터 노출 (Sensitive Data Exposure) 유형 및 대응방안 (0) | 2021.07.10 |
---|---|
[웹] 웹 기초 (2) - HTTP 메세지 구조 (0) | 2021.05.29 |
[웹] CRLF HTTP Splitting 공격 실습 (WebGoat v5.4) (1) | 2021.05.26 |
[웹] CRLF 취약점 (HTTP 응답 분할 공격) (0) | 2021.04.15 |