Kernel Hardening
Pendahuluan
Kernel Linux adalah inti sistem operasi - mengelola memori, proses, perangkat keras, dan akses sistem. Jika kernel berhasil dikompromikan, seluruh sistem berada dalam kendali penyerang. Oleh karena itu, hardening kernel adalah lapisan pertahanan paling fundamental dalam arsitektur keamanan sistem Linux.
Sysctl Parameters
Sysctl memungkinkan konfigurasi parameter kernel secara
runtime melalui file /etc/sysctl.conf atau
file .conf di /etc/sysctl.d/. Berikut
parameter-parameter keamanan kritis:
Network Hardening
# SYN Flood Protection - mengaktifkan SYN cookies untuk mitigasi serangan DDoS
net.ipv4.tcp_syncookies = 1
# Nonaktifkan IP Forwarding (kecuali server adalah router)
net.ipv4.ip_forward = 0
net.ipv6.conf.all.forwarding = 0
# Nonaktifkan source routing - serangan IP spoofing
net.ipv4.conf.all.accept_source_route = 0
net.ipv6.conf.all.accept_source_route = 0
# Proteksi ICMP redirect - cegah man-in-the-middle
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.secure_redirects = 0
# Nonaktifkan packet redirect sending
net.ipv4.conf.all.send_redirects = 0
# Proteksi martian packets (paket dengan source address yang tidak valid)
net.ipv4.conf.all.rp_filter = 1
# Nonaktifkan IPv6 jika tidak diperlukan
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
Memory dan Execution Hardening
# ASLR (Address Space Layout Randomization) - acak base address memori
# 0 = nonaktif, 1 = randomize stack/shared lib, 2 = full randomize
kernel.randomize_va_space = 2
# Batasi akses ke /proc/kallsyms - hanya root bisa melihat alamat kernel
kernel.kptr_restrict = 2
# Batasi akses ke kernel log (dmesg) - hanya root
kernel.dmesg_restrict = 1
# Batasi akses ke /proc/kcore - representasi memori fisik kernel
kernel.kcore_restrict = 1
# Nonaktifkan BPF JIT untuk mencegah exploit JIT spraying
net.core.bpf_jit_enable = 0
# Batasi *user namespace* - sering digunakan untuk *container escape*
user.max_user_namespaces = 0
Filesystem dan Module Hardening
# Nonaktifkan *pivot_root* jika tidak menggunakan container
kernel.pivot_root_disabled = 1
# Batasi akses ke perf events hanya untuk proses kapabel
kernel.perf_event_paranoid = 3
# Nonaktifkan *kernel module loading* jika tidak dibutuhkan
kernel.modules_disabled = 1
Catatan: Parameter
kernel.modules_disabled = 1bersifat permanen setelah diset - hanya dapat diubah dengan reboot. Pastikan semua modul yang diperlukan sudah di-load sebelum mengaktifkannya.
Load parameter sysctl:
sudo sysctl -p /etc/sysctl.conf # Load dari file default
sudo sysctl -w <parameter>=<value> # Set langsung (sementara)
KASLR, SMEP, dan SMAP
KASLR (Kernel Address Space Layout Randomization)
KASLR mengacak alamat base kernel pada setiap boot. Ini mempersulit penyerang yang membutuhkan alamat kernel eksplisit untuk mengeksekusi code berbahaya. KASLR diaktifkan secara default pada kernel modern - periksa dengan:
# Jika /proc/sys/kernel/kptr_restrict bernilai 1, alamat tidak akan muncul
sudo cat /proc/cmdline | grep nokaslr
Jika
nokaslrmuncul di cmdline, KASLR sengaja dinonaktifkan - biasanya untuk debugging atau kernel crash dump analysis.
SMEP (Supervisor Mode Execution Prevention)
SMEP mencegah kernel mengeksekusi kode yang berada di
userspace. Ini memblokir serangan di mana penyerang
menyuntikkan shellcode di memori user lalu memicu kernel
untuk menjalankannya. SMEP aktif jika bit smep muncul
di /proc/cpuinfo pada baris flags.
SMAP (Supervisor Mode Access Prevention)
SMAP melarang kernel mengakses data userspace secara tidak
sah. Ini merupakan penyempurnaan dari SMEP - tidak hanya eksekusi,
tetapi juga akses baca/tulis dicegah. SMAP aktif jika
smap muncul di cpu flags.
Pengecekan:
grep -o -E 'smep|smap' /proc/cpuinfo | sort -u
SELinux dan AppArmor
SELinux (Security-Enhanced Linux)
SELinux menyediakan Mandatory Access Control (MAC) di mana setiap proses dan objek sistem memiliki label keamanan yang ditentukan oleh kebijakan terpusat.
# Mode SELinux
getenforce # Enforcing, Permissive, atau Disabled
sudo setenforce 1 # Set ke Enforcing (1) atau Permissive (0)
# Cek boolean
getsebool -a | grep -i ssh
# Edit konfigurasi permanen di /etc/selinux/config
# SELINUX=enforcing
AppArmor
Alternatif MAC yang lebih sederhana - menggunakan path-based daripada label-based. Umum di Ubuntu dan Debian.
sudo aa-status # Status profile AppArmor
sudo aa-enforce /path/to/bin # Set profile ke enforce
sudo aa-complain /path/to/bin # Mode complain (log only)
Rekomendasi: Pilih salah satu (SELinux atau AppArmor) - jangan keduanya. Set ke enforcing untuk lingkungan produksi.
Module Signing dan Lockdown Mode
Module Signing
Kernel modern mendukung signing modul kernel - hanya modul yang ditandatangani dengan kunci tepercaya yang dapat dimuat. Ini mencegah penyerang memuat rootkit sebagai modul kernel.
# Periksa apakah module signing diaktifkan
cat /proc/sys/kernel/module_locking # 1 = enable
# Lihat kunci yang digunakan untuk signing
cat /proc/keys | grep '\.kernel'
Lockdown Mode
Sejak Linux 5.4, lockdown mode membatasi akses ke kernel bahkan oleh root untuk mencegah user - meskipun privileged - mengubah kode atau data kernel secara runtime.
# Cek status lockdown
cat /sys/kernel/security/lockdown
# Output: none, integrity, atau confidentiality
- integrity - Mencegah modifikasi kernel (keystore, kexec, hibernasi, BPF JIT, dll.)
- confidentiality - Semua proteksi integrity + melarang pembacaan memori kernel (kcore, dmesg, kallsyms)
Kernel Config Hardening
Saat membangun kernel dari sumber, opsi konfigurasi berikut harus diaktifkan:
| Opsi | Fungsi |
|---|---|
CONFIG_STACKPROTECTOR_STRONG |
Proteksi stack buffer overflow |
CONFIG_SLAB_FREELIST_RANDOM |
Acak alokasi slab allocator |
CONFIG_FORTIFY_SOURCE |
Compile-time dan runtime deteksi buffer overflow |
CONFIG_DEBUG_WX |
Cegah alamat memori Writable+Executable |
CONFIG_SECURITY_YAMA |
Proteksi ptrace scope - cegah process injection |
CONFIG_IOMMU_SUPPORT |
IOMMU untuk proteksi DMA |
CONFIG_SYN_COOKIES |
SYN flood protection |
Untuk distribusi siap pakai, verifikasi dengan:
zcat /proc/config.gz | grep -E 'CONFIG_STACKPROTECTOR|CONFIG_FORTIFY|CONFIG_DEBUG_WX'
Ringkasan
Kernel hardening adalah pertahanan berlapis yang dimulai dari konfigurasi sysctl dasar, fitur CPU seperti SMEP/SMAP, MAC (SELinux/AppArmor), hingga lockdown mode dan module signing. Tidak ada satu lapisan pun yang menjadi silver bullet - kombinasi dari seluruh teknik di atas diperlukan untuk melindungi kernel dari berbagai vektor serangan modern.