Module load completed but symbols could not be loaded for WdFilter.sys FLTMGR.SYS

O problema

O dispositivo apresentava tela azul e reinicialização logo em seguida.


Resumo

O dispositivo apresentava tela azul e reinicialização logo em seguida. Durante a análise do problema, verificou-se que o recurso de despejo de memória no arquivo de DUMP estava desabilitado na máquina, impedindo a coleta de evidências. Após habilitar a opção de despejo de memória, identificou-se um problema relacionado aos drivers FLTMGR.SYS e WdFilter.sys, mas as informações sobre o erro não foram carregadas corretamente no arquivo de DUMP, impossibilitando uma análise mais precisa. Suspeitando de um possível comportamento causado pelo antivírus, atualizamos o antivírus e em seguida executamos comandos para procurar e corrigir arquivos corrompidos no sistema, resolvendo o problema de tela azul.


Análise do problema

Durante a análise do problema, verificou-se que o recurso de despejo de memória no arquivo de DUMP estava desabilitado na máquina, impedindo a coleta de evidências. Após habilitar a opção de despejo de memória, identificou-se um problema relacionado aos drivers FLTMGR.SYS e WdFilter.sys, mas as informações sobre o erro não foram carregadas corretamente no arquivo de DUMP, impossibilitando uma análise mais precisa. Suspeitamos de um possível comportamento causado pelo antivírus, então, atualizamos o antivírus e executamos alguns comandos para procurar e corrigir arquivos corrompidos no sistema, resolvendo o problema de tela azul.

Além disso, tivemos também dificuldade para instalar as atualizações do Windows devido à aplicação de uma GPO antiga que configurava o serviço de Wpdade do Windows e apontava para o servidor WSUS com chaves de registro para pausar as atualizações do Windows. A solução encontrada foi apagar todas as chaves de registro aplicadas via GPO no equipamento.


Causa Raiz

A causa raiz do problema foram os drivers FLTMGR.SYS e WdFilter.sys por uma possível interferência do antivírus, que foi solucionada com a atualização do antivírus e a correção de arquivos corrompidos no sistema. Por fim, a dificuldade na instalação de atualizações do Windows se deu pela aplicação de uma GPO antiga que configurava o serviço de Update do Windows e apontava para os servidores WSUS com chaves de registro para pausar as atualizações do Windows, sendo solucionada com a remoção das chaves de registro aplicadas via GPO no equipamento.


Solução

A solução para o problema de tela azul foi a habilitação do recurso de despejo de memória no arquivo de DUMP, a atualização do antivírus e a correção de arquivos corrompidos no sistema. Já para a dificuldade em instalar as atualizações do Windows, a solução foi apagar todas as chaves de registro aplicadas via GPO no equipamento.

Script em PowerShell para automatizar a solução:

# Script:  WindowsUpdateDefender.ps1
# Descrição: Esse script vai aplicar atualização do antivírus, executar correção de arquivos corrompidos no sistema,
# Atualizar o Windows e apagar todas as chaves de registro aplicadas via GPO para o serviço do Windows Update.
# Autor: DicasQueFunfa
# Data: 09/03/2023
# Dependências: Install-Module -Name PSWindowsUpdate e Import-Module PSWindowsUpdate

# Adiciona log de execução
$logFile = "C:\temp\Logs\WindowsUpdateDefender.log"
Start-Transcript -Path $logFile -Append

# Alterar a política de execução de scripts do PowerShell para "RemoteSigned"
function Set-ExecutionPolicyRemoteSigned {
    # Obtém a política de execução atual
    $policy = Get-ExecutionPolicy

    # Verifica se a política atual é diferente de "RemoteSigned"
    if ($policy -ne "RemoteSigned") {
        # Define a política de execução como "RemoteSigned"
        Set-ExecutionPolicy RemoteSigned -Force

        # Verifica se a política de execução foi definida com sucesso
        if ((Get-ExecutionPolicy) -eq "RemoteSigned") {
            Write-Host "A política de execução de scripts foi alterada para 'RemoteSigned'."
        } else {
            Write-Warning "Não foi possível alterar a política de execução de scripts."
        }
    } else {
        Write-Host "A política de execução de scripts já está definida como 'RemoteSigned'."
    }
}


