OS Command Injection Nedir?

Ana Sayfa » Application Security » OS Command Injection Nedir?

OS Command Injection kullanıcıdan alınan verilerin doğrudan işletim sistemi komutları olarak işlenmesi durumunda gerçekleşir. Örneğin, bir web uygulaması belirli dosya işlemleri veya ağ komutları için kullanıcı girdilerini bir sistem komutuna dahil ettiğinde, bu girdi manipüle edilerek sisteme istenmeyen komutlar iletilebilir. PHP, Python veya Perl gibi dillerde kullanılan exec(), system() veya shell_exec() gibi fonksiyonlar aracılığıyla sıkça yapılan çağrılarda bu zaafiyet ortaya çıkabilir​​.

OS Command Injection Çeşitleri

  1. Basit Komut Enjeksiyonu: Saldırgan, işletim sistemi komutlarının arasına özel karakterler ekleyerek bir dizi komut çalıştırır.
  2. Zincirleme Komutlar: Birden fazla komut “&&” veya “|” gibi karakterler ile zincirlenir. Örneğin, ping komutuna eklenen ; rm -rf / gibi bir komut tüm dosya sistemini silebilir.
  3. Değişken Manipülasyonu: Çevre değişkenlerinin veya sistem yollarının manipülasyonu ile hedeflenen komut üzerinde değişiklik yapılır.

OS Command Injection Örnekleri

Senaryo 1: Kullanıcıdan alınan IP adresini ping komutu ile kontrol eden bir PHP betiği bulunmaktadır. Ancak girdi doğrulaması yapılmadığı için enjeksiyon saldırısına açık hale gelir:

os command injection

Kodda $ip değişkeni doğrudan shell_exec fonksiyonuna iletiliyor. Saldırgan, ip parametresine özel bir komut girerek betiği kötüye kullanabilir.

Saldırgan aşağıdaki gibi bir URL kullanarak sisteme yetkisiz erişim sağlayabilir:

http://example.com/ping.php?ip=127.0.0.1; ls

Bu komut, ping işlemine ek olarak ls komutunu çalıştırarak sunucuda bulunan dosyaları listeleyebilir.

Senaryo 2: Command Chaining saldırganların sıkça başvurduğu yöntemlerden biri komut zincirlemedir. Örneğin, bir web uygulaması bir kullanıcıdan giriş alıp onu bir komutla birleştiriyorsa, bu girdiyle başka bir komut zincirlenerek kötü amaçlı işlemler yapılabilir.

os command injection

Bu örnekte saldırgan filename parametresine şu değeri verebilir:

filename=test.txt; rm -rf /var/www/html

Sonuç

  • cat test.txt komutunu çalıştırarak test.txt içeriğini ekrana basar.
  • Ardından, ; karakteri ile yeni bir komut zincirlenir: rm -rf /var/www/html, bu da belirtilen klasörü tamamen siler.

SQL ve OS Command Injection Birleşimi

Bazı sistemlerde SQL ve OS komutları bir arada kullanılabilir ve SQL enjeksiyonu yoluyla OS komutları enjekte edilebilir.

PHP ile SQL ve OS Command Injection

Aşağıdaki kodda kullanıcıdan alınan username doğrudan bir SQL sorgusuna ekleniyor ve sorgunun sonucu işletim sistemi komutu ile birleştiriliyor:

os-command-injection

Burada, username değeri doğrudan OS komutuna dahil edilmiştir. Bir saldırgan, aşağıdaki gibi bir komut enjekte edebilir:

username=admin; rm -rf /var/www/html

Bu durumda awk komutuna eklenen rm -rf /var/www/html sunucudaki dosyaların silinmesine yol açacaktır.

Korunma

Bu tür enjeksiyon saldırılarından kaçınmak için SQL sorgularında prepare ve bind işlemleri kullanılmalı ve işletim sistemi komutları için escapeshellarg gibi güvenlik önlemleri alınmalıdır.

OS Command Injection Korunma Yöntemleri

1. Girdi Doğrulama ve Temizleme

  • Sıkı Girdi Doğrulama: Kullanıcıdan alınan tüm girdiler doğrulanmalı ve yalnızca belirli bir karakter setini kabul edecek şekilde sınırlandırılmalıdır. Örneğin, yalnızca IP adresi kabul eden bir giriş alanı sadece sayılar ve nokta (.) içermelidir.
  • Beyaz Liste Kullanımı: Girdi doğrulaması yapılırken beyaz liste yöntemi kullanmak, yalnızca izin verilen ve güvenli kabul edilen girdilerin işlenmesini sağlar.
  • Escaping ve Filtreleme: escapeshellarg() veya escapeshellcmd() gibi fonksiyonlar kullanılarak girdiler OS komutlarına güvenli bir şekilde iletilebilir.

