Computer >> คอมพิวเตอร์ >  >> ระบบ >> Windows Server

วิธีการตรวจสอบว่าใครลบไฟล์บน Windows Server ด้วยนโยบายการตรวจสอบ?

คุณสามารถใช้การตรวจสอบเหตุการณ์การเข้าถึงอ็อบเจ็กต์ระบบไฟล์เพื่อระบุผู้ใช้เฉพาะที่สร้าง ลบ หรือแก้ไขไฟล์เฉพาะ ในบทความนี้ เราจะแสดงวิธีกำหนดค่าการตรวจสอบเหตุการณ์สำหรับไฟล์ในโฟลเดอร์เครือข่ายที่ใช้ร่วมกันใน Windows Server 2016 หลังจากกำหนดค่าการตรวจสอบแล้ว คุณสามารถใช้ข้อมูลจาก Event Viewer เพื่อค้นหาผู้ใช้ที่ลบไฟล์ที่ระบุในไฟล์ เซิร์ฟเวอร์

เมื่อคุณลบไฟล์ออกจากโฟลเดอร์เครือข่ายที่ใช้ร่วมกัน ไฟล์นั้นจะถูกลบทันที แทนที่จะถูกส่งไปยังถังรีไซเคิลของผู้ใช้ รายชื่อไฟล์ที่เปิดในโฟลเดอร์แชร์สามารถรับได้ดังนี้

จะเปิดใช้งานนโยบายการตรวจสอบการเข้าถึงไฟล์และโฟลเดอร์ใน Windows ได้อย่างไร

ตามค่าเริ่มต้น การตรวจสอบการเข้าถึงวัตถุของระบบไฟล์จะไม่เปิดใช้งานบน Windows Server คุณสามารถเปิดใช้งานและกำหนดการตั้งค่าการตรวจสอบโดยใช้นโยบายกลุ่ม หากคุณต้องการเปิดใช้นโยบายการตรวจสอบในเซิร์ฟเวอร์หรือคอมพิวเตอร์หลายเครื่อง คุณสามารถใช้โดเมน GPO ได้ (กำหนดค่าได้โดยใช้ gpmc.msc mmc คอนโซล) หากคุณต้องการกำหนดค่าการตรวจสอบบนเซิร์ฟเวอร์เดียวเท่านั้น คุณสามารถใช้ Local Group Policy Editor ได้

  1. เปิดคอนโซลตัวแก้ไขนโยบายกลุ่มภายใน – gpedit.msc;
  2. ไปที่ส่วน GPO ด้วยนโยบายการตรวจสอบขั้นสูง:การตั้งค่า Windows -> การตั้งค่าความปลอดภัย -> การกำหนดค่านโยบายการตรวจสอบขั้นสูง -> การเข้าถึงวัตถุ
  3. เปิด ระบบไฟล์ตรวจสอบ นโยบายและระบุว่าคุณต้องการบันทึกเฉพาะเหตุการณ์การเข้าถึงที่สำเร็จไปยังวัตถุระบบไฟล์ (กำหนดค่าเหตุการณ์การตรวจสอบต่อไปนี้ -> สำเร็จ ); คุณยังสามารถเปิดใช้งานการตรวจสอบการเข้าถึงออบเจ็กต์ในเครื่องโดยใช้ ตรวจสอบการเข้าถึงออบเจ็กต์ นโยบายภายใต้ การตั้งค่า Windows -> การตั้งค่าความปลอดภัย -> นโยบายภายในเครื่อง -> นโยบายการตรวจสอบ . อย่างไรก็ตาม ควรใช้นโยบายการตรวจสอบระบบไฟล์ เนื่องจากจะติดตามเฉพาะเหตุการณ์การเข้าถึง NTFS เท่านั้น วิธีการตรวจสอบว่าใครลบไฟล์บน Windows Server ด้วยนโยบายการตรวจสอบ?
  4. บันทึกการเปลี่ยนแปลงและอัปเดตการตั้งค่า Group Policy ในเครื่องของคุณโดยใช้คำสั่ง:gpupdate /force .

การกำหนดการตั้งค่าการตรวจสอบไฟล์ที่ถูกลบในโฟลเดอร์ที่ใช้ร่วมกัน

