네트워크 / 보안

안전하고 간단하지만 아직 개발 중인 VPN, "와이어가드"란 무엇인가

Lucian Constantin | CSO 2019.12.31
와이어가드(WireGuard) VPN은 더 나은 성능과 간단하고 효과적인 암호화 접근 방식을 제공한다. 기업용은 준비가 됐는가? 
ⓒ Getty Images Bank 


와이어가드 정의

와이어가드는 보안에 초점을 두고 단순함과 쉬운 사용을 대표적인 특징으로 내세우는 가상 사설망(VPN)으로, 검증된 암호화 프로토콜과 알고리즘을 사용해 데이터를 보호한다. 원래는 리눅스 커널용으로 개발됐지만 지금은 윈도우, 맥OS, BSD, iOS, 안드로이드에도 배포할 수 있다.

VPN은 기업에 없어서는 안 되는 요소다. 원격 지사를 회사의 주 네트워크에 연결하고 외근 중인 직원이 회사 내부 애플리케이션을 사용하기 위한 방편이며 클라우드 서버가 온프레미스 서버와 동일한 네트워크에 위치할 수 있도록 한다.

현존하는 대부분의 VPN 솔루션은 오래 전에 만들어져 상당히 느리며 과잉 설계됐다. 그래서 보안과 간소함에 초점을 둔 와이어가드 프로젝트가 시작됐다.

보안 연구원이며 커널 개발자인 제이슨 도넨펠드는 2017년 침투 테스트 작업 중에 사용할 은밀한 트래픽 터널링 솔루션을 물색하던 중 와이어가드에 대한 아이디어를 떠올렸다. 기존 옵션을 살펴봤지만 IPsec, 오픈VPN과 같은 VPN 터널은 성능이 좋지 않은데다 적절히 구성하고 관리하기도 어려웠다.

그래서 여타 터널링 기술을 방대한 코드베이스와 수많은 스위치와 손잡이기 덕지덕지 달린 비대한 프로젝트로 유도한 기존 설계의 몇몇 의사 결정을 배제한 채 완전히 새로운 VPN 프로토콜과 구현을 직접 만들기로 했다.


와이어가드의 암호화 작동 방식

우선 와이어가드 프로토콜은 암호화 민첩성, 즉 다양한 암호화, 키 교환, 해싱 알고리즘에 대한 선택권을 제공한다는 개념을 버렸다. 다른 기술에서 이 개념이 불안전한 환경의 원인이 됐기 때문이다. 대신 와이어가드는 철저한 테스트와 피어 리뷰를 거친 현대적 암호화 기초 요소를 사용한다. 

결과적으로 사용자가 변경하거나 잘못 구성할 수 없는 강력한 기본 암호화가 설정된다. 사용되는 암호화 프리미티브에서 심각한 취약점이 발견되는 경우 새 버전의 프로토콜이 나온다. 또한 피어 간에 프로토콜 버전을 협상하는 메커니즘이 있다.

와이어가드는 메시지 인증을 위해 폴리1305(Poly1305)와 함께 차차20(ChaCha20) 대칭 암호화를 사용한다. 이 조합은 암호화 하드웨어 가속 기능이 없는 임베디드 CPU 아키텍처에서 AES에 비해 성능이 더 우수하다. 타원 곡선 디피-헬만(ECDH) 키 합의에는 커브25519(Curve25519)를, 해싱에는 SHA-3보다 빠른 BLAKE2를 사용하며, 전달 보안을 제공하는 노이즈(Noise) 프레임워크 기반의 1.5-RTT(Round Trip Time) 핸드셰이크를 사용한다. 또한 키 사칭, 서비스 거부, 리플레이 공격에 대한 기본 보호 기능과 일부 양자 암호 내성도 포함한다.

와이어가드 프로토콜에서 각 피어는 오픈SSH의 키 기반 인증과 비슷한 방식으로 짧은 공개 키를 통해 다른 피어에 식별된다. 공개 키는 와이어가드 개발진이 크립토키 라우팅(cryptokey routing)으로 지칭하는 새로운 개념의 일부이며 터널 내의 각 피어에 할당되는 IP 주소를 설정하는 데도 사용된다.

또한 와이어가드는 인식하지 않은 피어로부터 오는 어떠한 패킷에도 응답하지 않으므로 은밀성을 제공한다. 네트워크 스캔으로는 시스템에서 와이어가드가 실행 중임이 드러나지 않는다. 데이터 교환이 없을 때는 피어(클라이언트와 서버 역할을 동시에 할 수 있음) 간의 연결이 비활성화된다.

와이어가드 프로토콜은 민간 분야와 학계의 여러 보안 연구 팀의 리뷰를 거쳤고 다양한 컴퓨터 모델에서 공식적으로 검증됐다.

