보안은 공격과 방어의 끊임없는 싸움입니다. 특히 왓츠앱처럼 매일 30억 명 이상의 사용자가 안전하게 메시지를 주고받는 플랫폼에서는 미디어 파일을 통한 악성 코드 공격을 차단하는 것이 핵심 과제죠. 2015년 'Stagefright' 취약점 사태는 OS 라이브러리의 버그로 인해 애플리케이션 레벨에서 직접 패치하기 어려운 문제를 드러냈습니다. 이 경험은 왓츠앱 팀에게 중요한 깨달음을 주었고, 결국 메모리 안전 언어인 Rust를 대규모 프로덕션에 도입하는 결정으로 이어졌습니다. 이 결정의 배경과 성과에 대해 자세히 알아보겠습니다. 이 글의 내용은 Meta Engineering 블로그의 공식 게시물을 근거로 합니다.

왓츠앱의 솔루션: 대규모 Rust 도입
기존 C++로 작성된 미디어 일관성 라이브러리('wamedia')를 완전히 새로 쓰기보다, Rust 버전을 C++ 버전과 병행 개발했습니다. 호환성을 보장하기 위해 차등 퍼징(Differential Fuzzing)과 방대한 통합/단위 테스트를 활용했죠.
도입 과정에서의 주요 도전 과제는 다음과 같았습니다:
- 바이너리 크기 증가: Rust 표준 라이브러리를 포함하면서 초기 바이너리 크기가 커졌습니다.
- 빌드 시스템 지원: 왓츠앱이 지원하는 다양한 플랫폼(Android, iOS, Web, Wearables 등)에 대한 빌드 시스템 구축이 필요했습니다.
왓츠앱은 이 지원을 구축하는 데 장기적인 투자를 결정했습니다. 그 결과, 16만 줄의 C++ 코드(테스트 제외)가 9만 줄의 Rust 코드(테스트 포함)로 대체되었습니다. Rust 버전은 C++ 대비 성능과 런타임 메모리 사용량에서 우위를 보였고, 이 성공을 바탕으로 모든 왓츠앱 사용자와 플랫폼에 전면 롤아웃되었습니다.

Rust 도입의 성과와 확장된 방어 체계 'Kaleidoscope'
Rust 라이브러리의 성공적 배포는 보안 전략의 전환점이 되었습니다. 이를 기반으로 파일 구조 검증, 위험 지표 분석, 파일 형식 변조 감지, 위험 파일 형식 차단 등 다양한 검사 체계를 통합한 'Kaleidoscope' 시스템을 구축했습니다.
| 검사 유형 | 설명 | 보호 대상 예시 |
|---|---|---|
| 구조 비준수 검사 | 특정 파일 형식 내 비정상 구조 탐지 | 파서 차이를 이용한 익스플로잇 시도 |
| 위험 지표 분석 | 구조는 정상이지만 내부 위험 요소 탐지 | PDF 내 임베디드 파일, 스크립팅 요소 |
| 파일 형식 변조 감지 | 확장자나 MIME 타입을 속이는 파일 탐지 | 실행 파일이 이미지 파일로 위장 |
| 위험 파일 형식 차단 | 알려진 위험 파일 형식에 대한 특별 처리 | 실행 파일(.exe, .apk), 애플리케이션 |
이 라이브러리는 매월 WhatsApp, Messenger, Instagram의 수십억 대의 디바이스에 배포되며, 현재 알려진 범위에서 가장 대규모의 Rust 코드 클라이언트 사이드 배포 사례가 되었습니다.

결론: 실무적 시사점
왓츠앱의 사례는 Rust가 대규모 프로덕션 환경, 특히 보안이 중요한 클라이언트 사이드 코드에서 충분히 준비되었음을 입증합니다. 그들의 접근법은 단순한 언어 교체가 아닌, 체계적인 위험 관리 전략의 일환이었습니다.
- 위험 식별 및 정량화: 퍼징, 정적 분석, 공급망 관리 등을 통해 리스크 원천을 파악합니다.
- 리스크 감소를 위한 3중 전략:
- 불필요한 공격 표면 노출 최소화 (제품 설계)
- 기존 C/C++ 코드에 대한 보안 보증 투자
- 새 코드에는 메모리 안전 언어(Rust 등)를 기본 선택지로 설정
이러한 '방어 심화(Defense-in-Depth)' 접근 방식은 모든 규모의 개발 팀이 참고할 만한 모범 사례입니다. Rust의 메모리 안전성은 보안 취약점의 상당수를 근본적으로 차단하는 강력한 도구가 될 수 있음을 왓츠앱의 성공이 보여주고 있습니다.