보안 네트워킹 솔루션 기업 Firezone(파이어존)이 Rust(러스트) 언어로 구현된 새로운 WireGuard(와이어가드) 상태 머신 라이브러리 'Sanstun(산스턴)'을 선보였습니다. 이 라이브러리는 네트워크 입출력(I/O)뿐만 아니라 시간, 난수 생성까지 상태 로직에서 분리하는 'sans-IO' 설계를 적용하여, 개발자가 WireGuard 프로토콜을 더 효율적이고 안전하게 구현할 수 있도록 돕습니다.
Sanstun은 기존에 Firezone이 사용하던 'boringtun(보링턴)' 포크의 한계를 극복하기 위해 개발되었습니다. boringtun은 내부 버퍼링 문제와 API 호환성 유지의 어려움이 있었는데, Sanstun은 내부 버퍼링을 없애고 호출자가 패킷 버퍼링 및 핸드셰이크 시작을 직접 제어하도록 하여 이러한 문제를 해결했습니다. 또한, 모든 수신 데이터그램이 'Interface::receive'를 거치도록 타입을 설계해 핸드셰이크 요청 제한 누락이나 패킷 오라우팅(잘못된 터널로 전달)과 같은 보안 취약점을 방지합니다. 특히 단일 터널 내에서도 암호화/복호화 연산을 작업 스레드로 분리하여 병렬 처리를 가능하게 함으로써, 벤치마크에서 최대 45배의 잠재적 가속 가능성을 보여주었습니다.
이러한 sans-IO 설계는 구성 요소의 조합과 테스트를 용이하게 하고, '함수 색깔 문제(function color problem)'를 피하며 Rust의 소유권(ownership) 규칙과도 잘 맞아 개발 생산성을 높입니다. WireGuard는 각 세션이 비용이 큰 Diffie-Hellman(디피-헬만) 키 교환으로 시작하기 때문에, 악의적인 핸드셰이크 요청에 CPU 자원이 소진될 위험이 있습니다. Sanstun은 쿠키(cookie) 메커니즘을 통해 출발지 IP의 소유 여부를 검증하고 출발지 IP별 핸드셰이크 요청 제한을 가능하게 하여 이러한 공격을 효과적으로 방어합니다. 또한, 상태 관리와 암호 연산을 분리하여 단일 터널 내에서도 병렬 암호 연산을 지원, 고성능 VPN(가상 사설망)이나 메시 네트워크(mesh network) 구현에 중요한 이점을 제공합니다.
Sanstun의 출시는 WireGuard 기반 솔루션을 개발하는 기업 및 개발자들에게 더 강력하고 유연한 도구를 제공합니다. 특히 보안과 성능이 중요한 VPN, 제로 트러스트 네트워크(Zero Trust Network) 솔루션 등에서 활용도가 높을 것으로 예상됩니다. 오픈소스(Apache 2.0 라이선스)로 공개되어 커뮤니티의 기여를 통해 지속적으로 발전할 가능성도 큽니다.