Hoşgeldin Misafir

#STHM-Shelleri Tespit Etme

CW-ommah

17 Ocak 2022
905 Mesaj
TIM Görevleri
1

Aktiflik

Seviye

Deneyim

TIM / GÖREV:
Allah'ın Rahmeti Ve Bereketi Üzerinize Olsun
Selamun aleyküm dostlarım. Bu makalemizde, web shelleri nedir ve saldırganların bunları nasıl kullandığını. Web shelleri tespit ederken kullandığımız araçları beraber inceleyeceğiz Allah’ın izniyle.


Web Shell nedir?
Web shell’leri etkili bir şekilde tespit edebilmek için, onların ne olduğunu, saldırganların bunları nasıl kullandığını ve hangi güvenlik açıklarından yararlandıklarını anlamak önemlidir.
Web shell, hedef bir web sunucusuna yüklenen ve saldırganların uzaktan komut çalıştırmasına olanak tanıyan kötü amaçlı bir programdır. Web shell’ler genellikle hem bir ilk erişim yöntemi (dosya yükleme zafiyetleri aracılığıyla) hem de bir kontrol mekanizması olarak kullanılır.
Bir sunucu ele geçirildikten sonra, saldırganlar web shell kullanarak saldırı zinciri boyunca ilerleyebilir; keşif yapabilir, yetkilerini yükseltebilir, ağ içinde yatay hareket edebilir ve veri sızdırabilir.
Aşağıda, uzaktan komut çalıştırabilen ve awebshell.php adlı basit bir web shell örneği bulunmaktadır. Bu web shell’in, hedef sunucu olan 10.10.10.100 üzerindeki /uploads dizininde bulunduğuna dikkat edin.

11(1)(1).png

Web Shell Dağıtımı (Deployment)
Bir saldırganın bir web shell yükleyip çalıştırabilmesi için genellikle bir dosya yükleme zafiyeti, yanlış yapılandırma (misconfiguration) veya sisteme önceden elde edilmiş bir erişim gereklidir. Bu tür zafiyetler, bir uygulamanın dosya türünü, uzantısını, içeriğini veya yükleme hedefini doğru şekilde doğrulayamaması sonucu ortaya çıkar. Web shell’ler bir ilk erişim yöntemi olarak kullanılabildiği gibi, saldırgan sistemde zaten yer edinmişse uzun vadeli erişimi sürdürmek için bir kalıcılık (persistence) mekanizması olarak da kullanılabilir.
Evcil hayvan fotoğraflarınızı yüklemenize izin veren basit bir web sitesi düşünün. Bu web sitesi aslında yalnızca görüntü depolamak amacıyla tasarlanmıştır. Ancak güvensiz bir şekilde geliştirilmişse, bir saldırgan shell.php veya mydog.aspx gibi bir web shell yükleyerek sunucu üzerinde komut çalıştırma yetkisi elde edebilir.

Gerçek Hayattan Örnekler
Hafnium & ProxyLogon
Hafnium, Çin merkezli bir APT grubudur ve Windows Exchange sunucularına .aspx uzantılı web shell’ler yüklemiştir. Bu web shell’leri genellikle \inetpub\wwwroot\aspnet_client\ gibi dizinlere yerleştirmişlerdir. Ayrıca \install_path\FrontEnd\HttpProxy\owa\auth\ gibi dizinlerde bulunan mevcut .aspx dosyalarını değiştirdikleri de gözlemlenmiştir.
Web shell başarıyla yerleştirildikten sonra Hafnium; komut çalıştırma, keşif yapma, kimlik bilgilerini ele geçirme, yeni kullanıcı hesapları oluşturarak kalıcılık sağlama, ağ içinde yatay hareket etme, veri sızdırma ve tespit edilmemek için izlerini gizleme gibi faaliyetlere devam eder.

Conti Fidye Yazılımı Saldırganları
Conti fidye yazılımı saldırganları, Microsoft Exchange’te benzer bir zafiyeti kötüye kullanarak aspnetclient_log.aspx adlı bir dosyayı Hafnium ile aynı şekilde \aspnet_client\ dizinine yüklemiştir. İlk web shell yüklemesinden sadece birkaç dakika sonra, yedek bir web shell daha yüklemiş ve ağdaki bilgisayarları, etki alanı denetleyicilerini (domain controller) ve etki alanı yöneticilerini haritalandırmıştır.

