File size: 7,530 Bytes
b2ac7b8
efd7792
 
 
 
b2ac7b8
efd7792
 
1ac74c4
efd7792
 
 
 
 
 
b2ac7b8
 
efd7792
 
 
 
 
 
 
0a498d0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
efd7792
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0a498d0
efd7792
 
 
 
0a498d0
 
 
efd7792
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0a498d0
efd7792
 
 
 
 
 
 
0a498d0
 
efd7792
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
---
title: Siber Güvenlik Haber Asistanı
emoji: 🛡️
colorFrom: blue
colorTo: indigo
sdk: docker
app_port: 7860
fullWidth: true
short_description: Ollama ile güncel CVE ve siber güvenlik asistanı
tags:
  - ollama
  - cybersecurity
  - tool-calling
  - cve
  - turkish
---

# Siber Güvenlik Haber Asistanı

Yerel bir Ollama modelinin güncel siber güvenlik kaynaklarını araç çağrılarıyla
sorguladığı Türkçe Gradio uygulaması. Arayüz; modelin çağırdığı aracı,
parametrelerini, dönen sonucu, tur numarasını ve nihai yanıtı ayrı ayrı gösterir.
Modelin gizli düşünce metni gösterilmez.

## Model ve üretim kontrolleri

Arayüz yalnızca izin verilen dört Ollama modeli arasında seçim yaptırır:

| Arayüz seçeneği | Ollama modeli | Önerilen kullanım |
|---|---|---|
| 1B | `qwen3.5:0.8b` | En hızlı deneme ve düşük kaynak kullanımı |
| 4B | `qwen3.5:4b` | Ekonomik varsayılan Space modeli |
| 9B | `qwen3.5:9b` | Hız ve yanıt kalitesi dengesi |
| 35B | `qwen3.6:latest` | En yüksek kalite ve güçlü GPU |

Container başlangıcında yalnızca `OLLAMA_MODEL` ile belirlenen varsayılan model
indirilir. Diğer modeller ilk seçildiklerinde otomatik indirilir; model hazırlama
durumu araç izleriyle birlikte arayüzde gösterilir.

Gelişmiş ayarlar bölümünde Temperature, Top-K ve Top-P değiştirilebilir. Her nihai
yanıtın üzerinde model adı, ajan turu, süre, girdi tokenı, çıktı tokenı ve tüm
turların toplam token sayısı görüntülenir.

## Veri kaynakları

Anahtarsız kullanılabilen kaynaklar:

- GDELT — güncel haber araması
- CISA KEV — aktif istismar edildiği bilinen zafiyetler
- NIST NVD — CVE arama ve ayrıntıları
- CISA RSS ve CERT/CC Atom — resmi güvenlik duyuruları
- MITRE ATT&CK TAXII 2.1 — Enterprise teknikleri

İsteğe bağlı kaynaklar:

- NewsAPI (`NEWSAPI_KEY`)
- AlienVault OTX (`OTX_API_KEY`)
- NVD yüksek istek limiti (`NVD_API_KEY`)
- Kurumsal MISP (`MISP_BASE_URL`, `MISP_API_KEY`)

API anahtarları hiçbir zaman kaynak koda veya model mesajına eklenmez; yalnızca
sunucu tarafındaki ortam değişkenlerinden okunur.

## Yerel çalıştırma

Gereksinimler:

