
L2 게스트가 VMLOAD/VMSAVE 인터셉트를 우회하고 호스트 물리적 메모리를 읽거나 쓸 수 있게 하는 KVM 중첩 가상화 취약점인 CVE-2021-3656의 데모입니다. 테스트 설정 가이드를 포함합니다.
CVE-2021-3656:
이 문제는 virt_ext VMCB 필드에 대한 검증 누락으로 인해 발생하며, 악의적인 L1 게스트가 L2 게스트에 대한 VMLOAD/VMSAVE 인터셉트와 VLS(Virtual VMLOAD/VMSAVE)를 모두 비활성화할 수 있게 합니다. 이러한 상황에서 L2 게스트는 인터셉트되지 않은 VMLOAD/VMSAVE를 실행할 수 있으며, 따라서 호스트 물리 메모리의 일부를 읽거나 쓸 수 있습니다.
Linux Kernel에 접근하기 위한 환경 설정:
Docker 컨테이너나 가상 머신을 사용할 수 있습니다. 저는 Docker 컨테이너로 최선을 다하겠습니다.
MAC이나 Windows에는 Docker Desktop을 설치해야 합니다. 기본적으로 Linux 머신을 사용 중이라면 이 모든 단계를 무시해도 됩니다.
다음으로 ubuntu - Official Image | Docker Hub에서 ubuntu 이미지를 pull 받습니다.
a. Windows의 경우 PowerShell 또는 CMD에서 “docker pull ubuntu”를 입력하면 됩니다.
b. MAC도 동일합니다. i. 참고: 이렇게 하면 최신 버전의 ubuntu를 pull 받게 됩니다. 더 오래된 커널 버전을 사용하려면 이전 버전을 pull 받는 것이 좋습니다. ii. Dockerfile이 들어 있는 디렉터리를 만듭니다. 파일에는 최소한 “From ubuntu:16.04”가 있어야 합니다. iii. 이전 버전을 받으려면 예를 들어 “docker build -t ubuntu-xenial”을 입력합니다. iv. 현재 이미지를 확인하려면 “docker image ls”를 입력합니다.
c. iii의 명령을 실행하면 시스템이 컨테이너 ID를 제공합니다. i. “docker container ls”를 입력하여 컨테이너가 사용 가능한지 확인할 수 있습니다.
d. 이 컨테이너에 접근하려면 “docker exec -it ”를 입력하면 됩니다.
e. 이제 컨테이너의 “/” 디렉터리에 있게 됩니다.
f. 이 익스플로잇은 커널 버전 4.13에서 발견되었습니다. 작업 환경이 해당 버전인지 확인해야 합니다. i. 확인하려면 uname -r을 입력합니다.
g. 여기에서 “cd sys/kernel”을 입력하여 커널 디렉터리를 찾습니다.
h. 여기서부터는 커널 4.13으로 다운그레이드할 방법을 찾지 못해 별다른 진전이 없었습니다.
i. 또한 가상 머신을 사용한 다운그레이드도 시도했지만 역시 작동하지 않았습니다.
참고 자료:
● oss-security - [CVE-2021-3653, CVE-2021-3656] KVM의 SVM 중첩 가상화 문제 (openwall.com) ○ 지원되는 중첩 가상화를 위한 KVM의 AMD 코드에서 발견된 두 가지 취약점에 대한 개요입니다.
● 이것이 패치입니다: kvm/kvm.git - kernel-based virtual machine - kvm
● KVM: SVM: Enable Virtual VMLOAD VMSAVE feature · torvalds/linux@89c8a49 (github.com) ○ 이것이 취약한 코드입니다.
● RHSA-2021:3676 - Security Advisory - Red Hat Customer Portal
● CVE-2021-3656- Red Hat Customer Portal ○ Red Hat의 익스플로잇 설명
● 1983988 – (CVE-2021-3656) CVE-2021-3656 kernel: SVM nested virtualization issue in KVM (VMLOAD/VMSAVE) (redhat.com)
● What is KVM? (redhat.com) ○ KVM이 무엇인지에 대한 설명
● Linux 커널 다운그레이드 방법 기사/동영상
○ How to Downgrade the Kernel in Linux - Make Tech Easier ○ How to Downgrade from WSL Version 2 to WSL Version 1 - MSSQL DBA Blog (peter-whyte.com) ○ Linux Series - 2.1.5 Upgrading/Downgrading the Linux Kernel - YouTube
● How to check KVM is installed in Ubuntu Linux - Linux Shout (how2shout.com) ○ 이 익스플로잇에는 KVM이 필요합니다.
● How To Install Linux Kernel 4.13 In Ubuntu And Linux Mint? (fossbytes.com) ○ Linux Kernel 4.13 설치 방법