# Função para verificar e instalar o módulo PowerShellGet
function Install-PowerShellGetModule {
    # Verifica se o módulo PowerShellGet está instalado
    $module = Get-Module -Name "PowerShellGet" -ListAvailable -ErrorAction SilentlyContinue

    if ($module -eq $null) {
        # Instala o módulo PowerShellGet
        Write-Host "O módulo PowerShellGet não está instalado. Instalando o módulo agora..."
        Install-Module -Name "PowerShellGet" -Force
    } else {
        Write-Host "O módulo PowerShellGet já está instalado."
    }
}

# Chama a função para verificar e instalar o módulo PowerShellGet
Install-PowerShellGetModule


function Install-ModuloWindowsUpdate {
    # Verifica se o módulo PSWindowsUpdate está instalado
    $module = Get-Module -Name "PSWindowsUpdate" -ListAvailable -ErrorAction SilentlyContinue

    if ($module -eq $null) {
        # Instala o módulo PSWindowsUpdate
        Write-Host "O módulo PSWindowsUpdate não está instalado. Instalando o módulo agora..."
        Install-Module -Name "PSWindowsUpdate" -Force
    } else {
        Write-Host "O módulo PSWindowsUpdate já está instalado."
    }
}

# Chama a função para verificar e instalar o módulo PSWindowsUpdate
Install-ModuloWindowsUpdate


try {
    # Atualizar antivírus
    Write-Host "Atualizando antivírus..."
    Update-MpSignature -UpdateSource "MicrosoftUpdateServer" -ErrorAction Stop
    Write-Host "Antivírus atualizado com sucesso!"

    # Procurar e corrigir arquivos corrompidos do sistema
    Write-Host "Verificando e corrigindo arquivos corrompidos no sistema..."
    sfc /scannow

    # Remover chaves do registro associadas à política de grupo do serviço de atualização do Windows aplicada via GPO
    Write-Host "Removendo chaves do registro associadas à política de grupo do serviço de atualização do Windows..."
    Remove-Item -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate" -Recurse -ErrorAction SilentlyContinue
    Remove-Item -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" -Recurse -ErrorAction SilentlyContinue
    Write-Host "Chaves do registro removidas com sucesso!"

    # Verifica se o serviço do Windows Update está em execução
    $service = Get-Service -Name wuauserv
    if ($service.Status -ne "Running") {
        # Inicializa o serviço do Windows Update
        Write-Host "Iniciando o serviço do Windows Update..."
        Start-Service -Name wuauserv
        Write-Host "Serviço do Windows Update iniciado com sucesso!"
    }
    
    # Verifica se há atualizações disponíveis
    Write-Host "Verificando atualizações disponíveis..."
    $updates = Get-WindowsUpdate -ErrorAction Stop
    if ($updates -eq $null) {
        Write-Host "Não há atualizações disponíveis no momento."
    } else {
        Write-Host "Atualizações disponíveis:"
        $updates | Format-Table -AutoSize

        $opcao = Read-Host "Deseja instalar agora (SIM) ou (Não)?"
        switch ($opcao) {
            "Sim" {
                Write-Host "Instalação Aceita. O dispositivo será atualizado."
                # Verifica se o serviço do Windows Update foi interrompido
                $wuService = Get-Service -Name wuauserv
                if ($wuService.Status -eq "Stopped") {
                    Write-Host "O serviço do Windows Update estava parado e foi iniciado."
                    Start-Service -Name wuauserv
                }

                # Instala as atualizações
                Write-Host "Instalando atualizações..."
                Install-WindowsUpdate -AcceptAll -AutoReboot -ErrorAction Stop
                Write-Host "As atualizações foram instaladas com sucesso!"
            }
            "Não" {
                Write-Host "Instalação recusada"
                break
                
            }
            Default {
                Write-Host "Resposta incorreta:" $_
            }
        }
        
    }    
    
}
catch {
    # Captura e trata erros
    Write-Host "Erro: $_" -ForegroundColor Red
}

# Finaliza o log de execução
Stop-Transcript



