انتقل إلى المحتوى الرئيسي

الاتصال بين العمليات (IPC) في نظام Windows

مقدمة​

يسمح الاتصال بين العمليات (IPC) للعمليات المنفصلة بتبادل البيانات والتزامن. إنه مفهوم أساسي في أنظمة التشغيل الحديثة، وهو ضروري لفهم كيفية تواصل التطبيقات مع بعضها البعض.

لماذا يعتبر IPC مهمًا​

في نظام تشغيل حديث:

  • غالبًا ما تتكون التطبيقات من عدة عمليات
  • يجب أن تتواصل خدمات النظام مع بعضها البعض
  • يتبادل العملاء والخوادم البيانات
  • تعتمد الأمان على العزل الجيد للعمليات

آليات IPC في نظام Windows​

نظرة عامة​

الآليةالنوعالنطاقالأداءحالات الاستخدام
الأنابيب المجهولةStreamمحليعاليالأب-الابن
الأنابيب المسماةStreamشبكةعاليالخدمات، RPC
مراكز البريدDatagramشبكةمتوسطالبث
الذاكرة المشتركةمباشرمحليعالي جدًاالأداء العالي
المقابسStream/Datagramشبكةمتغيرتطبيقات الشبكة
COM/DCOMRPCمحلي/شبكةمتوسطتكامل Windows
WMIاستعلاممحلي/شبكةمنخفضالإدارة

الأنابيب المجهولة​

التعريف​

الأنبوب المجهول هو قناة اتصال أحادية الاتجاه بين عمليتين مرتبطتين (عادةً الأب والابن).

الخصائص​

  • اتصال أحادي الاتجاه
  • لا يوجد اسم، لذا لا يمكن الوصول إليه من قبل عمليات أخرى
  • يتم إنشاؤه بواسطة عملية الأب
  • يتم وراثته بواسطة عملية الابن
  • لا يوجد وصول إلى الشبكة

مثال في سطر الأوامر​

dir | findstr "txt"

الحرف | ينشئ أنبوبًا مجهولًا:

  1. dir يكتب مخرجاته في الأنبوب
  2. findstr يقرأ من الأنبوب
  3. تنتقل البيانات من واحد إلى الآخر

الاستخدام في البرمجة​

// كود زائف مبسط
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\lsarpcLSA (Local Security Authority)
\pipe\samrSAM (Security Account Manager)
\pipe\netlogonخدمة Netlogon
\pipe\srvsvcخدمة الخادم
\pipe\wkssvcخدمة محطة العمل
\pipe\spoolssPrint 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)

حالات الاستخدام​

  • تطبيقات الأداء العالي
  • مشاركة البيانات الكبيرة
  • الاتصال السريع بين العمليات المحلية

المقابس​

التعريف​

تسمح المقابس بالاتصال الشبكي بين العمليات، محليًا أو على أجهزة بعيدة.

أنواع المقابس​

النوعالبروتوكولالخصائص
StreamTCPاتصال موثوق، مرتب
DatagramUDPبدون اتصال، سريع
RawIPوصول منخفض المستوى

المنافذ الشائعة في Windows​

المنفذالخدمةالخطر
80HTTPهجمات الويب
443HTTPSهجمات الويب
445SMBEternalBlue، الحركة الجانبية
3389RDPالقوة الغاشمة، BlueKeep
5985WinRM HTTPالتنفيذ عن بعد
5986WinRM HTTPSالتنفيذ عن بعد
135RPCهجمات 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/DCOMWMI
الشبكةلانعملانعمنعمنعم
الأداءعاليعاليعالي جدًامتغيرمتوسطمنخفض
الأمانACLACLACLجدار ناريتكوين DCOMمساحة اسم WMI
التعقيدمنخفضمتوسطعاليمتوسطعاليمتوسط
ثنائي الاتجاهلانعمنعمنعمنعمنعم

أمان IPC​

ناقلات الهجوم الشائعة​

  1. الأنابيب المسماة:

    • انتحال الرموز
    • هجمات Potato (PrintSpoofer، JuicyPotato)
    • اتصال C2 (Cobalt Strike)
  2. DCOM:

    • الحركة الجانبية
    • تنفيذ التعليمات البرمجية عن بعد
  3. WMI:

    • التنفيذ عن بعد
    • الثبات عبر الاشتراكات
    • الاستطلاع
  4. المقابس:

    • الأصداف العكسية
    • الأبواب الخلفية
    • استخراج البيانات

الكشف​

أحداث Sysmon:

  • معرف الحدث 17: تم إنشاء أنبوب
  • معرف الحدث 18: تم الاتصال بالأنبوب

PowerShell:

# الكشف عن الأنابيب المشبوهة
Get-ChildItem \\.\pipe\ | Where-Object {
$_.Name -notmatch "^(lsarpc|samr|netlogon|srvsvc|wkssvc)"
}

تمرين عملي​

  1. قم بسرد جميع الأنابيب المسماة النشطة على نظامك
  2. حدد أي عملية تستخدم كل أنبوب
  3. أنشئ خادمًا وعميلًا بسيطًا للأنابيب في PowerShell
  4. اختبر الاتصال

المراجع​