วิธีตรวจหาว่าใครลบไฟล์บน Windows Server ด้วยนโยบายการตรวจสอบ
คุณสามารถใช้การตรวจสอบเหตุการณ์การเข้าถึงวัตถุของระบบไฟล์เพื่อระบุผู้ใช้เฉพาะที่สร้าง ลบ หรือแก้ไขไฟล์เฉพาะ ในบทความนี้ เราจะแสดงวิธีกำหนดค่าการตรวจสอบเหตุการณ์สำหรับไฟล์ในโฟลเดอร์เครือข่ายที่ใช้ร่วมกันบน Windows Server 2016 หลังจากกำหนดค่าการตรวจสอบ คุณสามารถใช้ข้อมูลจากตัวแสดงเหตุการณ์เพื่อค้นหาผู้ใช้ที่ลบไฟล์ที่ระบุในไฟล์ เซิร์ฟเวอร์
เมื่อคุณลบไฟล์ออกจากโฟลเดอร์เครือข่ายที่ใช้ร่วมกัน ไฟล์นั้นจะถูกลบทันทีแทนที่จะส่งไปยังถังรีไซเคิลของผู้ใช้ สามารถรับรายการไฟล์ที่เปิดในโฟลเดอร์แชร์ได้ดังนี้
วิธีเปิดใช้งานนโยบายการตรวจสอบการเข้าถึงไฟล์และโฟลเดอร์บน Windows
ตามค่าเริ่มต้น การตรวจสอบ File System Object Access จะไม่เปิดใช้งานบน Windows Server คุณสามารถเปิดใช้งานและกำหนดการตั้งค่าการตรวจสอบโดยใช้ Group Policy หากคุณต้องการเปิดใช้งานนโยบายการตรวจสอบบนเซิร์ฟเวอร์หรือคอมพิวเตอร์หลายเครื่อง คุณสามารถใช้ GPO ของโดเมน (กำหนดค่าได้โดยใช้ไฟล์
gpmc.mscmmc คอนโซล) หากคุณต้องการกำหนดค่าการตรวจสอบบนเซิร์ฟเวอร์เดียวเท่านั้น คุณสามารถใช้ Local Group Policy Editor
เปิดคอนโซล Local Group Policy Editor -
gpedit.msc;
ไปที่ส่วน GPO ที่มีนโยบายการตรวจสอบขั้นสูง: การตั้งค่า Windows -> การตั้งค่าความปลอดภัย -> การกำหนดค่านโยบายการตรวจสอบขั้นสูง -> การเข้าถึงวัตถุ
เปิดนโยบาย ตรวจสอบระบบไฟล์ และระบุว่าคุณต้องการบันทึกเหตุการณ์การเข้าถึงวัตถุระบบไฟล์ที่สำเร็จเท่านั้น (กำหนดค่าเหตุการณ์การตรวจสอบต่อไปนี้ -> สำเร็จ)
คุณยังสามารถเปิดใช้งานการตรวจสอบการเข้าถึงวัตถุในเครื่องโดยใช้นโยบาย ตรวจสอบการเข้าถึงวัตถุ ภายใต้ การตั้งค่า Windows -> การตั้งค่าความปลอดภัย -> นโยบายท้องถิ่น -> นโยบายการตรวจสอบ อย่างไรก็ตาม ควรใช้นโยบายการตรวจสอบระบบไฟล์ เนื่องจากจะติดตามเฉพาะเหตุการณ์การเข้าถึง NTFS
บันทึกการเปลี่ยนแปลงและอัปเดตการตั้งค่า Group Policy ในเครื่องของคุณโดยใช้คำสั่ง:
gpupdate /force
การกำหนดการตั้งค่าการตรวจสอบการลบไฟล์ในโฟลเดอร์ที่ใช้ร่วมกัน
ตอนนี้คุณต้องกำหนดค่าการตรวจสอบในคุณสมบัติของโฟลเดอร์เครือข่ายที่ใช้ร่วมกันที่คุณต้องการติดตามการเข้าถึง เรียกใช้ File Explorer และเปิดคุณสมบัติของโฟลเดอร์ ไปที่แท็บ ความปลอดภัย คลิกปุ่ม ขั้นสูง -> ไปที่แท็บ การตรวจสอบ
หากข้อความ “คุณต้องเป็นผู้ดูแลระบบหรือได้รับสิทธิ์ที่เหมาะสมในการดูคุณสมบัติการตรวจสอบของวัตถุนี้” ปรากฏขึ้น ให้คลิกปุ่ม ดำเนินการต่อ
จากนั้นคลิกปุ่ม เพิ่ม เพื่อระบุผู้ใช้หรือกลุ่มที่คุณต้องการบันทึกกิจกรรมการตรวจสอบ หากคุณต้องการติดตามเหตุการณ์การเข้าถึงสำหรับผู้ใช้ทั้งหมด ให้ระบุกลุ่ม ทุกคน
จากนั้นคุณต้องระบุว่าควรบันทึกการอนุญาตใดที่ใช้ในการเข้าถึงวัตถุ หากต้องการบันทึกเฉพาะเหตุการณ์การลบไฟล์ในบันทึกเหตุการณ์ ให้คลิกปุ่ม แสดงสิทธิ์ขั้นสูง ในรายการเหตุการณ์ ปล่อยให้การตรวจสอบเฉพาะเหตุการณ์การลบโฟลเดอร์และไฟล์เท่านั้น - ลบ และ ลบโฟลเดอร์ย่อยและไฟล์
เคล็ดลับ โปรดจำไว้ว่านโยบายการตรวจสอบสำหรับวัตถุ 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ตอนนี้ หากผู้ใช้ลบไฟล์หรือโฟลเดอร์ใดๆ ในโฟลเดอร์เครือข่ายที่ใช้ร่วมกัน เหตุการณ์การลบไฟล์ระบบ -> ตรวจสอบความสำเร็จจะปรากฏในบันทึกความปลอดภัยที่มี ID เหตุการณ์ 4663 จากความปลอดภัยของ Microsoft Windows การตรวจสอบแหล่งที่มา
เปิด ตัวแสดงเหตุการณ์ คอนโซล mmc (
eventvwr.msc) ขยายส่วน Windows Logs -> Security เปิดใช้งานตัวกรองบันทึกเหตุการณ์โดย EventID 4663
เปิดกิจกรรมที่เหลือใน Event Viewer อย่างที่คุณเห็น มันมีข้อมูลเกี่ยวกับชื่อไฟล์ที่ถูกลบ บัญชีผู้ใช้ที่ลบไฟล์ และชื่อกระบวนการ
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 ได้รับการพิจารณาก่อนหน้านี้ในบทความ Querying MySQL Database with PowerShell
หากคุณต้องการใช้ฐานข้อมูล Microsoft SQL Server โปรดดูบทความ “How to run a MSSQL Server Query from 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
}
}สคริปต์ 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(‘|’,’\’).สคริปต์ของการเขียนข้อมูลจากบันทึกเหตุการณ์ไปยังฐานข้อมูลสามารถเรียกใช้ได้เมื่อสิ้นสุดวันโดยใช้ 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
}
}ดังนั้นเราจึงเสนอแนวคิดและรูปแบบทั่วไปของระบบเพื่อตรวจสอบและจัดเก็บข้อมูลเกี่ยวกับไฟล์ที่ถูกลบในโฟลเดอร์เครือข่ายที่ใช้ร่วมกัน หากจำเป็น สามารถปรับเปลี่ยนให้ตรงกับความต้องการของคุณได้อย่างง่ายดาย