Arquivo de DUMP

BAD_POOL_CALLER (c2)
The current thread is making a bad pool request.  Typically this is at a bad IRQL level or double freeing the same allocation, etc.
Arguments:
Arg1: 000000000000000d, type of pool violation the caller is guilty of.
Arg2: ffffd3086d6e5b30
Arg3: 000000007266504d
Arg4: 77d327bd6f192610
Debugging Details:
------------------
*** ERROR: Module load completed but symbols could not be loaded for WdFilter.sys
Page 20040eb33 too large to be in the dump file.
BUGCHECK_STR:  0xc2_d
DEFAULT_BUCKET_ID:  WIN8_DRIVER_FAULT
PROCESS_NAME:  MsMpEng.exe
CURRENT_IRQL:  0
ANALYSIS_VERSION: 6.3.9600.16384 (debuggers(dbg).130821-1623) amd64fre
LAST_CONTROL_TRANSFER:  from fffff8014486896e to fffff801447f6210
STACK_TEXT:  
fffff60c`45cbee98 fffff801`4486896e : 00000000`000000c2 00000000`0000000d ffffd308`6d6e5b30 00000000`7266504d : nt!KeBugCheckEx
fffff60c`45cbeea0 fffff801`44db2019 : ffffd308`63dd5050 ffffd308`6d6e5b48 00000000`00000081 01000000`00100000 : nt!ExFreeHeapPool+0x1a0a6e
fffff60c`45cbef80 fffff801`44dd3226 : ffffd308`6d6e5b30 00000000`00000000 00000000`00000001 00000000`00000000 : nt!ExFreePool+0x9
fffff60c`45cbefb0 fffff801`46335243 : 0000008b`c487ddc0 ffffd308`63dd5050 00000000`00000000 00000000`00000000 : nt!VerifierExFreePoolWithTag+0x56
fffff60c`45cbefe0 fffff801`442cb7fb : 00000000`00000000 00000193`4e0b0f70 d3086b9b`000002b0 0000008b`c487ddc0 : WdFilter+0x25243
fffff60c`45cbf090 fffff801`44303499 : ffffbc01`f4906500 ffffbc01`f4906430 0000008b`c487ddc0 ffffa552`a94fff20 : FLTMGR!FltpFilterMessage+0xdb
fffff60c`45cbf0f0 fffff801`442c4910 : ffffbc01`f203bd60 00000000`00000002 00000000`00000000 ffffbc01`f4906430 : FLTMGR!FltpMsgDispatch+0x179
fffff60c`45cbf160 fffff801`446ce6c5 : ffffbc01`f4906430 00000000`00000000 fffff60c`45cbf540 00000000`00000001 : FLTMGR!FltpDispatch+0xe0
fffff60c`45cbf1c0 fffff801`44ac3528 : ffffbc01`f4906430 00000000`00000000 00000000`00000000 00000000`00000000 : nt!IofCallDriver+0x55
fffff60c`45cbf200 fffff801`44ac2df5 : 00000000`00000000 fffff60c`45cbf540 00000000`00000000 fffff60c`45cbf540 : nt!IopSynchronousServiceTail+0x1a8
fffff60c`45cbf2a0 fffff801`44ac27f6 : 00007ff9`07f1f4ac 00000000`00000000 00000000`00000000 00000000`00000000 : nt!IopXxxControlFile+0x5e5
fffff60c`45cbf3e0 fffff801`44807bb5 : 00000000`00000000 00000000`00000000 00000000`00000000 0000008b`c487e4b0 : nt!NtDeviceIoControlFile+0x56
fffff60c`45cbf450 00007ff9`24fabe84 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : nt!KiSystemServiceCopyEnd+0x25
0000008b`c487dc78 00000000`00000000 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : 0x00007ff9`24fabe84
STACK_COMMAND:  kb
FOLLOWUP_IP: 
WdFilter+25243
fffff801`46335243 0f1f440000      nop     dword ptr [rax+rax]
SYMBOL_STACK_INDEX:  4
SYMBOL_NAME:  WdFilter+25243
FOLLOWUP_NAME:  MachineOwner
MODULE_NAME: WdFilter
IMAGE_NAME:  WdFilter.sys
DEBUG_FLR_IMAGE_TIMESTAMP:  0
FAILURE_BUCKET_ID:  0xc2_d_VRF_WdFilter+25243
BUCKET_ID:  0xc2_d_VRF_WdFilter+25243
ANALYSIS_SOURCE:  KM
FAILURE_ID_HASH_STRING:  km:0xc2_d_vrf_wdfilter+25243
FAILURE_ID_HASH:  {90c175c5-7cf9-66d5-0c76-92c98cb21ab0}
Followup: MachineOwner
Read more » Nenhum comentário:

Descubra quem fez login no seu computador com PowerShell

O registro de eventos de segurança do Windows contém informações importantes sobre as atividades que acontecem no sistema, incluindo os logons de usuário. Saber quem fez login no seu computador pode ser útil para fins de segurança, administração e solução de problemas. Neste post, vamos mostrar como usar o PowerShell para descobrir quem fez login no seu computador.


Passo 1: Abrir o PowerShell. Você pode fazer isso pressionando as teclas Windows + X e selecionando a opção Windows PowerShell ou pesquisando no menu Iniciar por PowerShell

Passo 2: Com o PowerShell aberto, executar o comando:

Get-WinEvent -FilterHashtable @{Logname='Security'; ID='4624'} | Select-Object -First 1 | Format-List

Este comando irá procurar no registro de eventos de segurança do Windows (Security) pelo evento de ID 4624, que é registrado quando um usuário inicia uma sessão de logon no sistema. A opção Select-Object -First 1 irá retornar apenas o primeiro evento encontrado, que é o mais recente. Se você quisar pegar mais evento basta trocar o valor 1 pelo valor desejado ou remover o paramentro "Select-Object -First 1" para exibir todos os evento de login.

O resultado, como é apresentando



O PowerShell irá exibir as propriedades do evento de logon, incluindo o nome do usuário que iniciou a sessão (propriedade Nome da Conta) e a data e hora em que a sessão foi iniciada (propriedade TimeCreated). 

Se você quiser pesquisar por um usuário específico, você pode utilizar o seguinte comando, substituindo o "username" pelo nome do usuário que deseja buscar:
Get-WinEvent -FilterHashtable @{Logname='Security'; ID='4624'; Data="NomeDoUsuárioAqui"} | Select-Object -First 1 | Format-List

ou 

Get-WinEvent -FilterHashtable @{Logname='Security'; ID='4624'; Data="NomeDoUsuárioAqui"}  | Format-List 

Com este comando, você pode descobrir quem fez login no seu computador e quando, o que pode ajudar a solucionar problemas e identificar possíveis ameaças à segurança. Lembre-se de que o registro de eventos de segurança deve ser utilizado com cautela e sempre em conformidade com as políticas de segurança da sua organização.
Nenhum comentário:

5 provedores de nuvem baratos para hospedar servidores Linux

Se você está procurando por um provedor de nuvem com preços acessíveis que suporte o sistema operacional Linux, tenho algumas sugestões para compartilhar com você! Eu pessoalmente já usei alguns desses provedores e recomendo:




  1. DigitalOcean: é uma ótima opção se você estiver procurando por uma variedade de opções de servidores com preços acessíveis, começando em US $ 5 por mês. Eles também fornecem muitos tutoriais e recursos úteis para ajudar os usuários a começar com seus servidores.. Eu já usei e ainda uso seus servidores por vários projetos e nunca tive problemas.
  2. Vultr: é outro provedor de nuvem que eu já usei e recomendo, a partir de US $ 2,50 por mês. Eles têm servidores com preços muito acessíveis e uma variedade de distribuições Linux para escolher.
  3. Linode: Começam em US $ 5 por mês, é outra opção popular para servidores Linux com preços acessíveis. Eles oferecem uma interface fácil de usar e muitos recursos úteis.
  4. Amazon Lightsail: A partir de US $ 3,50 por mês, é um serviço de servidor virtual privado da Amazon Web Services (AWS), que oferece servidores Linux com preços muito acessíveis. 
  5. Google Cloud: Esse é definitivamente uma opção a ser considerada quando se trata de provedores de nuvem. Eles oferecem uma ampla variedade de opções de servidor com preços acessíveis, além de muitos recursos úteis e uma infraestrutura escalável. Tem uma calculadora que você pode utilizar para saber o valor mensal que vai ficar o seu servidor
