回答:
イベントログまたは監査ログにサービス削除の痕跡はありませんが、できることは、サービスが存在するかどうかを検出する小さなコンソールアプリを作成し、このアプリをアタッチして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> Task Scheduler> Create Basic Task> Set Trigger> Attach your exe> Finish
Windowsサービスを削除すると、システムイベントログにイベントが追加されることは間違いありません(ソース:https : //superuser.com/questions/1238311/how-can-we-detect-if-a-windows- service-is-deleted-is-there-an-event-log-id-for-i)。
私の知る限り、サービスの削除を監査する監査ポリシーはありません。もしあったら、ここにリストされていると思います:https : //docs.microsoft.com/en-us/windows/security/threat-protection/auditing/基本的な監査プロセスの追跡
ServiceController.GetServices()
サービスのアンインストール時にプログラムが実行されていない可能性があるため、ポーリングは問題外だと思いますか?
何が優れたインストルメンテーションであるかを理解するまで、インストルメンテーションを構築する方法はたくさんあります。私のハウツーは基本的にWikipediaのエントリhttps://en.wikipedia.org/wiki/Instrumentationから直接取得されます。
インストルメンテーションハウツー
http://www.powersemantics.com/e.html
インジケーターの測定の問題に対する解決策は存在しますが、「プッシュベースの」計装信号を別のシステムに送る方法を概念化することに行き詰まっています。私のE記事で説明しているように、計測器は常にデータをプルし、プッシュしないでください。イベント駆動型シグナリングは、不要な潜在的な障害ポイントです。
別のアプリケーションの構築についての不確定性や疑問を解消するために、モニターは通常独立しています(ウィキペディアが言うように統合されていない)プロセス。したがって、モニターが「実行されていない可能性がある」とは、統合されていない実際のモニターを構築することを選択していないことを意味します。コンシューマーシステムは、チェックを独自のプロセスに統合しているため、計測を正しくモデル化していません。
これらの責任を分離して続行します。機器が削除されたサービスを合理的にポーリングし、タイマーでデータをポーリングする頻度を決定します。API呼び出しsimon-pearsonを使用すると、サービスが追加されたことを検出することもできます。もちろん、モニターはサービスリストのコピーをローカルにキャッシュして、インジケーターが追加または削除されたものを推測できるようにする必要があります。