איך לעקוב אחר אירועי אבטחת מערכת חשובים בחלונות עם PowerShell


הרבה ארגונים סומכים על טכנולוגיות של Microsoft כדי לבצע עבודה. באותו זמן, יכולים גורמי איום לנצל מערכות הפעלה כמו Windows. למזלנו, Windows מקליטה ארועי אבטחת מערכת כדי לעזור לך לזהות את ההתנהגות הזו.

ארועי האבטחה שמייצרת Windows מהווים מקור חיוני בתהליך התגובה לאירועים. כלים כמו מציג האירועים של Windows של Microsoft מספקים לך את הגישה הנחוצה לבדיקת האירועים שנלכדו, אך זיהוי התנגשויות באופן ידני על ידי גלילה בעץ אירועים מלא באופן בלתי מציאותי.

בפוסט הזה, תלמד כיצד לזהות אפשרי חדירות אבטחה ב-Windows על ידי למידה על מדיניות אודיט, יומני אירועי Windows וניתוח אירועי אבטחה עם PowerShell.

דרישות מוקדמות

מאמר זה מיועד להעביר מידע שמלמד אותך כיצד לנתח אירועי אבטחת Windows בעזרת PowerShell. אם ברצונך להמשיך לעקוב אחרי כל הדגמים, תצטרך:

  • A Windows 10+ PC – This PC will be used to generate and track down potential security events in the event log. This tutorial will be using Windows PowerShell 5.1.
  • הרשאות מנהל ב-PC של Windows
  • A PowerShell code editor such PowerShell ISE or Visual Studio (VS) Code.

איפה Windows אוחסן אירועי אבטחה

כאשר נעשה פעולה במערכת ההפעלה Windows, Windows משמיעה את הפעולה כאירוע באחד או יותר מיומנים האירועים. יומני אירועי Windows מאוחסנים במערכת הקבצים, כברירת מחדל, בספריית %SystemRoot%\system32\winevt\logs. אפשר לשנות את המיקום הזה על ידי שינוי במפתח רישום ה-EventLog הרלוונטי.

אם תרצה לראות איפה מאוחסנים היומנים החשובים ביותר (יישום, אבטחה ומערכת) במערכת שלך, העתק והדבק את הקוד למסוף PowerShell או שמור אותו כסקריפט.

כדי לגשת למיקום האחסון של קובץ יומן האבטחה, עליך להריץ את הקוד כמנהל.

#הצג יומני היישום, האבטחה והמערכת במערך.
 $arrLogs = @(
     "Application"
     "Security"
     "System"
 )
 #השתמש בפקודת ForEach-Object כדי לגשת לכל יומן רצוי באמצעות פקודת Get-ItemProperty.
 $arrLogs | ForEach-Object {
     #השתמש בפקודת Get-ItemProperty כדי לרשום את הנתיב המוגדר עבור יומני היישום, האבטחה והמערכת.
     Get-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Services\EventLog\$_ -Name File | Select-Object PSChildName,File
 }

התמונה הבאה מציגה את הפלט הצפוי של הקוד, המציג את שמות היומנים ואת מיקומי האחסון עבור יומני היישום, האבטחה והמערכת.

Application, Security, and System audit log location

מדיניות אודיט: הגדרת אירועים לרשום

באופן ברירת מחדל, Windows לא מכילה את כל האירועים האבטחתיים שעשויים להיות נחוצים לזיהוי או לחקירת התקפה. כדי לשלוט במה ש-Windows רשאית ומה לא לרשום, עליך להגדיר וליישם מדיניות אודיט (audit policies). מדיניות אודיט היא סט של הוראות שמועברות ל-Windows ואומרות לו אילו אירועים לרשום.

ישנם כמה דרכים שונות להקצות ולעבוד עם מדיניות אודיט, כמו למשל Group Policy. Group Policy עובדת היטב אם עליך ליישם מדיניות אודיט במספר רב של מכונות. אך במאמר זה, תישאר על התקן יחיד, ותשתמש בכלי ה-auditpol. כלי ה-auditpol מותקן ב-Windows ומאפשר לך למצוא ולהגדיר מדיניות אודיט במערכת Windows.

