구글, 크롬 C++ 메모리 안전성 대폭 개선

UAF 취약점 막기 위해 힙스캔 및 메모리 태깅 익스텐션 도입

컴퓨팅입력 :2022/05/30 08:56

구글이 증가하는 사이버공격에 대응해 C++의 취약점을 막기 위한 방법을 소개했다.

미국 지디넷에 따르면 최근 구글 크롬 보안팀이 C++의 메모리 안정성을 개선하는 기술을 공식 블로그를 통해 소개했다.

크롬 보안팀은 C++에서 가장 취약성이 큰 부분으로 UAF와 메모리의 재사용을 지목하고, 이를 막기 위해 힙 스캔이라는 방법을 고안했다.

(댕글링 포인터 재사용을 방지하는 힙스캔(이미지=구글 크롬 보안팀)

보안팀 엔지니어에 따르면 소프트웨어 보안결함의 70%는 버퍼 오버플로 및 UAF(use-after free) 등 메모리 관련 취약점 때문에 발생한다. 특히 UAF는 브라우저에 심각한 영향을 미치는 문제의 대부분을 차지한다. 24일 보안팀이 발표한 크롬 브라우저 보안 수정사항 9개 중 7개가 UAF였다.

UAF는 동적할당한 힙 영역의 메모리에 할당된 객체가 해제된 후에도 포인터는 같은 위치를 가리키고 있어 발생한다. 이런 포인터를 댕글링 포인터라고 한다.

해당 포인터를 통해 메모리가 재사용 될 경우 프로그램이 충돌하거나 해커가 침입할 수 있는 경로가 만들어질 우려가 있다.

UAF를 막기 위해 고안한 힙스캔은 메모리를 참조하는 댕글링 포인터가 더 이상 없다는 것이 입증될 때까지 메모리 할당자를 가로채 오류를 방지하는 메모리 격리 기술이다.

보안팀에 따르면 힙 스캔은 특정 시점에 트리거로 작동해 가비지 수집기처럼 전체 힙 영역을 스캔 후 격리된 메모리 블록에 대한 참조를 찾는다. 이후 일반 응용 프로그램 메모리에서 들어오는 참조가 없는 블록은 재사용할 수 있도록 할당자로 다시 전송된다.

힙 스캔은 힙 영역 탐색을 위해 스타(*)스캔이라는 일련의 알고리즘을 사용한다. 이 과정에서 8~12%의 메모리 소비가 늘어나는 것으로 나타났다.

보안팀은 계산 속도를 높이기 위해 포인터 필터링을 위한 도우미 테이블을 사용하고, 가져오기 및 잠금 접두어 명령의 수를 최소화하는 등 마이크로 최적화를 적용했다. 이를 통해 메모리 소비 증가를 2%까지 감소시켰다.

하드웨어도 보안 강화를 위해 메모리 태깅 엑스텐션(MTE)을 지원하는 버전으로 변경했다. MTE는 메모리 안전과 관련된 취약점을 탐지하기 위해 구글과 ARM이 공동 개발한 하드웨어 기능이다. ARM v8.5A부터 적용됐다.

구글 보안 팀은 “C++만을 사용하면 높은 퍼포먼스의 응용 프로그램을 작성할 수 있지만 보안과 같은 대가가 따른다”며 “임시라도 C++의 메모리 안전을 높이기 위해 메모리 태깅 하드웨어 위에 스타스캔을 사용할 것을 제안한다”고 말했다.

관련기사

최근에는 구글을 비롯해 마이크로소프트, 아마존웹서비스(AWS) 등 빅테크는 보안 강화를 위해 인프라 및 시스템 프로그래밍 분야에서 C, C++를 러스트로 전환하는 추세다.

하지만 크롬 같은 대규모 코드베이스는 러스트로 단기간에 전환하는 것은 불가능해 해당 방안을 우선 적용하고 있다고 구글 크롬 보안팀은 밝혔다.