Jednoduchý systém auditu odstraňovania súborov a priečinkov pre systém Windows Server

Každý správca systému Windows čelí situácii, keď nahnevaní používatelia chcú vedieť, kto presne odstránil mega dôležitý súbor s výročnou správou v zdieľanom priečinku na súborovom serveri. Tieto informácie je možné získať iba v prípade, že vykonáte audit vymazania súborov a priečinkov na súborovom serveri, inak zostane iba obnovenie odstráneného súboru zo zálohy (a už ich vykonávate?).

Ale aj keď je zapnutý audit mazania súborov, nájdenie niečoho v protokoloch môže byť problematické. Po prvé, nájsť požadovaný záznam medzi tisíckami udalostí je pomerne ťažké (neexistujú rozumné prostriedky na vyhľadávanie udalosti, ktorá je predmetom záujmu, s flexibilným filtrovaním v systéme Windows), a po druhé, ak bol súbor odstránený už dávno, táto udalosť môže jednoducho chýbať v protokole, pretože bol prepísaný novším.

V tomto článku si ukážeme príklad organizácie na zabudovaných nástrojoch Windows. auditné systémy odstraňujú súbory a priečinky v zdieľanom sieťovom adresári (súborový server) so záznamom udalostí v samostatnej databáze v MySQL.

Vzhľadom na prítomnosť databázy s informáciami o všetkých odstránených súboroch bude môcť správca odpovedať na otázky:

  • Kto a kedy odstránil súbor
  • Z ktorej aplikácie sa odstráni súbor?
  • V akom okamihu je potrebné obnoviť zálohu

Najskôr musíte na súborovom serveri Windows povoliť auditovanie udalostí, ktoré zabezpečí, že informácie o vymazaní súborov sa zaznamenajú do systémového denníka. Tento postup sme už preskúmali v článku Auditovanie prístupu k súborom a priečinkom v systéme Windows.

Audit možno povoliť prostredníctvom spoločnej politiky. Auditovať prístup k objektom v sekcii politiky Nastavenia zabezpečenia -> Miestna politika -> Zásady auditu

Alebo (pokiaľ možno) prostredníctvom pokročilých zásad auditu v GPO: Nastavenia zabezpečenia -> Pokročilá konfigurácia politiky auditu -> Prístup k objektu -> Systém súborov auditu.

rada. Vykonanie auditu spôsobuje dodatočné náklady na systémové zdroje. Používajte opatrne, najmä pre vysoko zaťažené súborové servery..

Vo vlastnostiach zdieľaného sieťového priečinka (Zabezpečenie -> Rozšírené -> Auditovanie), odstránenie súborov, v ktorých chceme monitorovať, pre skupinu každý umožňuje audit mazania priečinkov a súborov (delete podpriečinky a súbory).

rada. Vymazanie súborov auditu v konkrétnom priečinku je možné povoliť aj pomocou programu PowerShell:

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

Po úspešnom odstránení súboru sa v protokole zabezpečenia systému zobrazí udalosť ID udalosti 4663 zo zdroja Bezpečnostný audit systému Microsoft Windows. Popis udalosti obsahuje informácie o názve vymazaného súboru, účte, pod ktorým bolo vymazanie vykonané, a názve procesu.

Takže udalosti, ktoré nás zaujímajú, sa zapíšu do denníka, je čas vytvoriť tabuľku na serveri MySQL pozostávajúcu z nasledujúcich polí:

  • Názov servera
  • Názov vzdialeného súboru
  • Čas na odstránenie
  • Meno používateľa, ktorý súbor odstránil

MySQL dotaz na vytvorenie takejto tabuľky bude vyzerať 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. Funkcie práce s databázou MySQL sme podrobne preskúmali v článku Práca s databázou MySQL od spoločnosti PowerShell

Skript na zhromažďovanie informácií z denníka udalostí. Denník udalostí filtrujeme s ID 4663 pre aktuálny deň.

$ today = get-date -DisplayHint date -UFormat% Y-% m-% d
Get-WinEvent -FilterHashTable @ LogName = "Security"; starttime = "$ today"; id = 4663 | Foreach
$ event = [xml] $ _. ToXml ()
ak ($ ​​udalosť)

$ 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

Nasledujúci skript zaznamená prijaté údaje do databázy MySQL na vzdialenom serveri:

Set-ExecutionPolicy RemoteSigned
Pridať typ -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 ()
ak ($ ​​udalosť)

$ 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 ()

Teraz zistite, kto súbor odstránil. “document1 - Copy.DOC“, stačí spustiť nasledujúci skript v konzole PowerShell.

$ DeletedFile = "% document1 - Copy.DOC%"
Set-ExecutionPolicy RemoteSigned
Pridať typ -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žívateľské meno a čas odstránenia súboru.

poznámka. pretože Bol zistený problém, znak chir "\" nie je zapísaný do databázy, nahradili sme ho znakom "|". Preto, ak potrebujete zadať úplnú cestu k súboru, pri načítaní z databázy môžete vykonať spätnú výmenu $ DataSet.file_name.Replace ('|', '\'). Ďakujem Alexovi Kornevovi za komentár.!

Skript na ukladanie údajov z denníka do databázy je možné spustiť raz na konci dňa podľa plánovača alebo zavesiť na udalosť vymazania (pri udalosti), ktorá je náročnejšia na zdroje. Všetko záleží na systémových požiadavkách..

rada. Musíte sa uistiť, že denník zabezpečenia je dostatočne veľký na to, aby obsahoval všetky udalosti dňa. V opačnom prípade budete musieť spustiť úlohu ukladania údajov z denníka do databázy častejšie ako jedenkrát denne alebo všeobecne na spúšťač. Pre pracovnú stanicu Maximálna veľkosť denníka zvyčajne je nastavená najmenej 64 Mb na severe - 262 MB. Nechajte možnosť prepísať na (Podľa potreby prepíšte udalosti).

Ak je to potrebné, môžete analogicky reagovať jednoduchú webovú stránku na php, aby ste získali informácie o vinníkoch vymazania súborov vo vhodnejšej forme. Úlohu rieši každý programátor php za 1-2 hodiny.

Dôležitý tip. Ak protokol obsahuje informácie o vymazaní súboru používateľom, nesnažte sa ho jednoznačne interpretovať ako úmyselné alebo dokonca škodlivé. Mnoho programov (najmä programy MS Office hrešia), keď ukladajú údaje, najprv vytvoria dočasný súbor, uložia do neho dokument a odstránia starú verziu súboru. V tomto prípade má zmysel ďalej zapísať do databázy názov procesu, ktorý vykonal vymazanie súboru (pole ProcessName udalosti), a analyzovať vymazanie súborov s prihliadnutím na túto skutočnosť. Alebo úplne radikálne filtrujte udalosti z takýchto odpadkov, napríklad winword.exe, excel.exe atď..

Preto sme navrhli myšlienku a určitý všeobecný rámec systému auditu a ukladanie informácií o odstránených súboroch v sieťových guľach, ak je to potrebné, možno ich ľahko upraviť podľa vašich potrieb.