מציאת מדיניות אודיט

לדוגמא, כדי למצוא את מצבן של כל מדיניות האודיט במערכת Windows שלך, השתמש בפרמטר /get כמו שמוצג למטה. בשימוש בפרמטר /category יחד עם תו כוכב, ניתן להגיד ל-auditpol למצוא את המצב של כל מדיניות אודיט, לא רק של אחת התואמת קטגוריה או תת-קטגוריה ספציפית.

קבלת הגדרות מדיניות הבקרה של המערכת.
auditpol /get /category:*

התמונה הבאה מציגה גרסה מקוצרת של פלט הקוד הצפוי, המציג את קטגוריית מדיניות הבקרה לניהול חשבונות, תת־קטגוריות ומצב (הגדרה).

Audit policy category, subcategory, and configuration

A Setting that is configured as No Auditing means that all events associated with that audit policy subcategory will not be logged.

הגדרת מדיניות בקרת ביקורת

כלי ה־auditpol יכול לעשות יותר מאשר להציג הגדרות מדיניות בקרת ביקורת. הוא יכול גם לשנות אותן באמצעות הפקודה auditpol /set. כדי להדגים קטעים עתידיים במדריך זה, פתחו מסוף PowerShell כמנהל מערכת והריצו את הפקודה הבאה. פקודה זו מתחילה לרשום את כל האירועים (הצלחה וכישלון) הנמצאים בתת־קטגוריית הכניסה למערכת.

הגדרת תת־קטגוריית הכניסה מאלצת את המערכת לרשום אירועים:

#הגדר אירועי התחברות ללכידת פעילות הצלחה/כישלון.
auditpol /set /subcategory:"Logon" /success:enable /failure:enable

קיימים מקורות רבים זמינים לסיוע בהגדרת מדיניות ביקורת מבוססת מיטב התרגילים, כולל מרכז האבטחה לאינטרנט (CIS) בנקודות בקרה, ו-מדריכי יישום טכני של סוכנות מערכות מידע לביטחון (DISA STIG), והנחיות המתפרסמות על ידי מיקרוסופט.

ייצור לוגים על התחברויות נכשלות לצורך ניתוח

מאמר זה יהיה מדריך, ונצפה ממך לעקוב. אם הגדרת Windows לבצע ביקורת על אירועי התחברות למעלה, נתחיל כעת ביצירת אירועי אבטחה עבור ניתוח מאוחר יותר. בדיוק, נייצר 35 ניסיונות התחברות נכשלים שירשמו ביומן האבטחה של המערכת שלך כדי לחקות פעילות כוח גובה.

1. פתח את עורך הקוד המועדף עליך.

2. העתיקו את הקוד הבא והדביקו אותו בעורך קוד. קטע הקוד הזה מנסה לפתוח את תהליך PowerShell.exe באמצעות הפקודה Start-Process באמצעות שמות משתמש וסיסמאות מזוייפות.

#הגדרת 5 שמות משתמש לרשום כניכרוני כשל כניכרוניים.
 $arrUsers = @(
     "AtaBlogUser1"
     "AtaBlogUser2"
     "AtaBlogUser3"
     "AtaBlogUser4"
     "AtaBlogUser5"
 )
 #לולאה דרך שמות המשתמש באמצעות ForEach-Object כדי ליצור כניכרון כישלון עבור כל אחד.
 $arrUsers | ForEach-Object {
     $securePassword = ConvertTo-SecureString "AtA810GRu13Z%%" -AsPlainText -Force 
     $storedCredential = New-Object System.Management.Automation.PSCredential($_, $securePassword)
     Start-Process -FilePath PowerShell -Credential $storedCredential
 }
 #יצירת 30 כניכרוניים למשתמש AtaBlogUser.
 $i = 0
 Do {
     $securePassword = ConvertTo-SecureString "AtA810GRu13Z%%" -AsPlainText -Force 
     $storedCredential = New-Object System.Management.Automation.PSCredential("AtaBlogUser", $securePassword)
     Start-Process -FilePath PowerShell -Credential $storedCredential
     $i++
 } Until ($i -eq 30)

