C++ 수백만 줄에 공간 안전성을 재구성하기
공간적 메모리 안전 취약점은 코드가 의도된 범위를 벗어난 메모리에 접근할 때 발생하며, 이는 주요한 보안 위험이며 공격자들이 시스템과 민감한 데이터를 손상시키기 위해 악용되어 왔다. 구글의 프로젝트 제로에 따르면, 이러한 취약점은 지난 10년 동안 야생에서 발견된 메모리 안전 취약점의 40%를 차지한다. 이를 해결하기 위해 구글은 메모리 안전에 대한 포괄적인 접근 방식을 취하고 있으며, 새로운 코드에 메모리 안전 언어를 사용하고 기존의 C++ 코드베이스에 보안 설계 원칙을 적용하는 것을 포함한다. 주요 전략 중 하나는 공통 데이터 구조에 대한 경계 검사를 구현하는 것으로, C++ 표준 라이브러리(libc++)를 강화하는 것으로 시작한다. 강화된 libc++는 생산 환경에서 취약점을 잡기 위한 보안 검사를 도입한다. 구글은 강화된 libc++를 서버 측 생산 시스템에서 기본값으로 설정하여 서비스 전반에 걸쳐 공간적 메모리 안전성을 개선했다. 이러한 변경의 성능 영향은 놀랍게도 낮았으며, 서비스 전반에 걸쳐 평균 0.30%의 영향이 있었다. 강화된 libc++를 활성화하면 이미 취약점을 방지하고, 충돌을 줄이고, 코드의 올바름을 개선했으며, 1,000개 이상의 버그를 발견하고 분할 오류를 30% 줄였다. 구글은 경계 검사를 다른 라이브러리에 확장하고 코드를 안전한 버퍼로 마이그레이션하는 것을 약속하며, 모든 접근이 경계 검사를 요구하는 것을 포함한다. 회사는 C++를 사용하는 다른 조직에 표준 라이브러리의 강화 모드를 기본값으로 활성화할 것을 권장한다.