כיצד לזהות מי מחק קובץ ב- Windows Server באמצעות מדיניות ביקורת?


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

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

כיצד להפעיל מדיניות ביקורת גישה לקבצים ולתיקיות ב- Windows?

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

gpmc.msc

קונסולת MMC). אם ברצונך להגדיר ביקורת בשרת אחד בלבד, באפשרותך להשתמש בעורך המדיניות הקבוצתית המקומית.

  1. פתח את מסוף עורך המדיניות הקבוצתית המקומית -

    gpedit.msc

    ;

  2. עבור אל המקטע GPO עם מדיניות ביקורת מתקדמת: הגדרות Windows -> הגדרות אבטחה -> תצורת מדיניות ביקורת מתקדמת -> גישה לאובייקטים;

  3. פתח את מדיניות מערכת קבצי הביקורת וציין שברצונך לרשום רק אירועי גישה מוצלחת לאובייקטי מערכת קבצים (קביעת תצורה של אירועי הביקורת הבאים > הצלחה); באפשרותך גם לאפשר ביקורת של גישה לאובייקטים מקומיים באמצעות מדיניות הגישה לאובייקטי ביקורת תחת הגדרות Windows -הגדרות אבטחה > -> מדיניות מקומית -מדיניות ביקורת >. עם זאת, עדיף להשתמש במדיניות ביקורת מערכת הקבצים מכיוון שהיא עוקבת רק אחר אירועי גישה ל- NTFS.

  4. שמור את השינויים ועדכן את הגדרות המדיניות הקבוצתית המקומית באמצעות הפקודה:

    gpupdate /force

קביעת תצורה של הגדרות ביקורת של קבצים שנמחקו בתיקיה משותפת

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

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

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

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

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

$Path = "E:\Public"
$AuditChangesRules = New-Object System.Security.AccessControl.FileSystemAuditRule('Everyone', 'Delete,DeleteSubdirectoriesAndFiles', 'none', 'none', 'Success')
$Acl = Get-Acl -Path $Path
$Acl.AddAuditRule($AuditChangesRules)
Set-Acl -Path $Path -AclObject $Acl

כעת, אם המשתמש מוחק קובץ או תיקיה כלשהם בתיקיית הרשת המשותפת, אירוע מחיקת קובץ הצלחת הביקורת של מערכת הקבצים -> מופיע ביומן האבטחה עם מזהה אירוע 4663 ממקור ביקורת האבטחה של Microsoft Windows.

פתח את מסוף mmc מציג האירועים (

eventvwr.msc

), הרחב את המקטע Windows Logs -> Security. הפוך את מסנן יומן האירועים לזמין על-ידי מזהה האירוע 4663.

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

An attempt was made to access an object.
Subject:Security ID:                            CORP\jsmith
Account Name:                     jsmith
Account Domain:                  CORP
Logon ID:                               0x32B12627
Object:Object Server:                        Security
Object Type:                          File
Object Name:                        E:\Distr\Backup.rar
Handle ID:                              0x7bc4
Resource Attributes:            S:AI
Process Information:
Process ID:                             0x4
Process Name:
Access Request Information:
Accesses:                               DELETE
Access Mask:                         0x10000

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

  • מי מחק את הקובץ מתיקיית הרשת המשותפת ומתי זה קרה;

  • איזה יישום (תהליך) שימש למחיקת הקובץ;

  • מהו תאריך הגיבוי שיש לשחזר.

כיצד לכתוב אירועי מחיקת קבצים למסד נתונים SQL (MySQL/MSSQL)?

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

באפשרותך לשמור את כל אירועי מחיקת הקבצים במסד הנתונים של SQL. באפשרותך להשתמש במסדי נתונים של Microsoft SQL Server, Elasticsearch או MySQL/MariaDB כדי לאחסן את האירועים שלך.

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

  • שם שרת;

  • שם הקובץ שנמחק;

  • תאריך ושעה;

  • שם המשתמש שמחק את הקובץ.

שאילתת MySQL ליצירת טבלה זו נראית כך:

CREATE TABLE deleted_items (id INT NOT NULL AUTO_INCREMENT, server VARCHAR(100), file_name VARCHAR(255), dt_time  DATETIME, user_name VARCHAR(100),  PRIMARY KEY (ID));

הערה. דוגמה לאופן הגישה למסד נתונים MySQL מ- PowerShell נחשבה מוקדם יותר במאמר שאילתה על מסד נתונים MySQL עם PowerShell.

אם ברצונך להשתמש במסד הנתונים של Microsoft SQL Server, עיין במאמר "כיצד להפעיל שאילתת שרת MSSQL מ- PowerShell? ”

כדי לקבל אירועים עם מזהה אירוע 4663 מיומן האבטחה עבור היום הנוכחי, באפשרותך להשתמש בקובץ ה- script הבא של PowerShell:

$today = get-date -DisplayHint date -UFormat %Y-%m-%d
Get-WinEvent -FilterHashTable @{LogName="Security";starttime="$today";id=4663} | Foreach {
$event = [xml]$_.ToXml()
if($event)
{
$Time = Get-Date $_.TimeCreated -UFormat "%Y-%m-%d %H:%M:%S"
$File = $event.Event.EventData.Data[6]."#text"
$User = $event.Event.EventData.Data[1]."#text"
$Computer = $event.Event.System.computer
}
}

