Stealth & Zero-Trace System
10 lapis penyembunyian — agent tidak terdeteksi, tidak bisa disabotase, bertahan di OS apapun.
Authorized use only. Sistem stealth dirancang untuk authorized security assessment. Agent hanya boleh diinstall di server yang Anda miliki atau di mana Anda memiliki izin eksplisit tertulis (MOU/engagement letter).
Layer 1 — Process Masquerade (argv[0])
Binary menimpa argv[0] dengan nama kernel thread seperti [kworker/u2:2], [migration/0], [ksoftirqd/1].
Hasil di ps aux terlihat identik dengan proses kernel.
stealth.MasqueradeProcess() → prctl(PR_SET_NAME) + argv[0] overwrite
Layer 2 — /proc PID Hiding (mount bind)
Entry /proc/<pid> di-bind mount dengan /dev/shm (tmpfs kosong).
Semua tool yang baca /proc via readdir() (ps, top, procfs) tidak melihat PID tersebut.
stealth.HideFromProc() → mount --bind /dev/shm /proc/<pid>
Layer 3 — File Hiding (LD_PRELOAD)
Inject libprocesshider.so via /etc/ld.so.preload (system-wide).
Hook readdir() / readdir64() di libc untuk filter entry install dir dari hasil ls, find, file manager.
stealth.HideFiles() → /etc/ld.so.preload + libprocesshider.so (hook readdir)
Layer 4 — Systemd Service Camouflage
Service systemd bernama systemd-sysconf — menyerupai service bawaan systemd.
Description: "System Configuration Service". Install dir tersembunyi di path seperti /opt/.cache/.systemd-private/.
guard.SanitizeServiceFiles() → fix detectable artifacts dari versi lama
Layer 5 — Anti-Forensic Shell
Saat terminal web dibuka, shell bash spawn dengan --noprofile --init-file /dev/shm/.XXXXXXXX.
Init file mengatur: HISTFILE=/dev/null, HISTSIZE=0, HISTCONTROL=ignoreboth.
File temp otomatis dihapus 2 detik setelah spawn.
terminal/pty_linux.go → --init-file /dev/shm/.XXXXXXXX (deleted after 2s)
Layer 6 — Zero-Trace Install
Installer tidak meninggalkan trace: tidak ada .wget-hsts, tidak ada file temp di /tmp, tidak ada entri di apt/yum log.
Download langsung ke memory (pipe), binary ditulis ke install dir dengan rename atomic.
install.sh → WGETRC=/dev/null, unset HISTFILE, rm -f setelah install
Layer 7 — Goroutine Recovery (bukan exit)
Modul yang crash di-restart dalam proses yang sama via runModule() supervisor.
Binary tidak exit → tidak ada systemd restart log → tidak ada entry di journald yang mencurigakan.
main.go → runModule() → recover() + 5s restart in-process
Layer 8 — Binary Backup + Immutable Recovery (v4.9.5)
Agent menyimpan salinan binary cadangan di lokasi kedua yang stealthy:
- Prioritas:
/var/lib/systemd/coredump/→ package manager cache →/var/cache/ldconfig/ - Lokasi dipilih otomatis sesuai distro
- File backup dilindungi
chattr +i(immutable) — tahan dariapt clean,dnf clean, bahkanrm -rfoleh root
guard/backup.go → InitBackup() + RestoreFromBackup() + chattr +i
Layer 9 — Recovery Service — Tanpa Cron (v4.9.5)
Service tersembunyi systemd-conf-recover.service di-install di /lib/systemd/system/ atau /usr/lib/systemd/system/ (terlihat seperti service bawaan package manager).
Service ini loop setiap 60 detik: jika systemd-sysconf mati → restart otomatis.
Tidak menggunakan cron — cron mudah terdeteksi via crontab -l.
guard/resurrect.go → systemdUnitDir() + ensureRecoveryService() (loop setiap 10 menit)
Layer 10 — Multi-OS Persistence — Non-systemd (v4.9.5)
Untuk server tanpa systemd (Alpine/OpenRC, CentOS 5/SysVinit, embedded Linux):
- OpenRC (Alpine, Gentoo):
/etc/init.d/sysconf-daemonformat openrc-run +rc-update add default - SysVinit: format LSB +
update-rc.d defaultsatauchkconfig - Universal fallback:
/etc/rc.local - Semua operasi idempoten — aman dipanggil berulang kali
guard/persist.go → hasOpenRC() → ensureOpenRC() / ensureInitD() / ensureRcLocal()
GS Rescue Tunnel — Stealth PID
gs-netcat listener (klogd) mendapat perlakuan ekstra:
- Binary di-rename ke
klogd - PID-nya dihide dari
/procvia mount bind yang sama - Jika ada
klogdorphan: ditemukan via Go'sgetdents64(bypass LD_PRELOAD) → kill by exact PID dari.klogd.pidfile
Perspektif Penyerang
Yang penyerang lihat:
| Tool | Hasil |
|------|-------|
| ps aux | Hanya proses systemd biasa, tidak ada yang mencurigakan |
| ls /opt /srv /home | Install dir tidak terlihat (LD_PRELOAD hook) |
| systemctl list-units | systemd-sysconf dan systemd-conf-recover terlihat seperti unit bawaan |
| crontab -l | Tidak ada entry sama sekali |
| cat /etc/ld.so.preload | Entry tersembunyi jika file hiding aktif |
Bahkan jika ditemukan:
| Aksi | Respon |
|------|--------|
| kill -9 | systemd restart dalam 3 detik |
| systemctl disable + stop | Recovery service masih aktif, restart dalam 60s |
| rm binary | inotify detect <1s, restore dari backup immutable |
| rm backup | chattr +i blokir, "Operation not permitted" |
| reboot server | Semua layer persist aktif, agent start kembali otomatis |