Detectar es cuando un servicio de Windows ha sido eliminado

9

¿Hay alguna forma de detectar cuándo se ha eliminado un servicio de Windows? He revisado el registro de eventos pero no recoge las acciones eliminadas que solo se agregaron.

Creo que puede haber una forma de usar los registros de auditoría, pero no estoy seguro de cómo hacerlo.

Cualquier ayuda es muy apreciada.

Gracias

BillyDay
fuente

Respuestas:

6

Si bien no hay rastro de eliminación del servicio en los registros de eventos o auditoría , lo que puede hacer es crear una pequeña aplicación de consola que detecte si existe un servicio y adjunte esta aplicación de Windows Task Schedulermodo que esté programada para ejecutarse según la frecuencia o un disparador que usted puede personalizarse según sus requisitos, de modo que recibirá una alerta si se ha agregado o eliminado un servicio, etc.

La aplicación de consola está diseñada de tal manera que en la primera ejecución, registra todos los servicios en el sistema y en las ejecuciones posteriores realizará un seguimiento de los cambios realizados en los servicios a través de , servicesRemovedy servicesAddedcon esto podemos decidir qué acción tomar cuando un servicio tiene sido modificado

Aplicación de consola: 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");

}

Tarea de programación

Inicio de Windows> Programador de tareas> Crear tarea básica> Establecer activador> Adjunte su exe> Finalizar

Clint
fuente
Gracias por la sugerencia. El problema con esto es que podría ser cualquier servicio que no conozca particularmente el nombre del servicio que se elimina.
BillyDay
@BillyDay, ahh ya veo, actualicé la respuesta
Clint
Creo que este es el mejor enfoque. Crearé un servicio que se ejecute al inicio y en bucle y detectaré cuándo se elimina un servicio y escribiré en un archivo o generará un evento. Gracias
BillyDay
0

Tiene razón en que eliminar un Servicio de Windows hace que se agregue un evento al Registro de eventos del sistema (fuente: /superuser/1238311/how-can-we-detect-if-a-windows- service-is-deleted-is-there-an-event-log-id-for-i ).

AFAIK no existe una política de auditoría para auditar la eliminación de un servicio y creo que si lo hubiera, creo que se enumeraría aquí: https://docs.microsoft.com/en-us/windows/security/threat-protection/auditing/ auditoria-básica-proceso-seguimiento

¿Supongo que las encuestas ServiceController.GetServices()están fuera de discusión porque su programa podría no ejecutarse cuando se desinstala el servicio?

Simon-Pearson
fuente
Exactamente mi proceso podría no estar ejecutándose.
BillyDay
Ok, creo que no tienes suerte, entonces @BillyDay
simon-pearson
¿Por qué no acaba de comprobar un archivo asociado a ese servicio ... por ejemplo MiServicio.exe
johnny 5
también puede verificar el registro para asegurarse de que el servicio existe HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ services, si desea asegurarse de que no se eliminó ningún servicio, tendrá que agregar su propio caché
johnny 5
0

Hay muchas maneras de construir instrumentación, hasta que aprenda lo que constituye una buena instrumentación. Mi tutorial se toma esencialmente de la entrada de Wikipedia https://en.wikipedia.org/wiki/Instrumentation .

Instrumentación de procedimientos

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

  • No integrado
  • Solo datos primarios
  • Tirar no empujar
  • Organizado por proceso
  • Nunca desconectado

La solución al problema de medir indicadores existe, pero está atascado al conceptualizar cómo hacer que la instrumentación "basada en empuje" señale a otro sistema. Como explica mi artículo E, los instrumentos siempre deben extraer datos, nunca presionarlos. La señalización impulsada por eventos es un punto potencial de falla que no necesita.

Para aclarar cualquier indecisión o duda que pueda tener sobre la construcción de una aplicación separada, los monitores son normalmente procesos independientes ( no integrados como dice Wikipedia). Entonces, decir que su monitor "podría no estar ejecutándose" significa que no ha elegido construir un monitor real no integrado, uno que siempre esté encendido. Su sistema de consumo no modela correctamente la instrumentación, porque integra la verificación en su propio proceso.

Separe estas responsabilidades y proceda. Decida con qué frecuencia el instrumento debe sondear razonablemente los servicios eliminados y sondear los datos con un temporizador. Si utiliza la llamada API sugerida por simon-pearson, también puede detectar cuándo se han agregado los servicios. Por supuesto, el monitor necesita almacenar en caché localmente una copia de la lista de servicios para que los indicadores puedan inferir lo que se ha agregado o eliminado.

RBJ
fuente