175 Bin Açık Ollama Sunucusu: 0.0.0.0 Misconfiguration ve LLMjacking
Geçtiğimiz ay Ollama İzolasyonu ve Bleeding Llama Tehdidi üzerine yazarken yerel kurulum efsanesinin nasıl bir güvenlik kabusuna dönüşebileceğinden bahsetmiştim. Sadece birkaç hafta geçti ve Sysdig Tehdit Araştırma Ekibi’nin yayınladığı yeni veriler işin renginin nasıl değiştiğini net bir şekilde ortaya koydu. Hedef artık buluttaki dev yapay zeka hizmetleri değil, doğrudan senin masanın altındaki GPU.
Sysdig’in literatüre kazandırdığı LLMjacking kavramı, başlarda AWS Bedrock veya Azure OpenAI API anahtarlarının çalınıp faturanın kurbana yıkıldığı saldırıları tanımlıyordu. Bugün ise durum tamamen değişti. Saldırganlar artık kimlik doğrulamasız bırakılmış yerel sunucuları avlıyor. Hedef tahtasının tam ortasında ise Ollama var.
0.0.0.0 Tuzağı ve 175.000 Kurban
Ollama tasarımı gereği 127.0.0.1 adresinde, sadece yerel makineye hizmet verecek şekilde çalışır. Fakat pek çok kullanıcı, evdeki diğer cihazlardan veya iş yerinden modeline erişebilmek için yapılandırma dosyasındaki OLLAMA_HOST değerini 0.0.0.0 olarak değiştiriyor. Bu üşengeçlik, Ollama’nın 11434 portunu tüm internete açıyor. Ortada hiçbir kimlik doğrulama mekanizması olmadığı için, port taraması yapan herkes sunucuna şifresiz giriş yapabiliyor.
Güvenlik araştırmacılarının yayınladığı son tarama sonuçlarına göre dünya çapında tam 175.000 açık Ollama sunucusu bulunuyor. Kernel modüllerindeki sinsi açıklar yüzünden paniklerken, insanlar en değerli donanımlarını elleriyle internete teslim ediyor.
Saldırganlar GPU’nla Ne Düşünüyor?
Eskiden ele geçirilen sunucular doğrudan Monero madenciliğine koşulurdu. Günümüzde işlem gücü çok daha sofistike bir amaç için sömürülüyor.
Ele geçirilen bu sunucular genelde Bizarre Bazaar gibi yeraltı platformlarında erişim satışı (brokerage) ve monetizasyon operasyonları için kullanılıyor. Ancak bazı gelişmiş tehdit aktörleri artık LLMjacking yöntemini bir adım ileri taşıdı. Sızdıkları Ollama sunucularına karmaşık, otonom hacking hatları kurmaya başladılar. Kendi zararlı kodlarını veya siber saldırı mantıklarını işlemek için senin sistemindeki Llama 3 veya Mistral modellerini birer düşünme motoru olarak kullanıyorlar. Siber saldırının ardındaki muhakeme sürecini senin makinen yürütüyor, işlem yükünü senin donanımın çekiyor. Modelinin içinde barındırdığı kurumsal veriler veya prompt geçmişinin sızdırılması işin sadece tuzu biberi.
Hızlı Kontrol: Kurban Mısınız?
Sisteminizin internete açık olup olmadığını saniyeler içinde test edebilirsiniz. Önce sistemin hangi portları dinlediğine bakalım:
Linux:
ss -tlnp | grep 11434
Windows:
netstat -ano | findstr 11434
Eğer çıktıdaki adres 127.0.0.1:11434 veya [::1]:11434 ise güvendesiniz. Ancak 0.0.0.0:11434 veya :::11434 görüyorsanız, tehlike çanları çalıyor demektir. Emin olmak için telefonunuzun mobil verisi gibi dış bir ağdan sunucunuzun public IP adresine şu isteği atın:
curl http://PUBLIC_IP:11434/api/tags
Eğer cihazınızdaki modellerin listesini görüyorsanız, donanımınızın işlem gücü an itibarıyla tüm internetin kullanımına açıktır.
İşletim Sistemi Bazında Hardening ve Sıkılaştırma
Ollama, doğası gereği hiçbir kimlik doğrulama mekanizmasına sahip değildir. Güvenliği tamamen işletim sistemi ve ağ katmanında sağlamak zorundasınız.
Linux ve Systemd Kullanıcıları İçin
Eğer Ollama’yı standart bir Linux dağıtımında çalıştırıyorsanız, systemd servisini düzenleyerek IP bağlamasını güvenli hale getirin:
sudo systemctl edit ollama
Açılan override dosyasına şu satırları ekleyin:
[Service]
Environment="OLLAMA_HOST=127.0.0.1:11434"
Environment="OLLAMA_ORIGINS=http://localhost:*,http://127.0.0.1:*"
Ardından servisi yeniden başlatın ve UFW veya kullandığınız diğer güvenlik duvarları üzerinden 11434 portunu dışarıya kapatın:
sudo ufw deny 11434
sudo systemctl daemon-reload
sudo systemctl restart ollama
Windows Kullanıcıları İçin
Windows üzerinde Ollama, ağ arayüzünü belirlerken sistem ortam değişkenlerine saygı duyar.
- Başlat menüsünden Ortam Değişkenlerini Düzenle menüsünü açın.
- Yeni bir sistem değişkeni oluşturun:
- Değişken Adı:
OLLAMA_HOST - Değişken Değeri:
127.0.0.1:11434
- Değişken Adı:
- Kritik Adım: Ortam değişkenlerinin aktif olması için Ollama uygulamasını sağ alt köşedeki sistem tepsisinden Quit Ollama diyerek tamamen kapatın ve baştan çalıştırın. Arka planda çalışmaya devam ederse eski 0.0.0.0 ayarında kalır.
Güvenli Uzaktan Erişim Nasıl Yapılır?
“Evdeki bilgisayarımdaki modele ofisten erişmek istiyorum” diyorsanız, bunu 0.0.0.0 yaparak çözemezsiniz. İşte endüstri standardı yöntemler:
1. Tailscale Önerilen Yöntem:
Hiçbir port açmadan cihazlarınızı WireGuard tabanlı özel bir mesh ağına dahil edin. Ollama 127.0.0.1’de kalmaya devam etsin; diğer cihazlarınızdan Tailscale’in atadığı özel IP üzerinden zaten güvenle erişebileceksiniz.
2. Reverse Proxy ve Kimlik Doğrulama: Eğer mutlaka public internetten erişim gerekiyorsa, Ollama’yı bir Reverse Proxy arkasına alıp SSL/TLS ve kimlik doğrulama eklemelisiniz.
Nginx Basic Auth Örneği:
server {
listen 443 ssl;
server_name ollama.siteniz.com;
auth_basic "Ollama API Korumasi";
auth_basic_user_file /etc/nginx/.htpasswd;
location / {
proxy_pass http://127.0.0.1:11434;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Authorization ""; # kritik: Nginx kimlik doğrulamasını Ollama'ya sızdırmamak için
proxy_read_timeout 600s; # büyük modellerin yanıt süreleri için
proxy_buffering off; # LLM streaming desteği için
}
}
Caddy Basic Auth Örneği:
ollama.siteniz.com {
basicauth {
kullanici_adi sifre_hashi
}
reverse_proxy 127.0.0.1:11434
}
Not: Eğer bu API altyapısını Cursor veya Continue.dev gibi dışarıdaki bir uygulamaya bağlayacaksanız, Nginx üzerinden statik bir Bearer Token doğrulaması yapılandırmak daha modern bir yaklaşım olacaktır.
Gelişmiş İzolasyon Notları
Daha paranoyak sistem yöneticileri için birkaç kritik katman daha mevcuttur:
- Destructive Endpoint Kısıtlaması: Proxy seviyesinde
/api/delete,/api/pullve/api/createuç noktalarına yapılan istekleri tamamen engelleyin. Dışarıdan yalnızca/api/generateve/api/chatkullanımına izin verin. - Rate Limiting: Sunucunuzun DDoS kurbanı olmaması veya GPU’nun aşırı yükten çökmemesi için saniyedeki istek sayısını Reverse Proxy üzerinden kısıtlayın.
- Systemd Sandboxing: Ollama servisine
ProtectSystem=strict,PrivateTmp=trueveProtectHome=read-onlyvererek model dizinini işletim sisteminin geri kalanından izole edin.
Sıfır Güven: Kendi Yaklaşımım
Bulut mimarilerinde artık duvarlar yerine sıfır güven politikası konuşuluyor. OWASP’ın güncel GenAI güvenlik çerçeveleri bu gerçeğin altını çizerek vurguluyor. Geleneksel güvenlik duvarları yapay zeka servislerini korumak için yetersiz kalıyor. Tek doğru yol olmasa da, bu prensipleri NixOS konfigürasyonumda declarative olarak nasıl uyguladığıma bakalım:
services.ollama = {
host = "127.0.0.1";
openFirewall = false;
};
environmentVariables = {
OLLAMA_ORIGINS = "http://localhost:*,http://127.0.0.1:*,app://*,vscode-webview://*";
};
Son teknoloji donanımlar güçlüdür ancak yapılandırma eksiklikleri yüzünden saniyeler içinde başkasının silahına dönüşebilir. AI dünyasındaki güvenlik standartlarının hızla olgunlaştığı bu dönemde, sistemlerimizi korumak için sadece portları kapatmak yetmez; ağ erişimini hücresel düzeyde kısıtlamak zorundayız. Aksi takdirde, bir sonraki siber saldırının yükünü senin masanın altındaki o sessiz makine çekiyor olabilir.