Dalam beberapa situasi, aplikasi Anda mungkin mengharuskan Anda membuat sistem operasi sendiri atau mengompilasi kernel kustom. Jika Anda mengompilasi kernel kustom atau membuat sistem operasi kustom untuk VM, pastikan sistem operasi tersebut memenuhi persyaratan dalam dokumen ini.
Membuat sistem operasi kustom adalah tugas lanjutan bagi pengguna dengan aplikasi yang secara khusus memerlukan kernel kustom. Sebagian besar pengguna dapat membuat VM dari salah satu image publik yang tersedia, menggunakan alat impor disk virtual otomatis untuk mengimpor disk ke Compute Engine dari lingkungan lain, atau mengimpor image kustom secara manual dari sistem dengan distribusi Linux standar umum.
Persyaratan dukungan hardware
Kernel Anda harus mendukung perangkat berikut:
- PCI Bridge: Intel Corporation 82371AB/EB/MB PIIX4 ACPI (rev 03)
- Jembatan ISA: Intel 82371AB/EB/MB PIIX4 ISA (rev 03)
Pengontrol Ethernet:
- Adaptor Ethernet Virtio-Net.
gVNIC diperlukan untuk seri mesin Tau T2A generasi kedua, dan semua seri mesin generasi ketiga dan yang lebih baru.
Selain itu, gVNIC diperlukan atau direkomendasikan jika Anda menggunakan GPU di salah satu dari berikut ini:
vendor = 0x1AF4 (Qumranet/Red Hat)
ID perangkat = 0x1000. ID Subsistem 0x1
Checksum offload didukung
TSO v4 didukung
GRO v4 didukung
Pengontrol Penyimpanan SCSI:
- Pengontrol Penyimpanan Virtio-SCSI
- vendor = 0x1AF4 (Qumranet/Red Hat)
- device id = 0x1004. ID Subsistem 0x8.
- SCSI Primary Commands 4 dan SCSI Block Commands 3 didukung
- Hanya satu antrean permintaan yang didukung
- Persistent disk melaporkan sektor fisik 4 KiB / sektor logis 512 byte
- Hanya perangkat blok (disk) yang didukung
- Bit fitur Hotplug / Events didukung
- Port Serial:
- Empat port 16550A
- ttyS0 di IRQ 4
- ttyS1 di IRQ 3
- ttyS2 di IRQ 6
- ttyS3 di IRQ 7
Opsi build kernel Linux yang diperlukan
Anda harus membuat kernel sistem operasi dengan opsi berikut:
CONFIG_KVM_GUEST=y
- Aktifkan fungsi paravirtualisasi.
CONFIG_KVM_CLOCK=y
- Aktifkan clock paravirtual (jika berlaku untuk versi kernel Anda).
CONFIG_VIRTIO_PCI=y
- Aktifkan perangkat PCI yang diparavirtualisasi.
CONFIG_SCSI_VIRTIO=y
- Aktifkan akses ke disk paravirtual.
CONFIG_VIRTIO_NET=y
- Aktifkan akses ke jaringan.
CONFIG_PCI_MSI=y
- Aktifkan pengiriman interupsi berperforma tinggi, yang diperlukan untuk perangkat SSD lokal.
Opsi build kernel untuk keamanan
Gunakan setelan keamanan yang direkomendasikan dalam opsi build kernel Anda:
CONFIG_STRICT_DEVMEM=y
- Batasi
/dev/mem
untuk mengizinkan akses hanya ke ruang PCI, kode BIOS, dan wilayah data.
- Batasi
CONFIG_DEVKMEM=n
- Nonaktifkan dukungan untuk
/dev/kmem
. - Memblokir akses ke memori kernel.
- Nonaktifkan dukungan untuk
CONFIG_DEFAULT_MMAP_MIN_ADDR=65536
- Menetapkan memori virtual rendah yang dilindungi dari alokasi ruang pengguna.
CONFIG_DEBUG_RODATA=y
- Tandai data hanya baca kernel sebagai dilindungi dari penulisan dalam tabel halaman,
untuk menangkap penulisan yang tidak disengaja (dan salah) ke data
const
tersebut. Opsi ini dapat sedikit memengaruhi performa karena sebagian kode kernel tidak akan lagi tercakup oleh TLB 2 MB.
- Tandai data hanya baca kernel sebagai dilindungi dari penulisan dalam tabel halaman,
untuk menangkap penulisan yang tidak disengaja (dan salah) ke data
CONFIG_DEBUG_SET_MODULE_RONX=y
- Mendeteksi modifikasi yang tidak diinginkan pada teks modul kernel yang dapat dimuat dan data hanya baca. Opsi ini juga mencegah eksekusi data modul.
CONFIG_CC_STACKPROTECTOR=y
- Mengaktifkan fitur GCC
-fstack-protector
. Fitur ini menempatkan nilai canary di awal fungsi penting, pada stack sebelum alamat kembali, dan memvalidasi nilai sebelum benar-benar dikembalikan. Hal ini juga menyebabkan buffer overflow berbasis stack (yang perlu mengganti alamat kembali ini) mengganti canary, yang akan terdeteksi dan serangan kemudian dinetralkan menggunakan kernel panic.
- Mengaktifkan fitur GCC
CONFIG_COMPAT_VDSO=n
- Memastikan VDSO tidak berada di alamat yang dapat diprediksi untuk memperkuat ASLR. Jika diaktifkan, fitur ini memetakan VDSO ke alamat gaya lama yang dapat diprediksi, sehingga menyediakan lokasi yang dapat diprediksi untuk kode eksploitasi agar dapat melompat ke sana.
Ucapkan
N
di sini jika Anda menjalankan versiglibc
yang cukup baru (2.3.3 atau yang lebih baru), untuk menghapus pemetaan VDSO yang dipetakan tinggi dan menggunakan VDSO acak secara eksklusif.
- Memastikan VDSO tidak berada di alamat yang dapat diprediksi untuk memperkuat ASLR. Jika diaktifkan, fitur ini memetakan VDSO ke alamat gaya lama yang dapat diprediksi, sehingga menyediakan lokasi yang dapat diprediksi untuk kode eksploitasi agar dapat melompat ke sana.
Ucapkan
CONFIG_COMPAT_BRK=n
- Jangan menonaktifkan pengacakan heap.
CONFIG_X86_PAE=y
- Tetapkan opsi ini untuk kernel 32-bit karena PAE diperlukan untuk dukungan NX. Hal ini juga memungkinkan dukungan swapspace yang lebih besar untuk tujuan non-overcommit.
CONFIG_SYN_COOKIES=y
- Memberikan perlindungan terhadap serangan SYN flooding.
CONFIG_SECURITY_YAMA=y
- Opsi ini memilih Yama, yang memperluas dukungan DAC dengan setelan keamanan tambahan di seluruh sistem di luar kontrol akses diskresi Linux biasa. Saat ini, setelannya adalah pembatasan cakupan ptrace.
CONFIG_SECURITY_YAMA_STACKED=y
- Opsi ini memaksa Yama untuk ditumpuk dengan LSM utama yang dipilih saat Yama tersedia.
Setelan keamanan kernel
Anda juga dapat memperkuat keamanan kernel melalui file setelan kernel. Edit file /etc/sysctl.conf
untuk menyertakan setelan keamanan
yang direkomendasikan berikut:
# Enable syn flood protection
net.ipv4.tcp_syncookies = 1
# Ignore source-routed packets
net.ipv4.conf.all.accept_source_route = 0
# Ignore source-routed packets
net.ipv4.conf.default.accept_source_route = 0
# Ignore ICMP redirects
net.ipv4.conf.all.accept_redirects = 0
# Ignore ICMP redirects
net.ipv4.conf.default.accept_redirects = 0
# Ignore ICMP redirects from non-GW hosts
net.ipv4.conf.all.secure_redirects = 1
# Ignore ICMP redirects from non-GW hosts
net.ipv4.conf.default.secure_redirects = 1
# Don't allow traffic between networks or act as a router
net.ipv4.ip_forward = 0
# Don't allow traffic between networks or act as a router
net.ipv4.conf.all.send_redirects = 0
# Don't allow traffic between networks or act as a router
net.ipv4.conf.default.send_redirects = 0
# Reverse path filtering—IP spoofing protection
net.ipv4.conf.all.rp_filter = 1
# Reverse path filtering—IP spoofing protection
net.ipv4.conf.default.rp_filter = 1
# Ignore ICMP broadcasts to avoid participating in Smurf attacks
net.ipv4.icmp_echo_ignore_broadcasts = 1
# Ignore bad ICMP errors
net.ipv4.icmp_ignore_bogus_error_responses = 1
# Log spoofed, source-routed, and redirect packets
net.ipv4.conf.all.log_martians = 1
# Log spoofed, source-routed, and redirect packets
net.ipv4.conf.default.log_martians = 1
# Randomize addresses of mmap base, heap, stack and VDSO page
kernel.randomize_va_space = 2
# Provide protection from ToCToU races
fs.protected_hardlinks=1
# Provide protection from ToCToU races
fs.protected_symlinks=1
# Make locating kernel addresses more difficult
kernel.kptr_restrict=1
# Set ptrace protections
kernel.yama.ptrace_scope=1
# Set perf only available to root
kernel.perf_event_paranoid=2
Langkah berikutnya
- Instal sistem operasi ke boot disk dan impor image secara manual ke Compute Engine sebagai image kustom.
- Jika Anda telah mengimpor sistem operasi sebagai image kustom, konfigurasi setelan non-kernel pada image agar dapat berfungsi secara optimal dalam lingkungan Compute Engine.