Sistem audit penghapusan file dan folder sederhana untuk Windows Server

Setiap administrator Windows dihadapkan pada situasi di mana pengguna yang marah ingin tahu siapa sebenarnya yang menghapus file penting mega dengan laporan tahunan dalam folder bersama di server file. Informasi ini hanya dapat diperoleh jika Anda mengaudit penghapusan file dan folder pada server file, jika tidak hanya mengembalikan file yang dihapus dari cadangan (dan Anda sudah melakukannya?) Dan mengangkat bahu.

Tetapi, bahkan dengan audit penghapusan file dihidupkan, menemukan sesuatu dalam log bisa menjadi masalah. Pertama, untuk menemukan catatan yang diinginkan di antara ribuan peristiwa cukup sulit (tidak ada cara yang waras untuk mencari acara yang menarik dengan pemfilteran yang fleksibel di Windows), dan kedua, jika file itu dihapus sejak lama, peristiwa ini mungkin tidak ada di log, karena ditimpa oleh yang lebih baru.

Pada artikel ini kami akan menunjukkan contoh organisasi pada alat Windows bawaan. sistem audit menghapus file dan folder di direktori jaringan bersama (file server) dengan acara perekaman di database terpisah di MySQL.

Karena adanya database dengan informasi tentang semua file yang dihapus, administrator akan dapat memberikan jawaban atas pertanyaan:

  • Siapa dan kapan menghapus file
  • Dari aplikasi mana file itu dihapus?
  • Kapan Anda perlu mengembalikan cadangan

Pertama-tama, pada server file Windows, Anda harus mengaktifkan audit acara, yang memastikan bahwa informasi tentang penghapusan file dicatat dalam log sistem. Kami sudah memeriksa prosedur ini di artikel Akses file dan folder audit di Windows.

Audit dapat diaktifkan melalui kebijakan umum. Akses Objek Audit di bagian kebijakan Pengaturan Keamanan -> Kebijakan Lokal -> Kebijakan Audit

Atau (lebih disukai) melalui kebijakan audit lanjutan dalam GPO: Pengaturan Keamanan -> Konfigurasi Kebijakan Audit Lanjutan -> Akses Objek -> Sistem File Audit.

Kiat. Melakukan audit membebankan biaya tambahan pada sumber daya sistem. Gunakan dengan hati-hati, terutama untuk server file yang sangat dimuat..

Dalam properti folder jaringan bersama (Keamanan -> Lanjutan -> Audit), penghapusan file yang ingin kami pantau, untuk grup Semuanya aktifkan audit penghapusan folder dan file (Hapus subfolder dan file).

Kiat. Penghapusan audit file dalam folder tertentu juga dapat diaktifkan melalui PowerShell:

$ Path = "D: \ Public"
$ AuditChangesRules = New-Object System.Security.AccessControl.FileSystemAuditRule ('Semua Orang', 'Hapus, HapusSubdirectoriesAndFiles', 'tidak ada', 'tidak ada', 'Sukses')
$ Acl = Dapatkan-Acl -Path $ Path
$ Acl.AddAuditRule ($ AuditChangesRules)
Set-Acl -Path $ Path -AclObject $ Acl

Ketika file berhasil dihapus, acara ID peristiwa muncul di log keamanan sistem 4663 dari sumber Audit keamanan Microsoft Windows. Deskripsi acara berisi informasi tentang nama file yang dihapus, akun tempat penghapusan dilakukan, dan nama proses.

Jadi, peristiwa yang menarik bagi kami ditulis ke log, sekarang saatnya untuk membuat tabel di server MySQL yang terdiri dari bidang-bidang berikut:

  • Nama server
  • Nama file jarak jauh
  • Waktu penghapusan
  • Nama pengguna yang menghapus file

Permintaan MySQL untuk membuat tabel seperti itu akan terlihat seperti ini:

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

Catatan. Kami memeriksa fitur-fitur bekerja dengan database MySQL secara terperinci dalam artikel Bekerja dengan Database MySQL dari PowerShell

Sebuah skrip untuk mengumpulkan informasi dari log peristiwa. Kami memfilter log peristiwa dengan ID 4663 untuk hari ini.

$ 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]. "# Teks"
$ User = $ event.Event.EventData.Data [1]. "# Teks"
$ Computer = $ event.Event.System.computer