2. Parametrik Komut Kullanımı

  • Komut Parametrelerini Kullanmak: İşletim sistemine gönderilecek girdiler için doğrudan kullanıcı girdi değeri kullanmak yerine, komut parametreleriyle iletmek güvenliği artırır.
  • shell=True’den Kaçınma: Python gibi dillerde subprocess.run kullanılırken shell=True argümanını kullanmamak enjeksiyonu önlemeye yardımcı olur.

3. Yetki Yönetimi ve Erişim Kontrolü

  • Minimum Yetki İlkesi: OS komutlarını çalıştıran uygulamalar, yalnızca minimum yetkilerle çalıştırılmalıdır. Böylece bir komut enjeksiyonu gerçekleştiğinde saldırganın yetkileri sınırlı olur.
  • Erişim ve Kullanıcı Yönetimi: Uygulama, gereksiz izinlerden kaçınarak yalnızca belirli kullanıcıların komut çalıştırmasını sağlamalıdır. Yönetici yetkileri mümkün olduğunca sınırlandırılmalıdır.

4. Güvenli Kodlama Standartlarını Takip Etme

  • Kod İncelemesi ve Güvenlik Testleri: Kod incelemeleri, özellikle hassas işlevlerdeki potansiyel enjeksiyon risklerini belirlemede etkilidir. Güvenlik taramaları ve penetrasyon testleri ile bu zafiyetler proaktif olarak tespit edilebilir.
  • Static ve Dynamic Code Analysis: Kod güvenliği araçları (örneğin, Synopsys Coverity, Seeker) kullanarak kod üzerinde hem statik hem de dinamik analizler yapmak, güvenlik açıklarını erken tespit etmeye yardımcı olur.

5. Hazır Güvenlik Fonksiyonlarını Kullanmak

  • Güvenli Komutlar: Sistem komutları yerine, programlama dilinin sağladığı güvenli işlevler tercih edilmelidir. Örneğin, dosya işlemleri için doğrudan OS komutları yerine PHP’nin file_get_contents veya unlink gibi yerleşik fonksiyonları kullanılmalıdır.
  • Girdi için URL ve Form Encode Kullanımı: HTML formları ve URL parametreleri için urlencode veya htmlspecialchars gibi işlevler kullanılarak giriş verileri güvenli hale getirilmelidir.

6. Yalnızca Güvenli API’ler ve Kütüphaneleri Kullanın

  • API Kullanımı: Uygulama, doğrudan OS komutları çalıştırmak yerine güvenli API’ler veya kütüphaneler üzerinden sistemle etkileşime geçmelidir. Örneğin, dosya işlemleri için Python veya PHP gibi dillerin sunduğu güvenli kütüphaneler kullanılabilir.
  • Güvenli Güncellemeler: Kullanılan kütüphanelerin ve bağımlılıkların en güncel ve güvenli versiyonlarının kullanıldığından emin olunmalıdır.

7. Güncel Güvenlik Önlemleri ve Yama Yönetimi

  • Sistem Güncellemeleri ve Yama Yönetimi: Sunucu ve uygulamaların güncellemeleri düzenli olarak yapılmalıdır. Özellikle OS komutları çalıştıran uygulamalarda işletim sisteminin güncel olması önemlidir.
  • WAF Kullanımı: Web Application Firewall (WAF) gibi güvenlik çözümleri kullanarak, OS komut enjeksiyonuna karşı koruma sağlanabilir. WAF, özellikle tehlikeli giriş dizgilerini (örn., ;, &&, |) filtreleyebilir ve güvenlik seviyesini artırabilir.

Bu önlemler OS Command Injection ataklarına karşı güçlü bir savunma sağlayacak ve uygulama güvenliğini artıracaktır.

OS Command Injection Nedir? - Yorumlar

YORUMLARINIZI PAYLAŞIN

 

Yapılan Yorumlar

BENZER İÇERİKLERİlginizi çekebilecek diğer içerikler

DevSecOps Nedir?

DevSecOps Nedir? 04 Aralık 2024

Web Uygulama Güvenliği

Web Uygulama Güvenliği 04 Kasım 2024

www.irfankocak.com

İrfan KOÇAK - Tüm Hakları Saklıdır