إنشاء تقارير تسجيل الدخول إلى Active Directory باستخدام PowerShell

إنشاء تقارير تسجيل الدخول للمجموعة الفعالة بواسطة PowerShell. وكما نعرف ، توثيق البيانات في بيئة المجموعة الفعالة (AD) مهم للأمن. ومن المهم جدا أن نعرف ما قام المستخدم به وأي نظام تسجل فيه. ولهذا، وهو أحد المهام الأساسية التي يتعامل معها معظم المسؤولين الآن هو إيجاد أين تسجل المستخدم. سيقوم هذا المقال بتوجيه خطوة بخطوة لتعلم كيفية استخدام Event Viewer البنية في المراقبات الرسمية (DC)، وإيجاد أين تسجل المستخدم، وتوليد تقريرالدخول شامل بواسطة PowerShell.

إذًا، دعونا نستمر بمقال Create Active Directory Logon Reports with PowerShell.

Create Active Directory Logon Reports

Prerequisites

مراقب الأحداث وشاشة الأحداث لعدة أيام، نحتاج إلى التأكد من أن حجم سجلات الأحداث الخاصة بنا كافٍ. على الرغم من أنه قد تم تمكين هذه الإعدادات بالفعل، سنقوم بمراجعتها مرة أخرى إذا احتاج الآخرون إلى زيادة حجم سجل الأحداث.

إذا لم نقم بتغيير أي تكوين من قبل، يجب أن يكون الإعداد الافتراضي لحجم سجل الأحداث حوالي 64 ميغابايت. ومع ذلك، قد تكون هناك حاجة إلى زيادة الحجم، خصوصاً إذا كنا نتعامل مع عدة مراكز تحكم في بيئتنا. على سبيل المثال، إذا كنا نرغب في تتبع تسجيل الدخول للتدقيق لعدة أيام، فسنحتاج إلى مساحة أكبر بكثير في مراقب الأحداث.

إنشاء سياسة مجموعة المشتركة

١. كخطوة أولى في تهيئة البيئة، سنقوم بإنشاء كائن سياسة جماعية (GPO) يحتوي على إعدادات حجم سجل الأحداث. دعونا نفتح وحدة تحكم إدارة سياسة المجموعة (GPMC)، وننشئ GPO. لفتح الوحدة، ابحث عن سياسة المجموعة أو اكتب gpmc.msc في نافذة التشغيل (Ctrl+R).

٢. في اللوحة التنقل، قم بتوسيع الغابة: اسم الغابة, وقم بتوسيع المجالات, وقم بتوسيع اسم المجال, ثم انقر على كائنات سياسة المجموعة. بعد ذلك، انقر على إجراء, ثم انقر على جديد.

3. حدد المسار أدناه داخل الـ GPO الجديد المُنشأ:

4. قم بتغيير حجم الحدث الخاص بالأمان وفقًا لبيئاتنا ومتطلباتنا. بالإضافة إلى ذلك، إذا لم تكن هناك مخاوف بشأن مساحة القرص والأداء، فمن الممكن تكوين الإعدادات على مستوى أقصى يبلغ 4 جيجابايت.

5. الخطوة التالية اختيارية إذا لم تكن لدى مراقبي النطاق إعدادات جدار ناري. ومع ذلك، يجب أن نكون قادرين على استعلام سجلات الأحداث من عدة مراقبي النطاق وربما عدة مواقع. ونتيجة لذلك، فمن الحكمة التأكد من تمكين مراقبة سجل الأحداث عن بعد عبر الجدار الناري.

للأسف، لا يمكننا سوى تغطية بعض التفاصيل حول تكوين إعدادات جدار الحماية. ومع ذلك، ستعرض الصورة أدناه جميع الإعدادات اللازمة لتمكين مراقبة سجل الأحداث عن بعد على مراقبي النطاق الخاصة بنا.

٦. الآن، قم بربط GPO الذي أنشأناه للتو بوحدة تنظيم النطاقات OU وانتظر بعض الأحداث لتعبئة. تعتمد الحدث على البيئة، ويمكننا البدء في الاستعلام عن التدقيقات على الفور أو الانتظار لبضعة أيام. الآن بعد أن قمنا بإعداد تسجيلنا بشكل صحيح، يمكننا الانتقال إلى تشغيل النص البرمجي PowerShell، الذي سيتم مناقشته في القسم التالي من المقالة.

الخطوة التالية مع إنشاء تقارير تسجيل الدخول إلى Active Directory باستخدام PowerShell هي الجزء الرئيسي من عنوان المقالة. يرجى الاستمرار في القراءة.

