BrassCoders, inceledikleri on beş yapay zeka tarafından oluşturulmuş Python betiğinden ikisinde kod içine gömülmüş gizli bilgiler (hard-coded secrets) keşfetti; bu durum, doğrudan büyük dil modeli çıktılarını kopyalayıp yapıştıran geliştiriciler için somut bir risk oluşturuyor. Bulgular, tek bir yanlış yerleştirilmiş anahtar veya parolanın, yardımcı bir kod parçasını versiyon kontrol ve üretim ortamları genelinde bir kimlik bilgisi sızıntısına dönüştürebileceğini gösteriyor.
Test neyi ortaya çıkardı
İlk betik olan token_check.py, oturum jetonlarını (session tokens) imzalamak için bir fonksiyon isteyen ve "kullanılabilir bir örnek" içeren bir istemden (prompt) üretilmişti. Kodun çalıştırılabilir olması için model, kaynak dosyaya doğrudan bir HMAC imzalama anahtarı yerleştirdi.
- Sorun: Gizli anahtar kod tabanında bulunuyor.
- Risk: Depoya okuma erişimi olan herkes anahtarı görebilir ve dosyayı çeken her dağıtım bu sırrı devralır.
- Sonuç: Anahtarı ele geçiren bir saldırgan, geçerli oturum jetonları sahtesini oluşturarak kimlik doğrulama kontrollerini atlatabilir.
İkinci betik olan email_sender.py, SMTP üzerinden e-posta gönderen bir fonksiyon talebine yanıt olarak oluşturuldu. Model, örneğin doğrudan çalışabilmesi için yine gerçek bir parola sağladı.
- Sorun: Parola, fonksiyon çağrısında düz metin dizisi olarak görünüyor.
- Risk: Parolanın yenilenmesi kod değişikliği ve yeni bir dağıtım gerektirir; ayrıca kimlik bilgisi dosyayı kullanan her ortama yayılır.
- Sonuç: Parola kaynak kontrolünden, günlüklerden (logs) veya derlenmiş paketlerden ele geçirilebilir ve bu da bir saldırgana posta sunucusuna yetkisiz erişim sağlar.
Yapay zeka neden sırlar üretiyor
Büyük dil modelleri, istemi tamamlayarak metin üretir. Bir kullanıcı "kullanılabilir bir örnek" istediğinde, model bunu "ek bir kurulum gerektirmeden çalışan kod" olarak yorumlar. Bu nedenle eksik değerleri —API anahtarları, parolalar, jetonlar— makul yer tutucularla doldurur. İstemde açıkça belirtilmediği sürece modelin gizli bilgi yönetimi en iyi uygulamaları hakkında bir farkındalığı yoktur.
Veracode'un yapay zeka tarafından oluşturulan kodlara yönelik yakın tarihli bir analizi, kod parçacıklarının %45'inin OWASP Top 10 listesinde yer alan en az bir güvenlik açığı içerdiğini ve kimlik bilgisi ifşasının bunun önemli bir kısmını oluşturduğunu buldu. Bu istatistik, sorunun sadece birkaç istisnai durumla sınırlı olmadığını; bu modellerin eğitilme ve istemlerle yönlendirilme biçiminin sistemsel bir yan ürünü olduğunu vurguluyor.
Geliştiricilerin şu an alabileceği önlemler
En basit savunma, herhangi bir sırrı kod dosyasının kendisinden uzak tutmaktır. Ortam değişkenleri (environment variables) en yaygın ve dilden bağımsız yöntemdir:
# token_check.py – secure version
import os
import hmac
import hashlib
SECRET_KEY = os.environ["HMAC_SECRET_KEY"]
def sign_token(data: bytes) -> str:
return hmac.new(SECRET_KEY.encode(), data, hashlib.sha256).hexdigest()
# email_sender.py – secure version
import os
import smtplib
smtp_password = os.environ["SMTP_PASSWORD"]
server = smtplib.SMTP("smtp.example.com", 587)
server.starttls()
server.login("noreply@example.com", smtp_password)
os.environ kullanmak, değeri çalışma zamanı ortamından çeker, böylece sırrı versiyon kontrolünden uzak tutar ve kaynak dosyalarına dokunmadan yenilenmesine olanak tanır. Aynı yöntem, commit'lerden hariç tutulan yapılandırma dosyaları, gizli bilgi yönetimi servisleri veya konteyner orkestrasyonu ile yönetilen sırlar için de geçerlidir.
Ek güvenlik önlemleri
- Yaygın gizli bilgi kalıplarıyla (örneğin uzun alfanümerik diziler) eşleşen düz metin dizilerini işaretleyen kod incelemeleri.
- Yeni eklenen dosyalardaki kod içine gömülmüş kimlik bilgilerini tespit etmek için optimize edilmiş statik analiz araçları.
- Prompt mühendisliği: Modelden açıkça "tüm sırlar için ortam değişkenlerini kullanmasını" veya "gerçek kimlik bilgilerini dahil etmemesini" istemek.
- Üretim sonrası linting: Kodu bir projeye kopyalamadan önce şüpheli sabitleri arayan hızlı bir betik çalıştırmak.
Karşı görüş: Bu, yapay zeka kodunun güvensiz olduğu anlamına mı gelir?
Kod içine gömülmüş sırların varlığı, yapay zeka tarafından oluşturulan kodların evrensel olarak güvensiz olduğu anlamına gelmez. Birçok durumda model, geliştirmeyi hızlandırabilecek temiz ve iyi yapılandırılmış mantık üretir. Risk, geliştiricilerin çıktıyı bir güvenlik denetiminden geçirmeden üretime hazır kabul etmesiyle ortaya çıkar. Yapay zekayı yerleşik güvenlik uygulamalarının bir ikamesi olarak değil, bir taslak asistanı olarak görün.
Bundan sonra nelere dikkat edilmeli
- Araç güncellemeleri: Yapay zeka platformları, sırları yer tutucularla değiştiren güvenlik filtrelerini bünyesine katmaya başlıyor. Bu değişiklikleri takip etmek risk maruziyetini azaltabilir.
- Politika değişiklikleri: Kuruluşlar, yapay zeka destekli kodlama için kılavuzlar oluşturabilir ve CI süreçlerinin bir parçası olarak gizli bilgi yönetimi kontrollerini zorunlu kılabilir.
- Topluluk modelleri: Geliştiriciler daha fazla "güvenli istem" paylaştıkça, jeton imzalama veya e-posta gönderimi gibi yaygın görevler için en iyi uygulama şablonları varsayılan çıktı haline gelebilir.
Özet: Yapay zeka saniyeler içinde işlevsel kod üretebilir, ancak geliştiriciler gizli bilgi yönetimi disiplinini uygulamazlarsa, bu kolaylık tüm bir sistemi tehlikeye atabilecek ifşa olmuş kimlik bilgileri gibi gizli bir maliyetle gelir. Her kod parçasını bir taslak olarak değerlendirin, içindeki tüm açık gizli bilgileri temizleyin ve commit etmeden önce bunları ortam değişkenleri veya özel bir kasa (vault) aracılığıyla enjekte edin.
