Detectar é quando um serviço do Windows é excluído

9

Existe uma maneira de detectar quando um serviço do Windows foi excluído? Verifiquei o log de eventos, mas ele não seleciona as ações excluídas adicionadas apenas.

Acredito que possa haver uma maneira de usar logs de auditoria, mas não tenho certeza de como fazer isso?

Qualquer ajuda é muito apreciada.

obrigado

BillyDay
fonte

Respostas:

6

Embora não haja rastreamento de exclusão de serviço nos logs de Eventos ou Auditoria , o que você pode fazer é criar um aplicativo de console pequeno que detecte se existe um serviço e anexá-lo a Windows Task Schedulerum ponto para que ele esteja programado para executar com base na frequência ou em um Disparador que você pode personalizar de acordo com seus requisitos, de modo que você receberá um alerta se um serviço foi adicionado ou removido etc.

O aplicativo do console foi projetado para que, na primeira execução, registre todos os serviços no sistema e nas execuções subseqüentes, ele rastreie as alterações feitas nos serviços via servicesRemovede servicesAdded, com isso, podemos decidir que ação executar quando um serviço tiver sido executado. foi modificado

Aplicativo de console: ServiceDetector.exe

static void Main(string[] args)
{
    var path = @"C:\AdminLocation\ServicesLog.txt";

    var currentServiceCollection = ServiceController.GetServices().Select(s => s.ServiceName).ToList(); //Queries the most current Services from the machine

    if (!File.Exists(path)) //Creates a Log file with current services if not present, usually means the first run
    {
        // Assumption made is that this is the first run
        using (var text = File.AppendText(path))
        {
            currentServiceCollection.ForEach((s) => text.WriteLine(s));
        }
        return;
    }

    // Fetches the recorded services from the Log
    var existingServiceCollection = File.ReadAllLines(path).ToList();

    var servicesRemoved = existingServiceCollection.Except(currentServiceCollection).ToList();
    var servicesAdded = currentServiceCollection.Except(existingServiceCollection).ToList();

    if (!servicesAdded.Any() && !servicesRemoved.Any())
    { Console.WriteLine("No services have been added or removed"); return; }

    //If any services has been added
    if (servicesAdded.Any())
    {
        Console.WriteLine("One or more services has been added");
        using (var text = File.AppendText(path))
        {
            servicesAdded.ForEach((s) => text.WriteLine(s));
        }
        return;
    }
    //Service(s) may have been deleted, you can choose to record it or not based on your requirements
    Console.WriteLine("One or more services has been removed");

}

Tarefa de agendamento

Windows Iniciar> Agendador de Tarefas> Criar Tarefa Básica> Definir Acionador> Anexe seu exe> Concluir

Clint
fonte
Obrigado pela sugestão, O problema com isso é que poderia ser qualquer serviço que eu não saberia particularmente o nome do serviço que foi excluído.
BillyDay 8/03
@ BillyDay, ahh eu vejo, atualizei a resposta
Clint
Eu acho que essa é a melhor abordagem. Vou criar um serviço que é executado na inicialização e no loop e detectar quando um serviço é excluído e gravar em um arquivo ou aumentar e evento. Obrigado
BillyDay
0

Você está certo que a exclusão de um serviço do Windows faz com que um evento seja adicionado ao log de eventos do sistema (fonte: /superuser/1238311/how-can-we-detect-if-a-windows- service-is-delete-is-there-an-log-event-id-for-i ).

AFAIK não existe uma política de auditoria para auditar a exclusão de um serviço e acho que, se houvesse, acho que ele estaria listado aqui: https://docs.microsoft.com/en-us/windows/security/threat-protection/auditing/ rastreamento de processo de auditoria básica

Presumo que a pesquisa ServiceController.GetServices()esteja fora de questão, pois seu programa pode não estar sendo executado quando o serviço é desinstalado?

simon-pearson
fonte
Exatamente meu processo pode não estar em execução.
BillyDay 4/03
Ok, acho que você está sem sorte, então @BillyDay
simon-pearson
Por que não apenas verificar um arquivo associado a esse serviço ... por exemplo, myService.exe
johnny 5 /
você também pode verificar o Registro para garantir que o serviço existe HKEY_LOCAL_MACHINE \ System \ CurrentControlSet \ serviços, se você queria ter certeza de qualquer serviço não foi excluída você vai ter que adicionar seu próprio cache
johnny 5
0

Existem várias maneiras de criar instrumentação, até você aprender o que constitui uma boa instrumentação. Meu guia é essencialmente retirado diretamente da entrada da Wikipedia https://en.wikipedia.org/wiki/Instrumentation .

Instruções sobre instrumentação

http://www.powersemantics.com/e.html

  • Não integrado
  • Apenas dados primários
  • Puxe, não empurre
  • Organizado por processo
  • Nunca offline

A solução para o problema de medir indicadores existe, mas você está preso ao conceber como também ter instrumentação "baseada em push" sinalizando outro sistema. Como meu artigo explica, os instrumentos devem sempre extrair dados e nunca pressioná-los. A sinalização orientada a eventos é um ponto potencial de falha que você não precisa.

Para esclarecer qualquer indecisão ou dúvida que você possa ter sobre a criação de um aplicativo separado, os monitores são normalmente processos independentes ( não integrados como a Wikipedia diz). Dizer que seu monitor "pode ​​não estar funcionando" significa que você não escolheu criar um monitor não integrado real, que esteja sempre ligado. O sistema do consumidor não modela corretamente a instrumentação, porque integra a verificação em seu próprio processo.

Separe essas responsabilidades e prossiga. Decida com que frequência o instrumento deve pesquisar razoavelmente os serviços excluídos e os dados com um timer. Se você usar a chamada da API sugerida por simon-pearson, também poderá detectar quando os serviços foram adicionados. Obviamente, o monitor precisa armazenar em cache localmente uma cópia da lista de serviços para que os indicadores possam inferir o que foi adicionado ou removido.

RBJ
fonte