إنشاء تقارير تسجيل الدخول إلى AD باستخدام PowerShell

للبدء، حمّل النص البرمجي وانسخه إلى مجلد أو دليل. بديلًا، إذا كان لديك git مثبتًا، فيمكننا تشغيل الأمر التالي.

git clone https://github.com/InfraSOS/Get-UserLastLogon.git

تستخدم النصيبة الـActiveDirectory وحدة، ولكن لن نحتاج إلى تثبيتها يدويًا حيث يتحقق النصيبة من وجود الوحدة في نظامنا. بمجرد تنزيلها، قم بتشغيل PowerShell وانتقل إلى مجلد النصيبة المُنزَّل أو القرص.

إذا قمنا بتحرير الملف المُنزَّل، سنجد أربع وظائف رئيسية. تلك الوظائف الأربع الرئيسية هي Param, Begin, Process, و End.

شرح النصيبة PowerShell

تحتوي قسم Param على المعلمات اللازمة لتشغيل النصيبة. كما هو موضح في كتلة الكود أدناه، نحتاج إلى ثلاثة معاملات لكي يعمل النصيب. سنشرح هذه المعاملات لاحقًا.

param (
    [Parameter(Mandatory = $true)]
    [String]$User,

    [Parameter(Mandatory = $false)]
    [Array]$Server = @((Get-ADDomainController -Filter *).Name) ,

    [Parameter(Mandatory = $false)]
    [Array]$Days = 90
)

وكممارسة جيدة، ينبغي وضع المتغيرات والمعلومات العامة في قسم الـBegin لتجنب الاكتظاظ في الجزء الرئيسي من النصيبة.

[Array]$Table         = $null
$DomainControllers    = $Server
$AllDomainControllers = @((Get-ADDomainController -Filter *).Name)
[Array]$ExclusionList = @($User,'krbtgt')
$DCCount              = $DomainControllers.Count
$UPN                  = ((get-addomain).DNSRoot).toUpper()
$DateFilter           = "-"+$days
$DateThen             = (((Get-Date).AddDays($DateFilter)).ToString("yyyy-MM-dd"))+"T20:30:00.000Z"
$DateNow              = (Get-Date -Format yyyy-MM-dd)+"T20:30:00.999Z"
$ForestRoot           = ((Get-ADForest).rootDomain).toUpper()
$Counter              = 0

النصيبة الـBegin يصيغ أيضًا مرشحًا أساسيًا للاستعلام عن سجل الأحداث. بعد ذلك، ستقوم النصيبة بإرسال هذا المرشح إلى كل DC لجمع المعلومات. كما نرى في هذه الأسطر، هناك بعض المتغيرات التي تمت مناقشتها سابقًا، مثل $UPN و $User.

[xml]$FilterXML = @"


    *[System[(EventID=4769)
	and TimeCreated[@SystemTime>='$DateThen'
	and @SystemTime<='$DateNow']]]
	and*[EventData[Data[@Name='TargetUserName'] and (Data='$User@$UPN')]]


"@

القسم العملية هو الوظيفة الأساسية، حيث يستعلم النص عن البيانات لتوليد تقرير. الكود أدناه هو أمر foreach الذي يُنفذ في كل مرة نقوم فيها بتسجيل الدخول إلى مركز بيانات آخر للاستعلام عن البيانات.

Foreach($DCName in $DomainControllers){...}

نقوم أولاً بجمع الأحداث على مركز البيانات الأول. ثم، الخطوة التالية هي استخراج المعلومات القيمة من كل حدث وحفظها في كائن قبل المضي قدمًا إلى الحدث التالي. بمجرد الانتهاء من مركز البيانات الأول، ينتقل النص إلى مركز بيانات آخر ويكرر العملية.

في النهاية، سيُظهر القسم النهاية التقرير النهائي المُولَّد.

end{
    $Table = $Table | Where-Object {($_.Location -notin $AllDomainControllers) -and ($_.Location -ne $ForestRoot) -and ($_.Location -notin $ExclusionList)}
    $Table | Sort Time | FT Time,User,Location,Domain,DC -AutoSize
}

تشغيل النص البرمجي PowerShell

للبدء، افتح برنامج PowerShell واكتب الأمر التالي أدناه لتحميل الأداة النصية في الذاكرة. عند الضغط على مفتاح Enter، قد يحدث خطأ يشير إلى تعطيل تنفيذ النص الناتج بسبب سياسة تنفيذ PowerShell، أو قد لا يحدث أي خطأ. في حالة حدوث خطأ، افتح نافذة وحدة التحكم PowerShell بامتيازات إدارية، اكتب الأوامر التالية أدناه للسماح بتنفيذ النص البرمجي، ثم كرر الأمر السابق.