Web Shell Anatomisi
Meşru Fonksiyonların Kötüye Kullanımı
Web shell’ler, programlar içinde bulunan meşru (legitimate) fonksiyonların kötüye kullanılmasına dayanır.
PHP’de bulunan shell_exec(), exec(), system() ve passthru() gibi sistem komutlarını çalıştırmaya yarayan fonksiyonlar, komut yürütme elde etmek için kötüye kullanılabilir.

Arka Planda Neler Olur (Under the Hood)
Aşağıda PHP ile yazılmış basit bir web shell örneği bulunmaktadır. İşlevselliğine bakalım:

  1. URL’de cmd parametresinin olup olmadığını kontrol eder (örnek: ?cmd=whoami)
  2. Kullanıcı tarafından girilen komutu $cmd değişkenine atar
  3. Komutu shell_exec() fonksiyonu ile çalıştırır
  4. Çıktıyı ekranda gösterir
  5. Kullanıcı arayüzü için HTML içerir
  6. Çalıştırılacak komut
  7. Çıktı
1776146353601.png

Web shell’ler karmaşıklık ve yetenek açısından farklılık gösterir. URL üzerinden komut çalıştıran basit tek satırlık yapılardan, grafiksel kullanıcı arayüzüne (GUI), parola korumasına ve yerleşik dosya yöneticilerine sahip gelişmiş arayüzlere kadar uzanabilirler.


Web Sunucu Logları
Web shell’ler, web sunucularının kötüye kullanılmasına dayanır. Bu nedenle web sunucu logları, kanıt arayışına başlamak için doğal bir noktadır. Apache ve Nginx gibi popüler web sunucularında nelere dikkat edilmesi gerektiğini inceleyeceğiz. Normal ve şüpheli davranış arasındaki farkı anlamak, kötü amaçlı faaliyetleri ortaya çıkarmaya yardımcı olabilir.
Web sunucu loglarının formatı kullanılan servise göre değişiklik gösterse de, erişim (access) logları genellikle benzer bir yapıyı takip eder ve aşağıdaki bilgileri içerir.
Remote log name alanı genellikle bir tire (-) ile gösterilir. Bunun nedeni, günümüzde nadiren kullanılan eski (legacy) bir alan olmasıdır. Ancak uyumluluk amacıyla erişim loglarında hâlâ yer almaktadır. Benzer şekilde, doğrulanmış kullanıcı (authenticated user) alanı da çoğunlukla bir tire (-) olarak görünür. Eğer sunucu önceden kimlik doğrulaması gerektiriyorsa, bu alanda gerçek kullanıcı adı yer alabilir.

1776146541624.png

Web Göstergeleri (Indicators)
Alışılmadık HTTP Metotları ve İstek Desenleri
  • Kısa süre içinde tekrarlanan GET istekleri, bir saldırganın web shell yüklemek için geçerli bir konum aradığını gösterebilir.
  • Tekrarlanan GET isteklerinin ardından geçerli yükleme noktalarına yapılan POST istekleri
  • Aynı dosyaya yönelik tekrarlanan GET veya POST istekleri, bir web shell ile etkileşim olduğunu gösterebilir
Dikkat Edilmesi Gereken İstek (Request) Metotları
  • GET – Sunucudan veri almak için kullanılır. Şüpheli durumlarda, özellikle sık ve tekrar eden GET istekleri dikkat çekebilir.
  • POST – Sunucuya veri göndermek için kullanılır. Dosya yükleme ve form gönderimleri içerdiği için saldırganlar tarafından sıkça kötüye kullanılabilir.
  • PUT – Sunucuya dosya yüklemek veya mevcut bir kaynağı güncellemek için kullanılır. Yanlış yapılandırmalarda doğrudan dosya yüklemeye izin verebilir.
  • DELETE – Sunucudaki kaynakları silmek için kullanılır. Yetkisiz kullanımı tehlikeli olabilir.
  • HEAD – GET isteğine benzer ancak sadece başlık (header) bilgilerini döndürür. Keşif (reconnaissance) amacıyla kullanılabilir.
  • OPTIONS – Sunucunun desteklediği HTTP metotlarını öğrenmek için kullanılır. Saldırganlar tarafından bilgi toplama amacıyla kullanılabilir.
  • PATCH – Kaynak üzerinde kısmi güncelleme yapmak için kullanılır. Yanlış kullanımı güvenlik riski oluşturabilir.