- Python 3.11+
- Çalışan bir [Ollama](https://docs.ollama.com/) sunucusu
- Araç çağrısını destekleyen bir Ollama modeli

```bash
ollama serve
ollama pull qwen3.6:latest
cp .env.example .env
uv sync
uv run python app.py
```

`uv` kullanmıyorsanız:

```bash
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
python app.py
```

Uygulama varsayılan olarak `http://127.0.0.1:11434` ve
`qwen3.6:latest` kullanır. Ayarlar kabuktan verilebilir:

```bash
export OLLAMA_MODEL=qwen3.6:latest
export NEWSAPI_KEY=...
export NVD_API_KEY=...
python app.py
```

`.env` dosyası örnek amaçlıdır; Python uygulaması bu dosyayı kendiliğinden
yüklemez. Değerleri kabuğa aktarın veya dağıtım platformunun secret yönetimini
kullanın.

## Çalışma biçimi

Örnek soru:

> Son 7 günde yayımlanan kritik CVE'leri bul ve aktif istismar durumlarını kontrol et.

Beklenen akış:

1. Model `son_cve_kayitlarini_getir` aracını çağırır.
2. Dönen CVE'lerden gerekli gördükleri için `cve_detayi_getir` veya
   `aktif_istismar_edilenleri_ara` çağrısını yapar.
3. Arayüz her çağrıyı ve sonucu tur bazında gösterir.
4. Model, tarih ve kaynak bağlantıları içeren Türkçe nihai yanıtı üretir.

Model en fazla altı araç turu çalıştırabilir. Bu sınır hatalı veya sonsuz araç
döngülerini engeller.

## Yapılandırma

| Değişken | Varsayılan | Açıklama |
|---|---:|---|
| `OLLAMA_BASE_URL` | `http://127.0.0.1:11434` | Ollama veya uyumlu güvenli geçit |
| `OLLAMA_MODEL` | `qwen3.5:4b` | Container açılışında indirilecek varsayılan model |
| `OLLAMA_API_KEY` | boş | Uzak geçit için Bearer anahtarı |
| `OLLAMA_TIMEOUT_SECONDS` | `300` | Model yanıt zaman aşımı |
| `OLLAMA_NUM_CTX` | `16384` | Bağlam penceresi |
| `OLLAMA_TEMPERATURE` | `0.2` | Üretim sıcaklığı |
| `OLLAMA_TOP_K` | `20` | Varsayılan Top-K değeri |
| `OLLAMA_TOP_P` | `0.95` | Varsayılan Top-P değeri |
| `OLLAMA_PULL_TIMEOUT_SECONDS` | `3600` | İlk model indirme zaman aşımı |
| `CYBER_API_CONNECT_TIMEOUT` | `20` | Genel API bağlantı zaman aşımı |
| `CYBER_API_READ_TIMEOUT` | `60` | Genel API okuma zaman aşımı |
| `GDELT_CONNECT_TIMEOUT` | `30` | GDELT için bağlantı zaman aşımı |
| `GDELT_READ_TIMEOUT` | `75` | GDELT için okuma zaman aşımı |
| `CYBER_NEWS_CACHE_SECONDS` | `300` | Aynı haber sorgusunun önbellek süresi |
| `NEWSAPI_KEY` | boş | NewsAPI erişimi |
| `NVD_API_KEY` | boş | Daha yüksek NVD istek limiti |
| `OTX_API_KEY` | boş | AlienVault OTX erişimi |
| `MISP_BASE_URL` | boş | Kurumsal MISP kök adresi |
| `MISP_API_KEY` | boş | MISP erişim anahtarı |
| `MISP_VERIFY_TLS` | `true` | MISP TLS sertifika doğrulaması |

## Hugging Face Docker Space

Depo, Ollama ile Gradio'yu aynı container içinde çalıştıran Docker Space düzenine
hazırdır. `start.sh` önce Ollama'yı başlatır, `OLLAMA_MODEL` ile seçilen modeli
indirir ve ardından Gradio'yu `0.0.0.0:7860` üzerinde açar. Yalnızca Gradio portu
dışarı açılır; Ollama container içinde `127.0.0.1:11434` adresinde kalır.

Space oluşturma ve yükleme örneği:

```bash
hf auth login --add-to-git-credential
hf repos create KULLANICI_ADI/siber-guvenlik-asistani --repo-type space --sdk docker
git remote add space https://huggingface.co/spaces/KULLANICI_ADI/siber-guvenlik-asistani
git push space main
```

Space secret değerlerini Hugging Face web arayüzündeki **Settings → Variables and
secrets** bölümünden ekleyin. Her push sonrasında Space otomatik olarak yeniden
oluşturulur.

Önerilen Space değişkenleri:

```text
OLLAMA_MODEL=qwen3.5:4b
OLLAMA_NUM_CTX=16384
```

`NEWSAPI_KEY`, `NVD_API_KEY`, `OTX_API_KEY` ve MISP erişim bilgilerini yalnızca
Space secret olarak ekleyin. Bunları Dockerfile'a veya Git deposuna yazmayın.

`qwen3.6:latest` yaklaşık 24 GB'tır. Model ağırlıkları ile çalışma belleğine yer
kalması için 48 GB VRAM'li bir GPU güvenli tercihtir. Varsayılan 4B model daha
hızlı başlar; 35B seçeneği yalnızca yeterli GPU ve disk olduğunda kullanılmalıdır.

Space diski geçiciyse model her yeniden oluşturmada tekrar indirilir. Bir Storage
Bucket `/data` yoluna bağlanırsa Space değişkenini aşağıdaki gibi ayarlayarak model
önbelleği kalıcı tutulabilir:

```text
OLLAMA_MODELS=/data/ollama-models
```

### Docker'ı yerelde sınama

CPU ile yalnızca container başlangıcını sınamak için:

```bash
docker build -t siber-guvenlik-asistani .
docker run --rm -p 7860:7860 \
  -e OLLAMA_MODEL=qwen3.5:4b \
  siber-guvenlik-asistani
```

NVIDIA Container Toolkit kurulu bir makinede GPU ile:

```bash
docker run --rm --gpus all -p 7860:7860 \
  -e OLLAMA_MODEL=qwen3.6:latest \
  siber-guvenlik-asistani
```

## Testler

```bash
python -m unittest discover -s tests -v
```

Testler gerçek API veya Ollama bağlantısı kurmadan araç şemalarını, CVE
normalizasyonunu ve çok turlu araç döngüsünü doğrular.

## Güvenlik ve doğruluk

- Uygulama savunma ve haber analizi amaçlıdır.
- Güncel veri kaynakları gecikebilir veya geçici olarak hata verebilir.
- CVSS puanı tek başına aktif istismar kanıtı değildir; KEV durumu ayrıca gösterilir.
- Kritik operasyonel kararlar özgün CISA, NVD, CERT/CC veya üretici duyurusundan
  doğrulanmalıdır.