סקריפט PowerShell הבא יכתוב את הנתונים שתקבל למסד הנתונים MySQL בשרת מרוחק (עם כתובת ה- IP 10.1.1.13):

Add-Type -Path ‘C:\Program Files (x86)\MySQL\MySQL Connector Net 6.9.8\Assemblies\v4.5\MySql.Data.dll'
$Connection = [MySql.Data.MySqlClient.MySqlConnection]@{ConnectionString='server=10.1.1.13;uid=posh;pwd=P@ssw0rd;database=aduser'}
$Connection.Open()
$sql = New-Object MySql.Data.MySqlClient.MySqlCommand
$sql.Connection = $Connection
$today = get-date -DisplayHint date -UFormat %Y-%m-%d
Get-WinEvent -FilterHashTable @{LogName="Security";starttime="$today";id=4663} | Foreach {
$event = [xml]$_.ToXml()
if($event)
{
$Time = Get-Date $_.TimeCreated -UFormat "%Y-%m-%d %H:%M:%S"
$File = $event.Event.EventData.Data[6]."#text"
$File = $File.Replace(‘\’,’|’)
$User = $event.Event.EventData.Data[1]."#text"
$Computer = $event.Event.System.computer
$sql.CommandText = "INSERT INTO deleted_items (server,file_name,dt_time,user_name ) VALUES ('$Computer','$File','$Time','$User')"
$sql.ExecuteNonQuery()
}
}
$Reader.Close()
$Connection.Close()

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

עכשיו, כדי לגלות מי מחק את הקובץ "AnnualReport.DOC", זה מספיק כדי להפעיל את הסקריפט הבא במסוף PowerShell:

$DeletedFile = "%AnnualReport.DOC%"
Set-ExecutionPolicy RemoteSigned
Add-Type -Path ‘C:\Program Files (x86)\MySQL\MySQL Connector Net 6.9.8\Assemblies\v4.5\MySql.Data.dll'
$Connection = [MySql.Data.MySqlClient.MySqlConnection]@{ConnectionString='server=10.1.1.13;uid=posh;pwd=P@ssw0rd;database=aduser'}
$Connection.Open()
$MYSQLCommand = New-Object MySql.Data.MySqlClient.MySqlCommand
$MYSQLDataAdapter = New-Object MySql.Data.MySqlClient.MySqlDataAdapter
$MYSQLDataSet = New-Object System.Data.DataSet
$MYSQLCommand.Connection=$Connection
$MYSQLCommand.CommandText="SELECT user_name,dt_time    from  deleted_items where file_name LIKE '$DeletedFile'"
$MYSQLDataAdapter.SelectCommand=$MYSQLCommand
$NumberOfDataSets=$MYSQLDataAdapter.Fill($MYSQLDataSet, "data")
foreach($DataSet in $MYSQLDataSet.tables[0])
{
write-host "User:" $DataSet.user_name "at:" $DataSet.dt_time
}
$Connection.Close()

כעת תוכלו לראות את שם המשתמש ואת שעת מחיקת הקובץ בקונסולת PS.

הערה. מאז נמצאה בעיה כי הסמל "

\

" לא כתוב למאגר, החלפנו אותו ב "

|

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

$DataSet.file_name.Replace(‘|’,’\’).

ניתן להפעיל את קובץ ה- Script של כתיבת המידע מיומן האירועים למסד הנתונים בסוף היום באמצעות מתזמן המשימות או מצורף למחיקת הקובץ EventID (On Event), אשר צורכת משאבים רבים יותר. זה תלוי בדרישות למערכת.

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

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

טיפ חשוב. אם יומן הרישום מכיל ערך שהקובץ נמחק על ידי המשתמש, אל תמהרו לפרש זאת כפעולה מכוונת או זדונית. תוכניות רבות (במיוחד יישומי MS Office) יוצרות קובץ זמני בעת שמירת שינויים ולאחר מכן מוחקות את הגירסה הישנה של הקובץ. במקרה זה, אפשר רישום ביומן של שם התהליך (ProcessName fileld), שממנו הקובץ נמחק, ובאפשרותך לנתח אירועי מחיקת קובץ בהתבסס עליו. או שאתה יכול לסנן את האירועים מתהליכים כאלה, כמו winword.exe, excel.exe וכו '.

רישום קובץ מחיקת אירועי ביקורת לקובץ טקסט

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

$Outfile = "C:\Logs\Deleted-file-history-log.txt"
$today = get-date -DisplayHint date -UFormat %Y-%m-%d
Get-WinEvent -FilterHashTable @{LogName="Security";starttime="$today";id=4663} | Foreach {
$event = [xml]$_.ToXml()
if($event)
{
$Time = Get-Date $_.TimeCreated -UFormat "%Y-%m-%d %H:%M:%S"
$File = $event.Event.EventData.Data[6]."#text"
$User = $event.Event.EventData.Data[1]."#text"
$strLog = $Computer + " " + $File + " " + $Time + " " +  $User
$strLog  | out-file $Outfile -append
}
}

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