Tutorial Systemd Sandboxing: Amankan Service Linux VPS dari Threat RCE
Poin Kunci Artikel Ini:
- Vektor Serangan RCE & Limitasi Keamanan POSIX TradisionalRemote Code Execution (RCE) kerentanan fatal service backend.
- Penyerang eksekusi perintah arbitrer dalam konteks pengguna aplikasi (Node.js, Python, Go, PHP-FPM, Java).
- Model keamanan standar Linux andalkan POSIX Discretionary Access Control (DAC) berbasis user dan group.
1. Vektor Serangan RCE & Limitasi Keamanan POSIX Tradisional
Remote Code Execution (RCE) kerentanan fatal service backend. Penyerang eksekusi perintah arbitrer dalam konteks pengguna aplikasi (Node.js, Python, Go, PHP-FPM, Java). Model keamanan standar Linux andalkan POSIX Discretionary Access Control (DAC) berbasis user dan group. Model DAC tidak dirancang isolasi proses komprehensif.
Kelemahan mendasar izin POSIX standar:
- Akses Baca Global: User aplikasi tetap bisa membaca
/etc/passwd,/etc/resolv.conf,/tmp,/var/tmp, dan file konfigurasi aplikasi lain tanpa proteksichmod 700. - Eksekusi System Binaries: Penyerang sukses spawn shell dapat mengeksekusi
/usr/bin/curl,/usr/bin/nc,/usr/bin/python3, atau/bin/bashuntuk reconnaissance dan lateral movement. - Eskalasi Hak Akses via SUID: Binaries dengan bit SUID aktif (seperti versi
sudo,pkexec, ataunewgrpbermasalah) dimanfaatkan untuk eskalasi ke root. - Persistensi File System: Penyerang menulis malware di
/tmpatau/var/tmp. File bertahan meski service aplikasi di-restart. - Eksplorasi Jaringan Raw Socket: Service aplikasi bisa membuat socket jaringan ke IP privat internal (metadata service cloud
169.254.169.254) atau melakukan port scanning. - Inspeksi Memori via Ptrace: Process milik user sama bisa mengintip memori process lain via
ptrace(). Secret key dan token database bocor.
Membuat user dedicated (useradd -r -s /bin/false appuser) tidak menghentikan eksekusi binary sistem atau akses filesystem global. Service butuh isolasi level kernel. Systemd menyediakan fitur sandboxing native berbasis Linux Namespaces (CLONE_NEWNS, CLONE_NEWPID, CLONE_NEWNET), Seccomp-BPF filter, Control Groups (cgroups v2), dan POSIX Capabilities tanpa overhead virtualisasi Docker container.
2. Arsitektur Sandbox Systemd & Direktif Keamanan Kernel
Isolasi service dilakukan lewat direktif keamanan file unit systemd (/etc/systemd/system/nama-service.service).
A. DynamicUser=yes
Mengalokasikan UID/GID sementara dari rentang transient 61184โ65519 saat service start. Service stop, UID/GID dihapus. Tidak ada record permanen di /etc/passwd atau /etc/group. Menghentikan kepemilikan file permanen oleh penyerang.
B. ProtectSystem=strict
Memasang seluruh filesystem (/) sebagai Read-Only mount namespace untuk service. Direktori /usr, /etc, /boot, dan /lib terkunci total. Service tidak bisa mengubah binary atau konfigurasi sistem.
C. ProtectHome=yes
Mount direktori /home, /root, dan /run/user sebagai tmpfs kosong tanpa akses bagi service. Mencegah kebocoran SSH key, file konfigurasi personal, dan token credentials user host.
D. PrivateTmp=yes
Isolasi /tmp dan /var/tmp. Service mendapat mount namespace /tmp privat terpisah dari host dan service lain. Ketika service mati, isi /tmp privat terhapus total otomatis.
E. NoNewPrivileges=yes
Aktifkan bit PR_SET_NO_NEW_PRIVS via syscall prctl(). Mencegah child process service memperoleh hak akses tambahan via binary SUID/SGID seperti sudo, gpasswd, atau su.
F. CapabilityBoundingSet=
Membatasi POSIX Capabilities (hak istimewa root yang dipecah). Mengosongkan nilai direktif (CapabilityBoundingSet=) mencabut seluruh akses superuser seperti CAP_SYS_ADMIN, CAP_NET_ADMIN, CAP_SYS_PTRACE, dan CAP_NET_RAW.
G. SystemCallFilter=
Filter syscall berbasis Seccomp-BPF. Memblokir pemanggilan kernel berbahaya seperti manipulasi clock, reboot, swap, atau ptrace. Sintaks ~@privileged memblokir grup syscall yang butuh hak superuser.
H. MemoryDenyWriteExecute=yes
Memblokir alokasi pemetaan memori yang dapat ditulis sekaligus dieksekusi (W^X violation) via mmap() atau mprotect(). Mencegah eksekusi shellcode RAM hasil serangan buffer overflow.
I. RestrictAddressFamilies=AF_INET AF_INET6 AF_UNIX
Membatasi keluarga socket jaringan. Melarang pembuatan raw sockets (AF_PACKET) untuk packet sniffing dan socket pesan kernel (AF_NETLINK).
J. RestrictNamespaces=yes & RestrictRealtime=yes
RestrictNamespaces=yes melarang service membuat namespace baru via unshare() atau clone() untuk bypass isolasi. RestrictRealtime=yes memblokir penjadwalan realtime kernel untuk mencegah CPU starvation DoS.
K. Proteksi Kernel Tambahan
ProtectKernelTunables=yes: Mount/proc/sys,/sys,/proc/sysrq-triggersebagai Read-Only.ProtectKernelModules=yes: Blokir explicit module loading viainit_module()danfinit_module().ProtectControlGroups=yes: Mount hirarki/sys/fs/cgroupsebagai Read-Only.ProtectClock=yes: Mencegah perubahan jam sistem viaclock_settime().ProtectHostname=yes: Mencegah perubahan hostname sistem viasethostname().LockPersonality=yes: Mencegah perubahan execution domain kernel viapersonality().
Contoh Konfigurasi Unit File Production-Ready
File: /etc/systemd/system/node-api.service
[Unit]
Description=Backend Node.js API Service
After=network.target
[Service]
Type=exec
WorkingDirectory=/opt/node-api
ExecStart=/usr/bin/node /opt/node-api/index.js
Restart=always
# Isolasi Identitas Process
DynamicUser=yes
# Isolasi Mount & Filesystem
ProtectSystem=strict
ProtectHome=yes
PrivateTmp=yes
ReadWritePaths=/var/log/node-api
RuntimeDirectory=node-api
StateDirectory=node-api
LogsDirectory=node-api
CacheDirectory=node-api
# Restriksi Hak Akses & Subprocess
NoNewPrivileges=yes
CapabilityBoundingSet=
MemoryDenyWriteExecute=yes
LockPersonality=yes
# Proteksi Struktur Kernel
ProtectKernelTunables=yes
ProtectKernelModules=yes
ProtectControlGroups=yes
ProtectClock=yes
ProtectHostname=yes
RestrictRealtime=yes
RestrictNamespaces=yes
# Network & Syscall Filtering (Seccomp)
RestrictAddressFamilies=AF_INET AF_INET6 AF_UNIX
SystemCallFilter=@system-service
SystemCallFilter=~@privileged @resources @clock @mount @reboot @swap
SystemCallErrorNumber=EPERM
[Install]
WantedBy=multi-user.target
3. Uji Penetrasi Sandbox & Diagnostic Error Syscall
Pengujian penetrasi memastikan isolasi sandbox berfungsi penuh dan tidak merusak fungsi legitimasi aplikasi.
Peringatan Keamanan: Lakukan prosedur pengujian ini di lingkungan staging atau VPS uji sebelum menerapkan perubahan pada server produksi.
- Muat ulang konfigurasi systemd daemon dan jalankan ulang service aplikasi:
{"title": "Tutorial Systemd Sandboxing: Amankan Service Linux VPS dari Threat RCEsystemctl daemon-reload systemctl restart node-api.service


