핵심 요약
- 보안 연구진이 웹 브라우저, 언어 런타임, OS 커널의 JIT 엔진을 겨냥한 신종 스펙터-v2 공격 기법 'BTR(Branch Target Reuse)'을 발표했습니다.
- CPU가 코드 재생성 후에도 이전 간접 분기 예측(BTB) 항목을 완전히 비우지 않는 허점을 이용해 보안 완화책을 우회하고 메모리를 탈취합니다.
- 연구진은 리눅스 cBPF 환경에서 root 비밀번호 해시를 탈취하는 실증에 성공했으며, 파이어폭스와 GraalVM 역시 취약함을 확인했습니다.
요약 보안 연구팀 VUSec이 최신 CPU의 분기 예측 메커니즘과 JIT(Just-In-Time) 컴파일러의 구조적 허점을 결합한 신종 스펙터-v2(Spectre-v2) 공격 기법인 'BTR(Branch Target Reuse)'을 공개했습니다. 이번 공격은 웹 브라우저와 프로그래밍 언어 런타임, 그리고 운영체제 커널 전반에 걸쳐 광범위하게 쓰이는 JIT 엔진을 직접적인 공격 표적으로 삼습니다.
핵심 원리는 최신 CPU가 자체 수정 코드(Self-modifying code)를 처리할 때 아키텍처 수준의 코드 일관성은 복구하지만, 내부 간접 분기 예측 버퍼(BTB)에 남아 있는 오래된(stale) 예측 항목을 제대로 무효화하지 않는다는 점입니다. JIT 엔진이 메모리 내 코드를 해제하고 새로운 코드를 할당할 때 이전 코드의 분기 타깃이 BTB에 잔존하게 되며, 공격자는 이를 이용해 새로 생성된 코드의 엉뚱한 오프셋으로 추측 실행(speculative execution)을 유도하는 '추측 실행 후 사용(speculative execute-after-free)' 취약점을 유발할 수 있습니다.
연구진은 리눅스 커널의 cBPF(classic BPF) 환경을 대상으로 현대 인텔 CPU의 모든 완화책을 우회하는 엔드투엔드 익스플로잇을 구현했습니다. seccomp 필터로 두 개의 cBPF 프로그램을 교체 설치하며 BTB를 훈련시킨 뒤, 커널 태스크 리스트와 페이지 테이블을 역추적해 'su root' 명령어로 메모리에 적재된 root 비밀번호 해시를 초당 8바이트 속도로 정확히 유출해 냈습니다. 커널의 상수 블라인딩(`bpf_jit_harden`) 방어 기법까지 점프 오프셋 인코딩을 통해 뚫어냈습니다.
이 외에도 파이어폭스 브라우저의 자바스크립트 엔진인 스파이더몽키(SpiderMonkey)와 오라클의 다중 언어 런타임 GraalVM을 분석한 결과, 동일한 기법으로 샌드박스 메모리 마스킹을 건너뛰거나 웹어셈블리 리터럴 풀을 통해 임의 코드를 추측 실행할 수 있음이 확인되었습니다. 연구진은 완벽한 대응을 위해선 JIT 코드 캐시 재생성 시 하드웨어 분기 예측기를 확실하게 플러시하거나 관련 소프트웨어 격리를 강화해야 한다고 지적했습니다.
Sponsored · 광고