해킹에도 여러 세부 분야가 있습니다. 그 중 네트워크 해킹을 다루기에 앞서, 먼저 네트워크에 관해 알아봅시다.
네트워크의 기본 틀, OSI 모형
OSI 모형(Open Systems Interconnection Reference Model)은 국제표준화기구(ISO)에서 개발한 모델로, 네트워크 통신을 총 7개의 계층으로 분류해둔 것이라 보통 OSI 7 계층 모형이라고 많이 불립니다. 일곱 계층을, 아래서부터 차근차근 올라가봅시다.
- 물리 계층(Physical layer): 계층 1은 무선 네트워크의 전기 신호나 무선 신호를 이용해 비트 단위의 데이터를 전달합니다.
- 데이터 링크 계층(Data link layer): 계층 2는 데이터에 대한 접근을 관리하고, 프레임 동기와 흐름 제어, 오류 확인도 합니다.
- 네트워크 계층(Network layer): 계층 3은 스위칭과 라우팅을 통해 논리적 경로를 만들어, 노드를 통해 데이터를 전달합니다.
- 전송 계층(Transport layer): 계층 4는 TCP나 UDP를 이용해 컴퓨터 간의 데이터 전송을 책임지고, 전송 중에 생기는 오류 관리 및 흐름 제어를 담당합니다.
- 세션 계층(Session layer): 계층 5는 프로그램 간의 연결을 설정, 관리 및 종료합니다.
- 표현 계층(Presentation layer): 계층 6은 데이터 압축 또는 암호화를 통해 계층 7이 이해할 수 있는 형태로 만들어서 전송합니다.
- 응용 계층(Application layer): 계층 7은 사용자가 바로 볼 수 있는 화면으로, 사용자 인증과 데이터 유형 등을 관리하기 위해 각 프로그램마다 다른 정책을 가지고 있습니다.
전송 계층의, TCP와 UDP
먼저, UDP는 User Datagram Protocol의 준말로, 데이터를 서로 다른 경로로 독립적으로 처리합니다. 그래서 각각의 패킷은 다른 경로로 전송되고 독립적인 관계를 지니게 됩니다. UDP Header에 있는 단 하나의 필드만을 통해 오류를 검출합니다. 그래서 데이터가 올바르게 전송될 가능성이 낮습니다. 그렇지만 그만큼 속도가 빨라서, 데이터가 완전하게 보내지는 것보다 주로 빠르게 데이터가 연결되야하는 연속성이 중요한 서비스, 예를 들면 실시간 서비스(streaming)에 사용됩니다.
반면에 TCP는 Transmission Control Protocol의 준말로, UDP의 요소에 플러스 알파가 된 구조입니다. TCP에서는 일련번호를 제공해 패킷을 순서대로 배열해 데이터를 수신자에게 제공합니다. 그리고 전송이 제대로 되고 난 뒤, *ACK을 보내서 제대로 전송이 되었음을 확인할 수 있게 합니다. 또한 중복 패킷 처리, 흐름제어 및 혼잡제어를 제공합니다. 이를 통해 수신자의 BOF를 방지합니다. 이런 일련의 과정의 UDP에 비해서 긴 만큼 전송 속도는 그만큼 늦어집니다.
*ACK(Acknowledgement): 응답 확인. 패킷을 받았다는 것을 의미합니다.
응용 계층의, 쿠키과 세션
쿠키와 세션은 이전 단어들에 비해서 많이 들어보시지 않았나요? 그만큼 사실 저희와 가장 가까운 계층인 응용 계층에 해당하는 HTTP와 관련이 있는 단어들입니다.
HTTP에서는 클라이언트가 요청을 보내고, 서버가 클라이언트에 응답을 보낸 후 바로 그 둘 사이의 연결을 끊습니다. 그래서 사용자의 상태 정보가 유지되지 않습니다. 그만큼 리소스 낭비가 줄어들지만, 클라이언트 입장에서는 매번 새로 인증을 해야해서 매우 번거롭습니다. 사이트 이동할 때마다 로그인을 요구하면 얼마나 귀찮을까요? 그래서 이러한 번거로움을 해결하기 위해 웹사이트에서는 방문자의 상태를 지속시키기 위해 쿠키와 세션을 이용합니다.
쿠키(Cookie)란 클라이언트의 로컬 컴퓨터에 저장되는 키와 값이 들어있는 파일을 뜻합니다. 클라이언트는 서버에 상태를 유지하고 싶은 값을 HTTP 헤더에 포함해서 전송하고, 서버에서는 이 쿠키 정보를 확인하고 응답합니다. 여기서 쿠키는 클라이언트의 로컬 컴퓨터에 저장되기 때문에 누구나 이 컴퓨터에 접근만 가능하다면, 쿠키 안의 데이터를 확인할 수 있어서 보안성이 떨어집니다.
세션(Session)은 쿠키와 같은 보안 문제는 없습니다. 서버가 클라이언트에 유일한 세션 값을 부여하고, 쿠키와 같이 서버와 소통하지만 이때 주어진 세션 값을 이용합니다. 그리고 이러한 세션 관련 데이터는 로컬 컴퓨터가 아닌 서버에 저장됩니다. 서버에 접속하지 않는 이상 정보를 확인할 수 없어서, 로그인 정보 등과 같이 쿠키에 비해 보안이 강력하게 요구되는 데이터를 저장하는데 사용합니다.
“그럼, 정보를 안전하게 보호해주는 세션만 사용하면 되는 거 아니야?”…라는 질문이 떠오를 거 같습니다. 만약 쿠키가 없다면 모든 정보를 세션에 저장해야하는데, 이렇게 되면 서버 메모리 자체에 무리가 갈 뿐만 아니라 서버에 문제가 생겼을 때 각 사용자마다의 세션 정보를 다시 갱신해야하는 문제가 발생합니다. 그래서 쿠키와 세션을 둘 다 사용하는 것입니다.
글을 마치며.
네트워크에 대해 좀 이제 친근해지셨나요? 쿠키처럼 쉽게 다가갈 수 있는 글이 되었다면 좋겠네요. 앞으로도 OCOL의 글을 읽다보면 여러 지식들을 쉽게 담아가실 수 있을 거에요!
이번 주 일요일부터 OCOL의 첫 뉴스레터가 발행됩니다! 아직 OCOL의 뉴스레터를 구독하지 않으셨다구요? 그렇다면 여기 구독하기를 클릭해주세요. 미디엄에 올라오는 글보다 한층 더 달달한 글들이 배송될 예정이에요. 일요일 아침의 커피 한 잔과 함께하세요☕
각종 피드백과 오류 수정 및 오탈자 지적 등의 댓글은 언제나 환영입니다🎉 앞으로도 저는 OCOL에서 보안과 관련된 글을 토요일 저녁 8시(GMT+9)에 꾸준히 올릴 예정입니다. Stay tuned🍪
📎참고한 링크
- https://ko.wikipedia.org/wiki/OSI_모형: OSI 모형
- https://www.webopedia.com/quick_ref/OSI_Layers.asp: The 7 Layers of the OSI Model (Eng)
- https://youtu.be/AEaKrq3SpW8: Internet (Eng)