पता लगाएँ कि एक विंडोज़ सेवा कब हटा दी गई है


9

क्या पता लगाने का एक तरीका है कि विंडोज़ सेवा कब हटा दी गई है? मैंने ईवेंट लॉग की जाँच की है, लेकिन यह केवल हटाए गए कार्यों को नहीं उठाता है।

मेरा मानना ​​है कि ऑडिट लॉग का उपयोग करने का एक तरीका हो सकता है लेकिन मैं अनिश्चित हूं कि यह कैसे किया जाए?

किसी भी प्रकार की मदद की बेहद सराहना की जाती है।

धन्यवाद

जवाबों:


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

}

समय-निर्धारण कार्य

विंडोज स्टार्ट> टास्क शेड्यूलर> बेसिक टास्क बनाएं> ट्रिगर सेट करें> अपने exe> फिनिश को अटैच करें


सुझाव के लिए धन्यवाद, इस के साथ समस्या यह है कि किसी भी सेवा मैं विशेष रूप से नष्ट हो जाता है कि सेवा का नाम पता नहीं होगा।
बिलीडे

@ बिलीडे, आह मैं देख रहा हूं, जवाब अपडेट किया
क्लिंट

मुझे लगता है कि यह सबसे अच्छा तरीका है। मैं एक ऐसी सेवा बनाऊंगा जो स्टार्टअप और लूप पर चलती है और पता लगाती है कि कोई सेवा कब हटाई गई है और या तो किसी फाइल पर लिखनी है या उठानी है और घटना है। धन्यवाद
BillyDay

0

आप सही हैं कि Windows सेवा को हटाने से कोई ईवेंट सिस्टम ईवेंट लॉग में जोड़ा जा सकता है (स्रोत: /superuser/1238311/how-can-we-detect-if-a-windows- सेवा-से-हटाई गई-वहाँ-ए-इवेंट-लॉग-आईडी-के लिए-मैं )।

AFAIK में किसी सेवा को हटाने का ऑडिट करने के लिए कोई ऑडिट पॉलिसी नहीं है और मुझे लगता है कि अगर मुझे लगता था कि यह यहां सूचीबद्ध होगी: https://docs.microsoft.com/en-us/windows/security/threat-protection/audet/ बुनियादी लेखापरीक्षा-प्रक्रिया-ट्रैकिंग

मुझे लगता है कि मतदान ServiceController.GetServices()प्रश्न से बाहर है क्योंकि आपका कार्यक्रम सेवा की स्थापना रद्द होने पर नहीं चल सकता है?


शायद मेरी प्रक्रिया नहीं चल रही है।
बिलीडे

ठीक है, मुझे लगता है कि तुम भाग्य से बाहर हो तो @BillyDay
सिमोन-

क्यों न उस सेवा से जुड़ी किसी फ़ाइल की जाँच करें ... जैसे myService.exe
johnny 5

आप यह सुनिश्चित करने के लिए रजिस्ट्री की जांच भी कर सकते हैं कि सेवा HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ _ में मौजूद है, यदि आप यह सुनिश्चित करना चाहते हैं कि कोई भी सेवा हटाई नहीं गई तो आपको अपना कैश जोड़ना होगा
जॉनी 5

0

इंस्ट्रूमेंटेशन बनाने के बहुत सारे तरीके हैं, जब तक आप सीखते हैं कि अच्छे इंस्ट्रूमेंटेशन क्या हैं। मेरा कैसे-कैसे अनिवार्य रूप से सीधे विकिपीडिया प्रविष्टि https://en.wikipedia.org/wiki/Instrumentation से लिया जाता है ।

इंस्ट्रूमेंटेशन कैसे-कैसे

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

  • गैर एकीकृत
  • केवल प्राथमिक डेटा
  • धक्का मत लगाओ
  • प्रक्रिया द्वारा आयोजित
  • कभी ऑफ़लाइन नहीं

संकेतकों को मापने की समस्या का समाधान मौजूद है, लेकिन आप यह सोचकर फंस गए हैं कि कैसे "पुश-आधारित" इंस्ट्रूमेंटेशन सिग्नल एक और सिस्टम है। जैसा कि मेरा ई लेख बताता है, साधनों को हमेशा डेटा खींचना चाहिए इसे कभी धक्का नहीं देना चाहिए। इवेंट-संचालित सिग्नलिंग विफलता का एक संभावित बिंदु है जिसकी आपको आवश्यकता नहीं है।

किसी भी आवेदन के निर्माण के बारे में आपके द्वारा की जा सकने वाली किसी भी अभद्रता या संदेह को दूर करने के लिए, मॉनिटर सामान्य रूप से स्वतंत्र होते हैं ( विकिपीडिया के अनुसार एकीकृत ) प्रक्रियाएँ। तो यह कहना कि आपका मॉनीटर "नहीं चल रहा है" का अर्थ है कि आपने वास्तविक गैर-एकीकृत मॉनीटर बनाने के लिए नहीं चुना है, जो हमेशा चालू रहता है। आपका उपभोक्ता तंत्र सही ढंग से मॉडल इंस्ट्रूमेंटेशन नहीं करता है, क्योंकि यह चेक को अपनी प्रक्रिया में एकीकृत करता है।

इन जिम्मेदारियों को अलग करें और आगे बढ़ें। तय करें कि कितनी बार उपकरण को हटाए गए सेवाओं के लिए उचित रूप से सर्वेक्षण करना चाहिए और एक टाइमर के साथ डेटा को प्रदूषित करना चाहिए। यदि आप सुझाए गए एपीआई कॉल सिमोन-पीयरसन का उपयोग करते हैं, तो आप यह भी पता लगा सकते हैं कि सेवाओं को कब जोड़ा गया है। बेशक, मॉनिटर को स्थानीय रूप से सेवा सूची की एक प्रति कैश करने की आवश्यकता है ताकि संकेतक यह पता लगा सकें कि क्या जोड़ा या हटाया गया है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.