Cyber Security: Ollama: startegi analisa log JSONL

From OnnoWiki
Jump to navigation Jump to search
    1. Metode terbaik: jangan kirim seluruh `alerts.json` langsung ke Ollama

Pipeline tercepat dan paling akurat adalah:

```text alerts.json

Python: parsing, filter, agregasi, deduplikasi

Ringkasan kecil dan terstruktur

Ollama: interpretasi, prioritas risiko, dan rekomendasi

Laporan Markdown + JSON ```

    • Python menghitung fakta**, sedangkan **Ollama menjelaskan makna dan prioritasnya**. Dengan cara ini, Ollama cukup menerima satu ringkasan kecil dalam satu request, bukan membaca ratusan atau jutaan baris mentah.

---

  1. Hasil awal file Anda

Saya sudah memproses file `alerts.json` yang diunggah.

| Informasi | Hasil | | ---------------------- | -------------------: | | Total alert valid | **333** | | JSON rusak | **0** | | Rentang waktu | **sekitar 33 menit** | | Level 3 | **176** | | Level 4 | **2** | | Level 7 | **153** | | Level 8 | **2** | | Agent `server` | **306 alert** | | Agent `server-webtest` | **27 alert** | | Alert SCA/CIS | **281** | | SCA passed | **118** | | SCA failed | **119** | | SCA not applicable | **42** | | Rootcheck anomaly | **26** |

    1. Temuan yang perlu diprioritaskan
      1. 1. Rootcheck pada `server-webtest`

Terdapat **26 alert level 7** yang menyebut beberapa file sistem sebagai kemungkinan *trojaned*, antara lain:

```text /bin/ls /usr/bin/ls /bin/env /usr/bin/env /bin/cat /usr/bin/cat /bin/chmod /usr/bin/chmod /bin/passwd /usr/bin/passwd /bin/md5sum /usr/bin/md5sum ```

Ini **belum membuktikan bahwa server terkena malware**. Alert rootcheck berbasis pola dapat menghasilkan *false positive*, dan `/bin` serta `/usr/bin` pada Ubuntu modern dapat menunjuk ke file yang sama.

Validasi pada `server-webtest`:

```bash readlink -f /bin/ls readlink -f /usr/bin/ls ```

`readlink -f` menampilkan lokasi file sebenarnya setelah seluruh symbolic link diselesaikan.

Cari paket pemilik file:

```bash dpkg -S /bin/ls /usr/bin/ls /usr/bin/passwd /usr/bin/md5sum ```

  • `dpkg -S`: mencari paket Debian yang memiliki file tersebut.
  • Beberapa path mungkin tidak langsung dikenali karena mekanisme merged `/usr`.

Pasang alat pemeriksa integritas:

```bash sudo apt update sudo apt install debsums -y ```

  • `debsums`: memeriksa checksum file paket Debian.
  • `-y`: otomatis menyetujui instalasi.

Periksa paket penting:

```bash sudo debsums -s coreutils passwd ```

  • `-s`: hanya menampilkan file yang gagal atau berubah.
  • Tidak ada output umumnya berarti seluruh checksum yang tersedia cocok.

Periksa juga dengan `dpkg`:

```bash sudo dpkg -V coreutils passwd ```

  • `-V`: memverifikasi atribut dan checksum file paket.
      1. 2. User dan group `wazuh-dashboard` dibuat

Terdapat dua alert level 8:

```text New group added: wazuh-dashboard New user added: wazuh-dashboard ```

Alert muncul berdekatan dengan proses instalasi paket `wazuh-dashboard`, sehingga **kemungkinan besar merupakan aktivitas instalasi resmi**, bukan pembuatan akun interaktif oleh penyerang.

User tersebut juga menggunakan:

```text home=/nonexistent shell=/bin/false ```

Ini lazim untuk akun service. Tetap cocokkan waktunya dengan aktivitas administrator.

      1. 3. Sebagian besar alert adalah compliance scan