. .\Get-UserLastLogon.ps1

عندما نضغط على مفتاح أدخل، قد يحدث خطأ يشير إلى أن تنفيذ السكريبت معطل بسبب سياسة تنفيذ PowerShell، أو قد لا يحدث خطأ. في حالة حدوث خطأ، فتح وحدة التحكم في PowerShell بأذونات ادارية، اكتب الأوامر التالية أدناه للسماح بتنفيذ السكريبت، ثم كرر الأمر السابق.

Set-ExecutionPolicy RemoteSigned
. .\Get-UserLastLogon.ps1

الآن بعد أن تم تحميل السكريبت بالكامل، دعونا نعتبره مثالاً لمعرفة الأجهزة التي تم تسجيل الدخول للمستخدم إليها خلال الـ 15 يومًا الماضية. أولاً، اكتب اسم المستخدم مع ال -User المعامل ونطاق الزمن مع -Days المعامل واضغط على أدخل

Get-UserLastLogon -User marion -Days 15

كما قد تتذكرون، لدينا معاملة أخرى تسمى -الخادم المعاملة. إذا لم نقم بتزويد قيمة للمعاملة -الخادم، سنعتبر جميع خوادم التحكم المجال لملء هذه المعاملة. الآن، إذا كان لدينا كابينة محددة في الاعتبار لاستهداف عملية البحث، يمكننا تحديدها كقيمة للمعاملة -الخادم.

بعد التشغيل، ستعرض البرنامج النصي شريط التقدم الذي يعلمنا بحالته ومتى سيستغرق الانتهاء. الآن يمكننا رؤية تقرير تم إنشاؤه بعد تشغيل البرنامج النصي. يخبرنا التقرير عن الأجهزة التي تسجل المستخدم عليها الدخول خلال الـ 15 يومًا الماضية.

Time                  User   Location      Domain  DC
----                  ----   --------      ------  --
11/19/2022 7:31:11 AM marion DESKTOP-IGK57 abc.com MARION-DC01

فهم البرنامج النصي PowerShell

عندما نقوم بتشغيل البرنامج النصي، في البداية، يتحقق ما إذا كان حساب المستخدم موجودًا أم لا. وبالتالي، من الواضح أنه إذا لم يكن الاسم المستعار أو المعرف المدخل موجودًا، فليس علينا تشغيل باقي البرامج النصية.

في الخطوة التالية، نقوم بحساب المتغيرات المطلوبة وإرسالها إلى المُركَّز المركزي، جنبًا إلى جنب مع المُرشِّح اللازم لاستعلام الأحداث للمستخدم المختار. أخيرًا، يرسل البرنامج النصي طلبًا إلى أول مُركَّز مركزي في القائمة، ويُخزّن الأحداث المُستعلَمة ذات الصلة بالمستخدم المختار في متغير.

تتضمن قائمة الأحداث المُخزّنة التي سيبدأ بها البرنامج النصي، والخطوات التالية تتضمن جمع البيانات القيمة من الأحداث. أخيرًا، يُعيّن البرنامج النصي البيانات المستخرجة إلى متغير، مثل المجال، اسم المُركَّز المركزي، وقت الدخول، وأجهزة الدخول.

في النهاية، يستمر البرنامج النصي في التنفيذ عبر المُركَّز المركزي التالي ويكرر العملية.

سيعرض البرنامج النصي قائمة بالكمبيوترات لنا بمجرد اتصاله بالمُركَّز المركزي الأخير وجمع معلوماته.

Time                  User   Location      Domain  DC
----                  ----   --------      ------  --
11/19/2022 7:31:11 AM marion DESKTOP-IGK57 abc.com MARION-DC01

شكرًا لك على قراءة إنشاء تقارير تسجيل الدخول في Active Directory باستخدام PowerShell. سنختتم.

نهاية إنشاء تقارير تسجيل الدخول في Active Directory

في هذا الدليل، تعلمنا كيفية استخدام مشاهد الأحداث الأساسية ودمجها مع نصوص PowerShell للعثور على قائمة بأجهزة العمل حيث قام مستخدم ما بتسجيل الدخول. يقوم النص بتحقيق النتائج من جميع مراقبي المجال وتحليلها إلى تنسيق قابل للقراءة يمكننا تصديره كـ تقرير. تذكر تشغيل الفحص للتحقق من الشروط المطلوبة قبل تشغيل النص المقدم.

Source:
https://infrasos.com/create-active-directory-logon-reports-with-powershell/