Controllo dei contenuti delle code di BitsTransfer

Individuare elementi anomali nelle code di BitsTransfer.
Uno dei tanti canali di infiltrazione di malware o esfiltrazione di informazioni è BitsTransfer (Background Intelligent Transfer Service), una utility utilizzata da alcuni programmi per gli aggiornamenti e da altri per la sincronizzazione di contenuti, la scelta di questo canale è la sua velocità.
Dobbiamo ammettere che lo utilizziamo anche noi per il trasferimento di report, con gli opportuni accorgimenti per evitare che l’EDR di MalwareBytes, da noi utilizzato come soluzione anti-malware, intervenga bloccando il trasferimento.
La nostra scelta è stata quella di perfezionare gli script e non di limitare i controlli dell’anti-malware.
Da diversi anni abbiamo realizzato procedure in Powershell per il controllo delle code di BitsTransfer per tutti gli utenti del sistema, quest’anno siamo arrivati ad un’ottimizzazione dell’analisi che abbiamo decido di condividere.
L’impiego è utile per avere allarmi da parte di un sistema RMM, nel nostro caso Datto RMM.
Tabella dei Contenuti
Obiettivo della procedura monitor
L’analisi deve controllare con una cadenza temporale frequente (60 – 120 secondi) e regolare il contenuto delle code associate agli utenti del sistema, a tale scopo è utilizzabile il cmdlet Get-BitsTransfer, che richiede il caricamento di una specifico modulo Powershell.
L’output ottenuto può contenere dei valori per i quali non desideriamo avere degli allarmi, in quanto noti e considerati leciti. Questo filtro rende necessario fornire una lista di esclusione, contenente gli elementi da non considerare.
Eliminati dal output i contenuti considerati irrilevanti, quanto resta sono eventi non attesi e da verificare, per il quali diventa necessario generare degli allarmi.
Utilizzando il prodotto Datto RMM disponiamo di due canali informativi:
- Gli allarmi convenzionali in dashboard ed e-mail;
- Un campo associato al computer/server in cui scrivere delle informazioni.
Rilevati i contenuti anomali possiamo decidere di seguire due strade, quella di avere gli allarmi ed indagare sull’evento oppure quella di demandare al monitor la cancellazione del contenuto delle code, a prescindere da quale esso sia.
Il codice del monitor
Nel codice Powershell che abbiamo realizzato ci siamo imbattuti in diverse problematiche nell’analisi del contenuto della coda, prevalentemente legate alla sintassi dei campi. Dopo un lungo debug abbiamo raggiunto un livello stabile, con la versione 3.0, tuttavia potrebbero comparire ulteriori anomalie e falsi positivi.
La gestione delle esclusioni poteva passare dai parametri del componente monitor del RMM; tuttavia, la dimensione massima di caratteri ci questi campi è molto variabile e spesso limitata.
La nostra scelta finale è stata quella di inserire le esclusioni nello script, una soluzione che non apprezziamo e riteniamo poco elegante, in quanto rende necessario editare il codice per modificare gli elementi da escludere.
Per la gestione degli allarmi e dei Custom Field di Datto RMM utilizziamo, come sempre, dei moduli da noi sviluppati, dove i cmdlet possono essere sostituiti da quelli nativi di Powershell.
Gestione dei parametri
Il monitor richiede un solo parametro dall’esterno, necessario per richiedere i soli allarmi o anche la cancellazione delle code. L’elemento importante è la lista delle esclusioni.
$Action = $ENV:Action
if ($Action -notin "alert", "reset") {
Set-DRMMError -FErrorMessage "ERROR - Inconsistent ACTION parameter."
}
Nella sintassi di programmazione dei componenti di Datto RMM i parametri di forniti per Powershell sono delle variabili di ambiente; pertanto, l’indicazione del tipo di azione da svolgere è acquisita alla Riga 1 in questo contesto.
La condizione delle Righe 3-5 determina che il valore inserito sia quello atteso, ovvero alert o reset, in caso contrario interrompe la procedura e genera un allarme. Il codice della Riga 4 può essere personalizzato con quello nativo del RMM utilizzato.
$List = "PreSignInSettingsConfigJSON,MicrosoftMapsBingGeoStore,Chrome Component Updater,"
$List += "Microsoft Outlook Offline Address Book,outlook.office365.com,MicrosoftEdgeUpdateSetup_X86,GoogleUpdateSetup,"
$List += "DirectX_Database_Download_AsUser,chrome_installer,Edge Component Updater,MicrosoftEdgeUpdateSetup,"
$List += "MozillaUpdate"
Questa è la sezione da modificare, dove la creazione della lista di esclusione avviene associando ad una variabile i nomi del campo DisplayName da analizzare, i valori sono separati da una virgola.
Per alcuni campi si è scelto di inserire solo la parte iniziale del descrittore, questa scelta è determinata dal fatto che diversi descrittori sono seguiti da codice ID variabile. In questo modo la comparazione avviene sempre sulla parte comune.
La scelta di dividere su più righe l’inserimento dei valori è stata dettata da una migliore leggibilità.
Trasformazione delle esclusioni in tabella
Per sfruttare al meglio le esclusioni, si provvede a convertirle in una tabella contenente un ID progressivo, la stringa da escludere e il numero di caratteri che la compone.
Il numero di caratteri è utile nella fase di comparazione tra l’output ottenuto e i contenuti non desiderati.
La Riga 1 valorizza a zero il contatore che costituisce il valore assegnato al campo ID.
La Riga 2 assegna ad una matrice ($ExclusionList) le informazioni generate dal comando foreach, che estrapola i contenuti dalla lista esclusioni scritta a mano, avvalendosi dell’operatore Split.
Le Righe 3-7 valorizzano l’oggetto matrice di tipo PSCustomObject.
Per finire la Riga 8 incrementa di uno il contatore ad ogni ciclo.
Caricamento del modulo Powershell BitsTransfer
La ricerca nelle code può essere eseguita usando altre strade; tuttavia, è disponibile un modulo specifico che contiene alcuni cmdlet per agire direttamente sulle code BitsTransfer.
Il modulo è disponibile nei repository di Microsoft e pertanto è facilmente accessibile.
$ModuleTest = Get-Module -ListAvailable | where-object { $_.Name -eq "BitsTransfer" }
if (!($ModuleTest)) {
try {
Import-Module BitsTransfer
}
catch {
Set-DRMMError -FErrorMessage "ERROR - Unable to load BitsTransfer module."
}
}
La Riga 1 verifica se il modulo è disponibile nel sistema, avvalendosi del cmdlet Get-Module per ottenere la lista di tutti i moduli, per poi cercare con il cmdlet Where-Object lo specifico monitor nell’output. La pipe restituisce il valore true se il modulo è presente e false se non presente.
La condizione della Riga 2 avvia la procedura di installazione se il modulo non è presente.
La Riga 4 richiede il caricamento del modulo specificato usando il cmdlet Import-Module, nel caso di errori di esecuzione i blocchi Try-Catch inviano l’allarme di errore di esecuzione della Riga 7.
Caricamento dei contenuti della coda
Il caricamento dei contenuti della coda è svolto dal cmdlet Get-BitsTransfer eseguito nel contesto dei blocchi Try-Catch, così da attivare un errore nel caso di errori di esecuzione.
try {
$SearchJob = Get-BitsTransfer -AllUsers
}
catch {
Set-DRMMError -FErrorMessage "ERROR - Execution of search cmdlet failed."
}
Comparazione dei contenuti della coda e delle esclusioni
La parte cruciale del codice deve generare un output depurato dei contenuti da escludere, che pertanto può essere anche vuoto.
$SearchOutput = @()
foreach ($Job in $SearchJob) {
$Flag = $true
foreach ($Exc in $ExclusionList) {
if ($Job.DisplayName.Length -ge $Exc.LEN) {
if ($Exc.NAME -contains $job.DisplayName.Substring(0,$Exc.LEN)) {
$Flag = $false
break
}
}
}
if ($Flag) {
$SearchOutput += $Job
}
}
La Riga 1 inizializza un array che conterrà i record validi da riportare al monitor per generare l’allarme e il relativo diagnostico con quanto trovato.
Il ciclo Foreach della Riga 2 estrae i singoli elementi presenti nella coda, rendendoli disponibili per i successivi controlli.
La Riga 3 imposta la variabile Flag allo stato true, indicando che il record da processare può essere valido per un allarme, il controllo effettivo di validità è eseguito successivamente.
La Riga 4, sempre con un ciclo Foreach, estrae gli elementi dalla tabella delle esclusioni per eseguire la comparazione con quello ottenuto dalla Riga 2.
La condizione della Riga 5 controlla se la lunghezza del valore da controllare è maggiore o uguale rispetto a quello del valore da escludere.
La condizione della Riga 6 controlla se il record di esclusione contiene il record ottenuto dalla coda e limitato al numero di caratteri del valore di esclusione. Se la comparazione è valida il valore deve essere escluso, pertanto la Riga 7 modifica la variabile Flag impostandola allo stato false e la Riga 8 interrompe il ciclo della Riga 4.
La condizione delle Righe 12-14 alimenta l’array di output se la variabile flag si trova nello stato true.
Generazione dell’allarme e del diagnostico
Ottenuto un Output in formato array è necessario innescare l’allarme e fornire i dati individuati, oppure procedere con la rimozione di uno stato precedentemente salvato nel RMM.
if ($SearchOutput.Count -ge 1) {
$Output = "JobID - DisplayName - TransferType - JobState - OwnerAccount`r`n"
Set-RegistryValue -FPath "HKLM:\SOFTWARE\CentraStage" -FField "Custom9" -FValue "ALERT - Detected JOBs in BitsTransfer queue."
foreach ($JobFound in $SearchJob) {
$Output += [string]$JobFound.JobID + " - " + $JobFound.DisplayName + " - " + $JobFound.TransferType + " - " + $JobFound.JobState + " - " + $JobFound.OwnerAccount + "`r`n"
}
switch ($Action) {
"reset" {
Remove-BitsTransfer -BitsJob $SearchJob -Confirm:$false
}
{$_ -eq "alert" -or $_ -eq "reset"} {
Set-DRMMError -FErrorMessage "ALERT - Found jobs in BitsTransfer queue." -FDiagnostic $Output
}
}
}
else {
Set-RegistryValue -FPath "HKLM:\SOFTWARE\CentraStage" -FField "Custom9" -FValue ""
}
La condizione delle Righe 1-15 gestisce il trattamento degli allarmi nel caso in cui l’output generato dalla comparazione contenga almeno un elemento. Nel caso in cui non ci siano elementi le Righe 16-18 puliscono il Custom Field di Datto RMM.
La Riga 2 crea la testata di quello che sarà l’output finale da trasferire al RMM, la scelta di usare una stringa e non l’oggetto ottenuto nella comparazione, è dipendente dal fatto che non tutti gli RMM sono in grado di visualizzare correttamente questo tipo di elemento.
La Riga 3 crea il Custom Field per Datto RMM, utile per alimentare dei filtri e dei contatori nella dashboard.
Il ciclo Foreach delle Righe 4-6 estrae i singoli record della comparazione per permetterne la trasformazione in stringhe e la generazione del output finale.
Il metodo Switch delle Righe 7-15 determina le azioni da eseguire per soddisfare le condizioni di esecuzione richieste, ovvero la creazione di un allarme o la creazione di un allarme e la cancellazione delle code.
La condizione nelle Righe 8-10 esegue la cancellazione delle code utilizzando il cmdlet Remove-BitsTransfer, usando come input la matrice ottenuta nella comparazione, andando così a cancellare solo le azioni non attese.
La condizione nelle Righe 11-13 genera le informazioni dell’allarme sia nel caso di richiesta di cancellazione sia in quello di solo allarme.
Conclusioni
Il monitor realizzato non si sostituisce assolutamente alla presenza di un valido anti-malware, la sua funzione è quella di fornire una rapida segnalazione di azioni sconosciute nel contesto di BitsTransfer.
La presenza di azioni sconosciute può essere causata da un malware, ma anche da altri fattori che possono generare dei fastidi nel funzionamento del sistema o nell’approccio di sicurezza implementato.
Un altro elemento fondamentale è costituito dal apprende come determinati programmi si muovano nel sistema operativo per gestire le proprie attività.
Per maggiori informazioni sull’uso e la realizzazione degli script di automazione leggi questo articolo e contattaci senza impegno.
I componenti distribuiti sono forniti senza alcuna garanzia. Non vi sono garanzie che il software soddisfi le vostre esigenze o sia esente da errori. In nessun caso gli sviluppatori saranno responsabili per eventuali danni.
I componenti proposti sono stati collaudati nel modo più esaustivo possibile e sono utilizzati in modo regolare in ambienti di produzione, durante il loro utilizzo non si sono verificate anomalie di funzionamento.
Articoli recenti
- ShellBag – un viaggio allucinante nei ricordi di Windows
- La donazione di sangue nei cani: importanza, modalità e compatibilità
- Il Manto del Cane: Un Viaggio alla Scoperta della Sua Pelle e del Suo Pelo
- Proteggi il tuo cane dal caldo: prevenzione e riconoscimento della disidratazione
- Monitoraggio e Verifica delle Configurazioni di Rete: Una Soluzione Efficace con PowerShell e Datto RMM
Archivi
Prossimi eventi
Non ci sono eventi imminenti.
Iscriviti alla nostra Newsletter
Un progetto parallelo ambientato nella Tuscia Sutrina: piante da giardino locali, tecniche di coltivazione, storia e leggende del territorio, racconti fantasy a tema. Botanica, cultura e tradizioni in un unico spazio.
A volte basta una breve pausa per ritrovare la concentrazione: qualche minuto tra verde e fantasia può aiutare a tornare al lavoro con nuove idee.
Visita il sito