audit událostí přístupu k objektům systému souborů můžete použít k identifikaci konkrétního uživatele, který vytvořil, odstranil nebo upravil konkrétní soubor. V tomto článku vám ukážeme, jak nakonfigurovat audit událostí pro soubory ve sdílené síťové složce v systému Windows Server 2016. Po konfiguraci auditu můžete pomocí informací z Prohlížeče událostí najít uživatele, který odstranil konkrétní soubor na souborovém serveru.
Jak povolit zásady auditu přístupu k souborům a složkám v systému Windows?
ve výchozím nastavení není v systému Windows Server povolen audit přístupu k objektům systému souborů. Nastavení auditu můžete povolit a nakonfigurovat pomocí zásad skupiny. Pokud potřebujete povolit zásady auditu na více serverech nebo počítačích, můžete použít GPO domény (konfigurovatelné pomocí konzoly MMC gpmc.msc
). Pokud chcete konfigurovat audit pouze na jednom serveru, můžete použít Editor zásad místní skupiny.
- otevřete konzolu Editoru zásad místní skupiny–
gpedit.msc
; - přejděte do sekce GPO s pokročilými zásadami auditu: nastavení systému Windows – > Nastavení Zabezpečení – > konfigurace zásad pokročilého auditu – > přístup k objektům;
- otevřete zásady systému souborů auditu a určete, že chcete přihlásit pouze události úspěšného přístupu k objektům systému souborů (nakonfigurujte následující události auditu – > úspěch);
audit přístupu k místním objektům můžete také povolit pomocí zásad přístupu k objektům auditu v části Nastavení systému Windows – > Nastavení Zabezpečení – > Místní zásady – > zásady auditu. Použití zásad auditu systému souborů je však vhodnější, protože sleduje pouze události přístupu NTFS.
- uložte změny a aktualizujte nastavení místních zásad skupiny pomocí příkazu:
gpupdate /force
.
Konfigurace Nastavení auditu odstraněného souboru ve sdílené složce
nyní je třeba nakonfigurovat audit ve vlastnostech složky sdílené sítě, ke které chcete sledovat přístup. Spusťte Průzkumník souborů a otevřete Vlastnosti složky. Přejděte na kartu Zabezpečení. Klikněte na tlačítko Upřesnit – > přejděte na kartu audit.
pokud se zobrazí zpráva „musíte být Správcem nebo jste dostali příslušná oprávnění k zobrazení vlastností auditu tohoto objektu“, klikněte na tlačítko Pokračovat.
poté klikněte na tlačítko Přidat a určete uživatele nebo skupinu, pro kterou chcete zachytit události auditu. Pokud chcete sledovat události přístupu pro všechny uživatele, zadejte skupinu všichni.
poté musíte určit, která oprávnění použitá pro přístup k objektu by měla být zaznamenána. Chcete-li do protokolu událostí uložit pouze události odstranění souboru, klikněte na tlačítko Zobrazit pokročilá oprávnění. V seznamu událostí ponechte audit pouze pro události mazání složek a souborů-odstraňte a odstraňte podsložky a soubory.
$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
Nyní, pokud uživatel odstraní jakýkoli soubor nebo složku ve sdílené síťové složce, zobrazí se v protokolu zabezpečení s ID události 4663 ze zdroje auditu zabezpečení systému Microsoft Windows událost odstranění souboru ->.
otevřete konzolu mmc Prohlížeče událostí (eventvwr.msc
), rozbalte sekci Zabezpečení protokolů systému Windows – >. Povolit filtr protokolu událostí pomocí EventID 4663.
otevřete kteroukoli ze zbývajících událostí v Prohlížeči událostí. Jak vidíte, obsahuje informace o názvu odstraněného souboru, účtu uživatele, který soubor odstranil, a názvu procesu.
An attempt was made to access an object.Subject:Security ID: CORP\jsmithAccount Name: jsmithAccount Domain: CORPLogon ID: 0x32B12627Object:Object Server: SecurityObject Type: FileObject Name: E:\Distr\Backup.rarHandle ID: 0x7bc4Resource Attributes: S:AIProcess Information:Process ID: 0x4Process Name:Access Request Information:Accesses: DELETEAccess Mask: 0x10000
po povolení zásad auditu přístupu k souboru najdete v protokolu zabezpečení:
- kdo odstranil soubor ze sdílené síťové složky a kdy se to stalo;
- jaká aplikace (proces) byla použita k odstranění souboru;
- jaké je datum obnovení zálohy.
jak psát události odstranění souborů do databáze SQL (MySQL/MSSQL)?
i když je však povolen audit smazaných souborů, může být obtížné najít něco v protokolech. Za prvé, je docela těžké najít konkrétní položku mezi tisíci událostí (ve Windows neexistuje žádný vhodný nástroj pro vyhledávání události s flexibilním filtrem). Za druhé, pokud byl soubor odstraněn již dávno, může tato událost v protokolech chybět, protože byla přepsána novými událostmi.
všechny události odstranění souborů můžete uložit do databáze SQL. K ukládání událostí můžete použít databáze Microsoft SQL Server, Elasticsearch nebo MySQL/MariaDB.
v tomto příkladu vám ukážeme, jak zaznamenávat události auditu do samostatné databázové tabulky v MySQL. Budu používat následující formát tabulky:
- název serveru;
- Název odstraněného souboru;
- datum a čas;
- jméno uživatele, který soubor odstranil.
dotaz MySQL k vytvoření této tabulky vypadá takto:
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));
pokud chcete používat databázi Microsoft SQL Server, podívejte se na článek “ Jak spustit dotaz serveru MSSQL z PowerShell?“
Chcete-li získat události s EventID 4663 z protokolu zabezpečení pro aktuální den, můžete použít následující skript PowerShell:
$today = get-date -DisplayHint date -UFormat %Y-%m-%d
Get-WinEvent -FilterHashTable @{LogName="Security";starttime="$today";id=4663} | Foreach {
$event = $_.ToXml()
if($event)
{
$Time = Get-Date $_.TimeCreated -UFormat "%Y-%m-%d %H:%M:%S"
$File = $event.Event.EventData.Data."#text"
$User = $event.Event.EventData.Data."#text"
$Computer = $event.Event.System.computer
}
}
další skript PowerShell zapíše data, která získáte do databáze MySQL na vzdáleném serveru (s adresou 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 = @{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 = $_.ToXml()
if($event)
{
$Time = Get-Date $_.TimeCreated -UFormat "%Y-%m-%d %H:%M:%S"
$File = $event.Event.EventData.Data."#text"
$File = $File.Replace('\','|')
$User = $event.Event.EventData.Data."#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()