ตอนนี้ คุณต้องกำหนดค่าการตรวจสอบในคุณสมบัติของโฟลเดอร์เครือข่ายที่ใช้ร่วมกันที่คุณต้องการติดตามการเข้าถึง เรียกใช้ File Explorer และเปิดคุณสมบัติของโฟลเดอร์ ไปที่ ความปลอดภัย แท็บ คลิก ขั้นสูง ปุ่ม -> ไปที่ การตรวจสอบ แท็บ

หากข้อความ “คุณต้องเป็นผู้ดูแลระบบหรือได้รับสิทธิ์ที่เหมาะสมเพื่อดูคุณสมบัติการตรวจสอบของวัตถุนี้ ” ปรากฏขึ้น ให้คลิกปุ่ม ดำเนินการต่อ ปุ่ม.

วิธีการตรวจสอบว่าใครลบไฟล์บน Windows Server ด้วยนโยบายการตรวจสอบ?

จากนั้นคลิกปุ่ม เพิ่ม ปุ่มเพื่อระบุผู้ใช้หรือกลุ่มที่คุณต้องการบันทึกเหตุการณ์การตรวจสอบ หากคุณต้องการติดตามกิจกรรมการเข้าถึงสำหรับผู้ใช้ทั้งหมด ให้ระบุ ทุกคน กลุ่ม.

จากนั้น คุณต้องระบุสิทธิ์ที่ใช้ในการเข้าถึงวัตถุที่ควรถูกบันทึก หากต้องการบันทึกเฉพาะเหตุการณ์การลบไฟล์ในบันทึกเหตุการณ์ ให้คลิก แสดงการอนุญาตขั้นสูง ปุ่ม. ในรายการกิจกรรม ปล่อยให้การตรวจสอบเฉพาะเหตุการณ์การลบโฟลเดอร์และไฟล์ – ลบ และ ลบโฟลเดอร์ย่อยและไฟล์ .

วิธีการตรวจสอบว่าใครลบไฟล์บน Windows Server ด้วยนโยบายการตรวจสอบ?

เคล็ดลับ . โปรดจำไว้ว่านโยบายการตรวจสอบสำหรับวัตถุ 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 console (eventvwr.msc ) ขยาย บันทึกของ Windows -> ความปลอดภัย ส่วน. เปิดใช้งานตัวกรองบันทึกเหตุการณ์โดย EventID 4663

วิธีการตรวจสอบว่าใครลบไฟล์บน Windows Server ด้วยนโยบายการตรวจสอบ?

เปิดกิจกรรมที่เหลือใน Event Viewer อย่างที่คุณเห็น มันมีข้อมูลเกี่ยวกับชื่อไฟล์ที่ถูกลบ บัญชีของผู้ใช้ที่ลบไฟล์ และชื่อกระบวนการ

 มีการพยายามเข้าถึง Object.Subject:ID ความปลอดภัย:ชื่อ Corp \ JSMithAccount ชื่อ:JSMithAccount โดเมน:Corplogon ID:0x32B12627Object:Object Server:SecurityObject ประเภท:FileObject ชื่อ:E:E:\ Distr \ Backup.Rarhandle ID:0x7BC4Resource แอตทริบิวต์:            S:AIProcess Information:Process ID:                             0x4ชื่อกระบวนการ:ข้อมูลคำขอเข้าถึง:การเข้าถึง:                            ก่อนหน้าหน้ากาก 

วิธีการตรวจสอบว่าใครลบไฟล์บน Windows Server ด้วยนโยบายการตรวจสอบ?

หลังจากเปิดใช้นโยบายการตรวจสอบการเข้าถึงไฟล์ คุณจะพบได้ในบันทึกความปลอดภัย :

  • ใครลบไฟล์ออกจากโฟลเดอร์เครือข่ายที่ใช้ร่วมกันและเกิดขึ้นเมื่อใด
  • แอปพลิเคชัน (กระบวนการ) ใดที่ใช้ลบไฟล์
  • วันที่ที่จะกู้คืนข้อมูลสำรองคือวันที่ใด

จะเขียนเหตุการณ์การลบไฟล์ไปยังฐานข้อมูล 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 ได้รับการพิจารณาก่อนหน้านี้ในบทความ Querying MySQL Database with PowerShell

หากคุณต้องการใช้ฐานข้อมูล Microsoft SQL Server โปรดดูบทความ “วิธีเรียกใช้แบบสอบถามเซิร์ฟเวอร์ MSSQL จาก PowerShell”

