você pode usar a auditoria de eventos de acesso a objetos do sistema de arquivos para identificar um usuário específico que criou, excluiu ou modificou um arquivo específico. Neste artigo, mostraremos como configurar a auditoria de eventos para arquivos em uma pasta de rede compartilhada no Windows Server 2016. Depois de configurar a auditoria, você pode usar as informações do Visualizador de Eventos para encontrar o usuário que excluiu um arquivo específico no servidor de arquivos.
como Habilitar a Política de auditoria de acesso a arquivos e pastas no Windows?
por padrão, a auditoria de acesso a objetos do sistema de arquivos não está ativada no Windows Server. Você pode ativar e configurar as configurações de auditoria usando a Política de grupo. Se você precisar habilitar Políticas de auditoria em vários servidores ou computadores, poderá usar GPOs de domínio (configuráveis usando o console mmc gpmc.msc
). Se você quiser apenas configurar a auditoria em um servidor, poderá usar o editor de Diretiva de Grupo Local.
- Abra o Editor de Diretiva de Grupo do console–
gpedit.msc
; - Ir para o GPO seção com avançadas políticas de auditoria: Configurações do Windows -> Configurações de Segurança -> Avançadas de Configuração de Política de Auditoria -> Acesso a objetos;
- Abra o Arquivo de Auditoria de diretiva do Sistema e especificar que você deseja fazer apenas o bem-sucedidos eventos de acesso a objetos do sistema de arquivos (Configure os seguintes eventos de auditoria -> Sucesso);
você também pode habilitar a auditoria do acesso a objetos locais usando a Política de acesso a objetos de Auditoria em Configurações do Windows – > configurações de segurança- > Política Local- > Política de auditoria. No entanto, usar a Política de auditoria do sistema de arquivos é preferível porque ela rastreia apenas eventos de acesso NTFS.
- Salve as alterações e atualize as configurações da Política de grupo local usando o comando:
gpupdate /force
.
configurando as configurações de auditoria excluídas do arquivo em uma pasta compartilhada
Agora você precisa configurar a auditoria nas propriedades da pasta compartilhar rede à qual deseja rastrear o acesso. Execute o File Explorer e abra as propriedades da pasta. Vá para a guia Segurança. Clique no botão Avançado – > vá para a guia auditoria.
se a mensagem “você deve ser um administrador ou ter recebido os privilégios apropriados para visualizar as propriedades de auditoria deste objeto” aparecer, clique no botão continuar.
, em Seguida, clique no botão Adicionar para especificar o usuário ou grupo para o qual você deseja capturar eventos de auditoria. Se você deseja rastrear eventos de Acesso para todos os usuários, especifique o Grupo Todos.
em seguida, você precisa especificar quais permissões usadas para acessar o objeto devem ser registradas. Para salvar apenas eventos de exclusão de arquivo no Log de Eventos, clique no botão Mostrar permissões avançadas. Na lista de eventos, deixe a auditoria apenas para eventos de exclusão de pasta e arquivo – Excluir e excluir subpastas e arquivos.
$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
agora, se o usuário excluir qualquer arquivo ou pasta na pasta rede compartilhada, o evento de exclusão do arquivo de sucesso de auditoria do sistema de arquivos -> aparecerá no log de segurança com o ID de Evento 4663 da fonte de auditoria de segurança do Microsoft Windows.
abra o console mmc do Visualizador de eventos (eventvwr.msc
), expanda a seção de segurança Logs do Windows ->. Habilite o filtro de log de eventos pelo EventID 4663.
abra qualquer um dos eventos restantes no Visualizador de eventos. Como você pode ver, ele contém informações sobre o nome do arquivo excluído, a conta do usuário que excluiu o arquivo e o nome do processo.
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
Depois de habilitar o arquivo de diretiva auditoria de acesso, você pode encontrar no log de Segurança :
- Que excluiu o arquivo a partir da pasta de rede compartilhada e, quando isso aconteceu;
- Que tipo de aplicação (processo) foi usado para apagar o arquivo;
- o Que é a data do backup a ser restaurado.
como gravar eventos de exclusão de arquivos no banco de dados SQL (MySQL/MSSQL)?
no entanto, mesmo que a auditoria dos arquivos excluídos esteja ativada, pode ser problemático encontrar algo nos logs. Em primeiro lugar, é muito difícil encontrar uma entrada específica entre milhares de eventos (no Windows não há uma ferramenta conveniente para pesquisar um evento com um filtro flexível). Em segundo lugar, se um arquivo foi excluído há muito tempo, esse evento pode estar ausente nos logs, uma vez que foi substituído por novos eventos.
você pode salvar todos os eventos de exclusão de arquivo no banco de dados SQL. Você pode usar bancos de dados Microsoft SQL Server, Elasticsearch ou MySQL/MariaDB para armazenar seus eventos.Neste exemplo, mostraremos como registrar eventos de auditoria em uma tabela de banco de dados separada em um MySQL. Vou usar o seguinte formato de tabela:
- nome do Servidor;
- Nome do arquivo que foi excluído;
- Data e hora;
- Nome do usuário que excluiu o arquivo.
a consulta MySQL para criar esta tabela se parece com isso:
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));
se você quiser usar o banco de dados do Microsoft SQL Server, confira o artigo ” Como executar uma consulta do MSSQL Server do PowerShell?”
Para obter eventos com Id de evento 4663 do log de Segurança para o dia atual, você pode usar o seguinte script do 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
}
}
O seguinte script do PowerShell irá gravar os dados que você obter para o banco de dados MySQL em um servidor remoto (com o endereço 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()