가볍게 알아보는 VPN에 대한 설명- (PN 부터, IPSEC, VPN이 왜 안전하지 않은지 까지)

대학원에서 진행하고 있는 과제 때문에 VPN에 대한 정보를 모으던 참에 인터넷에 VPN에 대해서 제대로 설명하는 글이 하나도 없어서 글을 작성한다.

(구글에 VPN을 검색하면 무슨 광고 밖에 안보인다;;;)

글을 읽기 위한 기초 지식

현재 블로그에 네트워크 또는 암호학 이론에 대해 아무것도 적지 않았기 때문에 최대한 이해하기 쉽게 글을 작성하려 노력할 것이다.

하지만 글을 읽기 위해서는 아래에 대한 기본 지식 정도는 가지고 있는 것이 좋다

  1. IP 주소라는 것이 인터넷에서의 우편 번호 또는 집 주소 등과 같이 '주소'의 역할을 한다
  2. 비밀번호(또는 암호)를 통해서 파일 등을 암호화하고 복호화 한다는 개념을 알고 있다

아래 지식은 알고 있으면 조금 더 깊은 이해가 가능할 것이다. 혹시 글을 읽고 관심이 생기면 찾아보고 다시 글을 읽어보자.

  1. NAT(Network Address Translation)에 대해서 알고 있다.
  2. 대칭암호와 비대칭암호의 개념. 특히 공개키를 통한 인증 또는 비밀 공유 방법에 대해서
  3. 해쉬 함수와 무결성 검증에 대해서

위 리스트에 대한 개념을 글에서 다루지는 않을 거지만 IPsec와 같은 암호학이 끼어드는 개념을 완벽하게 이해하기 위해서는 알고 있는 편이 좋다.

글에서는 암호학에 대한 언급은 최대한 자제할 것이다.

마지막으로 집에서 집 사이로 택배를 배달하는 것과 동일하게 IP주소와 IP주소 사이의 데이터를 전달하는 것을 라우팅이라는 단어를 쓸 것이다.

네트워크를 모르는 사람은 VPN의 개념에 대해서 알 수 있도록.
또, 컴퓨터 공학 전공자는 헷갈릴 수 있는 개념에 대해서 다시 정리 해볼 수 있는 글이 되도록 기원하며 본격적으로 VPN에 대해서 알아보도록 하자.

아니 그래서 Private한 Network가 뭐임?

VPN에 대해서 이야기 하기 전에 우리는 다음 3가지 용어에 대하여 확실히 이해하여야한다.

  1. Network
  2. Private
  3. Virtual

Network

네트워크라는 단어에 대해서는 기회가 있으면 나중에 조금 더 자세히 다루기로 하고 여기서는 간단히 살펴보고 가자.

먼저 정답부터 이야기하면 Network란 연결이다!!

(어이없을 수 있지만 잠깐만 진정하고 이야기를 읽어보자)

이렇게 이야기하면 바로 와닿지 않을 수 있기 때문에 예를 통해서 빠르게 살펴보자.

만약 지하철 노선도를 Network라고 할 수 있을까?

정답은 그렇다이다 다음과 같은 모든 것이 네트워크라고 말할 수 있다.

  1. 지하철의 거미줄 같은 노선도
  2. 택배 배달을 위한 공급망
  3. 평소의 컴퓨터를 통해 데이터를 배달하기 위해 사용하는 인터넷
  4. 마을 안에서의 이웃과 이웃 간의 관계

말 그대로 연결로 표현할 수 있는 모든 것이 네트워크이다.

조금 더 전문적으로 표현하면 네트워크는 이렇게 표현할 수 있다

Network: Connection + Topology

바로 연결과 그 연결이 어떻게 이루어졌는지를 정의할 수 있는 모든 것을 네트워크라고 할 수 있다.

Private

네트워크에서 Private란 네트워크상에서 일어나는 일이 비밀스럽게 이루어지는 것을 의미한다.

무슨 당연한 소리를 하냐고 생각할 수 있다, 조금만 더 읽어보자.

여기서 우리는 정확히 Private이란 무엇인지 이해하기 위해서 조금 옛날로 돌아가보자.

What is Secret?

Privacy라는 단어는 생각보다 오래된 개념이 아니다.

당장 19세기까지 인간은 마을공동체 단위로 생활했고 옆집 영희의 등짝에 몇 개의 점이 있는지도 알고 있는 사회에 살고 있었다.