Sebanyak **281 dari 333 alert** berasal dari SCA/CIS. Jadi banyak alert level 7 bukan serangan aktif, melainkan hasil pemeriksaan konfigurasi, seperti:

  • `/tmp` belum menjadi partisi terpisah;
  • opsi `nodev`, `nosuid`, atau `noexec` belum diterapkan;
  • `/home`, `/var`, dan `/var/log` belum dipisahkan;
  • beberapa kernel module belum dinonaktifkan.

Ollama harus diberi tahu untuk membedakan:

```text serangan aktif compliance finding perubahan sistem resmi noise atau duplikasi bukti kompromi ```

---

  1. Script siap pakai

Saya sudah membuat script yang:

  • membaca JSONL secara streaming;
  • tidak memasukkan seluruh file ke memori;
  • menghitung severity, agent, rule, IP, user, dan SCA;
  • mengelompokkan alert berulang;
  • mengirim satu ringkasan kecil ke Ollama;
  • meminta output JSON terstruktur;
  • membuat laporan Markdown;
  • melindungi prompt dari instruksi berbahaya yang mungkin berada di dalam log.

Unduh:

  • [Script Wazuh–Ollama Analyzer](sandbox:/mnt/data/wazuh_ollama_analyzer.py)
  • [Petunjuk penggunaan](sandbox:/mnt/data/README_wazuh_ollama.md)
  • [Hasil preprocessing file Anda](sandbox:/mnt/data/hasil_wazuh_summary.json)

Saya sudah menguji bagian parsing dan preprocessing terhadap file Anda. Semua **333 baris berhasil dibaca**. Pemanggilan Ollama harus dijalankan pada server Anda karena instance Ollama lokal Anda tidak tersedia dari lingkungan saya.

---

  1. 1. Pilih model Ollama
    1. Pilihan utama: `qwen3:8b`

```bash ollama pull qwen3:8b ```

Model tersebut berukuran sekitar **5,2 GB** dengan context window 40K. Ollama menyediakan Qwen3 dalam beberapa ukuran, termasuk 4B, 8B, dan 14B. ([Ollama][1])

Cocok untuk:

  • analisis SOC;
  • Bahasa Indonesia;
  • klasifikasi temuan;
  • pembuatan rekomendasi;
  • reasoning yang lebih baik daripada model sangat kecil.
    1. Pilihan lebih ringan dan cepat: `gemma3:4b`

```bash ollama pull gemma3:4b ```

`gemma3:4b` berukuran sekitar **3,3 GB** dan mempunyai context window 128K. Model ini lebih ringan untuk CPU atau GPU dengan memori terbatas. ([Ollama][2])

    1. Rekomendasi praktis

| Kondisi server | Model | | ----------------------------------------------------- | ----------- | | CPU-only atau RAM terbatas | `gemma3:4b` | | GPU/RAM cukup, seimbang | `qwen3:8b` | | Mengutamakan kualitas, tidak terlalu peduli kecepatan | `qwen3:14b` |

Untuk hasil cepat, mulai dengan:

```text qwen3:8b ```

---

  1. 2. Periksa Ollama

```bash curl http://localhost:11434/api/tags ```

Keterangan:

  • `curl`: mengirim request HTTP.
  • `http://localhost:11434`: alamat default Ollama.
  • `/api/tags`: menampilkan model yang tersedia.

Apabila muncul daftar model, Ollama sudah aktif.

Jika Ollama bukan service:

```bash ollama serve ```

Biarkan terminal tersebut tetap berjalan dan gunakan terminal lain untuk menjalankan analisis.

---

  1. 3. Jalankan analisis

Letakkan file berikut pada direktori yang sama:

```text alerts.json wazuh_ollama_analyzer.py ```

Kemudian:

```bash python3 wazuh_ollama_analyzer.py alerts.json \

 --model qwen3:8b \
 --output hasil_wazuh

```