와이어가드의 주 구현은 리눅스용이며 커널 모듈 형태로 제공된다. 코드는 손쉽게 감사할 수 있도록 작성되는데, 도넨펠드의 말로는 ‘한 나절이면 다 읽을 수 있다’고 한다.

그 자체로 10만 줄 이상의 코드로 구성된 데다 또 다른 방대한 코드베이스인 오픈SSL에 의존하는 오픈VPN과 비교하면 와이어가드 커널 모듈의 코드는 약 4,000줄에 불과하고 암호화 코드도 내장돼 있다. 즉, 다른 VPN 프로젝트에 비해 공격 표면이 작고 비인증 패킷에 응답하지 않으므로 공격하기 훨씬 더 어렵다.


와이어가드의 성능은?

리눅스에서 와이어가드는 전적으로 커널 공간에서만 작동하므로 사용자 공간에 위치하면서 가상 네트워크 인터페이스 드라이버를 사용하는 오픈VPN에 비해 성능이 훨씬 더 좋다. 프로젝트 자체 웹사이트를 포함해 다양한 와이어가드의 벤치마크를 보면 동일한 하드웨어에서 오픈VPN에 비해 성능과 연결 속도가 4배 이상 빠르며 IPsec 기반 VPN에 비해서도 더 빠르다.

다만 안드로이드, iOS, 맥OS, 오픈BSD, 윈도우용 와이어가드 구현은 고(Go) 메모리 안전 프로그래밍 언어로 작성된다. 와이어가드 커널 모듈을 통합한 몇몇 커뮤니티 지원 안드로이드 펌웨어 프로젝트를 제외하면 리눅스 외의 와이어가드 구현은 사용자 공간에서 실행되므로 커널 구현과 같은 성능상의 이점은 없다. 그렇다 해도 대부분의 경우 오픈VPN과 대등하거나 앞선다.


와이어가드, 리눅스 커널에 어떻게 통합되는가

와이어가드 커널 모듈은 모든 주요 리눅스 배포판과 일부 특수 배포판의 패키지 리포지토리에서 받을 수 있다. 도넨펠드는 2018년부터 주 리눅스 커널에 직접 와이어가드를 통합하기 위한 작업을 진행하고 있다. 이를 위해서는 리눅스 커널의 암호화 API와 네트워킹 스택에 상당한 변화가 필요하기 때문에 진행 속도는 느리지만 리누스 토발즈로부터 좋은 평가를 받았다.

토발즈는 1년 전 리눅스 커널 메일링 리스트에서 “와이어가드를 커널에 포함하기 위해 제이슨 도넨펠드가 풀 요청을 한 것을 봤다”면서, “전에도 말했지만 나는 와이어가드가 정말 좋고, 곧 커널에 병합되기를 바란다. 코드가 완벽하지 않을 수도 있지만 훑어본 결과 오픈VPN, IPsec의 참담함에 비교하면 예술이다”라고 밝혔다.

도넨펠드는 원래 징크(Zinc)라는 새롭고 더 단순한 암호화 API를 리눅스 커널에 병합하는 계획을 세웠었다. 도넨펠드에 따르면, 징크는 대부분의 사용 사례에서 지나치게 복잡한 기존 커널 암호화 API에 비해 애플리케이션에서 암호화 작업을 쉽게 할 수 있게 해준다. 도넨펠드는 징크에 대한 프레젠테이션에서 리눅스 암호화 API를 “곧잘 장애를 일으키고 사용하기는 터무니없이 어려운 정신나간 ‘엔터프라이즈’ API”라고 표현했다.

두 번째 암호화 API를 병합하려는 도넨펠드의 시도에 대한 다른 커널 개발자들의 반응은 제각각이었다. 커널 개발자들은 기능 중복, 그리고 기존 API의 문제를 고치는 대신 새로운 API를 도입해야 하는지 여부에 대해 여러가지 우려를 표했다. 징크 패치 제출에 관한 메일링 리스트 토론은 4월에 중단됐지만 최근 한 커널 개발자가 나서서 징크 기능의 대부분을 기존 암호화 API에 통합했고 이 변경 사항은 11월에 커널에 병합됐다. 도넨펠드는 타협안을 받아들였고 결과에 대해서도 대체로 만족감을 표했다.

도넨펠드는 와이어가드 프로젝트 메일링 리스트에 보낸 메시지에서 “더 이상 ‘징크’라는 이름으로 불리지 않고 내가 좋아했던 설계상의 의사 결정 일부가 반영되지 않았지만 우리가 추구했던 부분을 대부분 담았다고 생각하며, 몇 가지 다른 조각은 한 번에 하나씩 업스트림이 가능할 것”이라고 말했다.

