Bạn có thể sử dụng kiểm tra sự kiện truy cập đối tượng hệ thống tệp để xác định một người dùng cụ thể đã tạo, xóa hoặc sửa đổi một tệp cụ thể. Trong bài viết này, chúng tôi sẽ hướng dẫn bạn cách định cấu hình kiểm tra sự kiện cho tệp trên thư mục mạng chia sẻ trên Windows Server 2016. Sau khi định cấu hình kiểm tra, bạn có thể sử dụng thông tin từ Trình xem sự kiện để tìm người dùng đã xóa tệp cụ thể trên tệp máy chủ.
Khi bạn xóa tệp khỏi thư mục mạng chia sẻ, tệp đó sẽ bị xóa ngay lập tức thay vì được chuyển vào thùng rác của người dùng. Danh sách các tệp được mở trên thư mục chia sẻ có thể được lấy như sau.
Làm cách nào để bật Chính sách kiểm tra quyền truy cập tệp và thư mục trên Windows?
Theo mặc định, kiểm tra quyền truy cập đối tượng hệ thống tệp không được bật trên Windows Server. Bạn có thể bật và định cấu hình cài đặt kiểm tra bằng Chính sách Nhóm. Nếu bạn cần bật chính sách kiểm tra trên nhiều máy chủ hoặc máy tính, bạn có thể sử dụng GPO miền (có thể định cấu hình bằng cách sử dụng gpmc.msc
giao diện điều khiển mmc). Nếu bạn chỉ muốn định cấu hình kiểm tra trên một máy chủ, bạn có thể sử dụng Local Group Policy Editor.
- Mở bảng điều khiển Local Group Policy Editor -
gpedit.msc
; - Đi tới phần GPO có chính sách kiểm tra nâng cao: Cài đặt Windows -> Cài đặt bảo mật -> Cấu hình chính sách kiểm tra nâng cao -> Quyền truy cập đối tượng;
- Mở Hệ thống tệp kiểm tra chính sách và chỉ định rằng bạn chỉ muốn ghi nhật ký các sự kiện truy cập thành công vào các đối tượng hệ thống tệp ( Định cấu hình các sự kiện kiểm tra sau -> Thành công ); Bạn cũng có thể bật kiểm tra quyền truy cập đối tượng cục bộ bằng cách sử dụng Quyền truy cập đối tượng kiểm tra trong Cài đặt Windows -> Cài đặt bảo mật -> Chính sách cục bộ -> Chính sách kiểm tra . Tuy nhiên, sử dụng chính sách Kiểm tra Hệ thống Tệp sẽ được ưu tiên hơn vì nó chỉ theo dõi các sự kiện truy cập NTFS.
- Lưu các thay đổi và cập nhật cài đặt Chính sách Nhóm cục bộ của bạn bằng lệnh:
gpupdate /force
.
Định cấu hình cài đặt kiểm tra tệp đã xóa trên thư mục được chia sẻ
Bây giờ bạn cần định cấu hình kiểm tra trong các thuộc tính của thư mục mạng chia sẻ mà bạn muốn theo dõi quyền truy cập. Chạy File Explorer và mở thuộc tính thư mục. Đi tới Bảo mật chuyển hướng. Nhấp vào Nâng cao nút -> chuyển đến Kiểm tra tab.
Nếu thông báo “ Bạn phải là quản trị viên hoặc đã được cấp các đặc quyền thích hợp để xem các thuộc tính kiểm tra của đối tượng này ”Xuất hiện, nhấp vào nút Tiếp tục nút.
Sau đó, nhấp vào nút Thêm để chỉ định người dùng hoặc nhóm mà bạn muốn nắm bắt các sự kiện kiểm tra. Nếu bạn muốn theo dõi các sự kiện truy cập cho tất cả người dùng, hãy chỉ định Mọi người tập đoàn.
Sau đó, bạn cần chỉ định quyền nào được sử dụng để truy cập đối tượng cần được ghi lại. Để chỉ lưu các sự kiện xóa tệp trong Nhật ký sự kiện, hãy nhấp vào nút Hiển thị quyền nâng cao khuy ao. Trong danh sách sự kiện, chỉ để kiểm tra các sự kiện xóa thư mục và tệp - Xóa và Xóa các thư mục con và tệp .
Mẹo . Hãy nhớ rằng chính sách kiểm tra cho các đối tượng Windows yêu cầu tài nguyên máy tính bổ sung. Sử dụng nó một cách cẩn thận, luôn cố gắng giảm thiểu số lượng các đối tượng và sự kiện kiểm toán phải ghi nhật ký.
$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
Bây giờ, nếu người dùng xóa bất kỳ tệp hoặc thư mục nào trong thư mục mạng chia sẻ, thì sự kiện xóa tệp Hệ thống tệp -> Kiểm tra thành công sẽ xuất hiện trong Nhật ký bảo mật với ID sự kiện 4663 từ kiểm tra bảo mật Microsoft Windows nguồn.
Mở Trình xem sự kiện bảng điều khiển mmc (eventvwr.msc
), mở rộng Nhật ký Windows -> Bảo mật tiết diện. Bật bộ lọc nhật ký sự kiện bằng EventID 4663.
Mở bất kỳ sự kiện nào còn lại trong Trình xem sự kiện. Như bạn có thể thấy, nó chứa thông tin về tên của tệp đã bị xóa, tài khoản của người dùng đã xóa tệp và tên quá trình.
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
Sau khi bật chính sách kiểm tra quyền truy cập tệp, bạn có thể tìm thấy trong Nhật ký bảo mật:
- Ai đã xóa tệp khỏi thư mục mạng chia sẻ và điều đó xảy ra khi nào;
- Ứng dụng (quy trình) nào đã được sử dụng để xóa tệp;
- Ngày sao lưu sẽ được khôi phục.
Làm cách nào để ghi sự kiện xóa tệp vào cơ sở dữ liệu SQL (MySQL / MSSQL)?
Tuy nhiên, ngay cả khi tính năng kiểm tra các tệp đã xóa được bật, việc tìm thấy thứ gì đó trong nhật ký có thể gây rắc rối. Thứ nhất, khá khó để tìm một mục cụ thể trong số hàng nghìn sự kiện (trong Windows không có công cụ thuận tiện nào để tìm kiếm một sự kiện với bộ lọc linh hoạt). Thứ hai, nếu một tệp đã bị xóa cách đây khá lâu, thì sự kiện này có thể không có trong nhật ký, vì nó đã bị ghi đè bởi các sự kiện mới.
Bạn có thể lưu tất cả các sự kiện xóa tệp vào cơ sở dữ liệu SQL. Bạn có thể sử dụng cơ sở dữ liệu Microsoft SQL Server, Elasticsearch hoặc MySQL / MariaDB để lưu trữ các sự kiện của mình.
Trong ví dụ này, chúng tôi sẽ chỉ cho bạn cách ghi nhật ký các sự kiện kiểm tra vào một bảng cơ sở dữ liệu riêng biệt trên MySQL. Tôi sẽ sử dụng định dạng bảng sau:
- Tên máy chủ;
- Tên của tệp đã xóa;
- Ngày và giờ;
- Tên của người dùng đã xóa tệp.
Truy vấn MySQL để tạo bảng này trông giống như sau:
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));
Nếu bạn muốn sử dụng cơ sở dữ liệu Microsoft SQL Server, hãy xem bài viết “Cách chạy truy vấn máy chủ MSSQL từ PowerShell?”
Để nhận các sự kiện với EventID 4663 từ Nhật ký bảo mật cho ngày hiện tại, bạn có thể sử dụng tập lệnh PowerShell sau:
$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
}
}
Tập lệnh PowerShell tiếp theo sẽ ghi dữ liệu bạn nhận được vào cơ sở dữ liệu MySQL trên máy chủ từ xa (với địa chỉ 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()
Bây giờ, để tìm xem ai đã xóa tệp “ Báo cáo hàng năm.DOC “, Chỉ cần chạy tập lệnh sau trong bảng điều khiển PowerShell là đủ:
$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()
Bây giờ bạn có thể thấy tên người dùng và thời gian tệp bị xóa trong bảng điều khiển PS.
Lưu ý . Vì một vấn đề đã được tìm thấy nên ký hiệu “
\
”Không được ghi vào cơ sở dữ liệu, chúng tôi đã thay thế nó cho“ |
”. Vì vậy, nếu bạn phải hiển thị đường dẫn đầy đủ đến tệp, bạn có thể thực hiện thay thế ngược lại khi chọn từ cơ sở dữ liệu:
$DataSet.file_name.Replace(‘|’,’\’).
Tập lệnh ghi thông tin từ Nhật ký sự kiện vào cơ sở dữ liệu có thể được chạy vào cuối ngày bằng Trình lập lịch tác vụ hoặc được đính kèm với xóa tệp EventID (Trên sự kiện), việc này tiêu tốn nhiều tài nguyên hơn. Nó phụ thuộc vào các yêu cầu đối với hệ thống.
Mẹo . Đảm bảo bạn đặt kích thước tối đa của tệp nhật ký sự kiện Bảo mật đủ lớn để ghi lại tất cả các sự kiện trong ngày. Nếu không, bạn sẽ phải chạy tác vụ xuất dữ liệu vào cơ sở dữ liệu thường xuyên hơn một lần một ngày hoặc thậm chí trên trình kích hoạt. Thông thường, Kích thước nhật ký tối đa trên máy trạm phải có ít nhất 64 MB và 262 MB trên máy chủ Tệp của Windows. Bạn nên bật tùy chọn ghi đè các sự kiện cũ ( Ghi đè các sự kiện nếu cần ).
Nếu cần, bạn có thể tạo một trang web PHP đơn giản để lấy thông tin về những người dùng đã xóa tệp ở một biểu mẫu thuận tiện hơn.
Mẹo quan trọng . Nếu nhật ký có mục nhập rằng tệp đã bị người dùng xóa, đừng vội hiểu đó là một hành động cố ý hoặc độc hại. Nhiều chương trình (đặc biệt là các ứng dụng MS Office) tạo một tệp tạm thời khi lưu các thay đổi và sau đó xóa phiên bản cũ của tệp. Trong trường hợp này, hãy bật ghi nhật ký tên tiến trình (ProcessName fileld), từ đó tệp đã bị xóa và bạn có thể phân tích cú pháp các sự kiện xóa tệp dựa trên nó. Hoặc bạn có thể lọc các sự kiện từ các quy trình như vậy, như winword.exe, excel.exe, v.v.Tệp ghi nhật ký Xóa sự kiện kiểm tra thành tệp văn bản
Nếu không muốn sử dụng máy chủ cơ sở dữ liệu riêng, bạn có thể lưu các sự kiện kiểm tra xóa tệp vào tệp nhật ký văn bản thuần túy. Sử dụng tập lệnh PowerShell này để lưu bạn xuất thành tệp văn bản:
$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
}
}
Vì vậy, chúng tôi đã đề xuất một ý tưởng và mô hình chung của hệ thống để kiểm tra và lưu trữ thông tin về các tệp đã bị xóa trong các thư mục mạng chia sẻ. Nếu cần, nó có thể dễ dàng được sửa đổi để đáp ứng yêu cầu của bạn.