Answers:
尽管在事件或审核日志中没有删除服务的痕迹,但是您可以创建一个小型控制台应用程序,该应用程序检测服务是否存在并将该应用程序附加到该应用程序,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>完成
没错,删除Windows服务确实会导致将事件添加到系统事件日志中(源:https : //superuser.com/questions/1238311/how-can-we-detect-if-a-windows-服务已删除,其中有一个用于i的事件日志ID)。
AFAIK没有审核策略来审核服务的删除,我想如果可以,我会在这里列出它:https : //docs.microsoft.com/zh-cn/windows/security/threat-protection/auditing/基本审计过程跟踪
我认为轮询ServiceController.GetServices()
是不可能的,因为卸载服务时您的程序可能未运行?
在您了解什么构成良好的仪器之前,有很多方法可以构建仪器。我的操作方法基本上直接取自Wikipedia条目https://en.wikipedia.org/wiki/Instrumentation。
仪器操作方法
http://www.powersemantics.com/e.html
存在解决指标问题的解决方案,但是您在概念上还停留在如何也使“基于推送”的仪器信号发出另一个系统的概念上。正如我的E文章所解释的那样,仪器应始终提取数据而绝不推送数据。事件驱动的信号是您不需要的潜在故障点。
为了消除您对构建单独的应用程序可能产生的犹豫不决或疑虑,监视器通常是独立的(如Wikipedia所述,未集成)。因此,说您的显示器“可能不会运行”意味着您没有选择构建真正的非集成显示器,该显示器始终处于打开状态。您的使用者系统无法正确地对检测建模,因为它在自己的流程中集成了检查。
将这些职责分开,然后继续。确定仪器应该多长时间合理轮询一次已删除的服务,并使用计时器轮询数据。如果您使用建议的simon-pearson建议的API调用,则还可以检测何时添加了服务。当然,监视器需要在本地缓存服务列表的副本,以便指示器可以推断已添加或删除的内容。