또한 20세기 말까지만 해도 우리 생활에는 전화번호부를 이용해서 전 국민의 전화번호를 공유하는 생활을 하고 있었다.
image-20240414102350113.png|center|300
[출처 - https://en.wikipedia.org/wiki/Telephone_directory ]

21세기의 우리로써는, 내 옆집 이웃이 나의 신체의 비밀을 알고있거나, 우리나라의 모든 사람들이 내 집 전화번호를 알고있다고 생각하기는 어렵다.

이러한 역사의 흐름에서 우리가 생각하는 Privacy라는 개념이 많이 변화해 온 것을 알 수 있다.

이 글에서 설명하는 VPN에서의 Private을 이해하기 위해 Secret의 범위를 2가지로 쪼개서 생각할 것이다.

  1. 우리가 보내는 내용물을 누군가 뜯어 보아도 상관없는 시절의 Privacy
  2. 내용물을 숨겨야 하는 현대의 Privacy

How to make Perfect Private Network?

그렇다면 우리가 Private Network를 구성할 수 있는 최고의 방법은 무엇일까?

어떻게 해야지 옆집 철수랑 부모님과 선생님께 들키지 않고 내일 학교에서 뭐 하고 놀지 비밀스럽게 이야기할 수 있을까?

어떻게 해야지 외부의 사람들과 구별되어 Private한 네트워크를 구축할 수 있을까?

정답은 의외로 간단하다

image-20240414123421979.png|center|240
[출처 - https://www.chegg.com/homework-help/questions-and-answers/two-neighbors-communicate-homemade-string-phone-see-figure--simple-phone-consists-two-ends-q4534276 ]

만약 Secret의 1번 조건만을 만족한다면 그냥 연락하고 싶은 사람들끼리 연결하면 그것이 Private한 Network이다!

그럼 LAN(Local Area Network)은?

그렇다면 여기서 의문이 들 수도 있다.

Quote

아니 그럼 LAN에서 외부 연결을 전부 차단하고 Local에서만 통신하면 그것도 VPN인가?'

그렇다 사실 이것 또한 Private Network라고 할 수 있다.

하지만 보통 이러한 네트워크를 우리는 외부와의 연결을 차단한 폐쇄된 환경이라는 뜻에서 Closed Network라고 부른다.

Virtual

컴퓨터 공학에서 Virtual이라는 단어는 여러 곳에서 사용된다.

전공자에게 친숙한 가상화, 가상 메모리라는 단어부터 최근에 많이 나오는 VR(Virtual Reality), 가상 세계 등.

여기서 우리는 Virtual 이라는 단어를 이렇게 정의하고 가도록하자.

image-20240414112619192.png|center|240
[출처 - https://en.wikipedia.org/wiki/Brain_in_a_vat ]

Info

실제 존재하는 것은 아니지만, 그것과 동일한 역활을 해주는 것

위 정의가 헷갈리면 다음과 같이 바꾸어 생각하면 이해하기 쉬울 것이다.

이를 위에서 철수와 내가 통신하기 위해서 전선을 연결하여 구성한 Private Network에 적용해 보면

이것이 Virtual + Private Network이다.

VPN(Virtual Private Network)

자 드디어 VPN으로 들어가 보자.

그리고 VPN으로 옮겨간 김에 철수와 내가 학교를 땡땡이 친다는 예시에서 벗어나 조금 더 현실적인 예시를 생각하여 보자.

Motivation

세상 모든 공학이 그렇듯 VPN또한 어떠한 문제를 해결하기 위해서 탄생하였다.

그 문제가 무엇일까 바로 전선을 연결한다는 것이 문제이다.

여러분이 Private Network가 구성된 회사에서 일을 하다가 외국으로 출장을 나간 회사원이라고 해보자.

여기서 발생하는 문제점은 다음과 같다.

  1. 회사의 Private Network의 연결하기 위해서 바다 건너 수천km의 전선을 컴퓨터와 함께 들고 다녀야 한다.
  2. 전선을 어떻게 연결할 것이고, 전선의 무게와 크기는 어떻게 할 것인가?

그렇다 당장 여러분의 스마트폰을 열면 Google에 접속할 수 있는 세상에서, 회사와의 연결 하나만을 위해서 아래의 문제를 해결해야한다.

  1. 네트워크 구현의 문제: 막대한 크기와 무게의 전선을 들고 다녀야 하고
  2. 비용의 문제: 또 전선의 가격은 어떻게 할 것인가

답답하다, 아니 이렇게 간단히 Google에 접속할 수 있는 세상에서 회사 네트워크에 접속하기가 이렇게 어려우면 누가 회사에 다니겠는가?

Question

아니, 이미 구축되어 있는 인터넷 인프라를 이용해서 Google이나 Youtube 접속하듯이 회사에 접속할 방법은 정말 없는 것인가?

그렇다 회사 외부에서 Private Network에 접속하여 마치 회사 내부의 Private Network에 접속하고 있는 듯한 효과를 줄 수 있다면. 즉 이미 구축되어 있는 인터넷 인프라를 이용하여 Virtual하게 Private Network를 구성할 수 있다면!!

이라는 목적을 이루기 위해서 탄생한 것이 VPN이다.

간단하게 VPN 구성해 보기

자 이제 목차에서 말한 라우팅이라는 것을 이용해서 세상에서 가장 간단한 VPN 환경을 구성해 보자.

명심하자, 우리는 Google과 Youtube가 있는 세상에 살고 있지만 사람들이 내가 보낸 인터넷상에서의 내용을 보아도 상관없는 20세기 후반의 마인드를 가진, Secret의 1번 조건만을 만족하면 되는 사람들이다.

자 앞선 장에서 언급하였듯 우리는 이미 구축된 인터넷 인프라를 이용할 것이고 우리는 이러한 인프라를 구축하고 관리하면서 우리에게서 매달 핸드폰 사용료, 인터넷 사용료를 받아 가고 있는 사업자들을 ISP(Internet Service Privider) 라고 한다. (그냥 SK, KT, Softbank, NTT, AT&T, T-mobile 같은 회사를 생각하면 된다)

자 그렇다면 VPN을 구축하기 위해서 우리가 할 수 있는 가장 간단한 방법은 그냥 ISP에 이야기 해두는 것이다.

  1. 나 그리고 회사: ISP야 내가 앞으로 1 주 동안 외국으로 갈 건데 앞으로 내가 인터넷에서 보낸 정보를 회사로 라우팅해 줘
  2. 나 그리고 회사: 그리고 회사에서 나가는 데이터는 다른 사람한테 보내지(라우팅 하지) 말고 나한테만 보내줘
  3. ISP: 알겠으니까 빨리 돈이나 줘

자 간단하게 VPN 구성이 완료됐다!!
image-20240414135714255.png|center round|350

이제 내가 외부에서 보내는 데이터는 회사의 네트워크에 도달할 것이고, 회사의 데이터 또한 밖으로 나와 나 혼자만 쓸 수 있을 것이다.

즉 내가 마치 회사에 출근하여 Private Network를 사용하는 것과 동일한 효과를 볼 수 있는 것이다!!

(물론 어떤 데이터가 내가 보낸 건지, 진짜 내가 보낸 건지, 확인, 인증, 구분하는 것 같은 사소한 문제는 생각하지 말자)

이렇게 생성된 통신의 통로를 보통 Tunnel이라고 하고 터널을 만드는 행위를 VPN 구성을 위해서 터널링 한다고 말한다.

IPsec - VPN in the wild

자 지금까지 왔으면 대략 VPN이 무엇인지 감은 잡혔을 것이라 생각한다.(믿습니다!!!)

이제 실제 많이 사용되고 있는 IPsec에 관해서 이야기하면서 VPN의 종류와 분류 등에 대해서 자세히 알아보자.

그리고 앞서 무시하고 넘어갔던 사소한 문제들을 간단하게 생각하여 보자.

VPN의 종류

IPsec을 살펴보기에 앞서, 지금까지 읽은 내용을 통해 VPN은 특별한 서비스의 이름 또는 기술 같은 것이 아닌 '컴퓨터 네트워크'에서 다루어지는 하나의 개념이라는 사실을 알 수 있을 것이다.

즉, VPN이라는 개념이 해결하고자 하는 문제에 대해서 다양한 해결 방안이 있을 수 있고 이들 모두를 VPN이라고 할 수 있다.

여러 VPN에서는 문제 해결 방법(Functional Requirement)에 따라 보통 다음과 같은 기준으로 나눈다.
(종류를 다 아는 것이 중요한 것이 아니라 각각이 어떠한 특성이 있고 어떤 문제 상황에서 사용할 수 있는지를 아는 것이 중요하다!!)

  1. 구현 계층: L2, L3, L4 등
  2. 접속 모델: Site-to-Site, Remote Access(개인과 개인, 개인과 서버, 서버와 서버 등)
  3. 프로토콜: IPsec, SSL / TLS, PPTP, L2TP 등

IPsec은 보통

  1. 구현 계층: IP와 같은 인터넷 레이어에 속한다고 말하고
  2. 접속 모델: Site-to-Site, Remote Access(개인과 개인, 개인과 서버, 서버와 서버를) 연결하는 모드가 존재한다
  3. 프로토콜: 인증, 암호화, 키 교환 기능을 지원하는 프로토콜이다

는 특성을 가진다고 이야기한다.

가볍게 알아보는 IPsec

출장 간 외국에서 회사에 연결을 진행하는 과정을 살펴보면서 IPsec에 대해서 가볍게 알아보자.

이 장을 자세히 설명하기 위해서는 서두에서 말했던 암호화와 복호화, 인증, 키 교환, 무결성과 해시 등의 개념을 알아야하기 때문에 이러한 내용은 최대한 언급을 자제하면서 이야기를 진행해 보자.

우리는 이제 현대에 들어섰고 Secret의 1번 조건이 아닌 2번 조건이 필요한 세상에 살고 있다.

회사에 외부와 분리된 Private Network를 구축하는 기본적인 이유는 외부와는 단절되어 지켜야 할 정보가 있고 이를 보호해야 할 이유가 있기 때문이다(e.g. 기밀 자료).

당연히 내가 외국에서 회사로 보내는 데이터 또한 누군가에게 노출되면 안 될 것이다.

그렇기 때문에 IPsec은 Virtual한 Private Network를 만들어, 마치 Private Network에 접속한 듯한 효과를 주는 것과 함께 데이터를 적절히 암호화하여 누군가가 볼 수 없고, 노출되지 않게 하는 암호화와 같은 기술이 더해졌다.

구체적으로는 Secret의 2번 조건을 만족하기 위해선 다음과 같은 전제가 필요하다.

  1. 인증: 회사로 도착한 데이터가 진짜 '내가' 보낸 데이터인가?
  2. 암호화: 회사와 나만이 아는 비밀번호(암호키)를 통해서 인터넷을 통과하는 동안 누구도 볼 수 없게 하였는가?
  3. 무결성: 인터넷을 통과하는 동안 누군가에 의해서 조작되지 않았는가?

본 장에서는 위의 각 주제에 대해서 다루지 않을 것이다.

(궁금한 사람은 IPsec에 대해서 검색하지 말고 각 주제에 대해서 구글에 따로 검색해 보기를 추천한다. 각 주제의 문제 해결을 위한 다양한 방법이 존재하고 IPsec은 이러한 방법들을 채택하여 사용하는 것에 불과하기 때문이다)

VPN 생성 과정

VPN을 생성하고 외부에서 접근하기 위해서는, 일단 출장 간 외국에서 회사의 Private Network에 접속할 때 사용할 IP를 회사로부터 발급받아야 한다.

image-20240414130454299.png|center round|650

Tunneling

이제 여러분은 머나먼 타지로 출장을 왔다(또는 집에서 재택근무를 하거나).

먼저 IPsec에서 통신을 위한 연결을 생성하는 터널링 과정에 대해서 간단하게 알아보자.

앞서 언급하였던 여러 암호학의 개념들이 이 터널을 뚫기 위해서 사용된다.

전체적인 흐름은 다음과 같다.

  1. 인증
    1. 회사에 내가 Bob이라는 사실을 알린다
    2. 회사는 진짜 Bob인지 확인한다
  2. 비밀번호(키) 교환
    1. 데이터(패킷)을 암호화하여 전송하기 위해 회사와 Bob 만이 알 수 있는 비밀번호(키)를 교환한다

이 과정을 수행함으로써, 네트워크 인프라에서 회사와 Bob만을 위한 통신의 통로가 만들어지는 것이다.

그리고 이러한 통로를 Tunnel이라고 한다

image-20240414132141515.png|center round|650

Packet transfer(데이터 전달)

이제 회사와 Bob간의 비밀 통신 통로인 터널이 생성되었다!

이제 어떻게 이 터널을 통해서 Bob이 마치 회사의 Private Network 안에서 행동하는 것 처럼 할 수 있을까?
image-20240414133025412.png|center round|650

비밀은 바로

  1. 출장을 가기 전 발급받은 IP주소를 회사의 서버는 알고 있다는 것과
  2. 패킷을 한 번 더 캡슐화하는 것이다

IPsec에서 캡슐화는 외부 네트워크에서의 라우팅을 위한 IP의 출발지(Source)와 도착지(Destination)정보와 Private Network 내에서 사용할 출발지/도착지 정보 2개를 포함하게 하는 것을 의미한다.

image-20240414134414994.png|center round|650

이렇게 캡슐화된 패킷은 회사 내부에서 사용될 출발지/도착지/데이터를 회사와 Bob이 공유한 키를 통해 암호화하였기 때문에 외부에서 알 수 있는 정보는 외부 네트워크상에서의 출발지와 도착지 정보뿐이다.

회사로 도착한 패킷은 캡슐화를 풀고, 미리 공유한 키를 통해서 암호화를 해제하게 된다.

image-20240414135340932.png|center round|650

이렇게 풀린 패킷을 자세히 보면, Private Network 상에서의 요청을 위한 패킷과 동일하다는 것을 알 수 있다.
image-20240414135446192.png|center round|650

바로 이것이 IPsec을 통해서 통신이 이루어지는 과정이다.

물론 내부에서 외부의 Bob에 통신할 때에도 동일하게 생각할 수 있다.

왜 VPN은 안전하지 않은가?

먼저 여기까지 글을 읽은 여러분에게 박수를 보낸다.

이제 정말 마지막 주제인 그래서 왜? VPN은 안전하지 않은가에 대해서 알아보자.

조금 더 정확히는 우회를 위한 VPN 서비스가 어째서 익명성을 보장해 주지 않는가에 대한 이야기이다.

우회를 제공하는 VPN 서비스

원격 근무, 외국 출장과 같은 상황에서 VPN은 그 기능을 충실히 수행하고 대다수의 요구 조건을 만족한다.

하지만 우리가 들어본 VPN은 ~~우회와 같은 용어로 더욱 많이 들어봤을 수 있다.

이들 서비스는 자신들이 완전한 익명성을 제공하고 프라이버시를 충족한다고 이야기한다.

과연 여기서 이야기하는 프라이버시와 익명성은 무엇일까?

지금까지 우리는 Route 조정을 통한 VPN 설정과 IPsec을 통한 VPN 설정 2가지에 대해서 알아보았다.

여기서 우리가 명심해야 할 것은

  1. 정보의 전달을 ISP또는 회사에게 기대고 있다 - 즉 ISP를 통과하여 전달된다
  2. 뭐가되었든 간에 IP 주소는 외부에 노출된다

라는 것이다.

이 두 가지가 바로 논쟁의 중심이 되는 포인트이다.

IP 주소? ISP?

만약 익명성을 제공하는 VPN서비스를 이용한다고 하면 우리는 Bob이 되고 VPN 서비스 제공자를 '회사'라고 생각할 수 있다.

'회사'는 '우리'가 접속하려고 하는 '외부의 사이트'와 우리를 중계해 주는 역할을 하는 것이다.

지금까지 살펴본 VPN에서 우리는 ISP가 제공하는 외부의 네트워크에서 Bob과 회사의 IP 주소가 노출된다는 것을 살펴보았고, Bob에게 데이터를 받은 회사는 암호화된 데이터를 복호화할 수 있다는 사실을 살펴보았다.

그렇다 ISP는 우리가 VPN 서비스 제공자에게 무언가를 요청하고 있다는 사실을 알 수 있고, VPN 서비스 제공자는 우리가 접속하려는 사이트가 어디인지 그리고 무엇을 주고받는지를 알 수 있는 것이다.

물론 VPN 서비스 제공자가 모든 정보를 알 수 있는 것은 아니지만, 사실 알려고 노력만 하면 우리가 접속하려했던 사이트와 데이터에 대한 로그를 포함하여 여러 데이터를 남길 수도 있는 것이다.

바로 이것이 VPN 서비스가 완전한 익명성을 제공하지 못한다고 이야기하는 이유이다.

찾아보면 VPN 서비스 제공자들이 로그를 남기지 않는다고 광고하는 것을 쉽게 찾아볼 수 있는데, 바로 이러한 이유 때문이다.

Reference

  1. What is a VPN?

같이보면 좋은 자료

  1. https://www.youtube.com/watch?v=6w1F6qnPQiE&ab_channel=널널한개발자T
  2. https://www.youtube.com/watch?v=15amNny_kKI&t=779s&ab_channel=LearnCantrill