No vasto domínio da TI, o arquivo hosts funciona como uma sentinela silenciosa, garantindo comunicações de rede sem problemas. Para quem não conhece, o arquivo hosts é um arquivo de texto que mapeia nomes de host para endereços IP. É usado pelo sistema operacional para resolver nomes de host para endereços IP quando um computador tenta se conectar a um recurso de rede. Mas o que acontece quando o arquivo hosts é modificado ou adulterado? Como os profissionais de TI e os provedores de serviços gerenciados (MSPs) podem garantir a integridade desse arquivo crucial? Entre no script que estamos prestes a analisar.
Entendendo o arquivo Hosts
O arquivo hosts, em sua essência, é o catálogo de endereços do sistema do computador. Ele desempenha um papel fundamental no direcionamento do tráfego de rede, garantindo que os usuários acessem os sites e serviços corretos. No entanto, sua importância também o torna um alvo principal para agentes mal-intencionados.
Os possíveis riscos de modificações não autorizadas
Um invasor, com intenções nefastas, pode modificar o arquivo hosts para redirecionar o tráfego para um site ou servidor malicioso. Essas alterações podem ter consequências terríveis:
- Roubo de informações pessoais: Ao redirecionar os usuários para sites falsos, os invasores podem fazer phishing para obter detalhes pessoais, levando ao roubo de identidade.
- Instalação de malware: Os usuários podem ser induzidos a fazer download de software malicioso, pensando que estão em um site legítimo.
- Interrupção das comunicações de rede: Serviços essenciais podem ser bloqueados, causando interrupções operacionais.
Devido a esses riscos, é fundamental que os profissionais de TI e os MSPs tenham ferramentas que possam detectar rapidamente qualquer alteração não autorizada. É aqui que nosso script entra em ação.
O roteiro
#Requires -Version 5.1
<#
.SYNOPSIS
Checks if the hosts file was modified from last run.
.DESCRIPTION
Checks if the hosts file was modified from last run.
On first run this will not produce an error, but will create a cache file for later comparison.
.EXAMPLE
No parameters needed.
.OUTPUTS
None
.NOTES
Minimum OS Architecture Supported: Windows 10, Windows Server 2016
Release Notes:
Initial Release
By using this script, you indicate your acceptance of the following legal terms as well as our Terms of Use at https://www.ninjaone.com/terms-of-use.
Ownership Rights: NinjaOne owns and will continue to own all right, title, and interest in and to the script (including the copyright). NinjaOne is giving you a limited license to use the script in accordance with these legal terms.
Use Limitation: You may only use the script for your legitimate personal or internal business purposes, and you may not share the script with another party.
Republication Prohibition: Under no circumstances are you permitted to re-publish the script in any script library or website belonging to or under the control of any other software provider.
Warranty Disclaimer: The script is provided “as is” and “as available”, without warranty of any kind. NinjaOne makes no promise or guarantee that the script will be free from defects or that it will meet your specific needs or expectations.
Assumption of Risk: Your use of the script is at your own risk. You acknowledge that there are certain inherent risks in using the script, and you understand and assume each of those risks.
Waiver and Release: You will not hold NinjaOne responsible for any adverse or unintended consequences resulting from your use of the script, and you waive any legal or equitable rights or remedies you may have against NinjaOne relating to your use of the script.
EULA: If you are a NinjaOne customer, your use of the script is subject to the End User License Agreement applicable to you (EULA).
#>
[CmdletBinding()]
param (
# Path and file of the hosts file
[string]
$HostsPath = "C:WindowsSystem32driversetchosts",
# Path and file where the cache file will be saved for comparison
[string]
$CachePath = "C:ProgramDataNinjaRMMAgentscriptingTest-HostsFile.clixml"
)
begin {
function Test-IsElevated {
$id = [System.Security.Principal.WindowsIdentity]::GetCurrent()
$p = New-Object System.Security.Principal.WindowsPrincipal($id)
$p.IsInRole([System.Security.Principal.WindowsBuiltInRole]::Administrator)
}
}
process {
if (-not (Test-IsElevated)) {
Write-Error -Message "Access Denied. Please run with Administrator privileges."
exit 1
}
# Check if hosts file exists
if ($(Test-Path -Path $HostsPath)) {
# Get content and create hash of hosts file
$HostsContent = Get-Content -Path $HostsPath
$HostsHash = Get-FileHash -Path $HostsPath -Algorithm SHA256
$Current = [PSCustomObject]@{
Content = $HostsContent
Hash = $HostsHash
}
# Check if this is first run or not
if ($(Test-Path -Path $CachePath)) {
# Compare last content and hash
$Cache = Import-Clixml -Path $CachePath
$ContentDifference = Compare-Object -ReferenceObject $Cache.Content -DifferenceObject $Current.Content -CaseSensitive
$HashDifference = $Cache.Hash -like $Current.Hash
$Current | Export-Clixml -Path $CachePath -Force -Confirm:$false
if (-not $HashDifference) {
Write-Host "Hosts file has changed since last run!"
Write-Host ""
$ContentDifference | ForEach-Object {
if ($_.SideIndicator -like '=>') {
Write-Host "Added: $($_.InputObject)"
}
elseif ($_.SideIndicator -like '<=') {
Write-Host "Removed: $($_.InputObject)"
}
}
exit 1
}
}
else {
Write-Host "First run, saving comparison cache file."
$Current | Export-Clixml -Path $CachePath -Force -Confirm:$false
}
}
else {
Write-Error "Hosts file is missing!"
exit 1
}
exit 0
}
end {}
Acesse mais de 300 scripts no NinjaOne Dojo
Um mergulho profundo no roteiro
O script do PowerShell fornecido foi projetado para verificar se o arquivo hosts foi modificado desde sua última execução. Veja a seguir um detalhamento de sua funcionalidade:
- Verificação da elevação: O script primeiro verifica se está sendo executado com privilégios de administrador. Isso é fundamental porque qualquer tentativa de ler ou modificar arquivos do sistema requer permissões elevadas.
- Verificação de arquivos de hosts: Em seguida, ele verifica a existência do arquivo hosts. Se o arquivo estiver faltando, o script sinalizará um erro.
- Comparação de hash: O script calcula um hash (SHA256) do arquivo de hosts atual e o compara com uma versão em cache da última execução. Se houver uma incompatibilidade, isso indica que o arquivo foi modificado.
- Comparação de conteúdo: Além de verificar apenas o hash, o script também compara o conteúdo linha por linha, destacando quaisquer adições ou remoções.
Benefícios para profissionais de TI e MSPs
- Monitoramento proativo: Esse script oferece uma abordagem proativa para monitorar o arquivo hosts, garantindo sua integridade e alertando os administradores sobre quaisquer alterações não autorizadas.
- Insights detalhados: Ao comparar as diferenças de conteúdo, as equipes de TI podem identificar rapidamente o que foi adicionado ou removido, ajudando na rápida correção.
- Pronto para automação: Devido ao seu design, o script pode ser integrado a fluxos de trabalho automatizados, permitindo verificações regulares sem intervenção manual.
O poder do NinjaOne
O NinjaOne é mais do que apenas uma solução de gerenciamento de TI. É uma plataforma abrangente que capacita os profissionais de TI e MSPs a se manterem à frente das possíveis ameaças. Ao integrar nosso script de verificação de arquivos hosts ao NinjaOne:
- Alertas centralizados: Receba alertas diretamente no painel do NinjaOne sempre que o arquivo hosts for modificado. Essa notificação imediata garante que você possa agir rapidamente, protegendo seus sistemas contra possíveis ataques.
- Verificações programadas: Automatize o script para ser executado em intervalos específicos, garantindo o monitoramento contínuo.
- Relatórios detalhados: Combine as percepções do script com os recursos de relatório do NinjaOne para obter uma visão holística de seu ambiente de TI.
Concluindo, o arquivo hosts, embora muitas vezes ignorado, é a pedra angular das comunicações de rede. Garantir sua integridade é fundamental. Nosso script, especialmente quando combinado com o poder do NinjaOne, fornece às equipes de TI as ferramentas necessárias para monitorar, detectar e agir contra modificações não autorizadas, garantindo um ambiente de TI seguro e tranquilo.