Guida allo script: Automatizzare il rilevamento di server DHCP rogue con PowerShell

Punti chiave

  • Rilevamento automatico di DHCP rogue: Lo script per il rilevamento di server DHCP rogue automatizza il processo di rilevamento dei server DHCP non autorizzati, migliorando la sicurezza della rete.
  • Integrazione di Nmap: Lo script per il rilevamento di server DHCP rogue utilizza nmap per la scansione completa della rete e richiede la sua preventiva installazione.
  • Parametri personalizzabili: Lo script per il rilevamento di server DHCP rogue consente la personalizzazione di parametri quali i server DHCP consentiti e i campi di output.
  • Scansione focalizzata sulla sottorete: Lo script per il rilevamento di server DHCP rogue estrae e scansiona le sottoreti, garantendo un’analisi di rete mirata ed efficiente.
  • Manutenzione della sicurezza in tempo reale: Ideale per i controlli regolari della rete, per contribuire a mantenere la sicurezza e l’integrità operativa in tempo reale.
  • Facile confronto con l’elenco consentito: Lo script per il rilevamento di server DHCP rogue confronta automaticamente i server rilevati con un elenco predefinito di server DHCP autorizzati.
  • Output e reportistica automatizzati: I risultati sono presentati in un formato facile da usare e si integrano con strumenti di gestione della rete come NinjaOne.
  • Gestione della rete migliorata: Lo script per il rilevamento di server DHCP rogue semplifica la gestione della rete, soprattutto per i professionisti IT e gli MSP che gestiscono reti di grandi dimensioni.
  • Riduzione del rischio: Lo script per il rilevamento di server DHCP rogue riduce in modo significativo il rischio di problemi di rete e di violazioni della sicurezza causate da server DHCP non autorizzati.
  • Sono necessari diritti amministrativi: Lo script per il rilevamento di server DHCP rogue richiede privilegi di amministrazione per essere eseguito efficacemente.

La comprensione e la gestione della sicurezza di rete è una pietra angolare dell’efficienza delle operazioni IT, soprattutto nell’ambiente interconnesso di oggi. L’identificazione dei server DHCP rogue, che possono causare gravi problemi di rete e vulnerabilità della sicurezza, è un compito critico per i professionisti IT e i Managed Service Provider (MSP). Questo post del blog approfondisce uno script PowerShell progettato a questo scopo, illustrandone le funzionalità e l’importanza per il mantenimento dell’integrità della rete.

Background

I server DHCP rogue sono server DHCP non autorizzati presenti su una rete. Possono causare una serie di problemi, dai conflitti di indirizzi IP a gravi rischi per la sicurezza come gli attacchi man-in-the-middle. Questo script PowerShell automatizza il processo di ricerca di tali server utilizzando nmap, un rinomato strumento di scansione della rete, migliorando la sicurezza della rete e l’efficienza operativa. È particolarmente utile per i professionisti IT e gli MSP che gestiscono reti dinamiche e di grandi dimensioni in cui il monitoraggio manuale è poco pratico.

Lo script per il rilevamento di server DHCP rogue:

#Requires -Version 4.0

<#
.SYNOPSIS
    Runs an nmap scan to find rogue dhcp servers on a network. This script will not install nmap and nmap is required for this script to work.
.DESCRIPTION
    Runs an nmap scan to find rogue dhcp servers on a network. This script will not install nmap and nmap is required for this script to work.
.EXAMPLE
    (No Parameters)
    
    DHCP Servers found.

    Mac Address       IP Address    
    -----------       ----------    
    00:15:5D:FF:93:C3 172.17.240.1  
                      172.17.242.16 
    00:15:5D:45:D5:07 172.17.251.231



    Checking allowed servers list...
    C:\ProgramData\NinjaRMMAgent\scripting\customscript_gen_14.ps1 : Rogue DHCP Server Found! 172.17.240.1 is not on the 
    list of allowed DHCP Servers.
        + CategoryInfo          : NotSpecified: (:) [Write-Error], WriteErrorException
        + FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,customscript_gen_14.ps1

PARAMETER: -AllowedServers "172.17.240.1"
    Lists 172.17.240.1 as an allowed dhcp server.

PARAMETER: -CustomField "ReplaceMeWithAnyMultilineCustomField"
    Output results to a custom field of your choice.

PARAMETER: -AllowedServersField "ReplaceMeWithAnyTextCustomField"
    Will retrieve a list of allowed servers from a custom field.
    
.OUTPUTS
    None
