![]()
Rust에는 느린 가비지 수집기가 없습니다. 대신 컴파일 타임에 메모리 안전을 보장하는 빌림 검사기(Brow Checker)라는 메커니즘을 사용합니다. 이 엄격한 규칙 세트는 메모리 확보를 “잊는” 일이 없도록 보장합니다. 즉, 메모리 규칙을 위반하면 코드가 컴파일되지 않습니다. 이것이 Rust를 메모리에 안전한 언어로 만드는 이유입니다.
그러나 Google조차도 모뎀 펌웨어 작성 방식을 바꿀 수는 없습니다. 우리는 수십 메가바이트의 실행 가능한 기계어 코드에 대해 이야기하고 있는데, 이는 엄청난 양입니다. 수십 년간의 작업을 업데이트하는 것은 엄청난 작업일 뿐만 아니라 관련 회사 중 상당수는 모뎀의 내부 작동을 영업 비밀로 간주합니다.
제로데이 공격으로부터 Pixel 모뎀을 보호하기 위해 Google은 DNS 파서에 중점을 두었습니다. 셀룰러 기능이 데이터 네트워크로 마이그레이션됨에 따라 DNS는 전화 작동 방식의 핵심 부분이 되었습니다. Google은 DNS가 신뢰할 수 없는 데이터의 구문 분석을 요구하며 이것이 주요 보안 문제가 된다고 설명하지만 Rust를 사용하면 이 문제를 해결할 수 있습니다.
구글이 선택한 히코리 프로토 특별히 최적화되지는 않았지만 광범위한 채택과 지원을 제공하는 오픈 소스 Rust DNS 라이브러리입니다. Pixel 휴대폰의 모뎀은 메모리가 제한된 환경이 아니기 때문에 팀은 Rust 구성 요소를 추가하여 기존 코드의 DNS를 더욱 안전하게 만들 수 있었습니다. 팀은 표준 라이브러리 종속성을 제거하여 더 빠른 작업을 위해 기계어 코드로 컴파일한 다음 기존 C/C++ 모뎀 코드에 접목했습니다. 전체적으로 Rust 구성 요소는 371KB를 추가했으며 이는 Pixel 모뎀에서 작동 가능합니다.
이 시스템에서는 메모리를 조작하여 취약점을 유발하려는 모든 시도가 Rust 벽에 부딪히게 되며 악성 DNS 패킷의 영향을 받을 수 없습니다. Pixel 10 휴대전화는 이러한 보다 안전한 모뎀 구현이 적용된 최초의 휴대전화입니다. Google은 이 작업을 통해 다른 플랫폼에서도 비슷한 개선이 이루어질 수 있기를 희망하지만, 선택한 Rust 라이브러리의 크기가 단순한 임베디드 시스템에서는 문제가 될 수 있다고 회사는 지적합니다. 앞으로는 라이브러리를 더욱 모듈화하여 이 문제를 해결하는 것이 가능할 수도 있습니다. Google은 또한 이 작업을 더 많은 메모리 안전 구성 요소를 적시에 셀룰러 베이스밴드에 통합하기 위한 기반으로 보고 있습니다.