Jednoduchý auditovací systém pro odstraňování souborů a složek pro Windows Server

Každý administrátor Windows čelí situaci, kdy naštvaní uživatelé chtějí vědět, kdo přesně smazal mega důležitý soubor s výroční zprávou ve sdílené složce na souborovém serveru. Tyto informace lze získat pouze v případě, že provedete audit mazání souborů a složek na souborovém serveru, jinak zbývá pouze obnovit smazaný soubor ze zálohy (a již je provedete?) A pokrčit rameny.

Ale i při zapnutém auditu mazání souborů může být vyhledávání v protokolech problematické. Za prvé, najít požadovaný záznam mezi tisíci událostmi je docela obtížné (neexistují rozumné prostředky pro vyhledávání události zájmu s flexibilním filtrováním ve Windows), a za druhé, pokud byl soubor odstraněn už dávno, tato událost může prostě chybět v protokolu, byl přepsán novější.

V tomto článku si ukážeme příklad organizace vestavěných nástrojů systému Windows. auditní systémy odstraňují soubory a složky ve sdíleném síťovém adresáři (souborový server) se záznamem událostí v samostatné databázi v MySQL.

Vzhledem k přítomnosti databáze s informacemi o všech smazaných souborech bude administrátor schopen odpovídat na otázky:

  • Kdo a kdy smazal soubor
  • Z jaké aplikace je soubor odstraněn?
  • V jakém okamžiku musíte zálohu obnovit

Nejprve musíte na souborovém serveru Windows povolit auditování událostí, což zajistí, že informace o mazání souborů budou zaznamenány do systémového protokolu. Tento postup jsme již prozkoumali v článku Auditování přístupu k souborům a složkám ve Windows.

Auditování lze povolit prostřednictvím společné zásady. Auditovat přístup k objektům v části zásady Nastavení zabezpečení -> Místní zásady -> Zásady auditu

Nebo (nejlépe) prostřednictvím pokročilých zásad auditu v GPO: Nastavení zabezpečení -> Pokročilá konfigurace zásad auditu -> Přístup k objektům -> Systém souborů auditu.

Tip. Provedení auditu ukládá dodatečné náklady na systémové prostředky. Používejte opatrně, zejména u vysoce zatížených souborových serverů..

Ve vlastnostech sdílené síťové složky (Zabezpečení -> Rozšířené -> Auditování), odstranění souborů, ve kterých chceme sledovat, pro skupinu Všichni povolit audit mazání složek a souborů (Odstranit podsložky a soubory).

Tip. Vymazání auditování souborů v konkrétní složce lze také povolit pomocí PowerShell:

$ Path = "D: \ Public"
$ AuditChangesRules = New-Object System.Security.AccessControl.FileSystemAuditRule ('Every', 'Delete, DeleteSubdirectoriesAndFiles', 'none', 'none', 'Success')
$ Acl = Získat-Acl-Cesta $ Cesta
$ Acl.AddAuditRule ($ AuditChangesRules)
Set-Acl -Path $ Path -AclObject $ Acl

Po úspěšném odstranění souboru se v protokolu zabezpečení systému zobrazí událost ID události 4663 ze zdroje Bezpečnostní audit systému Microsoft Windows. Popis události obsahuje informace o názvu odstraněného souboru, účtu, pod kterým bylo odstranění provedeno, a názvu procesu.

Takže události, které nás zajímají, jsou zapsány do protokolu, je čas vytvořit tabulku na serveru MySQL sestávající z následujících polí:

  • Název serveru
  • Název vzdáleného souboru
  • Čas odstranění
  • Jméno uživatele, který soubor odstranil

MySQL dotaz k vytvoření takové tabulky bude vypadat takto:

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));

Poznámka:. Podrobně jsme prozkoumali funkce práce s databází MySQL v článku Práce s databází MySQL od společnosti PowerShell

Skript pro shromažďování informací z protokolu událostí. Protokol událostí filtrujeme pomocí ID 4663 pro aktuální den.

$ 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

Následující skript zaznamená přijatá data do databáze MySQL na vzdáleném serveru:

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 = Nový objekt 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 track_del (server, file_name, dt_time, user_name) VALUES ('$ Computer', '$ File', '$ Time', '$ User')"
$ sql.ExecuteNonQuery ()


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

Nyní zjistěte, kdo soubor smazal “document1 - Copy.DOC“, stačí spustit následující skript v konzole 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 = Nový objekt MySql.Data.MySqlClient.MySqlCommand
$ MYSQLDataAdapter = Nový objekt MySql.Data.MySqlClient.MySqlDataAdapter
$ MYSQLDataSet = New-Object System.Data.DataSet
$ MYSQLCommand.Connection = $ Connection
$ MYSQLCommand.CommandText = "SELECT user_name, dt_time from track_del kde file_name LIKE '$ DeletedFile'"
$ MYSQLDataAdapter.SelectCommand = $ MYSQLCommand
$ NumberOfDataSets = $ MYSQLDataAdapter.Fill ($ MYSQLDataSet, "data")
foreach ($ DataSet v $ MYSQLDataSet.tables [0])

write-host "User:" $ DataSet.user_name "na:" $ DataSet.dt_time

$ Connection.Close ()

V konzole dostaneme uživatelské jméno a čas odstranění souboru.

Poznámka:. Protože Byl zjištěn problém, znak chir "\" není zapsán do databáze, nahradili jsme jej znakem "|". Pokud tedy potřebujete zadat úplnou cestu k souboru, můžete při načítání z databáze provést zpětné nahrazení $ DataSet.file_name.Replace ('|', '\'). Děkuji Alexu Kornevovi za komentář.!

Skript pro ukládání dat z protokolu do databáze může být spuštěn jednou na konci dne podle plánovače nebo zavěšen na událost odstranění (On Event), která je náročnější na zdroje. Vše záleží na systémových požadavcích..

Tip. Musíte se ujistit, že protokol zabezpečení je dostatečně velký, aby obsahoval všechny události dne. V opačném případě budete muset spustit úlohu ukládání dat z protokolu do databáze častěji než 1krát denně nebo obecně na spouštěčích. Pro pracovní stanici Maximální velikost protokolu obvykle nastavena alespoň 64 Mb na severu - 262 Mb Nechte možnost přepsat na (Přepsat události podle potřeby).

V případě potřeby můžete analogicky reagovat jednoduchou webovou stránku na php a získat informace o vinících z mazání souborů ve výhodnější formě. Úkol je vyřešen jakýmkoli php programátorem za 1-2 hodiny.

Důležitý tip. Pokud protokol obsahuje informace o vymazání souboru uživatelem, nespěchejte, aby byl jednoznačně interpretován jako úmyslný nebo dokonce škodlivý. Mnoho programů (zejména programů MS Office sin) při ukládání dat nejprve vytvoří dočasný soubor, uloží do něj dokument a smaže starou verzi souboru. V tomto případě má smysl přidat další název v databázi k názvu procesu, kterým byl soubor odstraněn (pole ProcessName události), a analyzovat odstranění souborů s ohledem na tuto skutečnost. Nebo zcela radikálně filtrujte události z takových odpadků, například winword.exe, excel.exe atd..

Navrhli jsme proto myšlenku a určitý obecný rámec systému auditu a ukládání informací o smazaných souborech v síťových koulích, v případě potřeby lze snadno upravit podle vašich potřeb.