Hogyan lehet megállapítani, hogy ki törölt egy fájlt a Windows Server rendszeren az audit házirenddel?
A fájlrendszer-objektum-hozzáférési eseménynapló segítségével azonosíthatja azt a felhasználót, aki létrehozott, törölt vagy módosított egy adott fájlt. Ebben a cikkben bemutatjuk, hogyan konfigurálhatja az eseménynaplózást egy megosztott hálózati mappában lévő fájlok esetén a Windows Server 2016 rendszeren. A megfigyelés konfigurálása után az Eseménynaplóból származó információk alapján megkeresheti azt a felhasználót, aki törölt egy adott fájlt a fájlból. szerver.
Ha töröl egy fájlt egy megosztott hálózati mappából, az azonnal törlődik, ahelyett, hogy a felhasználó lomtárába kerülne. A megosztási mappában megnyitott fájlok listája a következőképpen érhető el.
Hogyan engedélyezhető a fájlok és mappák hozzáférésének ellenőrzése a Windows rendszeren?
Alapértelmezés szerint a File System Object Access naplózása nincs engedélyezve a Windows Server rendszeren. A csoportházirend segítségével engedélyezheti és konfigurálhatja a naplózási beállításokat. Ha több kiszolgálón vagy számítógépen kell engedélyeznie a naplózási házirendeket, használhat tartományi csoportházirend-objektumokat (a
gpmc.mscmmc konzol). Ha csak egy kiszolgálón szeretné konfigurálni a megfigyelést, használhatja a Helyi csoportházirend-szerkesztőt.
Nyissa meg a Helyi csoportházirend-szerkesztő konzolt -
gpedit.msc;
Nyissa meg a csoportházirend-objektum szakaszt a speciális ellenőrzési házirendekkel: Windows-beállítások -> Biztonsági beállítások -> Speciális naplózási házirend-konfiguráció -> Objektumhozzáférés;
Nyissa meg a Fájlrendszer ellenőrzése házirendet, és adja meg, hogy csak a fájlrendszer-objektumokhoz való sikeres hozzáférési eseményeket szeretné naplózni (A következő ellenőrzési események konfigurálása -> Siker);
A helyi objektumok hozzáférésének ellenőrzését is engedélyezheti az Objektumhozzáférés ellenőrzése házirend segítségével a Windows beállítások -> Biztonsági beállítások -> Helyi házirend -> Ellenőrzési házirend alatt. A Fájlrendszer-naplózási házirend használata azonban előnyösebb, mert csak az NTFS-hozzáférési eseményeket követi nyomon.
Mentse el a változtatásokat, és frissítse a helyi csoportházirend-beállításokat a következő paranccsal:
gpupdate /force
Fájl törölt naplózási beállításainak konfigurálása megosztott mappában
Most be kell állítania az auditálást a megosztott hálózati mappa tulajdonságaiban, amelyhez a hozzáférést nyomon kívánja követni. Futtassa a File Explorer programot, és nyissa meg a mappa tulajdonságait. Lépjen a Biztonság lapra. Kattintson a Speciális gombra -> lépjen a Auditing lapra.
Ha megjelenik a „Adminisztrátornak kell lennie, vagy rendelkeznie kell a megfelelő jogosultságokkal az objektum megfigyelési tulajdonságainak megtekintéséhez” üzenet, kattintson a Folytatás gombra.
Ezután kattintson a Hozzáadás gombra, és adja meg azt a felhasználót vagy csoportot, amelyhez rögzíteni szeretné az audit eseményeit. Ha az összes felhasználó hozzáférési eseményeit szeretné nyomon követni, adja meg a Mindenki csoportot.
Ezután meg kell adnia, hogy az objektum eléréséhez használt engedélyeket naplózza. Ha csak a fájltörlési eseményeket szeretné menteni az eseménynaplóba, kattintson a Speciális engedélyek megjelenítése gombra. Az eseménylistában csak a mappa- és fájltörlési események auditálását hagyja meg - Törlés és Almappák és fájlok törlése.
Tipp. Ne feledje, hogy a Windows-objektumok megfigyelési szabályzata további számítási erőforrásokat igényel. Használja körültekintően, mindig próbálja meg minimalizálni a naplózandó audit objektumok és események számát.
$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 $AclHa a felhasználó töröl egy fájlt vagy mappát a megosztott hálózati mappában, akkor a Fájlrendszer -> Sikeres fájltörlési esemény megjelenik a Microsoft Windows Security 4663 eseményazonosítójú biztonsági naplójában. auditi forrás.
Nyissa meg az Eseménynapló mmc konzolt (
eventvwr.msc), bontsa ki a Windows-naplók -> Biztonság részt. Eseménynapló-szűrő engedélyezése az EventID 4663 alapján.
Nyissa meg a fennmaradó események bármelyikét az Eseménynaplóban. Mint látható, információkat tartalmaz a törölt fájl nevéről, a fájlt törölő felhasználó fiókjáról és a folyamat nevéről.
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: 0x10000A fájlhozzáférés-ellenőrzési házirend engedélyezése után a biztonsági naplóban a következőket találja:
-
Ki törölte a fájlt a megosztott hálózati mappából, és mikor történt;
Milyen alkalmazással (folyamattal) törölték a fájlt;
Mi a visszaállítandó biztonsági mentés dátuma?
Hogyan írhatunk fájltörlési eseményeket az SQL-adatbázisba (MySQL/MSSQL)?
Azonban még ha a törölt fájlok ellenőrzése is engedélyezve van, akkor is gondot okozhat, ha valamit talál a naplókban. Először is, meglehetősen nehéz konkrét bejegyzést találni több ezer esemény között (a Windowsban nincs kényelmes eszköz az események rugalmas szűrővel történő keresésére). Másodszor, ha egy fájlt régen töröltek, előfordulhat, hogy ez az esemény hiányzik a naplókból, mivel új események felülírták.
Az összes fájltörlési eseményt elmentheti az SQL adatbázisba. Az események tárolásához használhat Microsoft SQL Server, Elasticsearch vagy MySQL/MariaDB adatbázisokat.
Ebben a példában bemutatjuk, hogyan lehet naplózni a megfigyelési eseményeket egy külön adatbázistáblába MySQL-en. A következő táblázatformátumot fogom használni:
Szerver név;
a törölt fájl neve;
Dátum és idő;
A fájlt törölő felhasználó neve.
A tábla létrehozásához szükséges MySQL-lekérdezés így néz ki:
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));Megjegyzés. A MySQL-adatbázis lekérdezése a PowerShell segítségével című cikkben korábban már szerepelt egy példa arra, hogyan lehet elérni MySQL-adatbázist a PowerShellből.
Ha Microsoft SQL Server adatbázist szeretne használni, olvassa el a „Hogyan futtathatunk MSSQL Server Queryt a PowerShellből? ”
Ha az EventID 4663-as eseményeket szeretné lekérni a biztonsági naplóból az adott napra vonatkozóan, használja a következő PowerShell-szkriptet:
$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
}
}A következő PowerShell-szkript a kapott adatokat egy távoli szerveren lévő MySQL adatbázisba írja (10.1.1.13 IP-címmel):
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()Az események külső adatbázisba történő mentése után ez az eseménynapló törölhető.
Most, hogy megtudja, ki törölte az „AnnualReport.DOC” fájlt, elegendő a következő szkriptet futtatni a PowerShell-konzolon:
$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()Most már láthatja a felhasználónevet és a fájl törlésének idejét a PS-konzolon.
Megjegyzés. Mivel olyan problémát találtak, hogy a „
\" nincs beírva az adatbázisba, lecseréltük a "
|”. Tehát ha meg kell jelenítenie a fájl teljes elérési útját, akkor az adatbázisból történő kiválasztáskor végrehajthat fordított cserét:
$DataSet.file_name.Replace(‘|’,’\’).Az eseménynaplóból az adatbázisba írt információkat a nap végén lefuttathatja a Feladatütemezővel, vagy csatolható a fájltörlés EventID (On Event) fájljához, ami erőforrásigényesebb. Ez a rendszer követelményeitől függ.
Tipp. Ügyeljen arra, hogy a biztonsági eseménynaplófájl maximális méretét úgy állítsa be, hogy elég nagy legyen az adott nap összes eseményének naplózásához. Ellenkező esetben az adatok adatbázisba történő exportálását gyakrabban kell végrehajtania, mint naponta egyszer, vagy akár a triggeren is. Általában a Maximális naplóméretnek a munkaállomásokon legalább 64 MB-nak, a Windows fájlkiszolgálókon pedig 262 MB-nak kell lennie. A régi események felülírásának lehetőségét engedélyezve kell hagyni (Szükség szerint felülírja az eseményeket).
Ha szükséges, létrehozhat egy egyszerű PHP weboldalt, hogy kényelmesebb formában kapja meg az információkat a fájlokat törölt felhasználókról.
Fontos tipp. Ha a napló olyan bejegyzést tartalmaz, hogy a fájlt a felhasználó törölte, ne siessen szándékos vagy rosszindulatú műveletként értelmezni. Sok program (különösen az MS Office alkalmazások) ideiglenes fájlt hoz létre a módosítások mentésekor, majd törli a fájl régi verzióját. Ebben az esetben engedélyezze annak a folyamatnévnek a naplózását (ProcessName fileld), amelyből a fájl törölve lett, és ez alapján elemezheti a fájltörlési eseményeket. Vagy kiszűrheti az eseményeket az ilyen folyamatokból, mint például a winword.exe, az excel.exe stb.
Fájl naplózása Az ellenőrzési események törlése szöveges fájlba
Ha nem szeretne külön adatbázis-kiszolgálót használni, a fájltörlési naplózási eseményeket egyszerű szöveges naplófájlba mentheti. Ezzel a PowerShell-szkripttel mentheti a kimenetet egy szöveges fájlba:
$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
}
}Javasoltunk tehát egy ötletet és a rendszer általános modelljét a törölt fájlokkal kapcsolatos információk auditálására és tárolására a megosztott hálózati mappákban. Ha szükséges, könnyen módosítható, hogy megfeleljen az Ön igényeinek.