Aikido

Kodunuzdaki potansiyel enjeksiyon (injection) açıklarını neden tespit etmelisiniz?

Güvenlik

Giriş

Enjeksiyon kusurları, en tehlikeli ve en kalıcı yazılım güvenliği sorunları arasındadır. Güvenilmeyen girdilerin, uygun doğrulama veya karakter kaçırma (escaping) yapılmadan doğrudan sorgulara, komutlara veya kod yorumlayıcılarına aktarılmasıyla ortaya çıkar. Bu durum, yetkisiz erişime, veri bozulmasına veya sistemin tamamen ele geçirilmesine yol açabilir.

Geleneksel SAST araçları JavaScript, Python veya Java gibi yaygın dillere odaklanırken, Aikido'nun yapay zeka destekli kod kalitesi motoru artık SAST araçlarının genellikle gözden kaçırdığı Perl, Haskell, Groovy, Erlang, Zig, Delphi, PowerShell, COBOL, ABAP, Visual Basic, Pascal ve ColdFusion gibi dillerdeki enjeksiyon açıklarını da tespit ediyor.

Bu kural, ekibinizin hangi dili kullandığından bağımsız olarak, güvenli olmayan sorgu veya komut oluşturma işlemlerinin daha prod ortamına ulaşmadan yakalanmasını sağlar.

Neden önemli?

Enjeksiyon kusurları, OWASP Top 10 güvenlik risklerinden biri olmaya devam etmektedir.

Bunların ortaya çıkması kolaydır ancak özellikle eski (legacy) veya daha az yaygın dillerde manuel inceleme yoluyla tespit edilmesi genellikle zordur.

Koruma önlemleri olmadığında:

  • Saldırganlar dinamik olarak oluşturulan dizgelere (string) SQL veya işletim sistemi komutları enjekte edebilir.
  • Hassas veriler dışarı sızdırılabilir veya yok edilebilir.
  • Kod yürütmek mümkünse tüm sistemler ele geçirilebilir.

Bu kuralın uygulanmasıyla birlikte, sorgu veya komut oluşturan her kod parçasının parameterized API'ler, güvenli kütüphaneler veya escape fonksiyonları kullanması zorunlu hale gelir ve saldırı yüzeyi dramatik ölçüde azaltılır.

❌ Uygun Olmayan Örnek

Aşağıda PowerShell ile yazılmış bir örnek bulunmaktadır, ancak aynı sorun birçok dilde karşımıza çıkar.

# Güvensiz: kullanıcı girdisi doğrudan bir sistem komutuyla birleştiriliyor
$userInput = Read-Host "Enter username"
Invoke-Expression ("net user " + $userInput)

Bunun güvenli olmama nedeni: Invoke-Expression, dinamik olarak oluşturulmuş bir komutu çalıştırır.

Bir saldırgan john && del C:\* /Q şeklinde girdi vererek yıkıcı davranışlara yol açabilir.

✅ Uygun Örnek

# Safe: use parameterized or validated command execution
$userInput = Read-Host "Enter username"

if ($userInput -match '^[a-zA-Z0-9_-]+$') {
    Start-Process "net" -ArgumentList "user", $userInput
} else {
    Write-Host "Invalid input"
}

Bunun neden güvenli olduğu:

  • Komut argümanları, birleştirilmiş bir dize olarak değil, bir liste olarak iletilir.
  • Girdi, beyaz liste (whitelist) regex kullanılarak doğrulanır.
  • Güvenilmeyen hiçbir veri, kaçış karakterleri eklenmeden kabuğa (shell) ulaşmaz.

Aikido Security'de deneyin

Bu kuralı doğrudan Aikido's Code Quality aracında etkinleştirebilirsiniz.

Etkinleştirildiğinde, yerel SAST desteği olmayanlar dahil olmak üzere desteklenen tüm dillerde enjeksiyon kalıplarını otomatik olarak tarar.

Bir geliştirici her pull request açtığında:

  • Sistem, yeni ve değiştirilen kodu inceler.
  • Komut, sorgu veya yorumlayıcı (interpreter) çağrılarında dize birleştirme (concatenation) veya enterpolasyon kullanımını işaretler.
  • Rapor, tam satırı vurgular ve kısa bir düzeltme önerisi sunar (örneğin, "Parametrizeli API'ler veya doğrulanmış girdiler kullanın").

Bu kural her PR'da çalışarak, çok dilli (mixed-language) depolar da dahil olmak üzere tutarlı koruma sağlar.

Sonuç

Dinamik dize oluşturma, kritik güvenlik ihlallerine yol açabilecek en basit hatalardan biridir.

Bu kural; güvenli olmayan birleştirmeleri tespit ederek ve güvenli sorgu oluşturma pratiklerini zorunlu kılarak, enjeksiyon saldırılarını henüz üretime ulaşmadan önler.

Dil ne olursa olsun Aikido'nun akıllı analizi; statik ve yapay zeka destekli korumayı bir araya getirerek geleneksel araçların erişebileceğinden çok daha geniş bir alanı kapsar.

Sık Sorulan Sorular

Sorularınız mı var?

Bu kural tür olarak hangi enjeksiyonları algılar?

SQL, komut, LDAP ve kod enjeksiyonu kalıplarını, yani kullanıcı kontrollü verilerin yürütülebilir dizelerle birleştirildiği her yeri algılar.

Yalnızca desteklenen SAST dilleri için mi çalışır?

Hayır. Bu kural; kapsamı, SAST'ın bulunmadığı veya yetersiz kaldığı dillere (örneğin PowerShell, COBOL veya Haskell) kadar genişletir.

Algılama ne kadar katı?

Veritabanı, kabuk (shell) veya yorumlayıcı çağrılarındaki dize birleştirme veya enterpolasyon gibi yüksek riskli yapıları işaretler. Kural dile duyarlı olduğundan yanlış pozitifler (false positive) nadirdir.

Aikido düzeltme (remediation) sürecini nasıl yönetir?

Bir ihlal bulunduğunda araç, hazırlanan ifadeler (prepared statements), parametrizeli API'ler veya beyaz liste tabanlı doğrulama kullanmak gibi daha güvenli alternatifler önerir.

Neden yalnızca girdi doğrulamasına güvenmemeliyiz?

Yalnızca doğrulama yapmak güvenliği garanti edemez. Doğru parametre kullanımı, güvenilmeyen girdilerin sorguların veya komutların yapısını asla değiştirmemesini sağlar.

Şimdi güvenliğinizi sağlayın

Kodunuzu, bulutunuzu ve çalışma zamanınızı tek bir merkezi sistemde güvenceye alın.
Güvenlik açıklarını otomatik olarak hızla bulun ve düzeltin.

Kredi kartı gerekmez | Tarama sonuçları 32 saniyede.