Определить, когда услуга windows была удалена - PullRequest
9 голосов
/ 04 марта 2020

Есть ли способ определить, когда была удалена услуга windows? Я проверил журнал событий, но он не собирает только удаленные действия.

Я полагаю, что может быть способ использовать журналы аудита, но я не уверен, как это сделать?

Любая помощь очень ценится.

Спасибо

Ответы [ 3 ]

6 голосов
/ 07 марта 2020

Хотя в журналах не отслеживается удаление службы *1001* или Аудит журналов, вы можете создать небольшое консольное приложение, которое обнаружит, если служба существует и присоедините это приложение к Windows Task Scheduler так, чтобы оно планировалось выполнить на основе частоты или Триггер , который вы можете настроить в соответствии со своими требованиями , так что вы получите предупреждение, если служба добавлена ​​ или удалена et c ..

Консольное приложение разработано таким образом, что при первом запуске оно регистрирует все службы в системе и при последующих запусках она будет отслеживать изменения, внесенные в сервисы через servicesRemoved и servicesAdded, с этим мы можем решить, какое действие предпринять, когда сервис был изменен

Консольное приложение: 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");

}

Планирование задачи

Windows Пуск> Планировщик задач> Создать Basi c Задача> Установить триггер> Прикрепить свой exe> Fini * 10 41 *

0 голосов
/ 08 марта 2020

Есть много способов построить инструментарий, пока вы не узнаете, что такое хороший инструментарий. Мои инструкции по сути взяты прямо из статьи в Википедии https://en.wikipedia.org/wiki/Instrumentation.

Инструкции по применению

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

  • Неинтегрировано
  • Только первичные данные
  • Не извлекается pu sh
  • Организовано по процессу
  • Никогда не в сети

Решение проблемы измерения индикаторов существует, но вы застряли в понимании того, как использовать инструментальные средства "pu sh" для сигнализации другой системы. Как объясняет моя статья E, инструменты всегда должны извлекать данные, а не извлекать их. Сигнализация, управляемая событиями, - это потенциальная точка отказа, которая вам не нужна.

Чтобы устранить нерешительность или сомнения, которые могут возникнуть у вас при создании отдельного приложения, мониторы обычно независимы ( не интегрированы как говорит Википедия) процессов. То есть, если вы говорите, что ваш монитор «может не работать», значит, вы не решили создать настоящий неинтегрированный монитор, который всегда включен. Ваша потребительская система неправильно моделирует контрольно-измерительные приборы, потому что объединяет проверку в своем собственном процессе.

Разделите эти обязанности и продолжайте. Решите, как часто прибор должен разумно опрашивать удаленные сервисы и опрашивать данные с помощью таймера. Если вы используете вызов API, предложенный Саймон-Пирсоном, вы также можете определить, когда были добавлены сервисы. Конечно, монитор должен локально кэшировать копию списка услуг, чтобы индикаторы могли определить, что было добавлено или удалено.

0 голосов
/ 04 марта 2020

Вы правы, что удаление службы Windows приводит к добавлению события в системный журнал событий (источник: https://superuser.com/questions/1238311/how-can-we-detect-if-a-windows-service-is-deleted-is-there-an-event-log-id-for-i).

AFAIK нет аудита политика аудита удаления службы, и я думаю, что если бы это было так, я думаю, что это будет указано здесь: https://docs.microsoft.com/en-us/windows/security/threat-protection/auditing/basic-audit-process-tracking

Я предполагаю, что опрос ServiceController.GetServices() исключен, потому что ваш программа может не работать при удалении службы?

...