Şimdiye kadar bahsettiğimiz göstergeleri kullanarak olası bir web shell saldırı zincirini adım adım inceleyelim. Her isteğin aynı istemci IP adresi ve aynı user-agent bilgisiyle geldiğine dikkat edin. Ayrıca yanıt kodları (response codes) ve zaman damgaları (timestamps) da göz önünde bulundurulmalıdır.

200 OK – İsteğin başarıyla işlendiğini ve sunucunun beklenen yanıtı döndürdüğünü gösterir.
404 Not Found – İstenen kaynağın sunucuda bulunamadığını ifade eder.

1776146665961.png

Şüpheli User-Agent’lar ve IP Adresleri
User-Agent, web sunucusuna istekte bulunan istemciyi tanımlar ve kullanılan tarayıcı, cihaz ve işletim sistemi hakkında bilgi sağlar.
  • Değiştirilmiş (Altered) User-Agent’lar:
    Mozilla/4.0+(+Windows+NT+5.1) ifadesinin Mozilla/4.0 şeklinde kısaltılması gibi
  • Güncel Olmayan (Outdated) User-Agent’lar:
    Mozilla/4.0 (compatible; MSIE 6.0) — MSIE 6.0, 2001 yılında yayınlanmıştır
  • Kara Listeye Alınmış (Blacklisted) User-Agent’lar:
    Örneğin curl/1.XX.X veya wget/1.XX.X
  • Şüpheli IP Adresleri:
    Normalde yalnızca iç ağ trafiği görülen bir ağda, dış bir IP adresinden gelen trafik şüpheli olabilir
Sorgu Dizeleri (Query Strings)
URL’nin, parametrelerle değerleri ilişkilendiren kısmıdır.
Örnek: example.php?query=somequery

  • Anormal derecede uzun veya şüpheli sorgu dizeleri, özellikle cmd= veya exec= gibi anahtar kelimeler içeriyor
  • Kodlanmış (encoded) sorgu dizeleri:
    ?query=whoami → Base64 ile kodlandığında ?query=d2hvYW1p olur
    CyberChef, Base64 ve diğer birçok kodlama/karmaşıklaştırma yöntemini çözmek için oldukça kullanışlı bir araçtır
Eksik Referrer (Yönlendiren Sayfa Bilgisi)
Referrer, kullanıcının mevcut sayfaya gelmeden önce ziyaret ettiği URL’yi gösterir.

  • Eksik bir referrer, potansiyel olarak web shell aktivitesine işaret edebilir
  • Ancak referrer’ın eksik olmasının geçerli nedenleri de vardır (örneğin, tarayıcıların gizlilik nedeniyle bu bilgiyi engellemesi veya URL’nin doğrudan girilmesi)
Şüpheli Bir Web İsteği Örneği (Yukarıdaki Göstergelerle)
  • Bilinen kötü amaçlı veya güvenilmeyen bir IP adresi
  • Anormal zaman damgası (örneğin normal çalışma saatleri dışında)
  • Zararlı bir dosyaya yönelik, sorgu dizesi içeren bir POST isteği
  • Referrer yok (sayfaya doğrudan erişilmiş — her zaman kesin bir gösterge değildir)
  • Tipik bir web tarayıcısına ait olmayan şüpheli bir User-Agent değeri
1776147118157.png

Auditd
Linux’a özgü yerleşik bir araçtır ve sistemde gerçekleşen olayları izleyip kaydederek bir denetim izi (audit trail) oluşturur. Auditd için, audit.log dosyasında hangi olayların kaydedileceğini belirleyen kurallar oluşturulabilir.
Bu kurallar oldukça ayrıntılı şekilde yapılandırılabilir; örneğin belirli programlar çalıştırıldığında veya belirli bir dizindeki dosyalar değiştirildiğinde kayıt tutulacak şekilde ayarlanabilir.
Aşağıdaki örnekte, ausearch komutu kullanılarak web_shell kuralıyla eşleşen tüm log kayıtları aranır.


