Firecracker vCPU 장악 VM 탈출 공개

2분 FirecrackerVM 탈출KVM보안
최근 30일 조회수 — 좋아요 —

핵심 요약

연구진이 호스트 물리 메모리 접근을 이용해 Firecracker vCPU를 장악하고 루트 코드를 실행했다.

Firecracker vCPU 장악 VM 탈출 공개 — 기사 주제를 표현한 AI 생성 개념 삽화
AI 생성 개념 삽화 · 실제 사건을 촬영한 사진이 아닙니다.

Firecracker 마이크로VM 안의 비신뢰 코드를 호스트에서 격리한다는 경계를 넘어, 호스트에서 루트 권한으로 코드를 실행하는 VM 탈출 기법이 공개됐다. PwnEscape 연구진은 앞서 확보한 호스트 물리 메모리 접근 수단을 바탕으로 실행 중인 Firecracker의 가상 CPU(vCPU) 스레드를 찾아 장악했다. 이번 공격은 CVE-2026-99999의 연쇄 공격 과정을 Firecracker 환경에서 입증한 후속 연구다.1

Firecracker는 마이크로VM마다 호스트 프로세스를 두고, 각 vCPU를 그 프로세스의 별도 스레드에서 실행한다. vCPU 스레드는 다음 시스템 호출로 커널 가상 머신(KVM)에 들어가 게스트 코드를 수행한다.

ioctl(vcpu_fd, KVM_RUN, 0);

이 스레드는 이벤트를 사용자 공간에서 처리해야 할 때 KVM을 빠져나와 Firecracker로 돌아온다. 연구진이 노린 지점은 바로 이 복귀 과정이었다. 스레드가 KVM_RUN 안에 있는 동안 호스트 커널은 사용자 공간 레지스터를 pt_regs 구조체에 보관한다. 여기에는 복귀할 코드 주소를 가리키는 명령 포인터와 사용할 스택을 정하는 스택 포인터가 들어 있다. 따라서 이 저장 영역을 찾아 바꾸면, vCPU 스레드가 사용자 공간으로 돌아갈 때 실행할 코드와 스택을 공격자가 정할 수 있다.

문제는 게스트에서 보이는 물리 주소(GPA)와 호스트 물리 주소(HPA)가 서로 다르다는 점이다. 연구진은 먼저 게스트 페이지에 식별 가능한 임의 바이트열인 논스(nonce)를 기록했다. 이어 기존 취약점으로 접근할 수 있는 호스트 물리 메모리 범위에서 확장 페이지 테이블(EPT) 루트 후보를 검색하고, 각 후보로 GPA를 변환해 도달한 페이지에 같은 논스가 있는지 검사했다. 처음에는 후보 두 개가 나왔지만 중첩 페이지 테이블을 검증해 하나로 좁혔고, 이를 통해 게스트 페이지의 HPA를 알아냈다.

그다음 Firecracker가 게스트 메모리를 자체 주소 공간에 매핑한다는 점을 이용해 해당 페이지를 매핑한 호스트 프로세스를 역추적했다. 연구진은 Firecracker 프로세스와 호출할 코드를 찾은 뒤 활성 vCPU 스레드의 저장 레지스터를 수정했다. KVM 복귀 시 원하는 호출을 실행하도록 제어 흐름을 바꾸고, 실행 뒤에는 게스트가 임시 스택 변경을 복원했다. 그 결과 Firecracker는 중단되지 않았고 VM의 SSH 접속도 유지됐다.

공개 자료는 공격이 임의의 Firecracker 인스턴스에 곧바로 적용된다고 주장하지 않는다. 출발점에는 PwnEscape 1부에서 설명한 ‘선택된 호스트 물리 메모리에 게스트가 접근할 수 있는 수단’이 필요하다. 이번 연구의 핵심은 그 선행 조건을 확보한 뒤, 주소 공간 차이와 실행 중인 스레드의 위치를 해결해 메모리 접근을 실제 호스트 루트 코드 실행으로 연결한 데 있다.

Footnotes

  1. Hacker News, 「Firecracker VM Escape: PwnEscape Part 2.」 ↩

읽기 목록은 이 브라우저에 저장됩니다.

출처

  1. Firecracker VM Escape: PwnEscape Part 2. — Hacker News

이 글은 위 출처를 근거로 자동 생성된 뒤 발행됐습니다. 원문을 함께 확인해 주세요. 교차 보도 없이 단독 출처로 작성됐습니다.