3. שמרו את קובץ הסקריפט של PowerShell כ-Invoke-BogusEvents.ps1 או כל שם שתבחרו והפעילו את הסקריפט.

בעת הרצת הסקריפט, תראו שגיאה צפויה חוזרת 35 פעמים שמציינת שם המשתמש או הסיסמה אינם נכונים.

Authentication failure due to incorrect user name or password.

אם אתם לא מקבלים את הפלט הצפוי, ודאו ששירות הכניכרון המשני נמצא במצב הרצה.

גישה לארועי Windows באמצעות PowerShell

עכשיו שאתם בטוחים שיש לכם לפחות 35 ארועי אבטחה של Windows, בואו נחפש אותם עם הפקודה Get-WinEvent של PowerShell.

יתכן ואתם מכירים את פקודת Get-EventLog של PowerShell, שגם משמשת לגישה ליומן הארועים באופן תכנותי. Get-EventLog משתמשת בממשק תכנותי של Win32 שהוא מיושן ולא יידובר בפוסט זה.

הפעל חלון פקודות PowerShell כמנהל והפעל את הפקודה Get-WinEvent ומתן לה את הפרמטרים FilterHashtable ו־MaxEvents כפי שמוצג למטה.

הפקודה למטה מבצעת שאילתא ביומן האבטחה של המערכת (LogName='Security') לאירוע עם מזהה 4625 (ID=4625) ומחזירה את 10 ההופעות החדשות ביותר (MaxEvents 10).

# סנן את יומן האבטחה לקבלת 10 הופעות ראשונות של Event ID 4625
Get-WinEvent -FilterHashtable @{LogName='Security';ID=4625} -MaxEvents 10

אם הפעולה הצליחה, תראה פלט דומה לפלט הבא:

10 instances of Event ID 4625

גישה לתכונות האירוע באמצעות Get-WinEvent

בסעיף הנ"ל, השתמשת ב־Get-WinEvent כדי לראות אירועי אבטחה של Windows ברמה גבוהה, אך לכל אירוע ב-Windows יש מידע רב יותר. לכל אירוע ב-Windows יש תכונות יקרות שאפשר להשתמש בהן לניתוח עמוק.

אירועי Windows כ־XML

כאשר Windows מקליטה אירוע, הוא מאוחסן בתבנית XML. אם כך המצב, למה הפקודה שלך של Get-WinEvent החזירה אובייקטים טיפוסיים של PowerShell? פקודת Get-WinEvent קוראת ב- API המקורי של Windows ומתרגמת את האירועים לאובייקטים של PowerShell לפונקציונליות גבוהה יותר.

לכל אירוע ב־Windows יש תכונות שונות שעוקבות אחר סכמה או מבנה ספציפי ב־XML..

תחתיך רואה של כל אירוע יש מבנה ספציפי עם שלוש תכונות:

  • שם – שם המאפיין
  • inType – הגדרת סוג הקלט או איך האירוע מקבל ערך
  • outputType – הגדרת סוג הפלט או איך האירוע נרשם

מציאת תבניות XML של אירוע באמצעות PowerShell

כפי שצוין לעיל, כל אירוע אבטחה של Windows מאוחסן בתבנית XML ספציפית, אך איך נראה תבנית זו? בואו נבדוק.

באחת מהקטעים הקודמים, הפקת מספר אירועים עם זיהוי 4625 ביומן האירועים של אבטחה. לסוג זה של אירוע יש מאפיינים ספציפיים שמתחייבים רק לו. כדי למצוא את המאפיינים האלו ואיך נראית התבנית:

1. פתחו חלון קונסול PowerShell כמנהל אם עדיין אין לכם אחד פתוח.

