Phát hiện là khi một dịch vụ windows đã bị xóa


9

Có cách nào để phát hiện khi dịch vụ windows bị xóa không? Tôi đã kiểm tra nhật ký sự kiện nhưng nó không nhận các hành động đã xóa chỉ được thêm vào.

Tôi tin rằng có thể có một cách sử dụng nhật ký kiểm toán nhưng tôi không chắc làm thế nào để làm điều này?

Bất kỳ sự giúp đỡ nào cũng được đánh giá cao.

Cảm ơn

Câu trả lời:


6

Mặc dù không có dấu vết xóa dịch vụ trong nhật ký Sự kiện hoặc Kiểm toán , nhưng điều bạn có thể làm là tạo một ứng dụng bảng điều khiển nhỏ để phát hiện nếu một dịch vụ tồn tại và đính kèm ứng dụng này để Windows Task Schedulernó được lên lịch để thực hiện dựa trên tần suất hoặc Trình kích hoạt mà bạn có thể tùy chỉnh theo yêu cầu của bạn để bạn sẽ nhận được cảnh báo nếu dịch vụ đã được thêm hoặc xóa, v.v.

Ứng dụng bảng điều khiển được thiết kế sao cho trong lần chạy đầu tiên, nó ghi nhật ký tất cả các dịch vụ trên hệ thống và trong các lần chạy tiếp theo, nó sẽ theo dõi các thay đổi được thực hiện trên các dịch vụ thông qua servicesRemovedservicesAdded, với điều này, chúng tôi có thể quyết định hành động nào sẽ thực hiện khi có dịch vụ đã được sửa đổi

Ứng dụng bảng điều khiển: 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");

}

Lập kế hoạch nhiệm vụ

Windows Start> Trình lập lịch tác vụ> Tạo tác vụ cơ bản> Đặt Trình kích hoạt> Đính kèm exe của bạn> Kết thúc


Cảm ơn lời đề nghị, Vấn đề với điều này là nó có thể là bất kỳ dịch vụ nào tôi không đặc biệt biết tên của dịch vụ bị xóa.
Billy

@BillyDay, ahh tôi hiểu rồi, đã cập nhật câu trả lời
Clint

Tôi nghĩ rằng đây là cách tiếp cận tốt nhất. Tôi sẽ tạo một dịch vụ chạy khi khởi động và lặp và phát hiện khi dịch vụ bị xóa và ghi vào tệp hoặc nâng cao và sự kiện. Cảm ơn
BillyDay

0

Bạn có quyền xóa Dịch vụ Windows sẽ khiến một sự kiện được thêm vào Nhật ký sự kiện hệ thống (nguồn: /superuser/1238311/how-can-we-detect-if-a-windows- dịch vụ-bị-xóa-là-có-một-sự kiện-log-id-cho-i ).

AFAIK không có chính sách kiểm toán để kiểm toán việc xóa dịch vụ và tôi nghĩ nếu có tôi nghĩ nó sẽ được liệt kê ở đây: https://docs.microsoft.com/en-us/windows/security/threat-protection/auditing/ cơ bản kiểm toán-theo dõi quá trình

Tôi cho rằng bỏ phiếu ServiceController.GetServices()là không thể vì chương trình của bạn có thể không chạy khi dịch vụ được gỡ cài đặt?


Chính xác thì quá trình của tôi có thể không chạy.
Billy

Ok, tôi nghĩ bạn đã hết may mắn rồi @BillyDay
simon-

Tại sao không kiểm tra một tệp được liên kết với dịch vụ đó ... ví dụ: myService.exe
johnny 5

bạn cũng có thể kiểm tra sổ đăng ký để đảm bảo dịch vụ tồn tại HKEY_LOCAL_MACHINE \ HỆ THỐNG \ CurrentControlset \ services, nếu bạn muốn đảm bảo bất kỳ dịch vụ nào đã bị xóa, bạn phải thêm bộ nhớ cache của riêng mình
johnny 5

0

Có rất nhiều cách để xây dựng thiết bị, cho đến khi bạn tìm hiểu những gì cấu thành thiết bị tốt. Cách làm của tôi về cơ bản được lấy trực tiếp từ mục Wikipedia https://en.wikipedia.org/wiki/Instrumentation .

Hướng dẫn cách sử dụng

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

  • Không tích hợp
  • Chỉ dữ liệu chính
  • Kéo không đẩy
  • Tổ chức theo quy trình
  • Không bao giờ ngoại tuyến

Giải pháp cho vấn đề đo chỉ số tồn tại, nhưng bạn đang bị mắc kẹt trong việc khái niệm làm thế nào để có thiết bị đo "dựa trên đẩy" báo hiệu một hệ thống khác. Như bài viết E của tôi giải thích, các công cụ nên luôn kéo dữ liệu không bao giờ đẩy nó. Báo hiệu theo hướng sự kiện là một điểm tiềm năng của sự thất bại mà bạn không cần.

Để xóa bất kỳ sự thiếu quyết đoán hoặc nghi ngờ nào bạn có thể có về việc xây dựng một ứng dụng riêng biệt, các màn hình thường là các quy trình độc lập ( không tích hợp như Wikipedia nói). Vì vậy, nói rằng màn hình của bạn "có thể không chạy" có nghĩa là bạn chưa chọn xây dựng một màn hình không tích hợp thực sự, một màn hình luôn bật. Hệ thống tiêu dùng của bạn không mô hình hóa thiết bị chính xác, bởi vì nó tích hợp kiểm tra trong quy trình riêng của nó.

Tách các trách nhiệm này và tiến hành. Quyết định tần suất công cụ nên thăm dò hợp lý các dịch vụ đã xóa và thăm dò dữ liệu bằng bộ hẹn giờ. Nếu bạn sử dụng API gọi simon-pearson được đề xuất, bạn cũng có thể phát hiện khi dịch vụ đã được thêm. Tất nhiên, màn hình cần lưu trữ cục bộ một bản sao của danh sách dịch vụ để các chỉ số có thể suy ra những gì đã được thêm hoặc xóa.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.