Headers of SQLI-WIN-001/006/007/008/009/010/012/013 and SQLI-SYN-001 follow the rule changes (not measurable instead of passed, caps and summary findings, hourly 24-hour counts, per-user and updater tasks, neutral check titles); SQLI-WIN-010's severity gains Low when the event log cannot be read (also in README.md). Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
55 lines
4.3 KiB
SQL
55 lines
4.3 KiB
SQL
-- ===================================================================================================================
|
||
-- SQLI-WIN-012: En planlagt opgave fejlede sidste gang, den kørte
|
||
-- ===================================================================================================================
|
||
-- Regel-id: SQLI-WIN-012
|
||
-- Titel: En planlagt opgave fejlede sidste gang, den kørte
|
||
-- Alvor: Medium.
|
||
-- Versioner: Windows Server 2012 og nyere (navnerummet TaskScheduler findes ikke på 2008 R2: "ikke målbar").
|
||
--
|
||
-- Hvad tjekkes, og hvorfor:
|
||
-- En opgave i Opgavestyring (Task Scheduler) sluttede med en fejlkode. Planlagte opgaver er ofte oprydning, eksport,
|
||
-- integrationer eller filbackup: når de fejler, opdager ingen det, før noget mangler.
|
||
--
|
||
-- Vurdering (sker i C# ud fra de indsamlede data, ikke på den overvågede server):
|
||
-- Et fund pr. aktiveret, overvåget opgave, hvis LastTaskResult er en fejl. Indeholder opgavens navn en brugers SID
|
||
-- (S-1-5-21-…), står den i titlen som "bruger-" og en kort hash; det fulde navn kun som følsom måling.
|
||
--
|
||
-- Grænseværdier (agentens appsettings.json):
|
||
-- SQLInsight:Servers:Tasks:IncludeMicrosoftTasks standard false (Microsofts egne opgaver under \Microsoft\ overvåges ikke)
|
||
-- SQLInsight:Servers:Tasks:IgnoreUserAndUpdaterTasks standard true (opgaver pr. bruger – en SID i navnet – og programmers
|
||
-- egne opdateringsopgaver: OneDrive, MicrosoftEdgeUpdate, GoogleUpdate,
|
||
-- User_Feed_Synchronization; TaskResults.DefaultIgnoredNames)
|
||
-- SQLInsight:Servers:Tasks:Ignore opgaver der aldrig overvåges (sti\navn eller præfiks*)
|
||
-- SQLInsight:Servers:Tasks:MaxWatched standard 50 (højst så mange opgaver pr. server)
|
||
-- Resultater, der ikke er fejl: 0x0, 0x41300 (klar), 0x41301 (kører), 0x41302 (deaktiveret), 0x41303 (har ikke kørt),
|
||
-- 0x41304 (ingen flere kørsler), 0x41325 (i kø), 0x8004131F (kørte allerede) – src/SQLInsight.Core/Servers/ServerTasks.cs.
|
||
--
|
||
-- Rettigheder på den overvågede server (db/permissions/grant-windows-server.ps1, aldrig lokal administrator):
|
||
-- WMI Enable Account/Remote Enable på root\Microsoft\Windows\TaskScheduler. Agenten ser kun opgaver, hvis egne
|
||
-- sikkerhedsindstillinger tillader kontoen at læse dem. Seneste resultat læses med Task Schedulers GetInfo (et
|
||
-- skrivebeskyttet CIM-metodekald, som Get-ScheduledTaskInfo); over WinRM kræver metodekald, at kontoen også har
|
||
-- Execute-ret i WinRM – ellers bruges DCOM.
|
||
--
|
||
-- Data kommer fra (collector, fil – medlemmer, interval):
|
||
-- src/SQLInsight.Servers/CimWindowsServerSource.cs – Session.GetTasksAsync (CimQueries.TaskQuery og
|
||
-- PS_ScheduledTask.GetInfoByName), hvert 15. minut (SQLInsight:Servers:Intervals:tasks) fra
|
||
-- src/SQLInsight.Agent/Servers/ServerMonitor.cs – CollectTasksAsync.
|
||
-- Regelkode: src/SQLInsight.Rules/Servers/WindowsServerRules.cs : FailedScheduledTaskRule
|
||
--
|
||
-- Read-only: Ja. Reglen sender ingen SQL. Agenten læser kun fra Windows: CIM/WQL-forespørgsler (SELECT),
|
||
-- hændelsesloggen og for planlagte opgaver Task Schedulers skrivebeskyttede GetInfo. Den starter, stopper
|
||
-- eller ændrer intet på serveren. Filen indeholder kun kommentarer; forespørgslerne mod Windows står herunder.
|
||
-- ===================================================================================================================
|
||
|
||
-- Reglen bruger ikke SQL. Forespørgslerne mod Windows står herunder; filen indeholder kun kommentarer og ændrer intet.
|
||
--
|
||
-- CIM/WQL (namespace root\Microsoft\Windows\TaskScheduler):
|
||
-- SELECT TaskName, TaskPath, State FROM MSFT_ScheduledTask
|
||
-- CIM-metode (skrivebeskyttet) pr. overvåget opgave:
|
||
-- PS_ScheduledTask.GetInfoByName(TaskName, TaskPath) -> cmdletOutput: MSFT_TaskDynamicInfo
|
||
-- (LastRunTime, LastTaskResult, NextRunTime, NumberOfMissedRuns)
|
||
--
|
||
-- Efterprøv med PowerShell (skrivebeskyttet; kør på agentens server som agentens konto):
|
||
-- $s = New-CimSession -ComputerName SERVER
|
||
-- Get-ScheduledTask -CimSession $s | Where-Object TaskPath -notlike '\Microsoft\*' | Get-ScheduledTaskInfo -CimSession $s |
|
||
-- Select-Object TaskPath, TaskName, LastRunTime, @{n='Resultat';e={'0x{0:X}' -f $_.LastTaskResult}}, NextRunTime, NumberOfMissedRuns
|