Penjelasan:

  • `python3`: menjalankan Python 3.
  • `wazuh_ollama_analyzer.py`: script analisis.
  • `alerts.json`: file input Wazuh.
  • `--model qwen3:8b`: model yang digunakan Ollama.
  • `--output hasil_wazuh`: awalan nama file hasil.
  • `\`: melanjutkan perintah ke baris berikutnya.

Hasilnya:

```text hasil_wazuh_summary.json hasil_wazuh.json hasil_wazuh.md ```

Fungsi masing-masing:

  • `hasil_wazuh_summary.json`: statistik yang dihitung Python;
  • `hasil_wazuh.json`: hasil AI dalam struktur JSON;
  • `hasil_wazuh.md`: laporan SOC yang mudah dibaca.

Buka laporan:

```bash less hasil_wazuh.md ```

Keluar dari `less` dengan menekan:

```text q ```

---

  1. 4. Mode sangat cepat tanpa AI

Untuk mengecek isi file dan menghasilkan statistik tanpa memanggil Ollama:

```bash python3 wazuh_ollama_analyzer.py alerts.json \

 --summary-only \
 --output hasil_wazuh

```

`--summary-only` berarti berhenti setelah preprocessing Python.

Hasilnya:

```text hasil_wazuh_summary.json ```

Lihat hasil:

```bash jq . hasil_wazuh_summary.json ```

---

  1. 5. Mempercepat respons Ollama

Preload model agar request pertama tidak menunggu proses pemuatan model:

```bash curl http://localhost:11434/api/chat \

 -d '{
   "model": "qwen3:8b",
   "keep_alive": "30m"
 }'

```

  • `-d`: mengirim data JSON ke API.
  • `keep_alive: 30m`: mempertahankan model di memori selama 30 menit.

Ollama mendukung preload melalui request kosong dan parameter `keep_alive` untuk mempertahankan model di memori. Secara bawaan, model disimpan sekitar lima menit setelah digunakan. ([Ollama Docs][3])

Script juga menggunakan:

```json {

 "stream": false,
 "think": false,
 "keep_alive": "30m",
 "options": {
   "temperature": 0.1,
   "num_ctx": 8192
 }

} ```

Artinya:

  • `stream: false`: menunggu satu respons lengkap;
  • `think: false`: tidak menggunakan mode berpikir panjang, sehingga lebih cepat;
  • `keep_alive`: model tidak dimuat ulang setiap analisis;
  • `temperature: 0.1`: hasil lebih konsisten dan tidak kreatif;
  • `num_ctx: 8192`: membatasi konteks agar konsumsi memori tetap terkendali.

Ollama `/api/chat` mendukung output JSON atau JSON Schema, pengaturan `think`, serta `keep_alive`. ([Ollama Docs][4])

---

  1. 6. Bila Ollama berjalan dalam Docker

Periksa container:

```bash docker ps ```

Cari container bernama seperti:

```text ollama ```

Pastikan port dipublikasikan:

```text 0.0.0.0:11434->11434/tcp ```

Kemudian jalankan:

```bash python3 wazuh_ollama_analyzer.py alerts.json \

 --host http://127.0.0.1:11434 \
 --model qwen3:8b \
 --output hasil_wazuh

```

Penjelasan:

  • `--host`: alamat API Ollama.
  • `127.0.0.1`: komputer lokal.
  • `11434`: port default Ollama.

Apabila script dijalankan dari container lain pada Docker network yang sama:

```bash python3 wazuh_ollama_analyzer.py alerts.json \

 --host http://ollama:11434 \
 --model qwen3:8b \
 --output hasil_wazuh

```

Di sini `ollama` merupakan nama service atau nama container.

---

  1. Arsitektur produksi yang disarankan

Untuk penggunaan rutin di SOC:

```text Wazuh alerts.json

Script dijalankan setiap 5–15 menit

Filter hanya alert baru

Grouping rule + agent + source IP

Satu request ke Ollama

Laporan Markdown/JSON

TheHive, email, Telegram, atau dashboard ```

Jangan menjalankan satu request Ollama untuk setiap alert. Lebih baik:

```text 100 alert → 1 agregasi → 1 request Ollama ```

Itulah pendekatan yang paling cepat, murah, dan lebih tahan terhadap halusinasi.

[1]: https://ollama.com/library/qwen3 "qwen3" [2]: https://ollama.com/library/gemma3 "gemma3" [3]: https://docs.ollama.com/faq "FAQ - Ollama" [4]: https://docs.ollama.com/api/chat "Generate a chat message - Ollama"