.NOTES
    Minimum Supported OS: Windows 8, Server 2012
    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/it/condizioni-utilizzo
    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 (
    [Parameter()]
    [String[]]$AllowedServers,
    [Parameter()]
    [String]$CustomField = "rogueDHCPServers",
    [Parameter()]
    [String]$AllowedServersField = "allowedDHCPServers"
)

begin {

    # If script variables are used set them here
    if($env:allowedServersCustomField -and $env:allowedServersCustomField -notlike "null"){
        $AllowedServersField = $env:allowedServersCustomField
    }

    if($AllowedServersField -and -not ($AllowedServers)){
        $AllowedServers = (Ninja-Property-Get $AllowedServersField) -split ',' | ForEach-Object { ($_).trim() }
    }

    if($env:allowedServers -and $env:allowedServers -notlike "null"){
        $AllowedServers = $env:AllowedServers -split ',' | ForEach-Object { ($_).trim() }
    }

    if($env:customFieldName -and $env:customFieldName -notlike "null"){
        $CustomField = $env:customFieldName 
    }

    # Parses out the subnet info into cidr format
    function Get-Subnet {
        $DefaultGateways = (Get-NetIPConfiguration).IPv4DefaultGateway

        $Subnets = $DefaultGateways | ForEach-Object {
            $Index = $_.ifIndex
            $PrefixLength = (Get-NetIPAddress | Where-Object { $_.AddressFamily -eq 'IPv4' -and $_.PrefixOrigin -ne 'WellKnown' -and $Index -eq $_.InterfaceIndex } | Select-Object -ExpandProperty PrefixLength)
            if ($_.NextHop -and $PrefixLength) {
                "$($_.NextHop)/$PrefixLength"
            }
        }

        if ($Subnets) {
            $Subnets | Select-Object -Unique
        }
    }

    # Handy uninstall string finder
    function Find-UninstallKey {
        [CmdletBinding()]
        param (
            [Parameter(ValueFromPipeline = $True)]
            [String]$DisplayName,
            [Parameter()]
            [Switch]$UninstallString
        )
        process {
            $UninstallList = New-Object System.Collections.Generic.List[Object]

            $Result = Get-ChildItem HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\* | Get-ItemProperty | Where-Object { $_.DisplayName -like "*$DisplayName*" }
            if ($Result) { $UninstallList.Add($Result) }

            $Result = Get-ChildItem HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* | Get-ItemProperty | Where-Object { $_.DisplayName -like "*$DisplayName*" }
            if ($Result) { $UninstallList.Add($Result) }

            # Programs don't always have an uninstall string listed here so to account for that I made this optional.
            if ($UninstallString) {
                $UninstallList | Select-Object -ExpandProperty UninstallString -ErrorAction SilentlyContinue
            }
            else {
                $UninstallList
            }
        }
    }

    $Nmap = (Find-UninstallKey -DisplayName "Nmap" -UninstallString) -replace '"' -replace 'uninstall.exe', 'nmap.exe'
    if (-not $Nmap) {
        Write-Error "Nmap is not installed! Please install nmap prior to running this script. https://nmap.org/download.html"
        exit 1
    }
}
process {

    # Get's a list of subnets
    $Subnets = Get-Subnet
    if (-not $Subnets) {
        Write-Error "Unable to get list of subnets?"
        exit 1
    }

    # nmap arguments
    $Arguments = @(
        "-sU"
        "-p"
        "67"
        "-d"
        $Subnets
        "--open"
        "-oX"
        "$env:TEMP\nmap-results.xml"
    )
    try {
        Start-Process -FilePath $Nmap -ArgumentList $Arguments -WindowStyle Hidden -Wait
        [xml]$result = Get-Content -Path "$env:Temp\nmap-results.xml"
    }
    catch {
        Write-Error "Nmap scan failed to run! Ensure nmap is installed prior to running this script."
        exit 1
    }

    # Parse the xml results
    if ($result) {
        $resultObject = $result.DocumentElement.host | ForEach-Object {
            New-Object psobject -Property @{
                "IP Address"  = ($_.address | Where-Object { $_.addrtype -match "ip" } | Select-Object -ExpandProperty "addr")
                "Mac Address" = ($_.address | Where-Object { $_.addrtype -match "mac" } | Select-Object -ExpandProperty "addr")
            }
        }
    }
    else {
        Write-Error "Nmap results are empty?"
        exit 1
    }

    # Check if the dhcp servers found are on the list. If so simply report back what were found otherwise indicate that they're Rogue DHCP Servers.
    if ($resultObject) {
        Write-Host "DHCP Servers found."
        $resultObject | Sort-Object -Property "IP Address" -Unique | Format-Table | Out-String | Write-Host
        Remove-Item -Path "$env:Temp\nmap-results.xml" -Force

        Write-Host "Checking allowed servers list..."
        $ErrorOut = $False
        $resultObject | ForEach-Object {
            if ($AllowedServers -notcontains $_."IP Address") {
                Write-Error "Rogue DHCP Server Found! $($_.'IP Address') is not on the list of allowed DHCP Servers."
                $ErrorOut = $True
            }
        }

        Ninja-Property-Set -Name $CustomField -Value ($resultObject | Where-Object { $AllowedServers -notcontains $_."IP Address" } | Format-List | Out-String)

        if($ErrorOut -eq $True){
            exit 1
        }

        Write-Host "No rogue dhcp servers found."
    }
}
end {
    
    
    
}

 