2. הריצו את Get-WinEvent שוב, אך הפעם השתמשו בפרמטר ListProvider וציינו את ספק המידע של Windows שמשמש לרשום אירועים ביומן האירועים של אבטחה, והחזירו רק את המאפיין Events.

המאפיין Events מכיל את כל האירועים שהספק מידע רשם וחושף את תבנית ה-XML של כל אחד מהאירועים הללו.

(Get-WinEvent -ListProvider 'Microsoft-Windows-Security-Auditing').Events
Get Win Event List Provider

3. עכשיו שיש לכם את הקוד למציאת תבניות לכל סוגי האירועים, הגבירו את זה רק להחזרת האירוע הקשור לזיהוי 4625. 4. כשאתם מחזירים רק את סוג האירוע של התחברות עם זיהוי 4625, הגבירו את זה להצגת המאפיין Template כמו שמופיע למטה.

(Get-WinEvent -ListProvider 'Microsoft-Windows-Security-Auditing').Events | Where-Object -Property ID -eq 4625

#קבלת תבנית XML של מאפייני האירוע של זיהוי 4625.
 ((Get-WinEvent -ListProvider 'Microsoft-Windows-Security-Auditing').Events | Where-Object -Property ID -eq 4625).Template

התמונה הבאה מציגה גרסה מקוצרת של פלט הקוד, המזהה את שם מאפיין האירוע, סוג הקלט וסוג הפלט. ניתן לראות כי זיהוי האירוע 4625 מכיל מאפייני אירוע עם מגוון הגדרות קלט ופלט.

התמונה למטה מציינת את המאפיין SubjectUserSid של אירוע מזהה 4625. האירוע הספציפי הזה מקבל סוג קלט (inType) של win:SID ומציג את הפלט (outType) כ string, שכן כך הוא מאוחסן בתוך יומן האבטחה.

XML template example

איך PowerShell מתרגם XML לאובייקטים

עכשיו שראית איך Windows אחסנה אירועים ב-XML ואיך לראות את התבניות האלה ב-PowerShell, בואו נראה איך PowerShell מתרגם את ה-XML הזה לאובייקטים.

1. הריצו מחדש את הפקודה Get-WinEvent כדי להחזיר את האירוע מספר 4625. עד כה, זה לא משהו חדש. שימו לב ש-PowerShell מציג רק ארבעה מאפיינים, TimeCreated, Id, LevelDisplayName ו-Message.

Get-WinEvent -FilterHashtable @{LogName='Security';ID=4625} -MaxEvents 1
Get-WinEvent FilterHashtable

כברירת מחדל, פקודת ה-cmdlet Get-WinEvent לא מחזירה את כל המאפיינים ממקור הנתונים של ה-XML של האירוע כאובייקט PowerShell.

2. עכשיו, חברו את הפלט של הפקודה לעיל ל-cmdlet של Select-Object וציינו את הפרמטר Property על מנת להציג את כל המאפיינים.

Get-WinEvent -FilterHashtable @{LogName='Security';ID=4625} -MaxEvents 1 | Select-Object -Property *

שימו לב ש-PowerShell היה מסתיר רבים מהמאפיינים השונים. יותר במיוחד, מאפיין בשם Properties. המאפיין Properties מכיל את ערכו של כל מאפיין האירוע שראיתם לפני כן בתבנית ה-XML.

Powershell hiding Properties

3. הגבל את פלט הפקודה Get-WinEvent למעלה כדי לחשוף את המאפיין Properties. מאפיין זה מאחסן את כל מאפייני האירוע, לא מאפייני אובייקט של PowerShell, במערך.

#פלט מערך מאפייני האירוע עבור המופע הראשון של מזהה אירוע 4625
 $eventProperties = (Get-WinEvent -FilterHashtable @{LogName='Security';ID=4625} -MaxEvents 1).properties
 $eventProperties

משמאל לצילום המסך למטה הוא הפלט מהפקודה למעלה. המערך מכיל את הערכים עבור כל אחד מתכונות ה-XML בתבנית ה-XML מצד ימין של צילום המסך.

