Deteksi adalah ketika layanan windows telah dihapus

9

Apakah ada cara untuk mendeteksi kapan layanan windows telah dihapus? Saya telah memeriksa log peristiwa tetapi tidak mengambil tindakan yang dihapus hanya ditambahkan.

Saya percaya mungkin ada cara menggunakan log audit tapi saya tidak yakin bagaimana melakukan ini?

Bantuan apa pun sangat kami hargai.

Terima kasih

BillyDay
sumber

Jawaban:

6

Meskipun tidak ada jejak penghapusan layanan di log Peristiwa atau Audit , yang dapat Anda lakukan adalah membuat aplikasi konsol kecil yang mendeteksi jika ada layanan dan melampirkan aplikasi ini Windows Task Schedulersedemikian rupa sehingga dijadwalkan untuk dieksekusi berdasarkan frekuensi atau Pemicu yang Anda gunakan. dapat menyesuaikan dengan kebutuhan Anda sehingga Anda akan menerima peringatan jika layanan telah ditambahkan atau dihapus dll.

Aplikasi konsol dirancang sedemikian rupa sehingga pada saat dijalankan pertama, ia mencatat semua layanan pada sistem dan pada menjalankan selanjutnya akan melacak perubahan yang dibuat pada layanan melalui servicesRemoveddan servicesAdded, dengan ini kita dapat memutuskan tindakan apa yang harus diambil ketika layanan memiliki telah dimodifikasi

Aplikasi Konsol: 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");

}

Tugas Penjadwalan

Windows Mulai> Penjadwal Tugas> Buat Tugas Dasar> Atur Pemicu> Pasang exe Anda> Selesai

Clint
sumber
Terima kasih atas sarannya, Masalahnya adalah ini bisa berupa layanan apa pun yang saya tidak tahu nama layanan yang dihapus.
BillyDay
@ BillyDay, ahh begitu, memperbarui jawabannya
Clint
Saya pikir ini adalah pendekatan terbaik. Saya akan membuat layanan yang berjalan saat startup dan loop dan mendeteksi ketika layanan dihapus dan baik menulis ke file atau meningkatkan dan acara. Terima kasih
BillyDay
0

Anda benar bahwa menghapus Layanan Windows tidak menyebabkan suatu peristiwa ditambahkan ke System Event Log (sumber: /superuser/1238311/how-can-we-detect-if-a-windows- service-is-delete-is-there-an-event-log-id-for-i ).

AFAIK tidak ada kebijakan audit untuk mengaudit penghapusan layanan dan saya pikir jika ada, saya pikir itu akan terdaftar di sini: https://docs.microsoft.com/en-us/windows/security/threat-protection/auditing/ dasar-audit-proses-pelacakan

Saya menganggap jajak ServiceController.GetServices()pendapat tidak mungkin karena program Anda mungkin tidak berjalan ketika layanan dihapus?

simon-pearson
sumber
Tepatnya proses saya mungkin tidak berjalan.
BillyDay
Ok, saya pikir Anda kurang beruntung maka @BillyDay
simon-pearson
Mengapa tidak memeriksa file yang terkait dengan layanan itu ... mis. MyService.exe
johnny 5
Anda juga dapat memeriksa registri untuk memastikan layanan tersebut ada layanan HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \, jika Anda ingin memastikan layanan apa pun tidak dihapus Anda harus menambahkan cache Anda sendiri
johnny 5
0

Ada banyak cara untuk membangun instrumentasi, sampai Anda mengetahui apa yang merupakan instrumentasi yang baik. Cara saya pada dasarnya diambil langsung dari entri Wikipedia https://en.wikipedia.org/wiki/Instrumentation .

Cara Instrumentasi

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

  • Tidak terintegrasi
  • Hanya data primer
  • Tarik tidak mendorong
  • Diorganisir oleh proses
  • Tidak pernah offline

Solusi untuk masalah indikator pengukuran ada, tetapi Anda terjebak membuat konsep bagaimana juga memiliki "berbasis push" sinyal sistem lain. Seperti yang dijelaskan dalam artikel E saya, instrumen harus selalu menarik data, jangan pernah mendorongnya. Pensinyalan berbasis peristiwa adalah titik kegagalan potensial yang tidak Anda butuhkan.

Untuk menjernihkan keraguan atau keraguan yang mungkin Anda miliki tentang membangun aplikasi terpisah, monitor biasanya independen ( tidak terintegrasi seperti yang dikatakan Wikipedia). Jadi mengatakan monitor Anda "mungkin tidak berjalan" berarti Anda belum memilih untuk membangun monitor yang tidak terintegrasi, yang selalu menyala. Sistem konsumen Anda tidak memodelkan instrumentasi dengan benar, karena mengintegrasikan pemeriksaan dalam prosesnya sendiri.

Pisahkan tanggung jawab ini dan lanjutkan. Putuskan seberapa sering instrumen harus melakukan polling untuk layanan yang dihapus dan polling data dengan timer. Jika Anda menggunakan panggilan API simon-pearson yang disarankan, Anda juga dapat mendeteksi kapan layanan telah ditambahkan. Tentu saja, monitor perlu menyimpan salinan daftar layanan secara lokal sehingga indikator dapat menyimpulkan apa yang telah ditambahkan atau dihapus.

RBJ
sumber