Então, se você está procurando um provedor de nuvem que suporte o sistema operacional Linux e ofereça muitos recursos úteis, o Google Cloud é definitivamente uma opção a ser considerada.
Lembre-se de que, além do preço, é importante considerar outros fatores na escolha de um provedor de nuvem, como desempenho, segurança, suporte ao cliente e disponibilidade de recursos adicionais. Espero que essas sugestões sejam úteis para você!
Nenhum comentário:

Como desativar a NLA Windows

O que é a NLA?

A NLA é uma Autenticação de Nível de Rede, do inglês "Network Level Authentication", ele é um recurso de segurança do Windows para exigir que o usuário se autentique antes de estabelecer uma conexão remota com outro computador usando o Protocolo de Área de Trabalho Remota (RDP). Quando a NLA está ativada, o Windows solicita o nome do usuário e a senha para verificar se o usuário tem as credenciais necessárias para acessar o sistema remoto antes de permitir que a conexão seja estabelecida.

O serviço de NLA ajuda a proteger o seu sistema contra ataques de hackers que tentam se infiltrar no computador remoto por meio de vulnerabilidades do serviço de RDP. Com a NLA ativada, os usuários precisam fornecer suas credenciais de login antes de estabelecer uma conexão remota, o que reduz o risco de um ataque bem-sucedido. Além disso, a NLA pode ajudar a impedir que usuários não autorizados acessem o sistema remoto.

Como desativar a NLA no Windows

Atenção!

É importante lembrar que a desativação da NLA pode expor seu sistema a possíveis ameaças de segurança, portanto, tome cuidado ao usar essa configuração. 

Para desativar a Autenticação de Nível de Rede (NLA) no Windows 10, siga as etapas abaixo:

1. Clique no botão "Iniciar" e digite "gpedit.msc" na barra de pesquisa.

2. Clique com o botão direito do mouse em "Editor de Diretivas de Grupo Local" e selecione "Executar como administrador".

3. No Editor de Diretivas de Grupo Local, navegue até "Configuração do Computador" > "Modelos Administrativos" > "Componentes do Windows" > "Serviços de Área de Trabalho Remota" > "Host de Sessão da Área de Trabalho Remota".

4. Na lista de opções à direita, localize a opção "Exigir Autenticação de Nível de Rede" e dê um duplo clique.

5. Selecione "Desabilitado" e clique em "OK".

6. Feche o Editor de Diretivas de Grupo Local.

Depois de seguir esses passos, a Autenticação de Nível de Rede (NLA) será desativada no seu sistema Windows 10. 


Como desativar a NLA no Windows via CMD

Para desativar a Autenticação de Nível de Rede (NLA) usando o Prompt de Comando (CMD) no Windows 10, siga as etapas abaixo:

1. Clique no botão "Iniciar" e digite "cmd" na barra de pesquisa.

2. Clique com o botão direito do mouse em "Prompt de Comando" e selecione "Executar como administrador".

3. Digite o seguinte comando e pressione Enter:

reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v SecurityLayer /t REG_DWORD /d 0 /f

4. Depois de executar o comando, a NLA será desativada no seu sistema Windows 10.


Um comentário:

Como visualizar, editar e exportar o Registro do Windows com o comando reg

 O comando reg é uma ferramenta de linha de comando que permite ao usuário visualizar, editar e exportar o Registro do Windows. O Registro do Windows é uma base de dados hierárquica que armazena informações importantes do sistema, como configurações de hardware, software e segurança.


Sintaxe:

reg [/argumento] [chave] [/v valor] [/t tipo] [/d dados] [/f]


