Informatica
Powershell, Windows Firewall e magari RMM

Firewall dinamico con Powershell
Ci sono situazioni che si ritiene non saranno mai reali e quindi tali da non pensarci, nel caso in cui ci si pensi, sono così improbabili che non ci si investe tempo per risolvere nel caso.
Nello specifico penso a quegli eventi dove nella rete ci si ritrova ad affrontare uno o più dispositivi di passaggio, il cui utilizzatore è a conoscenza di alcune informazioni di accesso, ma dopo che qualcuno lo ha autorizzato a collegarsi con il computer ecco sorgere l’inconveniente che potrebbe ficcare il naso in posti da evitare.
Emersa questa problematica diventa per noi necessario trovare una soluzione per limitare questa potenziale falla di sicurezza.
Mettendo insieme i vari elementi conosciuti emerge una soluzione dinamica, che annovero tra le soluzioni patch per rimediare agli errori decisionali.
Opzioni possibili
Le vie per risolvere la situazione sono diverse e per le scelte decisionali non modificabili, in buona parte non sono applicabili.
- Scollegare il dispositivo dalla rete;
- Collegare il dispositivo ad una VLAN o ad un Wireless di tipo Guest;
- Creare una reservation nel DHCP e bloccare l’indirizzo sui sistemi da proteggere;
- Filtrare il MAC address delle schede di rete del dispositivo.
I primi due punti non sono realizzabili per vincoli di direzione, perché il dispositivo devo poter accedere ad alcuni elementi della LAN principale e creare una VLAN dedicata o una rete Wireless su misura, da usare per una settimana, diventa un investimento non affrontabile.
Il punto tre potrebbe… Continua a leggere→
Un solo script Powershell per più RMM

Quale RMM?
Appurato che gli RMM di Datto e Atera si differenziano nell’esecuzione di script Powershell solo per quanto concerne la sintassi di utilizzo dei parametri, è abbastanza evidente che se più RMM hanno la medesima differenza, esiste la possibilità di istruire lo script per utilizzare la sintassi legata al RMM, questa opportunità permetterebbe di utilizzare un unico script per molteplici piattaforme RMM.
Un altro elemento che sicuramente si differenzia tra diversi RMM è il come gli script rendono disponibili le informazioni richieste o per innescare degli allarmi o degli eventi. Anche in questo caso, possiamo ipotizzare delle differenze di sintassi da gestire.
Gli elementi chiave sono due:
- determinare la sintassi di acquisizione dei parametri dei componenti;
- determinare come identificare l’RMM utilizzato.
Isolate le informazioni chiave non resta che procedere con la creazione dell’elemento di codice necessario, che potrebbe evolvere in una classe da installare nel Powershell dei computer gestiti, così da poter essere utilizzata come un comune cmdlet.
La via rapida adottata è quella di determinare quale servizio RMM è installato (Get-Service) e gestire la struttura dei parametri di conseguenza.
if ((Get-Service -name "AteraAgent" -ErrorAction:SilentlyContinue)) {
$NomeVariabile = "{[NomeVariabile]}"
}
elseif ((Get-Service -name "Datto RMM" -ErrorAction:SilentlyContinue)) {
$NomeVariabile = $ENV:NomeVariabile
}
L’informazione relativa al RMM installato sui dispositivi può essere salvata in una variabile, così da poterla sfruttare molteplici volte all’interno dello script, la via più efficiente è l’utilizzo dell’istruzione switch, dove la variabile $RMM contiene la label assegnata al RMM individuato.
$RMM… Continua a leggere→
L’uso delle variabili negli script Powershell in Datto RMM e Atera RMM

