none
arquivo deletado - event ID 4663 e event ID 4660 RRS feed

  • 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.



    terça-feira, 5 de junho de 2012 17:27

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

    quarta-feira, 6 de junho de 2012 23:51
    Moderador

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

    terça-feira, 5 de junho de 2012 18:13
    Moderador
  • 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:  0x394e46df

    Object:
     Object Server: Security
     Object Type: File
     Object Name: C:\TESTE\GTAI\Email\testedelete.txt
     Handle ID: 0x4338

    Process 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:  0x394e46df

    Object:
     Object Server: Security
     Handle ID: 0x4338

    Process 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.

    terça-feira, 5 de junho de 2012 21:32
  • 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

    quarta-feira, 6 de junho de 2012 02:24
    Moderador
  • 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

    quarta-feira, 6 de junho de 2012 23:51
    Moderador
  • 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.

    terça-feira, 12 de junho de 2012 19:48
  • 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

    quarta-feira, 13 de junho de 2012 15:32
    Moderador
  • 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.

    quarta-feira, 13 de junho de 2012 19:35
  • 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

    quinta-feira, 14 de junho de 2012 21:22
    Moderador
  • 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. :(

    []'s


    Daniel Silva Analista de TI

    sexta-feira, 15 de junho de 2012 11:06
  • Daniel,

    Sobre arquivos deletados o único que tenho e este que coloquei neste tópico.


    Fábio de Paula Junior

    sexta-feira, 15 de junho de 2012 13:26
    Moderador
  • 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

    segunda-feira, 9 de setembro de 2013 22:12