Kod:
user@CW-Ommah$ ausearch -k web_shell
time->Wed Jul 23 06:20:36 2025  // A log matching the web_shell rule
"name = /uploads/webshell.php"
"OGID = www-data"


Web ve Auditd Korelasyonu
Web shell’leri etkili bir şekilde tespit etmek, birden fazla log kaynağının birbirine bağlanmasını (korelasyon) gerektirir. Web erişim (access) ve hata (error) loglarının auditd ile birleştirilmesi daha fazla içgörü sağlar ve bir dosyanın oluşturulup oluşturulmadığını, değiştirilip değiştirilmediğini veya çalıştırılıp çalıştırılmadığını ve bunu hangi kullanıcının ya da sürecin yaptığını doğrulayabilir.
Web loglarında şüpheli bir POST isteği, auditd’de yer alan creat veya execve sistem çağrıları (syscall) ile ilişkilendirilebilir; bu da bir script’in bir dosya yazdığını veya komut çalıştırdığını gösterebilir. Bu bilgilerin birleştirilmesi, saldırı zincirinin daha net bir şekilde ortaya çıkarılmasına yardımcı olur.

SIEM Platformlarını Kullanma
Güvenlik Bilgisi ve Olay Yönetimi (SIEM – Security Information and Event Management) platformlarının bazı avantajları şunlardır:

  • Farklı log türleriyle çalışırken özellikle faydalı olan merkezi log toplama ve korelasyon
  • Web shell gibi kötü amaçlı aktivitelerin izlerini ortaya çıkarmak için hedefli sorgular oluşturulabilmesi
  • Analistlerin logları daha verimli bir şekilde arayıp analiz etmesine olanak sağlaması

Dosya Sistemi Analizi (File System Analysis)
Bir saldırganın web shell’i bir yerde saklanmak zorundadır. Web sunucusu dosyalarının analiz edilmesi, yüklenmiş web shell’lerin tespit edilmesi veya bir web shell payload’u içerecek şekilde değiştirilmiş dosyaların bulunması açısından kritik öneme sahiptir.
Ancak WordPress ve Django gibi bazı platformların sayfa içeriklerini dosya sistemi yerine bir veritabanında sakladığı unutulmamalıdır. Bu durumda zararlı kodlar gönderiler (posts), temalar (themes) veya ayarlar (settings) içine enjekte edilebilir ve normal dosya sistemi aramalarında görünmeyebilir.
Aşağıda web shell’lerin genellikle yerleştirildiği bazı yaygın web sunucu dizinleri verilmiştir:

  • Apache: /var/www/html/ (çoğu Linux dağıtımında varsayılan)
  • Nginx: /usr/share/nginx/html/ (birçok Linux kurulumunda varsayılan)
Özel bir kök dizin (root path) yapılandırılmış olsa bile, saldırganlar genellikle /uploads/, /images/ veya /admin/ gibi yaygın yükleme dizinlerini tahmin edebilir veya tarayabilir.
Güvenli şekilde yapılandırılmamışsa /tmp gibi geçici dizinler de kötüye kullanılabilir.


Şüpheli veya Rastgele Dosya İsimleri
Saldırganlar tespitten kaçmak için rastgele veya dikkat çekmeyen dosya adları kullanabilir. Standart uygulama dosyalarından farklı isimlere özellikle dikkat edilmelidir.
  • .php ve .jsp gibi çalıştırılabilir uzantılara sahip dosyaları izleyin
  • Kötü amaçlı dosyaları gizlemek için kullanılan çift uzantılara dikkat edin: image.jpg.php
