Виявити, коли служба Windows була видалена


9

Чи є спосіб виявити, коли сервіс Windows був видалений? Я перевірив журнал подій, але він не вибирає лише додані видалені дії.

Я вважаю, що може існувати спосіб використання журналів аудиту, але я не знаю, як це зробити?

Будь-яка допомога дуже цінується.

Дякую

Відповіді:


6

Хоча в журналах подій чи аудиту немає сліду видалення служби , ви можете створити невеликий додаток консолі, який визначає, чи існує служба, і додає це додаток до Windows Task Schedulerтакого, що його планується виконати на основі частоти або тригера, який ви Ви можете налаштувати під Ваші вимоги , щоб Ви отримали сповіщення, якщо послугу додано чи видалено тощо.

Консольний додаток розроблений таким чином, що при першому запуску він реєструє всі сервіси в системі, а на наступних запусках він буде відслідковувати зміни, внесені в сервіси через, 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 Start> Планувальник завдань> Створити основне завдання> Встановити тригер> Приєднати EXE> Готово


Дякую за пропозицію. Проблема в цьому полягає в тому, що це може бути будь-яка служба, яку я особливо не знаю, як видаляється назва служби.
BillyDay

@BillyDay, ах, бачу, оновив відповідь
Клінт

Я думаю, що це найкращий підхід. Я створять службу, яка працює під час запуску та циклу, і визначатиму, коли служба видаляється, і записувати у файл, або піднімати і подія. Спасибі
BillyDay

0

Ви праві, що видалення служби Windows викликає додавання події до системного журналу подій (джерело: /superuser/1238311/how-can-we-detect-if-a-windows- service-is-delete-is-there-an-event-log-id-for-i ).

AFAIK не існує аудиторської політики щодо аудиту видалення послуги, і я думаю, якби вона була, я думаю, що вона буде вказана тут: https://docs.microsoft.com/en-us/windows/security/threat-protection/auditing/ базовий аудит-відстеження процесу

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


Точно мій процес може не працювати.
BillyDay

Гаразд, я думаю, вам тоді не пощастило @BillyDay
simon-pearson

Чому б просто не перевірити файл, пов’язаний із цією службою ... наприклад, myService.exe
johnny 5

ви також можете перевірити реєстр, щоб переконатися, що служба існує HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ служби, якщо ви хочете переконатися, що будь-яка служба не була видалена, вам доведеться додати власний кеш
johnny 5

0

Існує маса способів побудови інструментарію, поки ви не дізнаєтесь, що являє собою хороший інструментарій. Моя робота по суті взята безпосередньо із запису Вікіпедії https://en.wikipedia.org/wiki/Інструментація .

Інструкція щодо інструментарію

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

  • Неінтегрована
  • Лише первинні дані
  • Не тягніть
  • Організовано за процесом
  • Ніколи не в режимі офлайн

Вирішення проблеми вимірювальних показників існує, але ви зациклювались на тому, щоб зрозуміти, як також мати "приштовхувальний" приладовий сигнал іншої системи. Як пояснюється в моїй статті E, інструменти завжди повинні витягувати дані, ніколи їх не натискати. Сигналізація, керована подіями, - це потенційна точка відмови, яка вам не потрібна.

Щоб усунути будь-яку нерішучість або сумніви, які можуть виникнути у створенні окремого додатку, монітори зазвичай не залежать ( не інтегровані) як каже Вікіпедія). Тобто, мовляв, що ваш монітор "може не працювати" означає, що ви не вирішили створити справжній неінтегрований монітор, який завжди працює. Ваша споживча система неправильно моделює прилади, тому що вона інтегрує перевірку у свій власний процес.

Розділіть ці обов'язки і продовжуйте. Вирішіть, як часто інструмент повинен обґрунтовано запитувати на видалені служби та запитувати дані таймером. Якщо ви використовуєте запропонований виклик API simon-pearson, ви також можете визначити, коли служби додані. Звичайно, монітору потрібно локально кешувати копію списку послуг, щоб індикатори могли зробити висновок про те, що додано чи видалено.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.