Usare i parametri in uno script RMM.
La maggiore difficoltà iniziando a scrivere script da utilizzare all’interno degli RMM è il come fornire dei parametri ai componenti che si vanno ad eseguire.
La metodologia è semplice, un po’ meno semplice è scoprire nella documentazione come rendere il parametro un valore utilizzabile.
Il poter fornire dei parametri ad uno script è un passaggio fondamentale per creare delle procedure utilizzabili nel modo più generalizzato possibile.
Ad esempio, senza parametri, per agire su un servizio del sistema operativo sarebbe necessario uno script distino per ogni azione e per ogni servizio:
Di base quattro componenti moltiplicati per ogni servizio su cui si intende operare.
L’uso di parametri rende possibile fornire in input il nome del servizio e l’azione che si intende eseguire, gestendo poi queste informazioni all’interno della procedura, il vantaggio finale è quello di avere un componente RMM unico per agire su qualsiasi servizio con qualsiasi azione possibile.
I parametri di Datto RMM
In Datto RMM l’inserimento e la definizione del parametro è eseguita all’interno del editor di creazione del componente.
I parametri compilati sono trascritti nelle variabili di ambiente della specifica sessione di lavoro; pertanto, per la loro lettura e il loro impiego è sufficiente utilizzare la seguente sintassi:
$ENV:NomeVariabile
Può essere comodo e consigliato copiare questa variabile in una variabile locale:
$NomeVariabile = $ENV:NomeVariabile
I parametri di Atera RMM
In Atera RMM i parametri del componente sono inseriti scrivendo il nome della… Continua a leggere→
Concatenare gli output dei cmdlet di Powershell

Accorpare gli output di Powershell per simulare ipconfig.
Utilizzando Powershell ci si rende spesso conto che per avere informazioni specifiche su un elemento del sistema è necessario ricorrere all’esecuzione di più cmdlet di tipo get, per poi leggere i risultati delle ricerche e metterli insieme per ricavare le informazioni necessarie.
La quasi totalità degli output è costituita da matrici associative (o hash table), ovvero delle strutture di dati, che possono essere accorpate e manipolate creando un oggetto con lo strumento PSCustomObject. Con questa scorciatoia è possibile creare un contenitore (matrice) con la struttura e le intestazioni di colonna desiderate, a cui assegnare i contenuti ottenuti dai cmdlet di interrogazione. L’utilizzo di matrici associative permette inoltre un rapido accesso ai contenuti.
L’utilizzo di PSCustomObject è possibile a partire da Powershell 3.0, si ricorda che per ragioni di sicurezza è opportuno avere installata l’ultima versione dell’applicazione Powershell.
Per fornire un’idea del come utilizzare gli output dei cmdlet e aggregarli in un nuovo oggetto partiamo da un esempio abbastanza articolato, che si pone come scopo quello di ottenere un output con contenuti simili a quelli del comando ipconfig /all, che nel caso di Powershell richiede più di cinque cmdlet.
Quando descritto è puramente didattico, anche se porta ad un risultato effettivo, lo scopo reale è quello di dare un’idea generale di come le matrici possano essere sfruttate per ottenere degli output di facile interpretazione dalla fusione di più output.
Raccogliere le informazioni della… Continua a leggere→
Monitor dello stato degli antivirus

Tenere sotto controllo il funzionamento degli antivirus
La disponibilità di antivirus è praticamente illimitata e per molti è possibile convivere tra di loro; tuttavia, avere uno o più antivirus non è utile se non si ha la certezza del loro funzionamento regolare e che siano aggiornati.
Gli elementi forniti da Microsoft Windows workstation permettono di eseguire una diagnostica rapida di qualsiasi prodotto di sicurezza registrato nel sistema operativo, in particolare all’interno della struttura SecurityCenter, non disponibile per i server.
L’analisi di funzionamento richiede l’estrapolazione dei prodotti antivirus installati e registrati, in particolare del loro codice di stato, per tale scopo è utilizzato il cmdlet Get-WmiObject, nello specifico:
Get-WmiObject -Namespace root\SecurityCenter2 -Class AntiVirusProduct
Dell’output ottenuto è necessario il valore ProductState e DisplayName. Dal valore ProductState è possibile determinare lo stato di funzionamento e di aggiornamento del prodotto antvirus e sulla base del riscontro innescare le azioni ritenute necessarie.
Funzionamento
Lo script è realizzato in Powershell e sfrutta le informazioni di stato dei servizi di sicurezza resi disponibili dal Security Center di Microsoft Windows, per tale motivo non può essere impiegato sui sistemi operativi server, che non dispongono del Security Center.
Trattandosi di uno script che valuta lo stato generale degli elementi di sicurezza registrati, si consiglia l’esecuzione ad intervalli molto ravvicinati (1 o 2 minuti).
Per ottenere la massima generalizzazione dello script, senza vincolarlo ad una tabella di codici di stato legati a specifici prodotti, si è provveduto a decodificare il valore restituito… Continua a leggere→