Usuário com melhor resposta
arquivo deletado - event ID 4663 e event ID 4660

Pergunta
-
Prezados,
Gostaria de um script que analise a seguinte situação:
Ao mandar deletar um arquivo é gerado o event ID 4663 (no event viewer, nos detalhes, na opção access aparece a tag DELETE), porém se o usuário cancelar a deleção do arquivo o evento fica registrado sem o arquivo ser delatado, dessa forma não é possível afirmar que o objeto foi deletado. Já o event ID 4660, em sua descrição aparece "An object was deleted", confirmando que o objeto foi deletado, porém não aparece o caminho do objeto deletado. É possível fazer um script que com essas duas informações de event IDs diferentes, gere um TXT informando o caminho deletado e o usuário que o deletou.
Desde já agradeço a ajuda.
- Editado Elton Ricardo terça-feira, 5 de junho de 2012 17:29
Respostas
-
Elton,
Se puder avise se funcionou, achei interessante esta necessidade
$Lista_Eventos_Exclusao = Get-EventLog "Security" | where {$_.eventID -eq 4660} foreach($Evento_Exclusao IN $Lista_Eventos_Exclusao){ $Usuario = $Evento_Exclusao.ReplacementStrings[1] $HandleID= $Evento_Exclusao.ReplacementStrings[5] $DtHora = $Evento_Exclusao.TimeGenerated $Lista_Eventos = Get-EventLog "Security" | where {($_.eventID -eq 4656)} | where {$_.ReplacementStrings[7] -eq $HandleID } foreach($Evento in $Lista_Eventos){ $Objeto = $Evento.ReplacementStrings[6] } echo "$Usuario apagou $Objeto em $DtHora" }
Fábio de Paula Junior
- Sugerido como Resposta Fábio JrModerator quinta-feira, 7 de junho de 2012 15:56
- Marcado como Resposta Fábio JrModerator domingo, 10 de junho de 2012 01:02
- Não Marcado como Resposta Elton Ricardo terça-feira, 12 de junho de 2012 19:19
- Marcado como Resposta Fábio JrModerator sábado, 16 de junho de 2012 12:29
Todas as Respostas
-
Elton,
Envie um exemplo de cada um desses eventos, assim talvez consigamos relacionar os dois eventos.
Tem um botão de copiar dentro do evento, veja um exemplo:
Computer: dc01.exemplo.com.br Description: Special privileges assigned to new logon. Subject: Security ID: EXEMPLO\Administrator Account Name: Administrator Account Domain: EXEMPLO Logon ID: 0x8f9f57f Privileges: SeSecurityPrivilege SeBackupPrivilege SeRestorePrivilege SeTakeOwnershipPrivilege SeDebugPrivilege SeSystemEnvironmentPrivilege SeLoadDriverPrivilege SeImpersonatePrivilege SeEnableDelegationPrivilege Event Xml: <Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event"> <System> <Provider Name="Microsoft-Windows-Security-Auditing" Guid="{54849625-5478-4994-A5BA-3E3B0328C30D}" /> <EventID>4672</EventID> <Version>0</Version> <Level>0</Level> <Task>12548</Task> <Opcode>0</Opcode> <Keywords>0x8020000000000000</Keywords> <TimeCreated SystemTime="2012-06-05T18:07:15.125926000Z" /> <EventRecordID>1855368</EventRecordID> <Correlation /> <Execution ProcessID="472" ThreadID="1648" /> <Channel>Security</Channel> <Computer>dc01.exemplo.com.br</Computer> <Security /> </System> <EventData> <Data Name="SubjectUserSid">S-1-5-21-xxxxxx-456055456-506545489-500</Data> <Data Name="SubjectUserName">Administrator</Data> <Data Name="SubjectDomainName">EXEMPLO</Data> <Data Name="SubjectLogonId">0x8f9f57f</Data> <Data Name="PrivilegeList">SeSecurityPrivilege SeBackupPrivilege SeRestorePrivilege SeTakeOwnershipPrivilege SeDebugPrivilege SeSystemEnvironmentPrivilege SeLoadDriverPrivilege SeImpersonatePrivilege SeEnableDelegationPrivilege</Data> </EventData> </Event>
Fábio de Paula Junior
-
Seguem os exemplos:
EVENT ID 4663:
Keywords Date and Time Source Event ID Task Category
Audit Success 6/5/2012 5:43:17 PM Microsoft-Windows-Security-Auditing 4663 File System "An attempt was made to access an object.Subject:
Security ID: TESTE\elton.ricardo
Account Name: elton.ricardo
Account Domain: TESTE
Logon ID: 0x394e46dfObject:
Object Server: Security
Object Type: File
Object Name: C:\TESTE\GTAI\Email\testedelete.txt
Handle ID: 0x4338Process Information:
Process ID: 0x4
Process Name:Access Request Information:
Accesses: DELETE (obs.: Isso não garante que o arquivo foi deletado, pois se ele cancelar o delete para manter o arquivo, o log é registrado)
Access Mask: 0x10000"Event XML:
- <Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
- <System>
<Provider Name="Microsoft-Windows-Security-Auditing" Guid="{54849625-5478-4994-a5ba-3e3b0328c30d}" />
<EventID>4663</EventID>
<Version>0</Version>
<Level>0</Level>
<Task>12800</Task>
<Opcode>0</Opcode>
<Keywords>0x8020000000000000</Keywords>
<TimeCreated SystemTime="2012-06-05T20:43:17.803Z" />
<EventRecordID>151392885</EventRecordID>
<Correlation />
<Execution ProcessID="4" ThreadID="68" />
<Channel>Security</Channel>
<Computer>arquivo.teste.local</Computer>
<Security />
</System>
- <EventData>
<Data Name="SubjectUserSid">S-1-5-21-2939065104-3741196638-893476999-45785</Data>
<Data Name="SubjectUserName">elton.ricardo</Data>
<Data Name="SubjectDomainName">TESTE</Data>
<Data Name="SubjectLogonId">0x394e46df</Data>
<Data Name="ObjectServer">Security</Data>
<Data Name="ObjectType">File</Data>
<Data Name="ObjectName">C:\TESTE\GTAI\Email\testedelete.txt
<Data Name="HandleId">0x4338</Data>
<Data Name="AccessList">%%1537</Data>
<Data Name="AccessMask">0x10000</Data>
<Data Name="ProcessId">0x4</Data>
<Data Name="ProcessName" />
</EventData>
</Event>O evento seguinte garante que o arquivo foi deletado, mas não mostra o caminho do arquivo.
EVENT ID 4660:
Keywords Date and Time Source Event ID Task Category
Audit Success 6/5/2012 5:43:17 PM Microsoft-Windows-Security-Auditing 4660 File System "An object was deleted.Subject:
Security ID: TESTE\elton.ricardo
Account Name: elton.ricardo
Account Domain: TESTE
Logon ID: 0x394e46dfObject:
Object Server: Security
Handle ID: 0x4338Process Information:
Process ID: 0x4
Process Name:
Transaction ID: {00000000-0000-0000-0000-000000000000}"Event XML:
- <Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
- <System>
<Provider Name="Microsoft-Windows-Security-Auditing" Guid="{54849625-5478-4994-a5ba-3e3b0328c30d}" />
<EventID>4660</EventID>
<Version>0</Version>
<Level>0</Level>
<Task>12800</Task>
<Opcode>0</Opcode>
<Keywords>0x8020000000000000</Keywords>
<TimeCreated SystemTime="2012-06-05T20:43:17.803Z" />
<EventRecordID>151392886</EventRecordID>
<Correlation />
<Execution ProcessID="4" ThreadID="68" />
<Channel>Security</Channel>
<Computer>arquivo.teste.local</Computer>
<Security />
</System>
- <EventData>
<Data Name="SubjectUserSid">S-1-5-21-2939065104-3741196638-893476999-45785</Data>
<Data Name="SubjectUserName">elton.ricardo</Data>
<Data Name="SubjectDomainName">TESTE</Data>
<Data Name="SubjectLogonId">0x394e46df</Data>
<Data Name="ObjectServer">Security</Data>
<Data Name="HandleId">0x4338</Data>
<Data Name="ProcessId">0x4</Data>
<Data Name="ProcessName" />
<Data Name="TransactionId">{00000000-0000-0000-0000-000000000000}</Data>
</EventData>
</Event>Grato pela ajuda.
-
Elton,
Estou sem tempo para testar mas eu tentaria o seguinte:
1) Fazer uma lista com todos os eventos 4660 (isto é, o arquivo foi deletado)
2) Extrair de cada item desta lista o Handleid e Hora que cada um foi gerado
3) Com a informação Handleid e Hora eu tentaria localizar um evento 4663 anterior ao 4660 e que contenha o handleid procurado. (Talvez o campo data possa ajudar nesta pesquisa, eu nunca utilizei, seria uma novidade pra mim).
4) Extraio o nome do arquivo do evento 4663.
Recomendo utilizar PowerShell. Qualquer coisa post algum código que você iniciou, fica mais fácil que eu começar do zero.
Um Portugol bem grosseiro seria:
$lista = localiza eventos 4660 para cada $item da $lista $handle= $item.handle $data = $item.data $lista2 = localiza eventos 4663 que contenhma $handle e inferior a $data para cada $evento da $lista2 $arquivo = extrai nome do arquivo do primeiro evento localizado imprime $arquivo apagado em $data exit proximo proximo
Fábio de Paula Junior
-
Elton,
Se puder avise se funcionou, achei interessante esta necessidade
$Lista_Eventos_Exclusao = Get-EventLog "Security" | where {$_.eventID -eq 4660} foreach($Evento_Exclusao IN $Lista_Eventos_Exclusao){ $Usuario = $Evento_Exclusao.ReplacementStrings[1] $HandleID= $Evento_Exclusao.ReplacementStrings[5] $DtHora = $Evento_Exclusao.TimeGenerated $Lista_Eventos = Get-EventLog "Security" | where {($_.eventID -eq 4656)} | where {$_.ReplacementStrings[7] -eq $HandleID } foreach($Evento in $Lista_Eventos){ $Objeto = $Evento.ReplacementStrings[6] } echo "$Usuario apagou $Objeto em $DtHora" }
Fábio de Paula Junior
- Sugerido como Resposta Fábio JrModerator quinta-feira, 7 de junho de 2012 15:56
- Marcado como Resposta Fábio JrModerator domingo, 10 de junho de 2012 01:02
- Não Marcado como Resposta Elton Ricardo terça-feira, 12 de junho de 2012 19:19
- Marcado como Resposta Fábio JrModerator sábado, 16 de junho de 2012 12:29
-
Prezado Fábio,
Executei o comando. Ficou muito tempo executando, esperei aproximadamente 20 minutos, e não retornou nada.
Estou tentando executar usando o event viewer, quando executar o eventid 4660 (usando o agendamento de tarefas), passar o HandleID por parametro para um script que faça a busca pelo eventID 4663 com handleID igual ao do 4660.
Não sei como pegar o HandleID do event gerado no event viewer e no agendamento de tarefas passar o parametro para o script.
Espero ter explicado de forma que todos entendam.
Mas uma vez agradeço a ajuda.
-
Fiz o teste em um micro que tinham poucos eventos, isto pode ter alterado o resultado.
Tente alterar a primeira linha para filtrar o número de dias
$Lista_Eventos_Exclusao = Get-EventLog "Security" -after (date).addDays(-1) | where {$_.eventID -eq 4660} foreach($Evento_Exclusao IN $Lista_Eventos_Exclusao){ $Usuario = $Evento_Exclusao.ReplacementStrings[1] $HandleID= $Evento_Exclusao.ReplacementStrings[5] $DtHora = $Evento_Exclusao.TimeGenerated $Lista_Eventos = Get-EventLog "Security" | where {($_.eventID -eq 4656)} | where {$_.ReplacementStrings[7] -eq $HandleID } foreach($Evento in $Lista_Eventos){ $Objeto = $Evento.ReplacementStrings[6] } echo "$Usuario apagou $Objeto em $DtHora" }
Outro teste, em um prompt do powershell execute este comando e veja se vai achar algum evento
Get-EventLog "Security" -after (date).addDays(-1) | where {($_.eventID -eq 4656)} | where {$_.ReplacementStrings[7] -eq $HandleID }
Fábio de Paula Junior
-
Prezado Fábio,
O seu script está Ok, porém como informei demora muito executando devido ler todos os registros do Security.
Vou continuar tentando refinar a busca. Não tenho familiaridade com os scripts, mas sua dica deu uma direção para eu buscar uma solução.
Agradeço muito sua ajuda.
-
Não sei a periodicidade que você precisa desta informação, eu já precisei trabalhar filtrando logs eu fazia o seguinte: Agendava uma tarefa para rodar todo dia meia-noite para pegar todos os eventos que eu queria do dia anterior, quardava isto formatado para que eu pudesse acessar facilmente quando eu precisasse.
Fábio de Paula Junior
-
Não sei a periodicidade que você precisa desta informação, eu já precisei trabalhar filtrando logs eu fazia o seguinte: Agendava uma tarefa para rodar todo dia meia-noite para pegar todos os eventos que eu queria do dia anterior, quardava isto formatado para que eu pudesse acessar facilmente quando eu precisasse.
Fábio de Paula Junior
Fabio,
Tem como você compartilhar a forma de filtragem dos LOGs?
Na minha rede são mais de 100 usuários e alguns "cabra-da-peste" inventam de excluir arquivos na rede.
Tá, tudo bem, eu tenho 2 tipos de backup e consigo recuperar, mas eu queria detectar o login que executou a ação.
Eu cheguei a testar o software PA File Sight (www.poweradmin.com/file-sight), achei excepcional, mas não cabe no meu orçamento. :(
[]'sDaniel Silva Analista de TI
-
-
Pessoal, encontrei essa solução, no entando nao entendi como faço para informar o periodo da pesquisa.
É possivel especificar o periodo?
Por exemplo: 01 a 18 de setembro?
$a = get-eventlog -logname security -instanceid 4663 |convertto-html -property timegenerated, message
$a = $a| foreach-object {$_ -replace “<table>”, “<table border 2>”}
$a|Out-File “c:\tmp\audit4663_v1.html”
Att,
Josinaldo