Komut Enjeksiyonu (Command Injection) ve RCE Nedir? Korunma
Komut enjeksiyonu, kullanıcı girdisinin işletim sistemi komutuna güvensiz geçmesiyle saldırganın sunucuda komut çalıştırmasıdır ve uzaktan kod çalıştırmaya (RCE) yol açar. Türleri, parametreli çağrı ve izin listesi savunması, KAOS ile tespit ve sık sorulan sorular.
Hızlı cevap: Komut enjeksiyonu (Command Injection), bir web uygulamasının kullanıcı girdisini işletim sistemi komutuna güvenli biçimde ayırmadan geçirmesi sonucu, saldırganın sunucuda kendi komutlarını çalıştırabilmesidir. En tehlikeli web açıklarından biridir çünkü doğrudan uzaktan kod çalıştırmaya (RCE, Remote Code Execution) yol açar: saldırgan dosya okuyabilir, veri çalabilir, sunucuyu ele geçirebilir. Örneğin bir site ping atma özelliği sunuyor ve girdiğiniz adresi doğrudan sistem komutuna ekliyorsa, adres yerine ek bir komut yazarak sunucuda çalıştırabilirsiniz. Kök çözüm tektir: kullanıcı girdisini asla komut satırına birleştirmemek, bunun yerine parametreli ve güvenli sistem çağrıları kullanmak.
Komut enjeksiyonu, OWASP Top 10 içindeki enjeksiyon ailesinin en yıkıcı üyesidir. SQL enjeksiyonu veritabanını hedef alırken, komut enjeksiyonu doğrudan işletim sistemini hedef alır ve başarılı olursa saldırgana sunucunun tamamı üzerinde denetim verir. Bu yazı, komut enjeksiyonunun nasıl oluştuğunu, hangi savunmaların işe yaradığını ve nasıl doğru test edildiğini anlatır.
Komut enjeksiyonu nasıl oluşur
Sorun, uygulamanın bir işi yaparken işletim sistemine başvurması ve bunu yaparken kullanıcı girdisini komuta gömmesidir. Tipik örnekler:
- Bir adres girip "ağ bağlantısını test et" dediğinizde uygulamanın arka planda bir ping komutu çalıştırması.
- Yüklenen bir dosyayı dönüştürmek için bir sistem aracını çağırması.
- Bir alan adının kayıt bilgilerini almak için bir sistem sorgusu yapması.
Bu işlemlerde kullanıcı girdisi doğrudan komut metnine eklenirse, saldırgan komutu bölen ya da zincirleyen özel karakterlerle kendi komutunu ekleyebilir. Uygulama, bu ek komutu da masumca çalıştırır. Kritik nokta: uygulama girdiyi "veri" sanır, işletim sistemi ise onu "komut" olarak okur.
Komut enjeksiyonu türleri
| Tür | Belirti | Tespit |
|---|---|---|
| Doğrudan (yansıyan) | Komut çıktısı yanıtta görünür | Kolay, çıktıdan anlaşılır |
| Kör (blind) | Çıktı görünmez ama komut çalışır | Zaman gecikmesi ya da dışarı sinyalle |
| Zaman tabanlı kör | Yanıt süresi gecikir | Bekletme komutuyla ölçülür |
| Dışa veri sızdıran | Sonuç saldırgan sunucusuna gider | Ağ isteğiyle doğrulanır |
Kör komut enjeksiyonu özellikle tehlikelidir çünkü çıktı görünmediği için gözden kaçar, ama saldırgan yine de komut çalıştırabilir. Bu, SSRF gibi açıklarla birleşince etkiyi büyütür.
Doğru savunma
1. Sistem komutu çağırmaktan kaçının
En güçlü savunma, işi işletim sistemi komutu yerine dilin kendi güvenli kütüphanesiyle yapmaktır. Dosya işlemi, ağ sorgusu ya da dönüştürme için çoğu zaman komut satırına hiç gerek yoktur.
2. Parametreli ve güvenli çağrı kullanın
Komut çalıştırmak zorunluysa, girdiyi komut metnine birleştirmek yerine, komutu ve argümanlarını ayrı ayrı veren güvenli sistem çağrıları kullanılmalıdır. Böylece girdi her zaman argüman olarak kalır, hiçbir zaman komut olarak yorumlanmaz.
3. Girdi doğrulama, izin listesi
Girdi beklenen biçime göre katı kurallarla doğrulanmalıdır. Bir adres alanına yalnızca geçerli bir adres, bir dosya adına yalnızca izinli karakterler kabul edilmelidir. Yasak karakter aramak yerine, izin verilen dar kümeyi tanımlamak güvenlidir.
4. En az yetki ilkesi
Uygulamanın çalıştığı hesap, yalnızca ihtiyacı olan yetkiye sahip olmalıdır. Böylece bir enjeksiyon gerçekleşse bile saldırganın erişebileceği alan sınırlı kalır.
KAOS ile komut enjeksiyonu tespiti
Bu tür kritik açıkları, DSET'in geliştirdiği yapay zekâ destekli otonom güvenlik tarama motoru KAOS ile ölçekli biçimde tarıyoruz. KAOS çok-ajanlı mimarisiyle uygulamayı keşiften test aşamasına kadar dolaşır, bir komut enjeksiyonu belirtisi bulduğunda bunu kontrollü ve güvenli bir yükle doğrular ve yalnızca gerçekten çalıştığını gösterebildiği bulguyu raporlar. Böylece klasik tarayıcıların ürettiği yanlış pozitif yığını yerine, az ama kanıtlanmış ve önceliklendirilmiş bulgu elde edersiniz. KAOS insan uzmanın yerine değil, yanında çalışır: makine doğrular, uzman yorumlar ve çalışan bir kanıtla raporlar.
Sık sorulan sorular
Komut enjeksiyonu ile SQL enjeksiyonu aynı mı? Hayır. SQL enjeksiyonu veritabanı sorgusunu, komut enjeksiyonu işletim sistemi komutunu hedef alır. Komut enjeksiyonu genelde daha yıkıcıdır çünkü doğrudan sunucu kontrolü verebilir.
Girdideki tehlikeli karakterleri filtrelemek yeterli mi? Tek başına güvenilmez. Kara liste yaklaşımı her zaman atlatılabilir. Güvenli olan, komutu hiç birleştirmemek ve parametreli çağrı ile izin listesi kullanmaktır.
Kör komut enjeksiyonu nasıl fark edilir? Çıktı görünmese bile, sunucuya bir bekletme komutu ya da dışarı ağ isteği yaptırılarak komutun çalıştığı dolaylı olarak kanıtlanır.
Bu açık ne kadar ciddi? Çok ciddi. Başarılı bir komut enjeksiyonu genelde tam sunucu ele geçirmeye ve veri ihlaline yol açar. Öncelikli olarak kapatılması gereken kritik bir bulgudur.
Kaynaklar
- OWASP, Command Injection: https://owasp.org/www-community/attacks/Command_Injection
- OWASP, OS Command Injection Defense Cheat Sheet: https://cheatsheetseries.owasp.org
- MITRE, CWE 78: https://cwe.mitre.org/data/definitions/78.html
- PortSwigger Web Security Academy, OS command injection: https://portswigger.net/web-security/os-command-injection
Uygulamanızdaki komut enjeksiyonu ve uzaktan kod çalıştırma açıklarını KAOS ve uzman ekibimizle çalışan kanıtla tespit ettirmek için DSET ile iletişime geçin. Ankara Hacettepe Teknokent laboratuvarımızdan sızma testi ve güvenli kod denetimi hizmeti veriyoruz.
Kimliğinizi doğrulayın
Yetkilendirilmiş erişim alanı. Tüm giriş denemeleri kayıt altına alınır.