Opções:

  • /add: Adiciona uma chave, valor ou dados no Registro.
  • /delete: Exclui uma chave, valor ou dados do Registro.
  • /copy: Copia uma chave ou valor de uma localização para outra.
  • /save: Salva uma chave ou subchave em um arquivo.
  • /load: Carrega uma chave ou subchave de um arquivo.
  • /query: Exibe o valor ou os valores de uma chave ou subchave.
  • /compare: Compara duas chaves ou subchaves do Registro.
  • /export: Exporta uma chave ou subchave para um arquivo de texto.
  • /import: Importa uma chave ou subchave de um arquivo de texto.

Exemplo:

reg query HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion

Este comando exibe as informações contidas na chave HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion.






Nenhum comentário:

Como gerenciar as configurações de energia no Windows 10 com o comando powercfg

O comando powercfg é uma ferramenta de linha de comando que permite ao usuário gerenciar as configurações de energia em um computador com Windows. O powercfg pode ser usado para alterar configurações de energia, criar perfis personalizados de energia e diagnosticar problemas de consumo de energia.

Sintaxe:

powercfg [/OPTION] [ARGS]


Opções:

  • /L: Lista os planos de energia disponíveis.
  • /S: Define o plano de energia ativo.
  • /H: Habilita ou desabilita o arquivo de hibernação.
  • /Hibernate: Liga ou desliga a opção de hibernação.
  • /A: Exibe informações sobre a capacidade de energia do sistema.
  • /DEVICEQUERY: Lista os dispositivos que podem acordar o sistema a partir do modo de suspensão.
  • /REQUESTS: Lista os serviços ou aplicativos que estão impedindo o sistema de entrar no modo de suspensão.
  • /ENERGY: Gera um relatório detalhado sobre o consumo de energia do sistema e sugere melhorias para economizar energia.
  • /AVAILABLESLEEPSTATES: Exibe os estados de suspensão suportados pelo sistema.
  • /LASTWAKE: Exibe informações sobre o evento que despertou o sistema a partir do modo de suspensão.
  • /SYSTEMSLEEPDIAGNOSTICS: Gera um relatório detalhado sobre as razões pelas quais o sistema não entrou no modo de suspensão.
  • /REQUESTSOVERRIDE: Substitui as solicitações que impedem o sistema de entrar no modo de suspensão.


Exemplo:

powercfg /hibernate on

Este comando habilita o arquivo de hibernação no sistema.

Nenhum comentário:

Como usar o comando ping para diagnosticar problemas de rede no Windows

O comando ping é uma ferramenta de linha de comando que permite ao usuário testar a conectividade entre dois dispositivos em uma rede. O comando envia pacotes de dados para um endereço IP específico e verifica se a resposta é recebida. O ping pode ser usado para diagnosticar problemas de rede, como perda de pacotes, latência e tempo de resposta.

Sintaxe:

ping [-t] [-a] [-n Contagem] [-l Tamanho] [-f] [-i TempoLimite] [-v Ttl] [-r Contagem] [-s Contagem] [[-j HostDestino]] [-k HostOrigem] [-w TempoLimite] Destino

Opções:

  • -t: Pinga continuamente até que seja interrompido pelo usuário.
  • -a: Resolve o endereço IP do destino em um nome de host.
  • -n Contagem: Especifica o número de pacotes de ping que serão enviados.
  • -l Tamanho: Especifica o tamanho do pacote de ping em bytes.
  • -f: Define o sinalizador Não fragmentar no pacote de ping.
  • -i TempoLimite: Define o tempo limite em milissegundos para cada pacote de ping.
  • -v Ttl: Define o valor Time-to-live no cabeçalho do pacote de ping.
  • -r Contagem: Registra o caminho do pacote de ping até o destino e de volta.
  • -s Contagem: Especifica o tamanho do buffer de envio em bytes.
  • -j HostDestino: Especifica uma lista de dispositivos intermediários que o pacote de ping deve passar antes de chegar ao destino.
  • -k HostOrigem: Especifica o endereço IP do dispositivo de origem do pacote de ping.
  • -w TempoLimite: Define o tempo limite em milissegundos para aguardar uma resposta do destino.


Exemplo:

ping dicasquefunfa.com.br

Este comando envia pacotes de ping para o endereço IP do servidor do Dicasquefunfa e exibe as respostas recebidas.

Nenhum comentário: