Consultas SQL do Configuration Manager para KBs relacionadas ao ransomware WannaCrypt.
A abordagem mais simples e geralmente recomendada é implantar a CU mais recente no Windows 10 ou servidor 2016 sistemas, implantar o Rollup Mensal mais recente para pré-Windows 10 máquinas, e use os relatórios integrados de conformidade do ConfigMgr para determinar a conformidade geral.
Orientação oficial ao cliente para ataques WannaCrypt: https://blogs.technet.microsoft.com/msrc/2017/05/12/customer-guidance-for-wannacrypt-attacks/
Atualização de segurança MS17-010: https://technet.microsoft.com/en-us/library/security/ms17-010.aspx
Pré-Windows 10 máquinas:
janelas 8.1 e servidor 2012 Máquinas R2 que não relatam KB2919355 como instalado serão retornadas pela consulta. Isso ocorre porque o KB2919355 é necessário para que os KBs posteriores sejam relatados como aplicáveis. Então, esses sistemas podem ser considerados em risco e requerem mais investigação.
Para Windows Vista, janelas 7, janelas 8.1, Windows Server 2008 R2 SP1, Windows Server 2008 SP2, Windows Server 2012, e Windows Server 2012 Consulta R2 abaixo, os sistemas devolvidos serão aqueles que não possuem nem o March, Rollups mensais de abril ou maio instalados -E- estão relatando as seguintes atualizações específicas ‘Somente segurança’ como ‘Obrigatórias’:
Windows Vista e Servidor 2008 SP2: KB4012598
janelas 7 e servidor 2008 R2 SP1: KB4012212
Windows Server 2012: KB4012214
Windows Server 2012 R2 e Windows 8.1: KB4012213
-- Para Windows 7, Servidor 2008 R2 SP1, Windows Server 2012, Servidor 2012 R2 e Windows 8.1, Windows Vista e Servidor 2008 SP2
-- This query lists machines that are reporting any of the 'Security Only' updates as 'Required'.
-- Se alguma máquina tiver March, Rollup mensal de abril ou maio instalado, then they wouldn't report March 'Security Only' update as 'Required', mas procure as atualizações mensais de qualquer maneira.
-- Inclua também qualquer Windows 8.1 e servidor 2012 Máquinas R2 que não informam ‘KB2919355’ como instaladas.
DECLARE TABELA @MarchSecurityOnly (ID do Artigo NVARCHAR(20))
INSERIR EM VALORES @MarchSecurityOnly ('4012212')
INSERIR EM VALORES @MarchSecurityOnly ('4012213')
INSERIR EM VALORES @MarchSecurityOnly ('4012214')
INSERIR EM VALORES @MarchSecurityOnly ('4012598')
DECLARE @MarchMonthly TABELA (ID do Artigo NVARCHAR(20))
INSERIR EM VALORES @MarchMonthly ('4012215')
INSERIR EM VALORES @MarchMonthly ('4015549')
INSERIR EM VALORES @MarchMonthly ('4019264')
INSERIR EM VALORES @MarchMonthly ('4012216')
INSERIR EM VALORES @MarchMonthly ('4015550')
INSERIR EM VALORES @MarchMonthly ('4019215')
INSERIR EM VALORES @MarchMonthly ('4012217')
INSERIR EM VALORES @MarchMonthly ('4015551')
INSERIR EM VALORES @MarchMonthly ('4019216')
DECLARE @KB2919355 NVARCHAR(10) = '2919355'-- pré-requisito
SELECIONE
RS.Name0,
UI.ArticleID como ArticleID,
UI.BulletinID como BulletinID,
UI.Título como título,
SN.StateDescription AS State,
UCS.LastStatusCheckTime AS LastStateReceived,
UCS.LastStatusChangeTime AS LastStateChanged,
UI.CI_UniqueID AS UniqueUpdateID
DE v_Update_ComplianceStatusReported UCS
JOIN v_UpdateInfo UI ON UCS.CI_ID = UI.CI_ID
JOIN v_R_System RS ON RS.ResourceType=5 E RS.ResourceID = UCS.ResourceID
JOIN v_StateNames SN ON SN.TopicType=500 E SN.StateID=2 E SN.StateID = UCS.Status
WHERE UI.ArticleID IN (SELECIONE ArtigoID DE @MarchSecurityOnly)
E RS.Name0 NÃO ESTÁ EM (
-- Mensal é instalado
SELECT distinto RS.Name0
DE v_Update_ComplianceStatusReported UCS
JOIN v_UpdateInfo UI ON UCS.CI_ID = UI.CI_ID
JOIN v_R_System RS ON RS.ResourceType=5 E RS.ResourceID = UCS.ResourceID
JOIN v_StateNames SN ON SN.TopicType=500 E SN.StateID=3 E SN.StateID = UCS.Status
WHERE UI.ArticleID IN (SELECIONE ArtigoID DE @MarchMonthly)
)
UNIÃO
-- janelas 8.1 e servidor 2012 Máquinas R2 que não relatam KB2919355 como instalado.
SELECIONE
RS.Name0 distinto,
UI.ArticleID como ArticleID,
UI.BulletinID como BulletinID,
'KB2919355' as Title,
'Update is not Installed' AS State,
NULL AS LastStateReceived,
NULL AS LastStateChanged,
'KB2919355' AS UniqueUpdateID
FROM v_Update_ComplianceStatusReported UCS
JOIN v_UpdateInfo UI ON UCS.CI_ID = UI.CI_ID
JOIN v_R_System RS ON RS.ResourceType=5 AND RS.ResourceID = UCS.ResourceID
JOIN v_StateNames SN ON SN.TopicType=500 AND SN.StateID = UCS.Status AND SN.StateID <> 3
JOIN v_GS_OPERATING_SYSTEM OS ON RS.ResourceID = OS.ResourceID AND OS.BuildNumber0 = '9600' -- janelas 8.1 e servidor 2012 R2
WHERE UI.ArticleID = @KB2919355
janelas 10 e servidor 2016
para as janelas 10 e servidor 2016 consultas, há 2 cenários que podem ser aplicados dependendo da configuração de um ambiente na expiração de atualizações substituídas no ConfigMgr. Para mais informações sobre este, consulte a seção Regras de substituição no TechNet e este.
Cenário 1: Clientes com regra de substituição NÃO definida como 'Expirar imediatamente':
Se as atualizações substituídas não tiverem expirado e, portanto, ainda estiverem disponíveis no ConfigMgr, você pode usar a seguinte consulta para ajudar a identificar o Windows 10 e Windows Server 2016 sistemas que não possuem a March CU ou uma CU subsequente instalada. Por favor, note que para os dados de CU de março serem avaliados, os meses de espera antes que uma atualização expire o valor no ConfigMgr deve ser definido como um valor alto o suficiente para que a atualização de março não tenha expirado. A mesma consideração se aplica às atualizações subsequentes. Se isso não se aplicar ao seu ambiente, as informações em Cenário 2: Clientes com regra de substituição definida como 'Expirar imediatamente' (ou não o suficiente) pode ser tentado.
Para as seguintes janelas 10 e servidor 2016, a consulta abaixo retorna sistemas que não possuem nenhuma das seguintes UCs mensais, lançado em março ou depois (até a data desta postagem), instalado:
Win10 RTM: KB4012606, KB4019474, KB4015221, KB4016637
Win10 1511: KB4013198, KB4015219, KB4016636, KB4019473
Win10 1607/Servidor 2016: KB4013429, KB4015217, KB4015438, KB4016635, KB4019472
-- janelas 10 máquinas que não possuem a Marcha (ou qualquer uma das atualizações substitutas) instalado, and could be 'at risk'.
-- Essas consultas dependem do sistema operacional, since we are querying individual KB's, and need to compare those KB's against proper builds to prevent getting inaccurate results.
-- janelas 10 RTM
DECLARE @BuildNumberRTM INT = '10240'
DECLARE @MarchWin10 TABLE (ID do Artigo NVARCHAR(20))
INSERIR EM VALORES @ MarchWin10 ('4012606') -- Cumulativo de março
INSERIR EM VALORES @ MarchWin10 ('4019474')
INSERIR EM VALORES @ MarchWin10 ('4015221')
INSERIR EM VALORES @ MarchWin10 ('4016637')
SELECIONE RS.Nome0, OS.BuildNumber0 DE v_R_System RS
JUNTE-SE ao SO v_GS_OPERATING_SYSTEM EM RS.ResourceID = OS.ResourceID E OS.BuildNumber0 = @BuildNumberRTM
ONDE RS.Name0 NÃO ESTÁ (
SELECIONE RS.Nome0
DE v_Update_ComplianceStatusReported UCS
JOIN v_UpdateInfo UI ON UCS.CI_ID = UI.CI_ID
JOIN v_R_System RS ON RS.ResourceType=5 E RS.ResourceID = UCS.ResourceID
JOIN v_StateNames SN ON SN.TopicType=500 E SN.StateID=3 E SN.StateID = UCS.Status
JOIN v_GS_OPERATING_SYSTEM OS ON OS.ResourceID = RS.ResourceID AND OS.BuildNumber0 = @BuildNumberRTM
WHERE UI.ArticleID IN (SELECIONE ArtigoID DE @MarchWin10)
)
-- janelas 10 1511
DECLARE @BuildNumber1511 INT = '10586'
DECLARE @MarchWin101511 TABLE (ID do Artigo NVARCHAR(20))
INSERIR EM @MarchWin101511 VALORES ('4013198') -- Acumulado de março
INSERIR EM @MarchWin101511 VALORES ('4015219')
INSERIR EM @MarchWin101511 VALORES ('4016636')
INSERIR EM @MarchWin101511 VALORES ('4019473')
SELECIONE RS.Nome0, OS.BuildNumber0 DE v_R_System RS
JOIN v_GS_OPERATING_SYSTEM OS ON RS.ResourceID = OS.ResourceID E OS.BuildNumber0 = @BuildNumber1511
ONDE RS.Name0 NÃO ESTÁ EM (
SELECIONE RS.Nome0
DE v_Update_ComplianceStatusReported UCS
JOIN v_UpdateInfo UI ON UCS.CI_ID = UI.CI_ID
JOIN v_R_System RS ON RS.ResourceType=5 E RS.ResourceID = UCS.ResourceID
JOIN v_StateNames SN ON SN.TopicType=500 E SN.StateID=3 E SN.StateID = UCS.Status
JOIN v_GS_OPERATING_SYSTEM OS ON OS.ResourceID = RS.ResourceID AND OS.BuildNumber0 = @BuildNumber1511
WHERE UI.ArticleID IN (SELECIONE ArtigoID DE @MarchWin101511)
)
-- janelas 10 1607
DECLARE @BuildNumber1607 INT = '14393'
DECLARE @MarchWin101607 TABLE (ID do Artigo NVARCHAR(20))
INSERIR EM @MarchWin101607 VALORES ('4013429') -- Acumulado de março
INSERIR EM @MarchWin101607 VALORES ('4015217')
INSERIR EM @MarchWin101607 VALORES ('4015438')
INSERIR EM @MarchWin101607 VALORES ('4016635')
INSERIR EM @MarchWin101607 VALORES ('4019472')
SELECIONE RS.Nome0, OS.BuildNumber0 DE v_R_System RS
JOIN v_GS_OPERATING_SYSTEM OS ON RS.ResourceID = OS.ResourceID E OS.BuildNumber0 = @BuildNumber1607
ONDE RS.Name0 NÃO ESTÁ EM (
SELECIONE RS.Nome0
DE v_Update_ComplianceStatusReported UCS
JOIN v_UpdateInfo UI ON UCS.CI_ID = UI.CI_ID
JOIN v_R_System RS ON RS.ResourceType=5 E RS.ResourceID = UCS.ResourceID
JOIN v_StateNames SN ON SN.TopicType=500 E SN.StateID=3 E SN.StateID = UCS.Status
JOIN v_GS_OPERATING_SYSTEM OS ON OS.ResourceID = RS.ResourceID AND OS.BuildNumber0 = @BuildNumber1607
WHERE UI.ArticleID IN (SELECIONE ArtigoID DE @MarchWin101607)
)
Cenário 2: Clientes com regra de substituição definida como 'Expirar imediatamente' (ou não o suficiente):
Como as UCs são substituídas a cada mês, e expirou porque a opção Regras de substituição do ConfigMgr foi definida como 'Expirar imediatamente', os dados de conformidade não estão disponíveis na atualização expirada – neste cenário, você irá, no entanto, ter dados de conformidade na CU mais recente disponível, portanto, o caminho mais simples a seguir seria implantar a CU mais recente e relatar sobre ela.
Opções Alternativas (para Windows 10 e servidor 2016):
Opções alternativas às anteriores, que podem ajudar a determinar máquinas "em risco", relatando a UC expirada, são como segue:
A. Estenda o inventário de hardware para incluir Win32_QuickFixEngineering, e usar esses dados para identificar máquinas "em risco". Se alguma máquina não tiver março, Abril ou maio CU instalado, eles estão "em risco". OBSERVE que, se você ainda não o ativou, habilite-o agora, você precisaria esperar que todos os clientes relatassem o inventário de hardware.
-- Os clientes com a classe Win32_QuickFixEngineering habilitada para HINV podem usar essas consultas.
-- janelas 10 máquinas que não possuem a Marcha (ou qualquer uma das atualizações substitutas) installed and could be 'at risk'.
-- Essas consultas dependem do sistema operacional, since we are querying individual KB's, and need to compare those KB's against proper builds to prevent getting inaccurate results.
-- A consulta limita os resultados para máquinas que têm pelo menos uma linha na classe v_GS_Quick_Fix_Engineering para garantir que haja alguns dados HINV para a máquina para esta classe.
-- janelas 10 RTM
DECLARE @BuildNumberRTM INT = '10240'
DECLARAÇÃO @MarchWin10 TABELA (ID do Artigo NVARCHAR(20))
INSERIR EM VALORES @ MarchWin10 ('4012606') -- Cumulativo de março
INSERIR EM VALORES @ MarchWin10 ('4019474')
INSERIR EM VALORES @ MarchWin10 ('4015221')
INSERIR EM VALORES @ MarchWin10 ('4016637')
SELECIONE RS.Nome0, OS.BuildNumber0, QFE.HotFixID0, CONTAR(QFEALL.HotFixID0) AS TotalHotfixes DE v_R_System RS
JOIN v_GS_OPERATING_SYSTEM OS ON OS.ResourceID = RS.ResourceID AND OS.BuildNumber0 = @BuildNumberRTM
JOIN v_GS_QUICK_FIX_ENGINEERING QFEALL ON QFEALL.ResourceID = RS.ResourceID
LEFT JOIN v_GS_QUICK_FIX_ENGINEERING QFE ON QFE.ResourceID = RS.ResourceID E QFE.HotFixID0 IN (SELECT 'KB' + ArtigoID DE @MarchWin10)
ONDE QFE.HotFixID0 É NULO
GRUPO POR RS.Name0, OS.BuildNumber0, QFE.HotFixID0
TER CONTAGEM(QFEALL.HotFixID0) > 0
-- janelas 10 1511
DECLARE @BuildNumber1511 INT = '10586'
DECLARE @MarchWin101511 TABLE (ID do Artigo NVARCHAR(20))
INSERIR EM @MarchWin101511 VALORES ('4013198') -- Acumulado de março
INSERIR EM @MarchWin101511 VALORES ('4015219')
INSERIR EM @MarchWin101511 VALORES ('4016636')
INSERIR EM @MarchWin101511 VALORES ('4019473')
SELECIONE RS.Nome0, OS.BuildNumber0, QFE.HotFixID0, CONTAR(QFEALL.HotFixID0) AS TotalHotfixes DE v_R_System RS
JOIN v_GS_OPERATING_SYSTEM OS ON OS.ResourceID = RS.ResourceID AND OS.BuildNumber0 = @BuildNumber1511
JOIN v_GS_QUICK_FIX_ENGINEERING QFEALL ON QFEALL.ResourceID = RS.ResourceID
LEFT JOIN v_GS_QUICK_FIX_ENGINEERING QFE ON QFE.ResourceID = RS.ResourceID E QFE.HotFixID0 IN (SELECT 'KB' + ArtigoID DE @MarchWin101511)
ONDE QFE.HotFixID0 É NULO
GRUPO POR RS.Name0, OS.BuildNumber0, QFE.HotFixID0
TER CONTAGEM(QFEALL.HotFixID0) > 0
-- janelas 10 1607
DECLARE @BuildNumber1607 INT = '14393'
DECLARE @MarchWin101607 TABLE (ID do Artigo NVARCHAR(20))
INSERIR EM @MarchWin101607 VALORES ('4013429') -- Acumulado de março
INSERIR EM @MarchWin101607 VALORES ('4015217')
INSERIR EM @MarchWin101607 VALORES ('4015438')
INSERIR EM @MarchWin101607 VALORES ('4016635')
INSERIR EM @MarchWin101607 VALORES ('4019472')
SELECIONE RS.Nome0, OS.BuildNumber0, QFE.HotFixID0, CONTAR(QFEALL.HotFixID0) AS TotalHotfixes DE v_R_System RS
JOIN v_GS_OPERATING_SYSTEM OS ON OS.ResourceID = RS.ResourceID AND OS.BuildNumber0 = @BuildNumber1607
JOIN v_GS_QUICK_FIX_ENGINEERING QFEALL ON QFEALL.ResourceID = RS.ResourceID
LEFT JOIN v_GS_QUICK_FIX_ENGINEERING QFE ON QFE.ResourceID = RS.ResourceID E QFE.HotFixID0 IN (SELECT 'KB' + ArtigoID DE @MarchWin101607)
ONDE QFE.HotFixID0 É NULO
GRUPO POR RS.Name0, OS.BuildNumber0, QFE.HotFixID0
TER CONTAGEM(QFEALL.HotFixID0) > 0
B. Crie um item de configuração e uma linha de base que consulte o março, CUs de abril e maio de Win32_QuickFixEngineering e conformidade de relatórios. Aqui está um exemplo de script do PowerShell escrito por Umair Khan que pode ser usado em uma linha de base do DCM:
$InstalledKBList = Get-Wmiobject -class Win32_QuickFixEngineering -namespace "raizcimv2" | select-object -Property HotFixID | Out-String
[variedade]$WannaCryList =
"KB4012598",
"KB4012212",
"KB4012215",
"KB4012213",
"KB4012216",
"KB4012214",
"KB4012217",
"KB4012606",
"KB4013198",
"KB4013429",
"KB4015219",
"KB4015221",
"KB4016636",
"KB4015438",
"KB4015550",
"KB4015551",
"KB4016637",
"KB4019473",
"KB4016635",
"KB4018466",
"KB4015552",
"KB4019215",
"KB4019216",
"KB4019474",
"KB4019472",
"KB4019264"
$Compatível = 0;
para cada ($elemento em $WannaCryList)
{
se ($InstalledKBList -match $elem)
{
#Write-Output "$elem Encontrado"
$Compatível = 1
quebrar
}
}
$Compatível