TDCTF Academy Logo TDCTF ACADEMY

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 = 1 bersifat 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 nokaslr muncul 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.

PADA HALAMAN INI