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 시작> 작업 스케줄러> 기본 작업 생성> 트리거 설정> exe 첨부> 완료


제안 해 주셔서 감사합니다.이 문제는 특히 삭제되는 서비스 이름을 알지 못하는 서비스 일 수 있습니다.
BillyDay

@BillyDay, 아아, 나는 대답을 업데이트했다
Clint

이것이 최선의 방법이라고 생각합니다. 시작 및 루프에서 실행되는 서비스를 작성하고 서비스가 삭제되는 시점을 감지하고 파일에 쓰거나 발생 및 이벤트를 작성합니다. 감사합니다
BillyDay

0

Windows 서비스를 삭제하면 이벤트가 시스템 이벤트 로그 (소스 : /superuser/1238311/how-can-we-detect-if-a-windows-)에 추가 될 수 있습니다. 서비스가 삭제되었습니다. 이벤트 로그가 있습니다. ).

AFAIK 서비스 삭제를 감사하는 감사 정책이 없으며 여기에 나열되어 있다고 생각합니다. https://docs.microsoft.com/en-us/windows/security/threat-protection/auditing/ 기본 감사 프로세스 추적

ServiceController.GetServices()서비스가 제거 될 때 프로그램이 실행되지 않을 수 있기 때문에 폴링에 문제 가 있다고 생각 합니까?


정확히 내 프로세스가 실행되고 있지 않을 수 있습니다.
BillyDay

좋아, 나는 당신이 운이 좋지 않다고 생각합니다. @BillyDay
simon-

왜 그 서비스와 관련된 파일을 검사하지 않겠습니까 ... 예 : myService.exe
johnny 5

또한 서비스가 HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ services인지 확인하기 위해 레지스트리를 검사 할 수 있습니다. 서비스가 삭제되지 않도록하려면 자체 캐시를 추가해야합니다.
johnny 5

0

좋은 계측을 구성하는 것을 배울 때까지 계측을 구축하는 방법은 많이 있습니다. 내 사용법은 본질적으로 Wikipedia 항목 https://en.wikipedia.org/wiki/Instrumentation 에서 직접 가져옵니다 .

계측 방법

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

  • 비 통합
  • 기본 데이터 만
  • 밀지 않음
  • 프로세스별로 구성
  • 절대 오프라인

측정 표시기 문제에 대한 해결책이 있지만 "푸시 기반"계측이 다른 시스템에 신호를 보내는 방법을 개념화해야합니다. 내 E 기사에서 설명 하듯이 계측기는 항상 데이터를 가져와야합니다. 이벤트 중심 신호는 필요하지 않은 잠재적 장애 지점입니다.

별도의 응용 프로그램을 구축 할 때 발생할 수있는 불확실성 또는 의심을 없애기 위해 모니터는 일반적으로 독립적입니다 ( Wikipedia와 같이 통합되지 않음 ). 따라서 모니터가 "실행 중이 아닐 수 있습니다"는 것은 실제로 켜져 있지 않은 실제 비 통합 모니터를 만들지 않았 음을 의미합니다. 소비자 시스템은 자체 프로세스에 검사를 통합 하기 때문에 계측을 올바르게 모델링하지 않습니다 .

이러한 책임을 분리하고 진행하십시오. 기기가 삭제 된 서비스를 합리적으로 폴링하고 타이머를 사용하여 데이터를 폴링하는 빈도를 결정하십시오. 제안 된 API 호출 simon-pearson을 사용하면 서비스가 추가 된시기를 감지 할 수도 있습니다. 물론, 모니터는 표시기가 추가되거나 제거 된 내용을 유추 할 수 있도록 서비스 목록 사본을 로컬로 캐시해야합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.