Difference between revisions of "Cyber Security: Ollama: startegi analisa log JSONL"
Onnowpurbo (talk | contribs) |
Onnowpurbo (talk | contribs) |
||
| Line 69: | Line 69: | ||
dpkg -S /bin/ls /usr/bin/ls /usr/bin/passwd /usr/bin/md5sum | dpkg -S /bin/ls /usr/bin/ls /usr/bin/passwd /usr/bin/md5sum | ||
| − | |||
* `dpkg -S`: mencari paket Debian yang memiliki file tersebut. | * `dpkg -S`: mencari paket Debian yang memiliki file tersebut. | ||
| Line 102: | Line 101: | ||
New group added: wazuh-dashboard | New group added: wazuh-dashboard | ||
New user 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. | Alert muncul berdekatan dengan proses instalasi paket `wazuh-dashboard`, sehingga '''kemungkinan besar merupakan aktivitas instalasi resmi''', bukan pembuatan akun interaktif oleh penyerang. | ||
| Line 110: | Line 108: | ||
home=/nonexistent | home=/nonexistent | ||
shell=/bin/false | shell=/bin/false | ||
| − | |||
Ini lazim untuk akun service. Tetap cocokkan waktunya dengan aktivitas administrator. | Ini lazim untuk akun service. Tetap cocokkan waktunya dengan aktivitas administrator. | ||
Latest revision as of 13:12, 19 June 2026
Metode terbaik: jangan kirim seluruh `alerts.json` langsung ke Ollama
Pipeline tercepat dan paling akurat adalah:
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.
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** |
Temuan yang perlu diprioritaskan
1. Rootcheck pada `server-webtest`
Terdapat **26 alert level 7** yang menyebut beberapa file sistem sebagai kemungkinan *trojaned*, antara lain:
/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`:
readlink -f /bin/ls readlink -f /usr/bin/ls
`readlink -f` menampilkan lokasi file sebenarnya setelah seluruh symbolic link diselesaikan.
Cari paket pemilik file:
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:
sudo apt update sudo apt install debsums -y
- `debsums`: memeriksa checksum file paket Debian.
- `-y`: otomatis menyetujui instalasi.
Periksa paket penting:
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`:
sudo dpkg -V coreutils passwd
- `-V`: memverifikasi atribut dan checksum file paket.
2. User dan group `wazuh-dashboard` dibuat
Terdapat dua alert level 8:
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:
home=/nonexistent shell=/bin/false
Ini lazim untuk akun service. Tetap cocokkan waktunya dengan aktivitas administrator.
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:
serangan aktif compliance finding perubahan sistem resmi noise atau duplikasi bukti kompromi
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. Pilih model Ollama
Pilihan utama: `qwen3:8b`
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.
Pilihan lebih ringan dan cepat: `gemma3:4b`
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])
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:
qwen3:8b
2. Periksa Ollama
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:
ollama serve
Biarkan terminal tersebut tetap berjalan dan gunakan terminal lain untuk menjalankan analisis.
3. Jalankan analisis
Letakkan file berikut pada direktori yang sama:
alerts.json wazuh_ollama_analyzer.py
Kemudian:
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:
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:
less hasil_wazuh.md
Keluar dari `less` dengan menekan:
q
4. Mode sangat cepat tanpa AI
Untuk mengecek isi file dan menghasilkan statistik tanpa memanggil Ollama:
python3 wazuh_ollama_analyzer.py alerts.json \ --summary-only \ --output hasil_wazuh
`--summary-only` berarti berhenti setelah preprocessing Python.
Hasilnya:
hasil_wazuh_summary.json
Lihat hasil:
jq . hasil_wazuh_summary.json
5. Mempercepat respons Ollama
Preload model agar request pertama tidak menunggu proses pemuatan model:
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:
{
"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])
6. Bila Ollama berjalan dalam Docker
Periksa container:
docker ps
Cari container bernama seperti:
ollama
Pastikan port dipublikasikan:
0.0.0.0:11434->11434/tcp
Kemudian jalankan:
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:
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.
Arsitektur produksi yang disarankan
Untuk penggunaan rutin di SOC:
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:
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"