คุณสามารถใช้การตรวจสอบเหตุการณ์การเข้าถึงอ็อบเจ็กต์ระบบไฟล์เพื่อระบุผู้ใช้เฉพาะที่สร้าง ลบ หรือแก้ไขไฟล์เฉพาะ ในบทความนี้ เราจะแสดงวิธีกำหนดค่าการตรวจสอบเหตุการณ์สำหรับไฟล์ในโฟลเดอร์เครือข่ายที่ใช้ร่วมกันใน Windows Server 2016 หลังจากกำหนดค่าการตรวจสอบแล้ว คุณสามารถใช้ข้อมูลจาก Event Viewer เพื่อค้นหาผู้ใช้ที่ลบไฟล์ที่ระบุในไฟล์ เซิร์ฟเวอร์
เมื่อคุณลบไฟล์ออกจากโฟลเดอร์เครือข่ายที่ใช้ร่วมกัน ไฟล์นั้นจะถูกลบทันที แทนที่จะถูกส่งไปยังถังรีไซเคิลของผู้ใช้ รายชื่อไฟล์ที่เปิดในโฟลเดอร์แชร์สามารถรับได้ดังนี้
จะเปิดใช้งานนโยบายการตรวจสอบการเข้าถึงไฟล์และโฟลเดอร์ใน Windows ได้อย่างไร
ตามค่าเริ่มต้น การตรวจสอบการเข้าถึงวัตถุของระบบไฟล์จะไม่เปิดใช้งานบน Windows Server คุณสามารถเปิดใช้งานและกำหนดการตั้งค่าการตรวจสอบโดยใช้นโยบายกลุ่ม หากคุณต้องการเปิดใช้นโยบายการตรวจสอบในเซิร์ฟเวอร์หรือคอมพิวเตอร์หลายเครื่อง คุณสามารถใช้โดเมน GPO ได้ (กำหนดค่าได้โดยใช้ gpmc.msc
mmc คอนโซล) หากคุณต้องการกำหนดค่าการตรวจสอบบนเซิร์ฟเวอร์เดียวเท่านั้น คุณสามารถใช้ 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
ตอนนี้ หากผู้ใช้ลบไฟล์หรือโฟลเดอร์ใดๆ ในโฟลเดอร์เครือข่ายที่ใช้ร่วมกัน ระบบไฟล์ -> การลบไฟล์ตรวจสอบความสำเร็จจะปรากฏในบันทึกความปลอดภัยพร้อมรหัสเหตุการณ์ 4663 จากการตรวจสอบความปลอดภัยของ Microsoft Windows ที่มา
เปิด ตัวแสดงกิจกรรม mmc console (eventvwr.msc
) ขยาย บันทึกของ Windows -> ความปลอดภัย ส่วน. เปิดใช้งานตัวกรองบันทึกเหตุการณ์โดย EventID 4663
เปิดกิจกรรมที่เหลือใน 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ชื่อกระบวนการ:ข้อมูลคำขอเข้าถึง:การเข้าถึง: ก่อนหน้าหน้ากาก
หลังจากเปิดใช้นโยบายการตรวจสอบการเข้าถึงไฟล์ คุณจะพบได้ในบันทึกความปลอดภัย :
- ใครลบไฟล์ออกจากโฟลเดอร์เครือข่ายที่ใช้ร่วมกันและเกิดขึ้นเมื่อใด
- แอปพลิเคชัน (กระบวนการ) ใดที่ใช้ลบไฟล์
- วันที่ที่จะกู้คืนข้อมูลสำรองคือวันที่ใด
จะเขียนเหตุการณ์การลบไฟล์ไปยังฐานข้อมูล 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));
หากคุณต้องการใช้ฐานข้อมูล 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
}
}
สคริปต์ 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
}
}
ดังนั้นเราจึงได้เสนอแนวคิดและรูปแบบทั่วไปของระบบเพื่อตรวจสอบและจัดเก็บข้อมูลเกี่ยวกับไฟล์ที่ถูกลบในโฟลเดอร์เครือข่ายที่ใช้ร่วมกัน หากจำเป็น ก็สามารถปรับเปลี่ยนให้ตรงตามความต้องการของคุณได้อย่างง่ายดาย