Yararlı Komutlar
find komutu, yakın zamanda değiştirilmiş script’leri aramak için kullanılabilir. Aşağıdaki örnekte, /var/www dizininde belirli iki tarih arasında değiştirilmiş .php dosyaları -newerct seçeneği kullanılarak aranır.
Bir diğer yararlı araç olan grep, dosyalar içinde eval( gibi şüpheli fonksiyonları tespit etmek için kullanılabilir. Aşağıdaki örnekte WordPress dizini olan wp-content içinde arama yapılmaktadır.

Kod:
user@CW-Ommah$ find /var/www -type f -name "*.php" -newerct "2025-07-01" ! -newerct "2025-08-01"
/var/www/html/uploads/awebshell.php          // Web shell created between the dates above.

Kod:
user@CW-Ommah$ grep -r "eval(" wp-content
/wp-content/uploads/awebshell2.php :eval(b64_dd($['cmd']));  // Web shell containing eval(

Ağ Trafiği Analizi (Network Traffic Analysis)
Ağ trafiği analizi, analistlerin logların ötesine geçerek bir istemci ile sunucu arasında değiş tokuş edilen verileri incelemesine olanak tanır. Paket içerikleri (packet payloads) incelenerek saldırgan davranışlarını daha ayrıntılı bir seviyede gözlemlemek mümkün olur.
Analistlerin log analizinde dikkat etmesi gereken birçok gösterge, ağ trafiği analizine de uygulanabilir.

  • Alışılmadık HTTP Metotları ve İstek Desenleri
  • Şüpheli User-Agent’lar ve IP Adresleri
  • Kodlanmış (encoded) payload’lar
  • İstek gövdelerinde (request body) zararlı kod veya komutlar
  • Beklenmeyen protokoller veya portlar
  • Beklenmeyen kaynak kullanımı
  • Web sunucu süreçlerinin komut satırı araçlarını başlatması
Paket yakalamaları (packet captures), bir saldırıyı doğrulamak için kritik olabilecek önemli ayrıntılar sağlar. Örneğin, bir POST /upload.php isteğini içeren bir PCAP dosyasında, bir PHP web shell’in (webshell.php) doğrudan shell kaynak koduyla birlikte payload içinde yüklendiği görülebilir. Bu düzeyde ayrıntı, istismar girişimlerinin daha net doğrulanmasına yardımcı olur.

Yararlı Wireshark HTTP filtreleri:
  • http.request.method == “METHOD” → Tekrarlanan veya alışılmadık istekleri tespit etmek için kullanılabilir
  • http.request.uri contains “.php” → Şüpheli veya değiştirilmiş dosyaları bulmak için faydalı olabilir
  • http.user_agent → Alışılmadık veya eski User-Agent’ları tespit etmek için kullanılır
Wireshark HTTP filtrelerinin tam listesi
1776148012967.png

Wireshark’ta Saldırı Akışının (Attack Sequence Flow) İncelenmesi
Wireshark’ta bir web shell saldırı zincirini analiz ederken amaç, saldırganın yaptığı istekleri kronolojik olarak takip ederek tüm saldırı akışını ortaya çıkarmaktır.
Tipik bir saldırı akışı şu şekilde gözlemlenebilir:

  • Keşif (Reconnaissance):
    Saldırgan hedefi anlamak için ardışık GET istekleri gönderir. Farklı dizinleri veya dosyaları test edebilir (ör. /upload.php, /admin, /images).
  • Yükleme Girişimi (Exploit / Upload Attempt):
    Ardından bir POST /upload.php isteği görülür. Bu istek genellikle dosya yükleme denemesidir.
  • Başarılı Yükleme (Web Shell Upload):
    Sunucu yanıtı 200 OK ise, yükleme başarılı olmuş olabilir. Payload içinde web shell kodu bulunabilir.
  • Web Shell Erişimi:
    Saldırgan, yüklenen dosyaya doğrudan GET isteği yapar:
    Örnek: /uploads/webshell.php?cmd=whoami
  • Komut Çalıştırma (Command Execution):
    Aynı URL’ye tekrar tekrar GET/POST istekleri gönderilir.
    cmd=whoami, cmd=ls, cmd=ipconfig gibi komutlar görülür.
  • Yanıtların Analizi:
    Sunucu cevapları incelenir (ör. sistem bilgisi, dosya listesi). Bu aşamada saldırganın kontrolü doğrulanır.
Wireshark’ta dikkat edilmesi gereken ipuçları:
  • Aynı IP’den gelen ardışık HTTP istekleri
  • Aynı User-Agent ile tekrar eden istekler
  • /upload.php sonrası gelen /uploads/ erişimleri
  • URL içinde cmd=, exec= gibi parametreler
  • Base64 veya URL-encoded komutlar
  • POST → 200 OK → ardından web shell’e GET zinciri
1776148170779.png


1776148225301.png













Okuduğunuz için teşekkür ederim

CW-Ommah
Bug Researchers Tim Sundu...

1776148288817.png