Comment savoir si un fichier Hosts a été modifié à l’aide de PowerShell ?

Dans le vaste domaine de l’informatique, le fichier hosts est une sentinelle silencieuse qui assure la fluidité des communications réseau. Pour ceux qui ne le connaissent pas, le fichier hosts est un fichier texte qui associe des noms d’hôtes à des adresses IP. Il est utilisé par le système d’exploitation pour résoudre les noms d’hôtes en adresses IP lorsqu’un ordinateur tente de se connecter à une ressource du réseau. Mais que se passe-t-il lorsque le fichier hosts est altéré ou modifié? Comment les professionnels de l’informatique et les fournisseurs de services gérés (MSP) peuvent-ils garantir l’intégrité de ce fichier crucial ? C’est là qu’intervient le scénario que nous nous apprêtons à examiner.

Comprendre le fichier Hosts

Le fichier hosts est, par essence, le carnet d’adresses du système informatique. Il joue un rôle essentiel dans l’orientation du trafic sur le réseau, en veillant à ce que les utilisateurs accèdent aux sites web et aux services appropriés. Toutefois, son importance en fait également une cible privilégiée pour les personnes malveillantes.

Les risques potentiels de modifications non autorisées

Un pirate, avec des intentions malveillantes, pourrait modifier le fichier hosts pour rediriger le trafic vers un site web ou un serveur malveillant. De telles altérations peuvent avoir des conséquences désastreuses :

  • Vol d’informations personnelles: En redirigeant les utilisateurs vers des sites contrefaits, les attaquants peuvent leur soutirer des informations personnelles, ce qui peut conduire à un vol d’identité.
  • Installation de logiciels malveillants: Les utilisateurs peuvent être amenés à télécharger des logiciels malveillants en pensant qu’ils se trouvent sur un site légitime.
  • Perturbation des communications du réseau: Des services essentiels peuvent être bloqués, entraînant des perturbations opérationnelles.

Compte tenu de ces risques, il est primordial que les professionnels de l’informatique et les MSP disposent d’outils capables de détecter rapidement toute modification non autorisée. C’est là que notre script entre en jeu.

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

 

Accédez à plus de 700 scripts dans le Dojo NinjaOne

Obtenir l’accès

Exploration approfondie du script

Le script PowerShell fourni est conçu pour vérifier si le fichier hosts a été modifié depuis sa dernière exécution. Voici un aperçu de ses fonctionnalités :

  1. Vérification de l’élévation : Le script vérifie d’abord s’il est exécuté avec des privilèges d’administrateur. Cette étape est cruciale, car toute tentative de lecture ou de modification des fichiers système nécessite des autorisations élevées.
  2. Vérification du fichier des hôtes: Il vérifie ensuite l’existence du fichier hosts. Si le fichier est manquant, le script signale une erreur.
  3. Comparaison des hachages: Le script calcule un hachage (SHA256) du fichier hosts actuel et le compare à une version mise en cache lors de la dernière exécution. En cas de non-concordance, cela indique que le fichier a été modifié.
  4. Comparaison des contenus: Au-delà de la simple vérification du hachage, le script compare également le contenu ligne par ligne, en mettant en évidence tout ajout ou suppression.

Avantages pour les professionnels de l’informatique et les entreprises MSP

  • Surveillance proactive: Ce script offre une approche proactive de la surveillance du fichier hosts, garantissant son intégrité et alertant les administrateurs de toute modification non autorisée.
  • Aperçu détaillé: En comparant les différences de contenu, les équipes informatiques peuvent rapidement identifier ce qui a été ajouté ou supprimé, ce qui permet de remédier rapidement à la situation.
  • Prêt pour l’automatisation: De par sa conception, le script peut être intégré dans des flux de travail automatisés, ce qui permet d’effectuer des contrôles réguliers sans intervention manuelle.

La puissance de NinjaOne

NinjaOne est plus qu’une simple solution de gestion informatique. Il s’agit d’une plateforme complète qui permet aux professionnels de l’informatique et aux fournisseurs de services gérés (MSP) d’avoir une longueur d’avance sur les menaces potentielles. En intégrant notre script de vérification du fichier hosts dans NinjaOne :

  • Alertes centralisées: Recevez des alertes directement sur le tableau de bord de NinjaOne chaque fois que le fichier hosts est modifié. Cette notification immédiate vous permet d’agir rapidement et de protéger vos systèmes contre les attaques potentielles.
  • Contrôles programmés: Automatiser l’exécution du script à des intervalles déterminés, afin d’assurer une surveillance continue.
  • Rapport détaillé: Combinez les informations tirées du script avec les capacités de reporting de NinjaOne pour obtenir une vue globale de votre environnement informatique.

En conclusion, le fichier hosts, bien que souvent négligé, est un pilier des communications réseau. Il est primordial d’en garantir l’intégrité. Notre script, en particulier lorsqu’il est combiné à la puissance de NinjaOne, fournit aux équipes informatiques les outils dont elles ont besoin pour surveiller, détecter et agir contre les modifications non autorisées, garantissant ainsi un environnement informatique sûr et fluide.

Pour aller plus loin

Créer une équipe informatique efficace et performante nécessite une solution centralisée qui soit l’outil principal pour fournir vos services. NinjaOne permet aux équipes informatiques de surveiller, gérer, sécuriser et prendre en charge tous les appareils, où qu’ils soient, sans avoir besoin d’une infrastructure complexe sur site.

Pour en savoir plus sur NinjaOne Endpoint Management, participez à une visite guidée ou commencez votre essai gratuit de la plateforme NinjaOne.

Catégories :

Vous pourriez aussi aimer

×

Voir NinjaOne en action !

En soumettant ce formulaire, j'accepte la politique de confidentialité de NinjaOne.

Termes et conditions NinjaOne

En cliquant sur le bouton « J’accepte » ci-dessous, vous indiquez que vous acceptez les termes juridiques suivants ainsi que nos conditions d’utilisation:

  • Droits de propriété: NinjaOne possède et continuera de posséder tous les droits, titres et intérêts relatifs au script (y compris les droits d’auteur). NinjaOne vous accorde une licence limitée pour l’utilisation du script conformément à ces conditions légales.
  • Limitation de l’utilisation: Les scripts ne peuvent être utilisés qu’à des fins personnelles ou professionnelles internes légitimes et ne peuvent être partagés avec d’autres entités.
  • Interdiction de publication: Vous n’êtes en aucun cas autorisé à publier le script dans une bibliothèque de scripts appartenant à, ou sous le contrôle d’un autre fournisseur de logiciels.
  • Clause de non-responsabilité: Le texte est fourni « tel quel » et « tel que disponible », sans garantie d’aucune sorte. NinjaOne ne promet ni ne garantit que le script sera exempt de défauts ou qu’il répondra à vos besoins ou attentes particulières.
  • Acceptation des risques: L’utilisation du script est sous votre propre responsabilité. Vous reconnaissez qu’il existe certains risques inhérents à l’utilisation du script, et vous comprenez et assumez chacun de ces risques.
  • Renonciation et exonération de responsabilité: Vous ne tiendrez pas NinjaOne pour responsable des conséquences négatives ou involontaires résultant de votre utilisation du script, et vous renoncez à tout droit ou recours légal ou équitable que vous pourriez avoir contre NinjaOne en rapport avec votre utilisation du script.
  • EULA: Si vous êtes un client de NinjaOne, votre utilisation du script est soumise au contrat de licence d’utilisateur final qui vous est applicable (End User License Agreement (EULA)).