GN⁺: 소스에서 메모리 안전 취약점 제거
(security.googleblog.com)메모리 안전 취약점의 근원 제거
역설적인 결과
- 메모리 안전하지 않은 언어로 작성된 코드베이스가 증가할 때, 새로운 기능을 메모리 안전한 언어로 전환하면 메모리 안전 취약점이 크게 감소함
- 이는 취약점이 시간이 지남에 따라 지수적으로 감소하기 때문임
수학적 설명
- 취약점의 수명은 지수 분포를 따름
- 새로운 코드에서 취약점이 주로 발생하며, 시간이 지남에 따라 코드가 안전해짐
- 5년 된 코드의 취약점 밀도는 새로운 코드보다 3.4배에서 7.4배 낮음
안드로이드에서의 실제 사례
- 2019년부터 안드로이드 팀은 새로운 개발을 메모리 안전한 언어로 전환하기 시작함
- 2024년 현재, 메모리 안전 취약점이 76%에서 24%로 감소함
- 메모리 안전 취약점이 감소하면서 전체 보안 위험도 감소함
메모리 안전 전략의 진화
- 1세대: 반응적 패치 - 취약점을 발견하고 수정하는 방식
- 2세대: 사전적 완화 - 취약점의 악용을 어렵게 만드는 방식
- 3세대: 사전적 취약점 발견 - 취약점을 미리 찾아내는 방식
- 4세대: 고신뢰 예방 - 메모리 안전한 언어로 전환하여 취약점 발생 자체를 예방하는 방식
고신뢰 예방의 장점
- 방어자와 공격자 간의 끝없는 경쟁을 끊음
- 메모리 안전 언어를 통해 보안성을 높이고 비용을 줄임
- 코드의 정확성과 개발자의 생산성을 높임
교훈에서 실천으로
- 기존 메모리 안전하지 않은 코드를 모두 버리거나 다시 작성할 필요 없음
- 상호 운용성을 개선하여 메모리 안전한 언어로의 전환을 가속화함
- Rust와 C++, Rust와 Kotlin 간의 상호 운용성을 개선하는 도구 개발
이전 세대의 역할
- 사전적 완화와 탐지의 선택적 사용
- 메모리 안전 코드로 전환하면서 완화와 탐지의 필요성이 줄어듦
결론
- 새로운 코드에서 메모리 안전한 언어를 사용하면 취약점이 지수적으로 감소함
- 안드로이드에서의 6년 이상의 일관된 결과로 이 접근 방식의 효과가 입증됨
GN⁺의 정리
- 메모리 안전 취약점을 줄이기 위해 메모리 안전한 언어로 전환하는 것이 중요함
- 안드로이드 팀의 사례에서 메모리 안전 취약점이 크게 감소한 것을 확인할 수 있음
- 기존 코드의 완전한 재작성 대신 상호 운용성을 개선하는 것이 실용적임
- Rust와 같은 메모리 안전 언어를 사용하는 것이 보안성과 생산성을 동시에 높일 수 있음
Hacker News 의견
- 새로운 개발을 메모리 안전 언어로 전환하는 것이 의미 있는 개선을 가져올 수 있음
- 모든 것을 포팅하는 것보다 훨씬 쉽고 저렴함
- 기사에 있는 차트가 명확하고 간결함
- 신중한 데이터 선택과 라벨링이 의도한 아이디어를 쉽게 전달할 수 있음
- 취약점이 지수적으로 감소함
- 새로운 코드에 집중하는 것이 중요함
- 무차별적인 RiiR 프로젝트는 자원의 낭비임
- Rust 전문가들이 추천하는 전략이 메모리 취약점을 최소화하는 데 가장 효과적임
- Android 팀은 Rust 변경의 롤백 비율이 C++의 절반 이하임을 관찰함
- 새로운 코드와 메모리 취약점 사이에 상관관계가 있음
- 새로운 기능과 관련된 코드가 취약점에 더 집중됨
- 오래된 코드는 실제 사용을 통해 엣지 케이스가 발견됨
- 새로운 코드가 메모리 취약점을 유발한다고 단정짓기 어려움
- Heartbleed 버그와 같은 고충격 취약점이 있음
- 취약점은 지수적으로 감소함
- 새로운 기능 추가를 중단하는 것이 보안에 더 좋을 수 있음
- Windows LTSC가 가장 안전한 버전일 가능성이 있음
- 안전한 코딩은 코드의 정확성과 개발자의 생산성을 향상시킴
- 버그 발견을 코드 체크인 전에 이동시킴
- Android 팀은 Rust 변경의 롤백 비율이 C++의 절반 이하임을 관찰함
- Rust를 발견한 후 프로그래밍에 대한 열정을 되찾음
- 메모리 안전 언어(MSL)로 Rust만 언급됨
- Kotlin도 언급되었지만 Rust만큼 메모리 안전 기능이 강력하지 않음
- 취약점 수명이 지수적으로 분포됨
- 새로운 코드에서 메모리 안전성을 확보하는 것이 매우 가치 있음
- 대규모 레거시 코드베이스에서도 유용함
- 오래된 코드가 충분히 검토되지 않을 수 있음
- 최근 커밋 로그를 더 자주 검토함
- Mac과 Windows의 코드 작성 언어 차이
- Mac은 메모리 안전한 Swift를 사용하고, Windows는 주로 C 또는 C++를 사용함
- 취약점이 희귀해질수록 더 가치가 높아짐
- 남은 취약점은 국가 행위자에 의해 고가치 타겟에 사용될 가능성이 있음
- iOS의 Lockdown Mode와 같은 기능이 필요할 수 있음
- 보안 인식 사용자는 보안 상자를 체크하여 성능 저하와 교환함
- 공격을 감지하고 보안 팀에 분석을 위해 전송함
- 사용자에게 경고를 보내고 공격이 감지되었음을 알림
- 사용자 활동을 수동적으로 모니터링하는 대신 공격이 감지되면 사용자에게 알림