פלט הקוד המוצג בצילום המסך מתקשר כי אירעה כשל באימות עבור המשתמש AtaBlogUser (TargetUserName) מהמערכת Desktop-XXXXX (WorkstationName) באמצעות כתובת IP של ::1 (IpAddress).

Expected output correlating property values to Event ID 4625’s XML template.

אולי היית רוצה להחזיר רק את הערך עבור מאפיין האירוע TargetUserName. מאחר וכבר אחסנת את כל מאפייני האירוע במשתנה בשם $eventProperties, התייחס לאינדקס החמישי, שמחזיק את הערך עבור TargetUserName.

עליך להתייחס למאפיין value על אובייקט מאפיין האירוע הבודד כדי להחזיר רק את הערך (AtaBlogUser). $eventProperties[5].value

$eventProperties[5].value
Event attribute property positions

התרגולים המתוארים לאורך חלק זה ישמשו בפרקים הבאים כדי לאתר את ניסיון הפריצה בכוח גס שדמיינת קודם לכן בפוסט זה.

זיהוי ניסיון פריצה בכוח גס

שינית עכשיו מוכן להשתמש בכישורי PowerShell שלך כדי לגלות את התקפת הכוח הגס ששיכנעת אחר כך בפוסט הזה! בואו נשים למבחן את הכישורים שלך על ידי הדמיה לכך כיצד ייראה לגלות התקפת כוח גס בהתבסס על טווח זמן מסוים.

נניח שהתראת על אירוע בו הארגון שלך חושב שמישהו מנסה להשתמש בחשבון מנהל להתחבר לשרת Windows חשוב. הפעולה החשודה החלה אתמול. עליך לגלות את מספר אירועי ה-ID 4625: נכשלה נסיון להתחבר לחשבון שהתרחשו ביחד במשך ה-24 שעות האחרונות ולקבוע את סוג ההתחברות של כל אירוע.

