IT/기타

[가상화] KVM과 Qemu 비교, Fuzzing 환경 조성

kykyky 2024. 7. 16. 18:25

KVM vs. Qemu

 

Type?

Hypervisor는 Type 1과 2로 나뉘며, 

Type 1에는 KVM과 Hyper-V,

Type 2에는 Qemu 등이 있다.

 

Emulator?

 

▶Qemu는 Emulator이기도 함

 

※ Emulation:

호스트 머신에는 없는 하드웨어를 소프트웨어로 구현하고 Binary Translation을 수행함

-> 가상머신 입장에선 마치 그런 물리적 환경에 있다고 느낌

eg. 오락실 게임을 컴퓨터에서 구현할 때, 오락실 게임기의 하드웨어는 소프트웨어로써 구현 (Emulation)됨

 

※ Binary translation:

서로 다른 아키텍처를 가진 가상 머신과 호스트 머신 간의 명령어를 번역 
eg. QEMU는 가상머신에서 생성된 ARM 기반의 명령어를 x86 기반 명령어로 번역

 

▶KVM은 같은 종류의 CPU 아키텍처만 가상화


Binary Translation을 수행하지 않음: 가상머신이 생성한 명령어를 호스트 머신이 직접 처리.

 

Setting up Fuzzing environment for the x86-64 kernel using QEMU

 

1. Kernel Build

source code 컴파일(빌드) -> vmlinux, bzImage 생성됨

 

▶vmlinux

Linux kernel binary: 압축되지 않은 raw 상태의 ELF 형식임

bootloader에 의해 memory에 바로 load됨

-> 디버깅에 활용됨

 

▶bzImage

Linux kernel이 압축된 것 

bootloader에 의해 load됨

-> Qemu 가상머신 실제 booting에 사용됨

 

2. Disk image Create

bullseye.img 생성됨

 

▶bullseye.img

Debian Bullseye 운영체제를 포함하는 disk image 파일 

-> Qemu 가상머신의 kernel이 돌아갈 기반 root filesystem으로 사용됨 

 

아래를 참고했음:

syzkaller/docs/linux/setup_ubuntu-host_qemu-vm_x86-64-kernel.md at master · google/syzkaller (github.com)

 

syzkaller/docs/linux/setup_ubuntu-host_qemu-vm_x86-64-kernel.md at master · google/syzkaller

syzkaller is an unsupervised coverage-guided kernel fuzzer - google/syzkaller

github.com