Accedi a oltre 700 script nel Dojo NinjaOne

Ottieni l’accesso

Analisi dettagliata dello script per il rilevamento di server DHCP rogue

Lo script per il rilevamento di server DHCP rogue funziona in diverse fasi:

  • Inizializzazione: Lo script per il rilevamento di server DHCP rogue inizia con l’impostazione di parametri come i server DHCP consentiti e i campi personalizzati per l’output, consentendo la personalizzazione in base agli ambienti di rete specifici.
  • Identificazione della sottorete: Impiega una funzione per estrarre dalla rete le informazioni sulla subnet, fondamentali per indirizzare la scansione.
  • Integrazione di Nmap: Lo script per il rilevamento di server DHCP rogue controlla l’installazione di nmap, essenziale per la scansione. Esegue quindi una scansione nmap sulle sottoreti identificate, alla ricerca di server DHCP attivi.
  • Analisi dei risultati: Dopo la scansione, lo script per il rilevamento di server DHCP rogue analizza l’output XML di nmap, estraendo gli indirizzi IP e MAC dei server DHCP trovati.
  • Convalida rispetto all’elenco dei consentiti: Confronta i server DHCP trovati con un elenco di server autorizzati, segnalando eventuali server non autorizzati (rogue).
  • Uscita e pulizia: I risultati vengono quindi visualizzati e i file temporanei creati dallo script per il rilevamento di server DHCP rogue vengono cancellati.

Un diagramma visivo che accompagni questa spiegazione potrebbe illustrare il flusso dall’inizializzazione all’output dei risultati, migliorandone la comprensione.

Casi d’uso potenziali

Immagina una grande azienda con più sottoreti gestite da un dipartimento IT. Questo script per il rilevamento di server DHCP rogue potrebbe essere programmato per essere eseguito periodicamente, al fine di assicurarsi che non appaiano server DHCP non autorizzati sulla rete, mantenendo così l’integrità della rete e prevenendo potenziali violazioni della sicurezza.

Confronti

I controlli manuali o gli strumenti di base per il monitoraggio della rete potrebbero non bastare per individuare i server DHCP rogue o potrebbero richiedere molto lavoro. Questo script, invece, automatizza il processo del rilevamento di server DHCP rogue, è più accurato e si integra con strumenti esistenti come NinjaOne per migliorare le capacità di gestione.

Domande frequenti

  • Con quale frequenza dovrei eseguire questo script per il rilevamento di server DHCP rogue?
    • Si consiglia l’esecuzione regolare, per esempio con frequenza settimanale o dopo qualsiasi modifica importante della rete.
  • Ho bisogno di permessi speciali per eseguire questo script per il rilevamento di server DHCP rogue?
    • Sì, i diritti di amministrazione sono generalmente richiesti per la scansione della rete.

Implicazioni

I server DHCP rogue non identificati possono comportare rischi significativi per la sicurezza. L’automazione del loro rilevamento riduce al minimo questi rischi, contribuendo alla sicurezza generale della rete e all’efficienza operativa.

Raccomandazioni

  • Aggiorna regolarmente l’elenco dei server DHCP consentiti.
  • Integra questo script per il rilevamento di server DHCP rogue con strumenti più ampi di monitoraggio e gestione della rete.
  • Assicurati che nmap sia installato e aggiornato correttamente.

Considerazioni finali

Nel campo della sicurezza e della gestione della rete, strumenti come NinjaOne, integrati da script come quello per il rilevamento di server DHCP rogue, offrono soluzioni solide per mantenere l’integrità della rete. Automatizzando le attività critiche, come l’individuazione dei server DHCP rogue, NinjaOne aiuta i professionisti IT a concentrarsi sulle iniziative strategiche, garantendo al tempo stesso la sicurezza e l’affidabilità delle loro reti.

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 una demo×
×

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.