1. מצא את כל האירועים עם ה-ID 4625 (ID=4625) ביומן אבטחה של Windows (LogName="Security") מה-24 השעות האחרונות (StartTime=((Get-Date).AddDays(-1).Date), סוף בזמן הנוכחי (Get-Date).

$events = Get-WinEvent -FilterHashTable @{LogName="Security";ID=4625;StartTime=((Get-Date).AddDays(-1));EndTime=(Get-Date)}

2. עכשיו, ספור את כל האירועים שמאוחסנים במשתנה כדי לקבוע אם יש יותר אירועים נכשלים בהתחברות מאשר צפוי.

$events.Count

כעת תראה ערך מספרי המציין את מספר הפעמים שבהן נמצא האירוע עם ה-ID 4625 ביומן האירועים לאבטחה למשך ה-24 שעות האחרונות.

3. אז גילית שהתקפת כוח גס אירעה, כעת חפש מידע נוסף על אירועי אבטחת Windows אלו. כדי לעשות זאת, החזר רק על התכונות מכל אחד מהאירועים שאתה מעוניין בהם.

כפי שצוין למעלה, כל ערך עבור אירוע מסויים מאוחסן במערך עם אינדקס ספציפי. מאפייני האירוע המעניינים לדמו זהם למטה.

  • TargetUserName אינדקס: [5]
  • LogonType אינדקס: [10]
  • WorkstationName אינדקס: [13]
  • IpAddress אינדקס: [19]

הקוד למטה קורא בכל אובייקט במשתנה $events, אוסף רק את המאפיינים המעניינים, ומחבר אותם לשורה אחת.

#אחזק את מאפייני האירוע TargetUserName, LogonType, WorkstationName ו-IpAddress מכל המופעים של Event ID 4625 ב-24 השעות האחרונות.
 $events | ForEach-Object {
     ## התייחס למאפייני האובייקט
     ## החזר רק את ערכי האינדקסים 5, 10, 13 ו-19 ממערך המאפיינים
     ## שרשור כל הערכים יחד על ידי הצטרפותם עם פסיק
     $_.properties[5,10,13,19].value -join ", "
 }

בצילום המסך למטה מוצגת גרסה מקוצרת של פלט הקוד, המציין רשימה מופרדת בפסיקים של TargetUserName, LogonType, WorkstationName ו־IpAddress.

A truncated version of the code’s output, detailing TargetUserName, LogonType, WorkstationName, and IpAddress property values.

4. כפי שראית מהתבנית XML למעלה, לתבנית של אירוע ID 4625 יש מאפיין LogonType. מאפיין זה מציין את השיטה שבה חשבון מנסה לאמת. דרך חקירה נוספת, לגוון בזמן, שם לבת לכך שהמאפיין LogonType היה שונה מעת לעת.

LogonType attribute

ערך ה־LogonType הוא ערך מספרי בין 2 ל־11, אך מה משמעותו? תבצע מחקר ותגלה מה משמעותם של כל ערך.

2 – אינטראקטיבי – משתמש מחובר למחשב זה.

3 – רשת – משתמש או מחשב מחוברים למחשב זה מהרשת.

4 – עצמאי – סוג התחברות עצמאי משמש על ידי שרתי עצמאי, שבהם תהליכים עשויים להיות ב־ריצה מטעם משתמש בלי התערבות ישירה שלו.

5 – שירות – שירות התחיל על ידי מנהל שליטת השירותים.

7 – פתיחה מחדש – תחנת העבודה פתוחה מחדש.

8 – טקסט ברשת – משתמש מחובר למחשב זה מהרשת. הסיסמה של המשתמש הועברה לחבילת האימות בפורמטה לא מוצפנת שלה. חבילות האימות המובנות מוצפנות קודם את פרטי האימות לפני שהן נשלחות דרך הרשת. פרטי האימות אינם עוברים דרך הרשת בפליינטקסט (נקרא גם cleartext).

9 – פרטי אימות חדשים – הקורא העתיק את האסימון הנוכחי שלו וציין פרטי אימות חדשים לחיבורים יוצאים. הסשן החדש של התחברות משתמש באותו זהות מקומית, אך משתמש בפרטי אימות שונים לחיבורים רשת אחרים.

10 – אינטראקטיבי רחוק – הקורא העתיק את האסימון הנוכחי שלו וציין פרטי אימות חדשים לחיבורים יוצאים. הסשן החדש של התחברות משתמש באותו זהות מקומית, אך משתמש בפרטי אימות שונים לחיבורים רשת אחרים.

11 – אינטראקטיבי במטמון – משתמש מחובר למחשב זה עם פרטי אימות רשת שמאוחסנים מקומית על המחשב. שרת הדומיין לא פנה לאימות את הפרטים.

עכשיו שיש לך הבנה טובה של כל סוגי הכניסה LogonType, במקום לראות ערך מספרי בפלט, אתה רוצה מחרוזת תיאורית יותר מתארת. כדי ליצור "מפות" בפוורשל, ניתן להשתמש בטבלת צימודים.

$logonTypes = @{
     [uint32]2 = "Interactive"
     [uint32]3 = "Network"
     [uint32]4 = "Batch"
     [uint32]5 = "Service"
     [uint32]7 = "Unlock"
     [uint32]8 = "NetworkCleartext"
     [uint32]9 = "NewCredentials"
     [uint32]10 = "RemoteInteractive"
     [uint32]11 = "CachedInteractive"
 }

5. לשלב את Get-WinEvent וטבלת הצימודים של LogonType עם ForEach-Object כדי ליצור סקריפט שיחזיר רק את התכונות שתרצה עם ערך ידידותי למשתמש ל- LogonType, כפי שמוצג למטה. פקודת Format-Table מוסיפה לפלט בעל התגובה הידידותית למשתמש על ידי עיצוב תגובת הפוורשל כטבלה.

#השתמש ב- Get-WinEvent כדי לגשת לתכונות של כל מופע מחובר של Event ID 4625
$events = Get-WinEvent -FilterHashTable @{LogName="Security";ID=4625;StartTime=((Get-Date).AddDays(-1).Date);EndTime=(Get-Date)}
## צור את המפת ערך המספר למחרוזת
$logonTypes = @{
    [uint32]2 = "Interactive"
    [uint32]3 = "Network"
    [uint32]4 = "Batch"
    [uint32]5 = "Service"
    [uint32]7 = "Unlock"
    [uint32]8 = "NetworkCleartext"
    [uint32]9 = "NewCredentials"
    [uint32]10 = "RemoteInteractive"
    [uint32]11 = "CachedInteractive"
}
## התחל עיבוד של כל אובייקט במערך $events
$events | ForEach-Object {
    ## חפש את הערך המספרי בטבלת הצימודים
    $logonType = $logonTypes[$_.properties[10].value] 
    #צור אובייקט מותאם אישית של פוורשל לפלט של תכונות האירוע הרלוונטיות 
    [PSCustomObject]@{     
        TimeCreated = $_.TimeCreated     
        TargetUserName = $_.properties[5].value     
        LogonType = $logonType     
        WorkstationName = $_.properties[13].value     
        IpAddress = $_.properties[19].value 
    }
} | Format-Table -Wrap

בנקודה זו, יש לך סקריפט שמחזיר אובייקטים מסוג PSCustomObject שמאפשר לך לבצע הרבה סוגי ניתוחים שונים! כדי לסיים את ניתוח השיעור הזה, תעדיף את ניסיונות הכשלון באימות לפי TargetUserName. כדי לתת עדיפות לכשלונות לפי התכונה TargetUserName, שלב את הקוד מעל עם פקודת Group-Object. השתמש ב- Sort-Object ובמתג ה- Descending שלו כדי לזהות את המשתמש הגורם לכשלון ביותר.

#השתמש ב- Get-WinEvent כדי לגשת למאפיינים של כל מופע מתועד של האירוע עם מזהה 4625
$events = Get-WinEvent -FilterHashTable @{LogName="Security";ID=4625;StartTime=((Get-Date).AddDays(-1).Date);EndTime=(Get-Date)}
## צור את הערך המספרי למחרוזת "מפה"
$logonTypes = @{
    [uint32]2 = "Interactive"
    [uint32]3 = "Network"
    [uint32]4 = "Batch"
    [uint32]5 = "Service"
    [uint32]7 = "Unlock"
    [uint32]8 = "NetworkCleartext"
    [uint32]9 = "NewCredentials"
    [uint32]10 = "RemoteInteractive"
    [uint32]11 = "CachedInteractive"
}
## התחל בעיבוד כל עצם במערך $events
$events | ForEach-Object {
    ## חפש את הערך המספרי בטבלת הגיליון
    $logonType = $logonTypes[$_.properties[10].value] 
    #צור אובייקט PowerShell מותאם אישית כדי להפיק את מאפייני האירוע הרלוונטיים
    [PSCustomObject]@{     
        TimeCreated = $_.TimeCreated     
        TargetUserName = $_.properties[5].value     
        LogonType = $logonType     
        WorkstationName = $_.properties[13].value     
        IpAddress = $_.properties[19].value 
    }
} | Group-Object -Property TargetUserName | Sort-Object -Property Count -Descending

עבודה מצוינת! השתמשת כעת ב-PowerShell כדי לזהות את ניסיון הפריצה המחושב שהדמית לפני כן בפוסט זה. לפי הפלט, משתמש_בלוג_אטא נכשל באימות 30 פעמים ב-24 השעות האחרונות!

AtaBlogUser Logon Failures

שלבים הבאים

במדריך זה, למדת כיצד חלונות מתעדכנים באירועים, כיצד לאפשר את תיעוד האירועים עבור סוגי אירועים מסוימים, וכיצד לבנות כלי PowerShell לשאילתת האירועים אלה.

עם סקריפט PowerShell שיש לך עכשיו, איך תוכל לשפר אותו? איך תקח את הקוד שלמדת היום ותבנה כלי טוב יותר?

Source:
https://adamtheautomator.com/windows-security-events/