Memperkuat NetBSD dari dalam: memahami mekanisme PaX seperti ASLR dan W^X, mengelola flags keamanan per-binary dengan paxctl, serta menerapkan pengaturan sysctl dan best practice keamanan server.

Di episode 14 sebelumnya kita telah mengamankan komunikasi dengan TLS dan sertifikat. Kini kita masuk lebih dalam — ke dalam sistem itu sendiri. Pada episode ini kita akan memperkuat NetBSD dari dalam: security features dan PaX — memahami mekanisme PaX seperti ASLR dan W^X, mengelola flags keamanan per-binary dengan paxctl, serta menerapkan pengaturan sysctl dan best practice keamanan server.
Firewall dan TLS melindungi dari luar; PaX melindungi dari dalam. Jika sebuah program berhasil diretas — misalnya lewat buffer overflow — PaX adalah lapisan terakhir yang membuat serangan itu gagal. NetBSD membawa tradisi ini sejak lama, dan memahaminya adalah bagian penting menjadi administrator NetBSD yang matang.
PaX adalah rangkaian teknik hardening yang membuat eksploitasi jauh lebih sulit. Inti mekanismenya ada dua:
| Mekanisme | Cara Kerja |
|---|---|
| ASLR | Acak alamat memori (stack, heap, library) setiap proses dijalankan — penyerang tidak tahu di mana menaruh/menemukan kode |
| W^X | Halaman memori tidak boleh Writeable dan EXecutable bersamaan — kode injeksi tidak bisa ditulis lalu dieksekusi |
Dengan ASLR, serangan return-to-libc dan ROP menjadi jauh lebih sulit karena alamat selalu berubah. Dengan W^X, halaman yang bisa dieksekusi tidak bisa ditulis — jadi menyuntikkan kode tidak akan berfungsi.
Cek pengaturan PaX global lewat sysctl -a | grep pax:
sysctl -a | grep paxproc.pax.flags = 0x0
paxtype = 0x0
security.pax.aslr.enabled = 1
security.pax.mprotect.enabled = 1Nilai 1 berarti ASLR dan mprotect (bagian dari W^X) aktif secara global. Ini default yang aman di NetBSD modern.
Tidak semua program cocok dengan seluruh proteksi PaX. Kadang sebuah binary — misalnya Java VM atau emulator — butuh pengecualian. NetBSD menyediakan paxctl untuk mengatur flags per-binary.
paxctl /usr/pkg/bin/javaPaX flags on /usr/pkg/bin/java (default = enabled):
X: noexec-protected (enabled)
S: segvguard-protected (enabled)
A: aslr-protected (enabled)
M: mprotect-enabled (enabled)
E: emutramp-enabled (enabled)Setiap huruf mewakili satu proteksi: A untuk ASLR, M untuk mprotect, S untuk segvguard, X untuk noexec, E untuk emutramp.
Jika sebuah binary bermasalah dengan ASLR (misalnya crash acak), matikan proteksi ASLR:
paxctl -A /usr/pkg/bin/problematicpaxctl -v /usr/pkg/bin/problematicPenjelasan opsi singkat:
| Opsi | Efek |
|---|---|
-A | Nonaktifkan ASLR untuk binary ini |
-a | Aktifkan ASLR (nilai default) |
-M | Nonaktifkan mprotect |
-s | Tampilkan status flags |
Warning
Jangan menonaktifkan proteksi PaX tanpa alasan kuat dan pengujian. Proteksi ini adalah pertahanan terakhir jika program dieksploitasi. Sebaiknya cari akar masalahnya — seperti flag build yang salah — daripada melemahkan keamanan.
Berikut pengaturan sysctl yang relevan dengan keamanan:
sysctl securitysecurity.models.extensions.securelevel = 0
security.pax.aslr.enabled = 1
security.pax.mprotect.enabled = 1NetBSD memiliki konsep securelevel — level keamanan yang membatasi operasi saat sistem berjalan. Semakin tinggi level, semakin ketat:
| Level | Pembatasan |
|---|---|
| 0 | Normal (default) |
| 1 | Sekurel: immutable file flags aktif, /dev/mem terbatas |
| 2 | Lebih ketat: /dev/mem baca-saja, raw disk terbatas |
Naikkan level secara permanen lewat rc.conf:
sysctl_security_models_extensions_securelevel=1sysctl -w security.models.extensions.securelevel=1Warning
Securelevel tidak bisa diturunkan tanpa reboot. Mulailah dari level 1 dan uji layanan kalian sebelum naik lebih tinggi — beberapa operasi admin (seperti perubahan flags file penting) akan ditolak pada level tinggi.
sysctl -w net.inet.ip.forwarding=0
sysctl -w net.inet.tcp.rfc1948=1net.inet.ip.forwarding: 0 -> 0
net.inet.tcp.rfc1948: 0 -> 1rfc1948 mengacak initial sequence number — menyulitkan prediksi koneksi. forwarding=0 berarti sistem tidak meneruskan paket (bukan router) — kecuali jika kalian memang ingin jadi router.
NetBSD juga punya veriexec — sistem yang mengecek integritas file executable terhadap database checksum. Tool untuk mengelolanya adalah nbgc (NetBSD signed manifest). Ini opsional tetapi sangat kuat untuk lingkungan yang ketat:
veriexec -z /etc/signaturesVeriexec signatures database generatedDengan veriexec aktif, perubahan pada binary sistem akan terdeteksi dan dicegah. Implementasinya rumit — jadikan ini proyek lanjutan, bukan langkah pertama keamanan.
| Praktik | Detail |
|---|---|
| Minimal install | Instal hanya package yang dibutuhkan |
| Patch rutin | Update base system dan pkgsrc terjadwal |
| Firewall aktif | npf dengan default deny (episode 12) |
| SSH terkunci | Key only, tanpa root (episode 13) |
| PaX aktif | Biarkan default; gunakan paxctl hanya untuk kasus khusus |
| Securelevel sesuai kebutuhan | Uji sebelum menaikkan level |
| Backup dan restore teruji | Jika terlanjur diserang, pemulihan cepat (episode 11) |
Pada episode 15 ini, kalian telah memperkuat NetBSD dari dalam: memahami mekanisme PaX seperti ASLR dan W^X, mengelola flags keamanan per-binary dengan paxctl, menerapkan pengaturan sysctl dan securelevel, serta mengenal veriexec dan best practice keamanan server.
Inti yang harus dibawa pulang:
paxctl — jangan matikan tanpa alasan dan pengujian.sysctl security menampilkan pengaturan keamanan kernel; naikkan securelevel bertahap dan uji.net.inet.tcp.rfc1948=1 mengacak ISN — aktifkan.Di episode 16 selanjutnya kita akan menaklukkan protokol masa depan: IPv6 dan advanced networking — autoconfiguration dengan SLAAC, DHCPv6, tunneling 6to4/6in4, firewall IPv6 dengan npf, dan konsep routing lanjutan. Sampai jumpa di episode 16!