צור דוחות כניסה ל Active Directory באמצעות PowerShell. כפי שאנו יודעים, בקריאת קבצים בסביבת Active Directory (AD) חיונית למערכת אבטחה. חיוני לגלות מה עשה המשתמש ובאיזו מערכת הוא נכנס. לכן, אחת מהמשימות החיוניות ביותר שצוותי מנהלים רובם נתקלים בהן כיום היא למצוא איפה משתמש נכנס. מאמר זה ילמד כיצד להשתמש בצפיין אירועים המובנה בשרתי התחברות (DC) ברשת, למצוא איפה משתמש נכנס, וליצור דוח כניסה מקיף באמצעות PowerShell.
לכן, בואו נמשיך עם המאמר "צור דוחות כניסה ל Active Directory באמצעות PowerShell".
צור דוחות כניסה ל Active Directory
דרישות מוקדמות
מציג אירועים ומצג את האירועים לימים, עלינו לוודא שגודל יומני האירועים שלנו מספיק. אף על פי שייתכן כי כבר הפעלנו את ההגדרות הללו, נבדוק אותן שוב אם אנשים אחרים צריכים להגדיל את גודל יומני האירועים שלהם.
אם לא שינינו שום הגדרה קודם לכן, הגדרת הגודל המוגדרת כברירת מחדל של יומן האירועים שלנו אמורה להיות בסביבות 64 מגה־בייט. עם זאת, ייתכן שיהיה צורך בהגדלת הגודל, בעיקר אם אנו עוסקים עם מספר רב של DCs בסביבת הפעולה שלנו. לדוגמה, אם נרצה לעקוב אחרי הכניסות ליומן עבור מספר ימים, נצטרך מקום רב יותר במציג האירועים.
יצירת GPO
1. כשלב ראשון בהכנת הסביבה, ניצור אובייקט מדיניות קבוצה (GPO) הכולל את ההגדרות של גודל יומן האירועים. נפתח את קונסולת ניהול מדיניות הקבוצה (GPMC), ניצור GPO. כדי לפתוח את הקונסולה, נחפש מדיניות קבוצה או נכתוב gpmc.msc בחלון Run (Ctrl+R).
2. בלוח הניווט, נרחיב את היער:שם_היער, נרחיב את תחומים, נרחיב את שם_התחום, ואז נלחץ על אובייקטי מדיניות קבוצה. לאחר מכן, נלחץ על פעולה, ואז נלחץ על חדש.
3. מצא את הנתיב הבא בתוך ה־GPO החדש שנוצר:
4. שנה את גודל אירוע ה־אבטחה על פי הסביבות והדרישות שלנו. בנוסף, אם אין חשש לשטח אחסון וביצועים, ניתן להגדיר הגדרות ברמה מרבית של 4 ג'יגה־בייט.
5. השלב הבא אופציונלי אם לשרתי ה־domain אין הגדרות חומת אש. עם זאת, עלינו להיות מסוגלים לשאול רשומות אירוע ממספר שרתי ה־domain ואולי גם ממספר אתרים. כתוצאה, יש לוודא כי רימוט אירוע רישום מעקב מופעל דרך החומה.
לצערנו, ניתן לכסות רק חלק מהפרטים בנושא הגדרת החומה. עם זאת, התמונה למטה תציג את כל ההגדרות הנדרשות להפעלת מעקב ברחוק אחר רישומי אירועים בשרתי ה־domain שלנו.
6. כעת, חבר את GPO שיצרנו ל-OU של שולחנות הבקרה של התחום וחכה לאירועים מסוימים להתמלא. האירוע תלוי בסביבה, ונוכל להתחיל לשאול אודיטים מייד או לחכות כמה ימים. עכשיו שהגדרנו כראוי את הלוגינג שלנו, נוכל לעבור להפעלת סקריפט PowerShell, שיתואר בחלק הבא של המאמר.
השלב הבא ביצירת דוחות התחברות ל-Director הוא החלק העיקרי של כותרת המאמר. נא להמשיך לקרוא.
קרא גם: נסה את כלי המעקב של Azure AD
יצירת דוחות התחברות ל-Director באמצעות PowerShell
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 המבצעת כל פעם שאנו מתחברים ל-DC אחר כדי לשאול את הנתונים.
Foreach($DCName in $DomainControllers){...}
אנו מתחילים באיסוף אירועים ב-DC הראשון שלנו. לאחר מכן, השלב הבא הוא לחלץ מידע יקר מכל אירוע ולשמור אותו באובייקט לפני המשך לאירוע הבא. כאשר סיימנו עם ה-DC הראשון, הסקריפט מעבור ל-DC אחר ומחזיר את התהליך.
לבסוף, המקטע של סיום יציג את הדוח הסופי שנוצר.
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
}
קראו גם בדקו ניהול של Active Directory
הרצת הסקריפט בפוורשל
כדי להתחיל, פתחו פוורשל והקלידו את הפקודה הבאה לטעינת הקמדלט לזכרון.
. .\Get-UserLastLogon.ps1
כשאנו לוחצים על מקש Enter, ייתכן שיתקבל שגיאה המציינת שהריצה של התסריט מושהת בגלל מדיניות ביצוע פורס וורקס, או שלא יהיו שגיאות. במקרה של שגיאה, פתחו חלון פורס וורקס עם הרשאות מנהל, הקלדו את הפקודות הבאות לאפשר ביצוע תסריטים, ואז חזרו על הפקודה הקודמת.
Set-ExecutionPolicy RemoteSigned
. .\Get-UserLastLogon.ps1
עכשיו שהתסריט עמד על כל הטווח בוא ניקח אותו כדוגמה לגלות אילו משרדים המשתמש התחבר לבין האחרונים 15 יום. קודם כל, הקלד את שם המשתמש עם ה–User פרמטר ואת טווח הזמן עם ה –Days פרמטר ולחץ על Enter.
Get-UserLastLogon -User marion -Days 15
כפי שייתכן שתזכרו, יש לנו פרמטר נוסף הנקרא -שרת פרמטר. אם אנו לא מספקים ערך ל-שרת פרמטר, נחשב את כל דומיין מזהים למילוי פרמטר זה. עכשיו, אם יש לנו DC ספציפי במוחנו לייעל חיפוש שאיתו, אנו יכולים לציין אותו כערך של -שרת פרמטר.
לאחר הריצה, התסריט יציג מסך התקדמות המודיע לנו על מצבו ועד כמה זמן ייקח לסיים. עכשיו אנו יכולים לראות דוח שנוצר לאחר הריצת התסריט. הדוח מספר לנו אילו מחשבים המשתמש התחבר אליהם במהלך 15 הימים האחרונים.
Time User Location Domain DC
---- ---- -------- ------ --
11/19/2022 7:31:11 AM marion DESKTOP-IGK57 abc.com MARION-DC01
הבנת התסריט של PowerShell
כשאנו מפעילים את התסריט, בתחילה הוא בודק אם קיים חשבון המשתמש או לא. לכן, ברור שאם השם המשתמש המוזן או המזהה אינם קיימים, אין צורך לרוץ בשאר התסריטים.
בשלב הבא, אנו מחשבים את המשתנים הנדרשים ושולחים אותם ל-DC, יחד עם המסנן הדרוש לשאילתת האירועים עבור המשתמש הנבחר שלנו. לבסוף, התסריט שולח בקשה לממשק השרת הראשון ממשק השרת התחום ברשימה, והאירועים המתועדים הקשורים למשתמש הנבחר נשמרים במשתנה.
הרשימה של האירועים הנשמרים שהתסריט יתחיל איתו, והשלבים הבאים יעסוק באספת מידע בעל ערך מהאירועים. לבסוף, התסריט מקצה את המידע הנשלף למשתנה, כגון התחום, שם ה-DC, זמן התחברות, ועבודת התחברות.
בסוף, התסריט עובר על ה-DC הבא וחוזר על התהליך.
התסריט יציג לנו רשימת מחשבים ברגע שהוא מתקשר עם ה-DC האחרון ואוסף את המידע שלו.
Time User Location Domain DC
---- ---- -------- ------ --
11/19/2022 7:31:11 AM marion DESKTOP-IGK57 abc.com MARION-DC01
תודה שקראת ליצירת דוחות כניסה פעילים ב-Active Directory עם PowerShell. אנו נסיים.
קרא גם כלי דיווחי משתמשי Office 365
סיום יצירת דוחות כניסה פעילים ב-Active Directory
במדריך זה, למדנו כיצד להשתמש במציג האירועים החיוני ולשלב אותו עם תסריטי PowerShell כדי למצוא רשימת תחנות עבודה בהן משתמש התחבר. התסריט משאיל את כל שרתי ה-DC בדומיין, מוצא את התוצאות ומפרק אותן לתבנית קריאה שנוכל לייצא כ-דוח. זכור להריץ בדיקת דרישות מראש לפני הרצת התסריט המסופק.
Source:
https://infrasos.com/create-active-directory-logon-reports-with-powershell/