Come verificare la presenza di un file Hosts modificato con PowerShell

Nel vasto regno dell’IT, il filehosts è una sentinella silenziosa, che assicura il corretto funzionamento delle comunicazioni di rete. Per chi non lo sapesse, il file hosts è un file di testo che mappa i nomi di host a indirizzi IP. È utilizzato dal sistema operativo per risolvere i nomi di host in indirizzi IP quando un computer cerca di connettersi a una risorsa di rete. Ma cosa succede quando il file hosts viene manomesso o modificato? Come possono i professionisti IT e i Managed Service Provider (MSP) garantire l’integrità di questo file cruciale? Con lo script in cuistiamo per addentrarci.

Comprendere il file hosts

Il filehosts, nella sua essenza, è la rubrica del sistema informatico. Svolge un ruolo fondamentale nell’indirizzare il traffico di rete, assicurando che gli utenti arrivino ai siti web e ai servizi corretti. Tuttavia, la sua importanza lo rende anche un obiettivo primario per i malintenzionati.

I potenziali rischi delle modifiche non autorizzate

Un aggressore, con cattive intenzioni, potrebbe modificare il file hosts per reindirizzare il traffico verso un sito web o un server dannoso. Tali alterazioni possono avere conseguenze disastrose:

  • Rubare informazioni personali: Reindirizzando gli utenti verso siti contraffatti, gli aggressori possono richiedere i dati personali, con conseguente furto di identità.
  • Installazione di malware: Gli utenti possono essere indotti a scaricare software dannoso pensando di trovarsi su un sito legittimo.
  • Interruzione delle comunicazioni di rete: I servizi essenziali possono essere bloccati, causando interruzioni operative.

Alla luce di questi rischi, è fondamentale che i professionisti IT e gli MSP dispongano di strumenti in grado di rilevare rapidamente eventuali modifiche non autorizzate. È qui che entra in gioco il nostro script.

Lo script

#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 {}

 

Accedi a oltre 700 script nel Dojo di NinjaOne

Ottieni l’accesso

Un’immersione profonda nello script

Lo script PowerShell fornito è progettato per verificare se il file hosts è stato modificato dall’ultima esecuzione. Ecco una panoramica delle sue funzionalità:

  1. Controllo dell’elevazione dei permessi: Lo script controlla innanzitutto se è in esecuzione con i privilegi di amministratore. Questo è fondamentale perché qualsiasi tentativo di leggere o modificare i file di sistema richiede autorizzazioni elevate.
  2. Verifica del file hosts: Quindi verifica l’esistenza del file hosts. Se il file manca, lo script segnala un errore.
  3. Confronto degli hash: Lo script calcola un hash (SHA256) del file hosts corrente e lo confronta con la versione in cache dell’ultima esecuzione. Se c’è una mancata corrispondenza, questo indica che il file è stato modificato.
  4. Confronto del contenuto: Oltre a verificare l’hash, lo script confronta anche il contenuto riga per riga, evidenziando eventuali aggiunte o rimozioni.

Vantaggi per i professionisti IT e gli MSP

  • Monitoraggio proattivo: Questo script offre un approccio proattivo per monitorare il file hosts, assicurandone l’integrità e avvisando gli amministratori di eventuali modifiche non autorizzate.
  • Approfondimenti dettagliati: Confrontando le differenze di contenuto, i team IT possono identificare rapidamente ciò che è stato aggiunto o rimosso, e questo permette di intervenire per una rapida correzione.
  • Pronto per l’automazione: Grazie alla sua struttura, lo script può essere integrato in flussi di lavoro automatizzati, consentendo controlli regolari senza interventi manuali.

Il potere di NinjaOne

NinjaOne è più di una semplice soluzione di gestione IT. Si tratta di una piattaforma completa che consente ai professionisti IT e agli MSP di essere sempre all’avanguardia rispetto alle potenziali minacce. Integrando il nostro script di controllo del file hosts in NinjaOne otterrai:

  • Avvisi centralizzati: Ricevi avvisi direttamente sulla dashboard di NinjaOne ogni volta che il file hosts viene modificato. Questa notifica immediata assicura che tu possa agire rapidamente, e in questo modo protegge i tuoi sistemi da potenziali attacchi.
  • Controlli programmati: Automatizza l’esecuzione dello script a intervalli specificati, ottenendo un monitoraggio continuo.
  • Report dettagliati: Combina le informazioni ricevute dallo script con le funzionalità di reporting di NinjaOne per ottenere una visione completa del tuo ambiente IT.

In conclusione, il file hosts, anche se spesso trascurato, è una pietra angolare delle comunicazioni di rete. Garantire la sua integrità è fondamentale. Il nostro script, soprattutto se combinato con la potenza di NinjaOne, fornisce ai team IT gli strumenti necessari per monitorare, rilevare e intervenire nel caso in cui ci siano modifiche non autorizzate, ed è una garazia di un ambiente IT sicuro e senza problemi.

Passi successivi

La creazione di un team IT efficiente ed efficace richiede una soluzione centralizzata che funga da principale strumento per la fornitura di servizi. NinjaOne consente ai team IT di monitorare, gestire, proteggere e supportare tutti i dispositivi, ovunque essi si trovino, senza la necessità di una complessa infrastruttura locale.

Per saperne di più su NinjaOne Endpoint Management, fai un tour dal vivo, o inizia la tua prova gratuita della piattaforma NinjaOne.

Categorie:

Ti potrebbe interessare anche

×

Guarda NinjaOne in azione!

Inviando questo modulo, accetto La politica sulla privacy di NinjaOne.

Termini e condizioni NinjaOne

Cliccando sul pulsante “Accetto” qui sotto, dichiari di accettare i seguenti termini legali e le nostre condizioni d’uso:

  • Diritti di proprietà: NinjaOne possiede e continuerà a possedere tutti i diritti, i titoli e gli interessi relativi allo script (compreso il copyright). NinjaOne ti concede una licenza limitata per l’utilizzo dello script in conformità con i presenti termini legali.
  • Limitazione d’uso: Puoi utilizzare lo script solo per legittimi scopi personali o aziendali interni e non puoi condividere lo script con altri soggetti.
  • Divieto di ripubblicazione: In nessun caso ti è consentito ripubblicare lo script in una libreria di script appartenente o sotto il controllo di un altro fornitore di software.
  • Esclusione di garanzia: Lo script viene fornito “così com’è” e “come disponibile”, senza garanzie di alcun tipo. NinjaOne non promette né garantisce che lo script sia privo di difetti o che soddisfi le tue esigenze o aspettative specifiche.
  • Assunzione del rischio: L’uso che farai dello script è da intendersi a tuo rischio. Riconosci che l’utilizzo dello script comporta alcuni rischi intrinseci, che comprendi e sei pronto ad assumerti.
  • Rinuncia e liberatoria: Non riterrai NinjaOne responsabile di eventuali conseguenze negative o indesiderate derivanti dall’uso dello script e rinuncerai a qualsiasi diritto legale o di equità e a qualsiasi rivalsa nei confronti di NinjaOne in relazione all’uso dello script.
  • EULA: Se sei un cliente NinjaOne, l’uso dello script è soggetto al Contratto di licenza con l’utente finale (EULA) applicabile.