Let's Encrypt의 메모리 안전성 강화: ntpd-rs 배포
(letsencrypt.org)- Let's Encrypt는 운영 체제와 네트워크 인프라의 많은 부분이 C와 C++ 같은 안전하지 않은 언어로 작성된 것에 대해 우려 해왔음
- CA 소프트웨어는 메모리 안전한 Golang으로 작성되었지만, OS/네트워크 부분은 메모리 안전성이 부족하여 패치가 필요한 취약점이 일상적으로 발생
- 2020년에 Prossimo 프로젝트를 시작하여 중요한 소프트웨어 인프라를 메모리 안전하게 만드는 것을 목표로 함
Prossimo 프로젝트의 주요 성과
- Rustls TLS 라이브러리, Hickory DNS, River 리버스 프록시, sudo-rs, Linux 커널의 Rust 지원, ntpd-rs 등 다양한 소프트웨어 구성 요소에 투자함
- 최근 Let's Encrypt 인프라에 Prossimo의 첫 번째 메모리 안전 소프트웨어인 ntpd-rs를 배포함
ntpd-rs의 중요성
- 대부분의 운영 체제는 정확한 시간을 결정하기 위해 네트워크 시간 프로토콜(NTP)을 사용함
- 시간 트래킹은 OS의 중요한 작업이며, 인터넷과 상호작용하게 되므로 NTP 구현의 보안은 중요함
- 2022년 4월 Prossimo는 메모리 안전하고 더 안전한 NTP 구현인 ntpd-rs 작업을 시작
- 2024년 4월 ntpd-rs가 Let's Encrypt의 스테이징 환경에 배포되었고, 현재는 프로덕션 환경에서 사용 중
향후 계획
- 향후 몇 년 동안 Let's Encrypt 인프라에서 C 또는 C++ 소프트웨어를 메모리 안전한 대안으로 교체할 계획
- OpenSSL과 그 파생 제품을 Rustls로 교체.
- DNS 소프트웨어를 Hickory로 교체.
- Nginx를 River로 교체.
- sudo를 sudo-rs로 교체.
GN⁺의 의견
- 메모리 안전성의 중요성: 메모리 안전한 언어로 작성된 소프트웨어는 보안 취약점을 줄이는 데 큰 도움이 됨.
- Rust의 장점: Rust는 메모리 안전성을 보장하면서도 높은 성능을 제공하여 많은 보안 민감 소프트웨어에 적합함.
- 커뮤니티의 역할: 오픈 소스 프로젝트는 커뮤니티의 기여가 중요하며, Let's Encrypt의 경우도 예외가 아님.
- 기술 도입 시 고려사항: 새로운 기술을 도입할 때는 기존 시스템과의 호환성, 학습 곡선 등을 고려해야 함.
- 보안 강화의 필요성: 인터넷 인프라의 보안을 강화하는 것은 전체 인터넷 생태계의 안전성을 높이는 데 기여함.
댓글과 토론
Hacker News 의견
- NTPD를 Rust로 구현하는 아이디어: NTPD를 Rust로 구현하는 아이디어에 관심이 있음. 성능에 대한 자료를 찾고 있으며, 특히 네트워크 문제 상황에서 시간 동기화 성능에 관심이 있음. Chrony와의 비교도 보고 싶음.
- NTP 문제의 복잡성: NTP는 아직 완전히 해결된 문제가 아니며, 메모리 안전성보다 성능이 더 중요함. Chrony가 시스템 기본 제공 NTP보다 훨씬 나아서 사용 중임.
- Rust 애호가의 의견: Rust 애호가로서, ntpd-rs가 Chrony의 성능에 근접해야 고려할 가치가 있음.
- 메모리 안전성 논의: 메모리 안전성을 강조하는 것이 이상하게 느껴짐. NTPD는 공격 벡터가 적고, 메모리 문제 없이 잘 작동 중임. 더 중요한 컴포넌트를 메모리 안전한 언어로 재작성하는 것이 필요함.
- JSON 의존성 질문: 왜 NTPD에 JSON 의존성이 있는지 궁금함.
- BGP 재작성 제안: 다음으로 BGP를 메모리 안전한 언어로 재작성하는 것이 좋겠음.
- NTPsec 사용 여부: NTPsec을 실제로 사용하는 사람이 있는지 궁금함.
- NTP 서버 문제: NTP의 문제는 클라이언트가 아니라 위조된 UDP 패킷을 처리해야 하는 서버에 있음. NTPD가 TCP 전용이 될 가능성에 대해 회의적임. 10년 전부터 공용 stratum 3 서버 운영을 중단함.