Détecter, c'est quand un service Windows a été supprimé

9

Existe-t-il un moyen de détecter lorsqu'un service Windows a été supprimé? J'ai vérifié le journal des événements mais il ne reprend pas seulement les actions supprimées.

Je pense qu'il peut y avoir un moyen d'utiliser les journaux d'audit, mais je ne sais pas comment procéder?

Toute aide est très appréciée.

Merci

BillyDay
la source

Réponses:

6

Bien qu'il n'y ait aucune trace de suppression de service dans les journaux d' événements ou d' audit , ce que vous pouvez faire est de créer une petite application console qui détecte si un service existe et attachez cette application à Windows Task Schedulertelle qu'elle est planifiée pour s'exécuter en fonction de la fréquence ou d'un déclencheur que vous peut personnaliser selon vos besoins de telle sorte que vous recevrez une alerte si un service a été ajouté ou supprimé, etc.

L'application console est conçue de telle sorte que lors de la première exécution, elle enregistre tous les services sur le système et lors des exécutions suivantes, elle suivra les modifications apportées aux services via servicesRemovedet servicesAdded, avec cela, nous pouvons décider de l'action à entreprendre lorsqu'un service a été modifié

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

}

Tâche de planification

Windows Start> Task Scheduler> Create Basic Task> Set Trigger> Attach your exe> Finish

Clint
la source
Merci pour la suggestion, le problème est qu'il pourrait s'agir de n'importe quel service dont je ne connais pas particulièrement le nom du service qui est supprimé.
BillyDay
@BillyDay, ahh je vois, a mis à jour la réponse
Clint
Je pense que c'est la meilleure approche. Je vais créer un service qui s'exécute au démarrage et en boucle et détecter quand un service est supprimé et écrire dans un fichier ou déclencher et événement. Merci
BillyDay
0

Vous avez raison de dire que la suppression d'un service Windows provoque l'ajout d'un événement au journal des événements système (source: /superuser/1238311/how-can-we-detect-if-a-windows- service-est-supprimé-est-il-un-id-journal-des-événements-pour-i ).

AFAIK il n'y a pas de politique d'audit pour auditer la suppression d'un service et je pense que s'il y en avait, je pense qu'il serait répertorié ici: https://docs.microsoft.com/en-us/windows/security/threat-protection/auditing/ audit-de-base-suivi des processus

Je suppose que l'interrogation ServiceController.GetServices()est hors de question car votre programme peut ne pas être en cours d'exécution lorsque le service est désinstallé?

Simon-Pearson
la source
Exactement, mon processus n'est peut-être pas en cours d'exécution.
BillyDay
Ok, je pense que vous n'avez pas de chance alors @BillyDay
simon-pearson
Pourquoi ne pas simplement vérifier un fichier associé à ce service ... par exemple myService.exe
johnny 5
vous pouvez également vérifier le registre pour vous assurer que le service existe HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ services, si vous voulez vous assurer qu'aucun service n'a été supprimé, vous devrez ajouter votre propre cache
johnny 5
0

Il existe de nombreuses façons de construire une instrumentation jusqu'à ce que vous appreniez ce qui constitue une bonne instrumentation. Mon mode d'emploi est essentiellement tiré directement de l'entrée Wikipedia https://en.wikipedia.org/wiki/Instrumentation .

Guide d'instrumentation

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

  • Non intégré
  • Données primaires uniquement
  • Tirez pas poussez
  • Organisé par processus
  • Jamais hors ligne

La solution au problème de la mesure des indicateurs existe, mais vous êtes en train de penser comment avoir également un signal d'instrumentation «basé sur la poussée» sur un autre système. Comme l'explique mon article E, les instruments doivent toujours extraire des données, jamais les pousser. La signalisation événementielle est un point de défaillance potentiel dont vous n'avez pas besoin.

Pour dissiper toute indécision ou tout doute que vous pourriez avoir sur la création d'une application distincte, les moniteurs sont normalement des processus indépendants ( non intégrés comme Wikipedia le dit). Donc, dire que votre moniteur "ne fonctionne peut-être pas" signifie que vous n'avez pas choisi de construire un véritable moniteur non intégré, qui est toujours allumé. Votre système grand public ne modélise pas correctement l'instrumentation, car il intègre la vérification dans son propre processus.

Séparez ces responsabilités et continuez. Décidez de la fréquence à laquelle l'instrument doit interroger raisonnablement les services supprimés et interroger les données avec une minuterie. Si vous utilisez l'appel API proposé par simon-pearson, vous pouvez également détecter quand des services ont été ajoutés. Bien sûr, le moniteur doit mettre en cache localement une copie de la liste des services afin que les indicateurs puissent déduire ce qui a été ajouté ou supprimé.

RBJ
la source