Skrip berikut akan mencatat data yang diterima dalam database MySQL di server jauh:

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.7.7.13; uid = posh; pwd = P @ ssw0rd; database = aduser'
$ Connection.Open ()
$ sql = Objek-Baru 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]. "# Teks"

$ File = $ File.Replace ('\', '|')
$ User = $ event.Event.EventData.Data [1]. "# Teks"
$ Computer = $ event.Event.System.computer
$ sql.CommandText = "INSERT INTO track_del (server, namafile, dt_time, user_name) VALUES ('$ Computer', '$ File', '$ Time', '$ User')"
$ sql.ExecuteNonQuery ()


$ Reader.Close ()
$ Connection.Close ()

Sekarang, untuk mengetahui siapa yang menghapus file "document1 - Copy.DOC", cukup menjalankan skrip berikut di konsol PowerShell.

$ DeletedFile = "% document1 - Copy.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.7.7.13; uid = posh; pwd = P @ ssw0rd; database = aduser'
$ Connection.Open ()
$ MYSQLCommand = Objek Baru MySql.Data.MySqlClient.MySqlCommand
$ MYSQLDataAdapter = Objek Baru MySql.Data.MySqlClient.MySqlDataAdapter
$ MYSQLDataSet = New-Object System.Data.DataSet
$ MYSQLCommand.Connection = $ Connection
$ MYSQLCommand.CommandText = "SELECT user_name, dt_time dari track_del di mana file_name SUKA '$ DeletedFile'"
$ MYSQLDataAdapter.SelectCommand = $ MYSQLCommand
$ NumberOfDataSets = $ MYSQLDataAdapter.Fill ($ MYSQLDataSet, "data")
foreach ($ DataSet dalam $ MYSQLDataSet.tables [0])

tulis-host "Pengguna:" $ DataSet.user_name "di:" $ DataSet.dt_time

$ Connection.Close ()

Di konsol, kami mendapatkan nama pengguna dan waktu penghapusan file.

Catatan. Karena masalah terdeteksi, karakter chir "\" tidak ditulis ke database, kami menggantinya dengan "|". Dengan demikian, jika Anda perlu menentukan path lengkap ke file, ketika mengambil dari database, Anda dapat melakukan penggantian $ $ DataSet.file_name.Replace secara terbalik. ('|', '\'). Terima kasih kepada Alex Kornev untuk komentarnya.!

Script untuk membuang data dari log ke database dapat dijalankan sekali pada akhir hari sesuai dengan penjadwal atau menutup telepon pada acara penghapusan (Pada Acara), yang lebih intensif sumber daya. Itu semua tergantung pada persyaratan sistem..

Kiat. Anda perlu memastikan bahwa log keamanan cukup besar untuk memuat semua peristiwa hari itu. Jika tidak, Anda harus menjalankan tugas membuang data dari log ke database lebih dari 1 kali per hari, atau secara umum pada pemicu. Untuk stasiun kerja Ukuran Log Maksimum biasanya diatur setidaknya 64 Mb di utara - 262 Mb Biarkan opsi timpa aktif (Timpa acara sesuai kebutuhan).

Jika diinginkan, dengan analogi, Anda dapat bereaksi halaman web sederhana ke php untuk mendapatkan informasi tentang penyebab menghapus file dalam bentuk yang lebih nyaman. Tugas diselesaikan oleh setiap programmer php dalam 1-2 jam.

Tip penting. Jika log berisi informasi tentang penghapusan file oleh pengguna, jangan buru-buru menafsirkannya sebagai disengaja atau bahkan berbahaya. Banyak program (terutama program MS Office berdosa), saat menyimpan data, mereka pertama kali membuat file sementara, menyimpan dokumen untuk itu, dan menghapus versi file yang lama. Dalam hal ini, masuk akal untuk menambahkan catatan tambahan dalam database ke nama proses dimana file dihapus (bidang ProcessName acara), dan untuk menganalisis penghapusan file yang mempertimbangkan fakta ini. Atau sepenuhnya menyaring peristiwa dari proses sampah seperti, misalnya, winword.exe, excel.exe, dll..

Jadi, kami mengusulkan ide dan kerangka kerja umum tertentu dari sistem audit dan penyimpanan informasi tentang file yang dihapus dalam bola jaringan, jika diinginkan, dapat dengan mudah dimodifikasi agar sesuai dengan kebutuhan Anda.