หากต้องการรับเหตุการณ์ที่มี EventID 4663 จากบันทึกความปลอดภัยสำหรับวันปัจจุบัน คุณสามารถใช้สคริปต์ 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
}
}

วิธีการตรวจสอบว่าใครลบไฟล์บน Windows Server ด้วยนโยบายการตรวจสอบ?

สคริปต์ 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 ได้แล้ว

วิธีการตรวจสอบว่าใครลบไฟล์บน Windows Server ด้วยนโยบายการตรวจสอบ?

หมายเหตุ . เนื่องจากพบปัญหาว่าสัญลักษณ์ “\ ” ไม่ได้เขียนลงในฐานข้อมูล เราแทนที่ด้วย “| ” ดังนั้น หากคุณต้องแสดงพาธแบบเต็มไปยังไฟล์ คุณสามารถทำการแทนที่แบบย้อนกลับเมื่อเลือกจากฐานข้อมูล:

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

สคริปต์ของการเขียนข้อมูลจากบันทึกเหตุการณ์ไปยังฐานข้อมูลสามารถเรียกใช้เมื่อสิ้นสุดวันโดยใช้ Task Scheduler หรือแนบมากับการลบไฟล์ EventID (On Event) ซึ่งใช้ทรัพยากรมากกว่า ขึ้นอยู่กับความต้องการของระบบ

เคล็ดลับ . ตรวจสอบให้แน่ใจว่าคุณได้กำหนดขนาดสูงสุดของไฟล์บันทึกเหตุการณ์ความปลอดภัยให้ใหญ่พอที่จะบันทึกเหตุการณ์ทั้งหมดในวันนั้น มิฉะนั้น คุณจะต้องเรียกใช้งานการส่งออกข้อมูลไปยังฐานข้อมูลบ่อยกว่าวันละครั้งหรือแม้กระทั่งบนทริกเกอร์ โดยทั่วไป ขนาดบันทึกสูงสุด บนเวิร์กสเตชันต้องมีอย่างน้อย 64 MB และ 262 MB บนเซิร์ฟเวอร์ไฟล์ Windows ควรเปิดใช้งานตัวเลือกในการเขียนทับกิจกรรมเก่าไว้ (เขียนทับเหตุการณ์ตามต้องการ )

หากจำเป็น คุณสามารถสร้างหน้าเว็บ PHP แบบง่ายเพื่อรับข้อมูลเกี่ยวกับผู้ใช้ที่ลบไฟล์ในรูปแบบที่สะดวกยิ่งขึ้น

เคล็ดลับสำคัญ . หากบันทึกมีรายการที่ผู้ใช้ลบไฟล์ อย่ารีบตีความว่าเป็นการกระทำโดยเจตนาหรือมุ่งร้าย หลายโปรแกรม (โดยเฉพาะแอป MS Office) จะสร้างไฟล์ชั่วคราวเมื่อบันทึกการเปลี่ยนแปลง จากนั้นจึงลบไฟล์เวอร์ชันเก่า ในกรณีนี้ ให้เปิดใช้งานการบันทึกชื่อกระบวนการ (ProcessName fileld) ซึ่งไฟล์นั้นถูกลบ และคุณสามารถแยกวิเคราะห์เหตุการณ์การลบไฟล์ตามนั้น หรือคุณสามารถกรองเหตุการณ์จากกระบวนการดังกล่าว เช่น winword.exe, excel.exe เป็นต้น

การบันทึกไฟล์ ลบเหตุการณ์การตรวจสอบไปยังไฟล์ข้อความ

หากคุณไม่ต้องการใช้เซิร์ฟเวอร์ฐานข้อมูลแยกต่างหาก คุณสามารถบันทึกเหตุการณ์การตรวจสอบการลบไฟล์ลงในไฟล์บันทึกข้อความธรรมดาได้ ใช้สคริปต์ 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
}
}

วิธีการตรวจสอบว่าใครลบไฟล์บน Windows Server ด้วยนโยบายการตรวจสอบ?

ดังนั้นเราจึงได้เสนอแนวคิดและรูปแบบทั่วไปของระบบเพื่อตรวจสอบและจัดเก็บข้อมูลเกี่ยวกับไฟล์ที่ถูกลบในโฟลเดอร์เครือข่ายที่ใช้ร่วมกัน หากจำเป็น ก็สามารถปรับเปลี่ยนให้ตรงตามความต้องการของคุณได้อย่างง่ายดาย