الاتصال بين العمليات (IPC) في نظام Windows
مقدمة
يسمح الاتصال بين العمليات (IPC) للعمليات المنفصلة بتبادل البيانات والتزامن. إنه مفهوم أساسي في أنظمة التشغيل الحديثة، وهو ضروري لفهم كيفية تواصل التطبيقات مع بعضها البعض.
لماذا يعتبر IPC مهمًا
في نظام تشغيل حديث:
- غالبًا ما تتكون التطبيقات من عدة عمليات
- يجب أن تتواصل خدمات النظام مع بعضها البعض
- يتبادل العملاء والخوادم البيانات
- تعتمد الأمان على العزل الجيد للعمليات
آليات IPC في نظام Windows
نظرة عامة
| الآلية | النوع | النطاق | الأداء | حالات الاستخدام |
|---|---|---|---|---|
| الأنابيب المجهولة | Stream | محلي | عالي | الأب-الابن |
| الأنابيب المسماة | Stream | شبكة | عالي | الخدمات، RPC |
| مراكز البريد | Datagram | شبكة | متوسط | البث |
| الذاكرة المشتركة | مباشر | محلي | عالي جدًا | الأداء العالي |
| المقابس | Stream/Datagram | شبكة | متغير | تطبيقات الشبكة |
| COM/DCOM | RPC | محلي/شبكة | متوسط | تكامل Windows |
| WMI | استعلام | محلي/شبكة | منخفض | الإدارة |
الأنابيب المجهولة
التعريف
الأنبوب المجهول هو قناة اتصال أحادية الاتجاه بين عمليتين مرتبطتين (عادةً الأب والابن).
الخصائص
- اتصال أحادي الاتجاه
- لا يوجد اسم، لذا لا يمكن الوصول إليه من قبل عمليات أخرى
- يتم إنشاؤه بواسطة عملية الأب
- يتم وراثته بواسطة عملية الابن
- لا يوجد وصول إلى الشبكة
مثال في سطر الأوامر
dir | findstr "txt"
الحرف | ينشئ أنبوبًا مجهولًا:
dirيكتب مخرجاته في الأنبوبfindstrيقرأ من الأنبوب- تنتقل البيانات من واحد إلى الآخر
الاستخدام في البرمجة
// كود زائف مبسط
HANDLE hReadPipe, hWritePipe;
CreatePipe(&hReadPipe, &hWritePipe, NULL, 0);
// يكتب الأب في hWritePipe
// يقرأ الابن من hReadPipe
الأنابيب المسماة
التعريف
الأنبوب المسمى هو قناة اتصال ثنائية الاتجاه يمكن الوصول إليها باسمها، ويمكن أن تعبر الشبكة.
الخصائص
- اتصال ثنائي الاتجاه
- يمكن الوصول إليه بالاسم:
\\.\pipe\NomDuPipe - يمكن أن يعبر الشبكة:
\\serveur\pipe\NomDuPipe - يدعم قوائم التحكم في الوصول (ACL)
- وضع الرسالة أو تدفق البايت
صيغة الاسم
\\.\pipe\MonPipe (محلي)
\\serveur\pipe\MonPipe (بعيد)
\\127.0.0.1\pipe\MonPipe (localhost)
تعداد الأنابيب
PowerShell:
# سرد جميع الأنابيب النشطة
Get-ChildItem \\.\pipe\
# طريقة بديلة
[System.IO.Directory]::GetFiles("\\.\pipe\")
مع PipeList (Sysinternals):
pipelist.exe /accepteula
الأنابيب الشائعة في Windows
| الأنبوب | الخدمة |
|---|---|
\pipe\lsarpc | LSA (Local Security Authority) |
\pipe\samr | SAM (Security Account Manager) |
\pipe\netlogon | خدمة Netlogon |
\pipe\srvsvc | خدمة الخادم |
\pipe\wkssvc | خدمة محطة العمل |
\pipe\spoolss | Print Spooler |
تداعيات الأمان
تُستخدم الأنابيب المسماة لـ:
- الاتصال مع خدمات Windows
- استدعاءات الإجراءات البعيدة (RPC)
- انتحال الرموز (خطر أمني)
- تقنيات تصعيد الامتيازات (هجمات Potato)
الذاكرة المشتركة
التعريف
تسمح الذاكرة المشتركة لعدة عمليات بالوصول إلى نفس منطقة الذاكرة الفعلية.
الخصائص
- الوصول المباشر إلى الذاكرة (سريع جدًا)
- يتطلب التزامن اليدوي
- محلي فقط
- يتم تنفيذه عبر File Mapping في Windows
الإنشاء في PowerShell
# إنشاء منطقة ذاكرة مشتركة
Add-Type -TypeDefinition @"
using System;
using System.IO.MemoryMappedFiles;
public class SharedMem {
public static MemoryMappedFile Create(string name, long size) {
return MemoryMappedFile.CreateNew(name, size);
}
}
"@
$mmf = [SharedMem]::Create("MonPartage", 1024)
حالات الاستخدام
- تطبيقات الأداء العالي
- مشاركة البيانات الكبيرة
- الاتصال السريع بين العمليات المحلية
المقابس
التعريف
تسمح المقابس بالاتصال الشبكي بين العمليات، محليًا أو على أجهزة بعيدة.
أنواع المقابس
| النوع | البروتوكول | الخصائص |
|---|---|---|
| Stream | TCP | اتصال موثوق، مرتب |
| Datagram | UDP | بدون اتصال، سريع |
| Raw | IP | وصول منخفض المستوى |
المنافذ الشائعة في Windows
| المنفذ | الخدمة | الخطر |
|---|---|---|
| 80 | HTTP | هجمات الويب |
| 443 | HTTPS | هجمات الويب |
| 445 | SMB | EternalBlue، الحركة الجانبية |
| 3389 | RDP | القوة الغاشمة، BlueKeep |
| 5985 | WinRM HTTP | التنفيذ عن بعد |
| 5986 | WinRM HTTPS | التنفيذ عن بعد |
| 135 | RPC | هجمات DCOM |
مثال على خادم TCP بسيط
# خادم TCP بسيط
$listener = [System.Net.Sockets.TcpListener]::new([System.Net.IPAddress]::Any, 8080)
$listener.Start()
Write-Host "الخادم يستمع على المنفذ 8080..."
$client = $listener.AcceptTcpClient()
$stream = $client.GetStream()
$reader = [System.IO.StreamReader]::new($stream)
$message = $reader.ReadLine()
Write-Host "تم الاستلام: $message"
$client.Close()
$listener.Stop()
COM و DCOM
COM (نموذج كائن المكون)
COM هو إطار عمل من Microsoft لإنشاء مكونات برمجية قابلة لإعادة الاستخدام.
الخصائص:
- الكائنات قابلة للوصول عبر الواجهات
- مستقل عن لغة البرمجة
- يستخدم من قبل Office، Shell، Explorer
مثال PowerShell:
# إنشاء كائن COM Excel
$excel = New-Object -ComObject Excel.Application
$excel.Visible = $true
$excel.Quit()
DCOM (COM الموزع)
يمتد DCOM لـ COM للسماح بالاتصال عبر الشبكة.
مخاطر الأمان:
- يستخدم للحركة الجانبية في اختبارات الاختراق
- تقنيات: MMC20، ShellBrowserWindow، Excel DDE
- المنفذ 135 (RPC) + المنافذ الديناميكية
WMI (أداة إدارة Windows)
التعريف
WMI هو تنفيذ Microsoft لـ WBEM (إدارة المؤسسات المستندة إلى الويب)، مما يسمح بإدارة واستعلام أنظمة Windows.
الاستخدام الأساسي
# معلومات النظام
Get-WmiObject Win32_OperatingSystem
# العمليات
Get-WmiObject Win32_Process | Select-Object Name, ProcessId
# الخدمات
Get-WmiObject Win32_Service | Where-Object {$_.State -eq "Running"}
# عن بعد
Get-WmiObject -ComputerName "ServeurDistant" -Class Win32_OperatingSystem
WMI للإدارة عن بعد
# تنفيذ أمر عن بعد عبر WMI
Invoke-WmiMethod -ComputerName "Cible" -Class Win32_Process -Name Create -ArgumentList "cmd.exe /c whoami > C:\result.txt"
تداعيات الأمان
يُستخدم WMI لـ:
- الإدارة الشرعية عن بعد
- الحركة الجانبية (wmic /node:)
- الثبات عبر اشتراكات أحداث WMI
- تنفيذ التعليمات البرمجية بدون ملف على القرص
جدول المقارنة
| المعيار | الأنابيب | الأنابيب المسماة | الذاكرة المشتركة | المقابس | COM/DCOM | WMI |
|---|---|---|---|---|---|---|
| الشبكة | لا | نعم | لا | نعم | نعم | نعم |
| الأداء | عالي | عالي | عالي جدًا | متغير | متوسط | منخفض |
| الأمان | ACL | ACL | ACL | جدار ناري | تكوين DCOM | مساحة اسم WMI |
| التعقيد | منخفض | متوسط | عالي | متوسط | عالي | متوسط |
| ثنائي الاتجاه | لا | نعم | نعم | نعم | نعم | نعم |
أمان IPC
ناقلات الهجوم الشائعة
-
الأنابيب المسماة:
- انتحال الرموز
- هجمات Potato (PrintSpoofer، JuicyPotato)
- اتصال C2 (Cobalt Strike)
-
DCOM:
- الحركة الجانبية
- تنفيذ التعليمات البرمجية عن بعد
-
WMI:
- التنفيذ عن بعد
- الثبات عبر الاشتراكات
- الاستطلاع
-
المقابس:
- الأصداف العكسية
- الأبواب الخلفية
- استخراج البيانات
الكشف
أحداث Sysmon:
- معرف الحدث 17: تم إنشاء أنبوب
- معرف الحدث 18: تم الاتصال بالأنبوب
PowerShell:
# الكشف عن الأنابيب المشبوهة
Get-ChildItem \\.\pipe\ | Where-Object {
$_.Name -notmatch "^(lsarpc|samr|netlogon|srvsvc|wkssvc)"
}
تمرين عملي
- قم بسرد جميع الأنابيب المسماة النشطة على نظامك
- حدد أي عملية تستخدم كل أنبوب
- أنشئ خادمًا وعميلًا بسيطًا للأنابيب في PowerShell
- اختبر الاتصال