Rileva è quando un servizio Windows è stato eliminato


9

C'è un modo per rilevare quando un servizio Windows è stato eliminato? Ho controllato il registro eventi ma non rileva solo le azioni eliminate aggiunte.

Credo che ci possa essere un modo per utilizzare i log di controllo, ma non sono sicuro su come farlo?

Ogni aiuto è molto apprezzato.

Grazie

Risposte:


6

Sebbene non vi sia traccia dell'eliminazione del servizio nei registri degli eventi o dei controlli , ciò che puoi fare è creare una piccola app console che rilevi l'esistenza di un servizio e allega questa app in Windows Task Schedulermodo che sia pianificata per essere eseguita in base alla frequenza o a un trigger che puoi personalizzare in base alle tue esigenze in modo tale da ricevere un avviso se un servizio è stato aggiunto o rimosso, ecc.

L'app console è progettata in modo tale che al primo avvio registra tutti i servizi sul sistema e nelle successive esecuzioni monitorerà le modifiche apportate ai servizi tramite servicesRemovede servicesAdded, con ciò, possiamo decidere quale azione intraprendere quando un servizio ha stato modificato

App 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");

}

Attività di pianificazione

Windows Start> Utilità di pianificazione> Crea attività di base> Imposta trigger> Collega exe> Fine


Grazie per il suggerimento, il problema è che potrebbe trattarsi di qualsiasi servizio che non conosco particolarmente il nome del servizio che viene eliminato.
BillyDay

@BillyDay, ahh vedo, aggiornata la risposta
Clint

Penso che questo sia l'approccio migliore. Creerò un servizio che viene eseguito all'avvio e al ciclo e rileverò quando un servizio viene eliminato e scrivo su un file o rilancio ed evento. Grazie
BillyDay

0

Hai ragione sul fatto che l'eliminazione di un servizio Windows comporta l'aggiunta di un evento al registro eventi di sistema (fonte: /superuser/1238311/how-can-we-detect-if-a-windows- service-is-delete-is-there-there-event-log-id-for-i ).

AFAIK non esiste una politica di controllo per controllare la cancellazione di un servizio e penso che se ci fosse penso che sarebbe elencato qui: https://docs.microsoft.com/en-us/windows/security/threat-protection/auditing/ base-audit-processo-tracking

Suppongo che il polling ServiceController.GetServices()sia fuori discussione perché il tuo programma potrebbe non essere in esecuzione quando il servizio viene disinstallato?


Esattamente il mio processo potrebbe non essere in esecuzione.
BillyDay

Ok, penso che tu sia sfortunato allora @BillyDay
simon-pearson

Perché non controllare solo un file associato a quel servizio ... ad esempio myService.exe
johnny 5

puoi anche controllare il registro per assicurarti che il servizio esista HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ services, se vuoi assicurarti che qualsiasi servizio non sia stato cancellato dovrai aggiungere la tua cache
johnny 5

0

Esistono molti modi per costruire la strumentazione, fino a quando non impari cosa costituisce una buona strumentazione. Il mio how-to è essenzialmente tratto direttamente dalla voce di Wikipedia https://en.wikipedia.org/wiki/Instrumentation .

Istruzioni per la strumentazione

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

  • Non integrato
  • Solo dati primari
  • Tirare non spingere
  • Organizzato per processo
  • Mai offline

La soluzione al problema della misurazione degli indicatori esiste, ma sei bloccato a concettualizzare come avere anche una strumentazione "push-based" che segnali un altro sistema. Come spiega il mio articolo E, gli strumenti dovrebbero sempre estrarre i dati senza mai spingerli. La segnalazione guidata dagli eventi è un potenziale punto di errore non necessario.

Per chiarire qualsiasi indecisione o dubbi che potresti avere sulla costruzione di un'applicazione separata, i monitor sono normalmente processi indipendenti ( non integrati come dice Wikipedia). Quindi dire che il tuo monitor "potrebbe non essere in esecuzione" significa che non hai scelto di costruire un vero monitor non integrato, che è sempre acceso. Il tuo sistema di consumo non modella correttamente la strumentazione, perché integra il controllo nel proprio processo.

Separare queste responsabilità e procedere. Decidi con quale frequenza lo strumento dovrebbe ragionevolmente eseguire il polling per i servizi eliminati e eseguire il polling dei dati con un timer. Se usi la chiamata API suggerita da simon-pearson, puoi anche rilevare quando sono stati aggiunti servizi. Naturalmente, il monitor deve memorizzare nella cache locale una copia dell'elenco dei servizi in modo che gli indicatori possano dedurre ciò che è stato aggiunto o rimosso.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.