Aikido

Kodunuzdaki olası enjeksiyon güvenlik açıklarını neden tespit etmelisiniz?

Güvenlik

Giriş

Enjeksiyon kusurları, en tehlikeli ve uzun süredir var olan yazılım güvenliği sorunları arasında yer almaktadır. Bu kusurlar, güvenilir olmayan girdilerin uygun bir doğrulama veya kaçış işlemi yapılmadan doğrudan sorgulara, komutlara veya kod yorumlayıcılara aktarılması durumunda 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 diller üzerinde yoğunlaşırken, Aikido’nun yapay zeka destekli kod kalitesi motoru artık Perl, Haskell, Groovy, Erlang, Zig, Delphi, PowerShell, COBOL, ABAP, Visual Basic, Pascal ve ColdFusion gibi SAST araçlarının genellikle gözden kaçırdığı dillerde enjeksiyon güvenlik açıklarını tespit ediyor.

Bu kural, ekibinizin hangi dili kullanırsa kullansın, güvenli olmayan sorgu veya komut yapılarının üretim ortamına ulaşmadan önce tespit edilmesini sağlar.

Neden önemli?

Enjeksiyon açıkları hâlâ OWASP Top 10 güvenlik risklerinden biri olmaya devam etmektedir.

Bunları eklemek kolaydır, ancak özellikle eski veya daha az yaygın dillerde manuel inceleme yoluyla tespit edilmesi genellikle zordur.

Koruyucu önlemler olmadan:

  • Saldırganlar, dinamik olarak oluşturulan dizelere SQL veya işletim sistemi komutları ekleyebilir.
  • Hassas veriler dışarı sızdırılabilir veya imha edilebilir.
  • Kod çalıştırma imkânı varsa, sistemlerin tamamı ele geçirilebilir.

Bu kuralın uygulanmasıyla, sorgu veya komut oluşturan her kod parçası parametreli API’leri, güvenli kütüphaneleri veya kaçış işlevlerini kullanmak zorunda kalacak ve bu da saldırı yüzeyini önemli ölçüde azaltacaktır.

❌ Kurallara Uygun Olmayan Örnek

Aşağıda PowerShell'de bir örnek verilmiştir, ancak aynı sorun birçok programlama dilinde de ortaya çıkmaktadır.

# Güvenli değil: Kullanıcı girdisi doğrudan bir sistem komutuna eklenmiştir
$userInput = Read-Host "Kullanıcı adını girin"
Invoke-Expression ("net user " + $userInput)

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

Bir saldırgan, “john && del C:\* /Q” komutunu girerek zararlı bir eyleme 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, liste olarak aktarılır.
  • Giriş, beyaz liste düzenli ifadesi kullanılarak doğrulanır.
  • Güvenilmeyen hiçbir veri, kaçış karakterleri eklenmeden kabuğa asla ulaşmaz.

Aikido Security'de deneyin

Bu kuralı doğrudan Aikido’nun Kod Kalitesi aracında etkinleştirebilirsiniz.

Etkinleştirildiğinde, yerel SAST kapsamı bulunmayan diller de dahil olmak üzere desteklenen tüm dillerde enjeksiyon kalıplarını otomatik olarak tarar.

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

  • Sistem, yeni ve değiştirilmiş kodları inceler.
  • Komut, sorgu veya yorumlayıcı çağrıları içindeki dize birleştirme veya interpolasyon kullanımlarını işaretler.
  • Rapor, sorunun tam olarak nerede olduğunu ortaya koyuyor ve kısa bir çözüm önerisi sunuyor (örneğin, “Parametreli API’ler veya doğrulanmış girdiler kullanın”).

Bu kural her PR’da çalışır ve farklı dillerin bir arada bulunduğu depolarda bile tutarlı bir koruma sağlar.

Sonuç

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

Bu kural, güvenli olmayan birleştirme işlemlerini tespit ederek ve güvenli sorgu oluşturma uygulamalarını zorunlu kılarak, enjeksiyon saldırılarının tüm türlerini üretim ortamına 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 hiçbir zaman ulaşamadığı kadar geniş bir alanı kapsar.

Sık Sorulan Sorular

Sorularınız mı var?

Bu kural hangi tür enjeksiyonları tespit eder?

SQL, komut, LDAP ve kod enjeksiyon kalıplarını, kullanıcı tarafından kontrol edilen verilerin yürütülebilir dizelere eklenmiş olduğu her yerde tespit eder.

Bu özellik yalnızca desteklenen SAST dilleri için mi geçerli?

Hayır. Bu kural, SAST’ın bulunmadığı veya yeterince kapsamlı olmadığı dilleri de kapsama dahil eder; örneğin, PowerShell, COBOL veya Haskell.

Tespit ne kadar hassastır?

Veritabanı, kabuk veya yorumlayıcı çağrılarında dize birleştirme veya interpolasyon gibi yüksek riskli yapıları işaretler. Kural, dil özelliklerini dikkate aldığı için yanlış pozitif sonuçlar nadiren görülür.

Aikido, telafi sürecini nasıl ele alır?

Bir ihlal tespit edildiğinde, araç hazır ifadeler, parametreli API’ler veya beyaz liste tabanlı doğrulama gibi daha güvenli alternatifler önerir.

Neden sadece girdi doğrulamasına güvenmiyoruz?

Doğrulama tek başına güvenliği garanti edemez. Doğru parametre ayarlaması, güvenilir olmayan girdilerin sorgu 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.