이는 리눅스 네트워킹 서브시스템으로 와이어가드를 업스트림하는 과정의 막힘을 해소한 중요한 진전이다. 마찬가지로 시간이 다소 걸릴 수 있지만 일단 통합이 이뤄지면 와이어가드는 새 커널 버전을 사용하도록 업데이트되는 많은 디바이스로 진출할 수 있게 된다. 모든 부분이 계획대로 진행된다면 와이어가드는 4월 전후로 출시될 예정인 리눅스 커널 5.6에 포함된다.

도넨펠드는 “와이어가드에는 전반적으로 별 문제가 없겠지만 이제 사람들이 패치 제출을 진지하게 받아들일 이유가 생긴 만큼 앞으로 리뷰 피드백이 많을 것으로 예상한다”고 말했다.

리눅스 커널 자체의 일부가 된다고 해서 즉시 와이어가드가 광범위하게 배포되지는 않는다. 특히 임베디드 디바이스는 새 커널 버전을 받아들이는 속도가 매우 느리기 때문이다. 그러나 라우터 및 기타 임베디드 디바이스를 위한 오픈WRT 커뮤니티 펌웨어와 유비퀴티(Ubiquiti) 네트워킹 디바이스에 사용되는 엣지OS(EdgeOS)에서는 이미 와이어가드를 사용할 수 있다.


윈도우와 새로운 TUN 드라이버

도넨펠드와 다른 와이어가드 개발자들은 윈도우에서 와이어가드의 성능을 개선하기 위해 윈턴(Wintun)이라는 새롭고 더 단순한 오픈소스 TUN 드라이버를 만들었다. 윈도우는 네이티브 TUN 가상 디바이스를 제공하지 않는다. 오픈VPN이나 소프트이더(SoftEther)와 같은 프로젝트에 이를 위한 드라이버가 있지만 오래 전에 만들어졌고 여러가지 문제점이 있다.

도넨펠드는 3월에 보낸 이메일에서 윈턴 프로젝트를 발표하면서 “이 두 프로젝트는 NDIS5 시대에 작성된 다음 나중에 NDIS6으로 이식됐다. 따라서 레이어 2 에뮬레이션 없이 네이티브 레이어 3 터널링을 가능하게 해주는 윈도우 7의 NdisMediumIP와 같은 요소의 이점을 활용하지 못한다. 또한 오픈VPN의 tap-windows6과 같은 드라이버는 네트워크 구성을 위해 커널 내부에서 DHCP를 에뮬레이션하는 등 다소 문제의 소지가 있는 방식으로 작동한다. 언제나 그렇듯이 나는 협소한 사용 사례에서 ‘올바르고 따분한’ 방식으로 작업을 수행하는, 우리가 동작을 훤히 예측할 수 있는 작고 단순한 것을 원했고 그게 레이어 3 TUN”이라고 말했다.

윈턴 역시 징크, 와이어가드 자체와 마찬가지로 단순함, 감사 편의성, 보안에 초점을 둔다. 오픈VPN 프로젝트의 개발자들도 오래된 자체 드라이버의 대안으로 사용하기 위해 윈턴에 오픈VPN 지원을 추가하는 작업을 하고 있다.


와이어가드가 기업용으로 준비되는 시점은?

와이어가드는 아직 공식적으로 안정화 버전에 이르지 않았지만 이미 프로덕션에서도 사용되고 있다. 일부 상용 VPN 서비스 제공업체는 와이어가드 서버를 제공하고 있고 와이어가드를 중심으로 한 메시 네트워킹 툴을 제작하기 위한 작업도 계속 진행 중이다. 

그러나 와이어가드는 아직 “기업용 요건”을 충족하지 않으며, 앞으로 충족하게 될지 여부도 불투명하다. 개발자들이 소수의 일부 사용자나 엣지 케이스에만 필요할 새로운 기능을 추가하기를 꺼리기 때문이다. 그게 다른 여러 프로젝트가 지나치게 복잡해진 원인이다

와이어가드를 기초로 해서 더 복잡한 솔루션이 만들어질 수는 있다. 예를 들어 기업에서는 자동화된 방식으로 많은 수의 컴퓨터에 새로운 소프트웨어를 배포하고 구성해야 하지만, 여러 피어에 걸친 공개 키의 분산과 키 관리는 와이어가드 자체에서는 다루지 않으므로 별도의 툴로 구현해야 한다. editor@itworld.co.kr 

회사명 : 한국IDG | 제호: ITWorld | 주소 : 서울시 중구 세종대로 23, 4층 우)04512
| 등록번호 : 서울 아00743 등록발행일자 : 2009년 01월 19일

발행인 : 박형미 | 편집인 : 박재곤 | 청소년보호책임자 : 한정규
| 사업자 등록번호 : 214-87-22467 Tel : 02-558-6950

Copyright © 2024 International Data Group. All rights reserved.