mercoledì 3 agosto 2016

PowerShell: Visualizzare le informazioni sul BIOS utilizzando Get-WmiObject

Nell'articolo PowerShell: Visualizzare le informazioni sulla scheda audio utilizzando Get-Wmiobject abbiamo visto come, tramite Windows Management Instrumentation (WMI), si possano recuperare informazioni sulla scheda audio installata all'interno del computer. Alla stregua di quanto descritto in quell'articolo si possono recuperare informazioni sul BIOS della macchina utilizzando Get-WmiObject e la classe Win32_BIOS. Il comando completo da eseguire è il seguente:
Get-Wmiobject -class "Win32_BIOS" -namespace "root\CIMV2" | Fl * -Force


PowerShell, informazioni sul BIOS
FIG 1 - PowerShell, informazioni sul BIOS

Tra le informazioni più utili troviamo il numero seriale della scheda madre, il produttore del BIOS, la data di rilascio e la versione.

Per visualizzare le informazioni del BIOS di una macchina remota va utilizzato il parametro -Computer indicando il nome o l'indirizzo IP del computer che si intende analizzare. Ad es.
Get-Wmiobject -class "Win32_BIOS" -namespace "root\CIMV2" -Computer Server01 | Fl * -Force

martedì 2 agosto 2016

PowerShell: Verificare la presenza e raggiungibilità di un host in rete tramite Test-Connection

Chi lavora nel campo IT spesso utilizza l'utility Ping per verificare la presenza e raggiungibilità di un Host all'interno della rete. Il ping consiste nell'invio di un pacchetto ICMP (Internet Control Message Protocol) di tipo echo request e attendere in risposta un pacchetto ICMP di tipo echo reply.

Una funzione analoga in PowerShell può essere eseguita tramite il cmdlet Test-Connection. La sintassi del cmdlet è la seguente:

Test-Connection [-ComputerName] <String[]> [-AsJob] [-Authentication <AuthenticationLevel> {Default | None | Connect | Call | Packet | PacketIntegrity | PacketPrivacy | Unchanged} ] [-BufferSize <Int32> ] [-Count <Int32> ] [-Delay <Int32> ] [-Impersonation <ImpersonationLevel> {Default | Anonymous | Identify | Impersonate | Delegate} ] [-InformationAction <System.Management.Automation.ActionPreference> {SilentlyContinue | Stop | Continue | Inquire | Ignore | Suspend} ] [-InformationVariable <System.String> ] [-ThrottleLimit <Int32> ] [-TimeToLive <Int32> ] [ <CommonParameters>]


Parametri principali


-AsJob
Il parametro esegue il comando in background. Per poter utilizzare tale parametro è necessario eseguire PowerShell come amministratore

-Authentication<AuthenticationLevel>
Specifica il livello di autenticazione della connessione WMI (Test-Connection usa WMI). I valori accettati sono: UnchangedDefaultNoneConnectCallPacketPacketIntegrityPacketPrivacy

-BufferSize
Specifica la dimensione, in byte, del pacchetto inviato. Di default la dimensione è 32 byte.

-ComputerName
Si tratta di un parametro obbligatorio e consente di specificare il nome del computer da pingare o il suo indirizzo IP (in formato IPv4 o IPv6).

-Count
Specifica il numero di pacchetti/richieste da inviare. Di default vengono inviati 4 pacchetti.

-Credential
Specifica le credenziali dell'utente autorizzato ad inviare il ping dal computer specificato da -Source.

-Delay
Specifica l'intervallo, in secondi, tra i ping.

-Quiet
Specificando tale parametro verrà restituivo $true se l'host ha risposto al ping, $false in caso contrario. Tutti gli altri messaggi di risposta vengono soppressi.

-Source
Permette di specificare il nome del computer da cui parte il ping. Se non specificato il ping ha origine dal computer locale. É possibile indicare anche più origini del ping separandole tramite virgola.

-TimeToLive
Il parametro TimeToLive (TTL) permette di specificare il tempo di vita, in secondi, del pacchetto ICMP. Il parametro accetta valori interi compresi tra 1 e 255.



Esempi


Esempio 1
Test-Connection Server01
Test-Connection -ComputerName 192.168.0.1
Questi due comandi eseguono il ping rispettivamente verso il computer con nome Server01 e verso l'indirizzo 192.168.0.1. Nel primo comando il parametro -ComputerName viene omesso e indicato direttamente il nome del computer.
Test-Connection -ComputeName
FIG 1 - Test-Connection -ComputeName

Esempio 2
Test-Conntection -ComputerName Server01, Server02
É possibile passare a Test-Connection più host a cui inviare il pacchetto ICMP separandoli tramite virgola.

Esempio 3
Test-Connection -ComputerName 192.168.0.1 -Quiet
Con il parametro Quiet si riceve in output True o False a seconda se si riceve risposta o meno dal computer remoto. Questa caratteristica ci consente di utilizzarlo per verificare la raggiungibilità di un determinato host prima di tentare una qualsiasi operazione. Ad es. 
if (Test-Connection -ComputerName Server01 -Quiet) {New-PSSession Server01}
Test-Connection, parametro -Quiet
FIG 2 - Test-Connection, parametro -Quiet

Esempio 4
Test-Connection -Source Server02, Server03 -ComputerName Server01 -Credential Dominio\Utente
Questo comando invia ping da diversi mittenti/host ad un singolo computer Server01. Il parametro Credential viene utilizzato per specificare le credenziali di un utente che è abilitato all'invio di ping da Server02 e Server03. Questo comando può essere utile per verificare la latenza delle connessioni da diversi punti.




lunedì 1 agosto 2016

PowerShell: Mettere in pausa l'attività in PowerShell tramite Start-Sleep

Il cmdlet Start-Sleep viene utilizzato generalmente all'interno degli script al fine di mettere in pausa l'attività per un periodo specificato. La sintassi del cmdlet è la seguente:
Start-Sleep [-Seconds] <Int32> 
oppure
Start-Sleep -Milliseconds <Int32>


Parametri

-Seconds
Può essere abbreviato in -s e specifica il tempo di attesa espresso in secondi prima di proseguire con l'esecuzione dell'attività.

-Milliseconds
Specifica il tempo di attesa espresso in millisecondi e può essere abbreviato in -m.


Per mettere in pausa per 10 secondi l'attività
Start-Sleep -s 10
oppure
Start-Sleep -m 10000

giovedì 28 luglio 2016

Ransomware Bart : Come recuperare i dati

Il ransomware Bart è stato scoperto da ProofPoint e dietro la sua distribuzione c'è lo stesso gruppo che distribuisce i ransomware Locky e Dridex. Il ransomware prende in ostaggio i dati della vittima comprimendoli in file .zip protetti da password. A differenza degli altri ransomware, Bart non usa una chiave pubblica per cifrare i dati ma gli sviluppatori sfruttano il fatto che il formato ZIP supporta in modo nativo la cifratura AES. Proprio per questo modo di operare non ha bisogno di comunicare con i server di comando e controllo e può agire anche se non connesso ad Internet. Terminata la sua opera, Bart visualizza un messaggio all'utente in cui viene richiesto un riscatto di 3 bitcoin per rilasciare la password dei file .zip contenti i dati.


Come viene distribuito il ransomware

Bart viene distribuito, come la maggior parte dei ransomware, tramite un email con in allegato un file .zip. Il file zip contiente un file JS (Javascript) che ha un nome simile a PDF_[10 cifre random].js, FILE-[10 cifre random].js o DOC-[10 cifre random].js. Il codice JavaScript presente all'interno del file è offuscato al fine di rendere difficile, a chi lo analizza, scoprire le operazioni che esegue. Se la vittima apre l'allegato .zip, Windows Script Host (wscript.exe) lancia il JavaScript che avvia il download del malware eseguibile RocketLoader all'interno della cartella %temp% e poi lo esegue. Il malware provvede poi al download e all'esecuzione del ransomware Bart.

La prima operazione che effettua il ransomware è quella di verificare la lingua del sistema operativo. Se la lingua rilevata è russo, bielorusso o lingua ucraina il ransomware termina senza effettuare alcuna operazione, in caso contrario verifica le lettere dei dischi/partizioni e inizia a zippare con password, aggiungendo l'estensione .Bart.zip, i file che hanno le seguente etensioni:

.n64, .m3u, .m4u, .mid, .wma, .flv, .3g2, .mkv, .3gp, .mp4, .mov, .avi, .asf, .mpeg, .vob, .mpg, .wmv, .fla, .swf, .wav, .mp3, .qcow2, .vdi, .vmdk, .vmx, .gpg, .aes, .ARC, .PAQ, .tar.bz2, .tbk, .bak, .tar, .tgz, .gz, .7z, .rar, .zip, .djv, .djvu, .svg, .bmp, .png, .gif, .raw, .cgm, .jpeg, .jpg, .tif, .tiff, .NEF, .psd, .cmd, .bat, .sh, .class, .jar, .java, .rb, .asp, .cs, .brd, .sch, .dch, .dip, .vbs, .vb, .js, .asm, .pas, .cpp, .php, .ldf, .mdf, .ibd, .MYI, .MYD, .frm, .odb, .dbf, .db, .mdb, .sq, .SQLITEDB, .SQLITE3, .asc, .lay6, .lay, .ms11(Security copy), .ms11, .sldm, .sldx, .ppsm, .ppsx, .ppam, .docb, .mm, .sxm, .otg, .odg, .uop, .potx, .potm, .pptx, .pptm, .std, .sxd, .pot, .pps, .sti, .sxi, .otp, .odp, .wb2, .123, .wks, .wk1, .xltx, .xltm, .xlsx, .xlsm, .xlsb, .slk, .xlw, .xlt, .xlm, .xlc, .dif, .stc, .sxc, .ots, .ods, .hwp, .602, .dotm, .dotx, .docm, .docx, .DOT, .3dm, .max, .3ds, .xm, .txt, .CSV, .uot, .RTF, .pdf, .XLS, .PPT, .stw, .sxw, .ott, .odt, .DOC, .pem, .p12, .csr, .crt, .key

Non tutti i file vengono zippati, il ransomware risparmia i file che, all'interno del percorso, contengono le seguenti stringhe:
tmp, winnt, Application Data, AppData, PerfLogs, Program Files (x86), Program Files, ProgramData, temp, Recovery, $Recycle.Bin, System Volume Information, Boot, Windows.

Al termine dell'operazione, Bart crea sul desktop dell'utente i file recover.txt e recover.bmp: mentre il file con estensione .bmp viene impostato come wallpaper di Windows il file .txt viene aperto automaticamente da blocco note. All'interno del messaggio troviamo l'ID univoco assegnato al computer della vittima e il sito TOR a cui bisogna collegarsi per ulteriori informazioni su come procurarsi i bitcoin, l'ammontare del riscatto e l'indirizzo a cui pagare.


Recupero dei dati

AVG, azienda nota nel campo della sicurezza informatica, ha rilasciato un tool (AVG Decryption Tool for Bart) per recuperare i dati presi in ostaggio dal ransomware Bart. Al fine di recuperare la password dei file zip, il tool richiede che l'utente disponga della versione cifrata e non di uno stesso file (la password è uguale per tutti i file). Una volta trovata la password è possibile recuperare i restanti file presi in ostaggio dal ransomware.

Passo 1
Procurarsi ed eseguire AVG Decryption Tool for Bart. Il tool può essere scaricato da QUI

Passo 2
Avviato il tool ci si trova dinanzi alla schermata di benvenuto mostrata in FIG 1. Cliccare sul pulsante Avanti per proseguire.
AVG Decryption Tool for Bart, (1/5) Welcome
FIG 1 - AVG Decryption Tool for Bart, (1/5) Welcome
Passo 3
Nella schermata successiva viene chiesto di specificare il disco/partizione o una cartella (cliccando su Add Folder) dove risiedono i nostri dati cifrati dal ransomware. Una volta specificato il disco/partizione, cliccare su Avanti.

FIG 2 - AVG Decryption Tool for Bart, (2/5) Select a location to decrypt

Passo 4
In questo passo dobbiamo passare la programma la versione cifrata (nella prima casella) e quella originale (nella seconda casella) di uno stesso file quindi verrà abilitato il pulsante Avanti su cui dobbiamo cliccare con il mouse per proseguire.
AVG Decryption Tool for Bart, (3/5) Add an example file
FIG 3 - AVG Decryption Tool for Bart, (3/5) Add an example file
Passo 5
Per avviare il processo di recupero password del file zip bisogna cliccare su Start (FIG 4).
AVG Decryption Tool for Bart, (4/5) Crack the password
FIG 4 - AVG Decryption Tool for Bart, (4/5) Crack the password
Passo 6
Trovata la password basterà cliccare ancora su Avanti per procedere al recupero di tutti i dati. Non resta che attendere il termine dell'operazione.

AVG Decryption Tool for Bart, (4/5) Crack the password, password trovata
FIG 5 - AVG Decryption Tool for Bart, (4/5) Crack the password, password trovata



Programmazione Batch: Verificare se lo script è stato eseguito come Amministratore (privilegi elevati)

In alcuni casi può essere utile verificare se lo script batch da noi realizzato è stato eseguito come amministratore (con privilegi elevati). Un modo veloce per effettuare la verifica all'interno dello script è attraverso una particolare variabile d'ambiente: %errorlevel%. Questa variabile contiene un valore relativo all'esito di gran parte dei comandi/programmi: quando un comando viene portato a termine correttamente il valore di %errorlevel% sarà uguale a 0.

Alcuni comandi, come openfiles, NET SESSION, ecc. richiedono privilegi elevati per essere eseguiti e questo li rende adatti al nostro scopo infatti, tentando di eseguire questi comandi normalmente (senza privilegi elevati), verranno terminati con errore e alla variabile %errorlevel% verrà assegnato un valore diverso da 0 (FIG 1).


Variabile d'ambiente %errorlevel%
FIG 1 - Variabile d'ambiente %errorlevel%


Nello script batch che è possibile scaricare dal link DOWNLOAD la verifica viene effettuata proprio con il comando openfiles. L'output del comando viene scartato dirottandolo su NUL (>nul 2>&1) e viene verificata la variabile d'ambiente %errorlevel%: se la variabile ha valore 0 allora il nostro script è stato eseguito con privilegi elevati e possiamo proseguire con le altre istruzioni, in caso contrario lo script termina senza eseguire altre operazioni. Le istruzioni principali del nostro script sono dunque le seguenti:


openfiles>nul 2>&1
if %errorlevel%==0 goto AdminOK






mercoledì 27 luglio 2016

PowerShell: Visualizzare le informazioni sulla scheda audio utilizzando Get-Wmiobject

Windows Management Instrumentation (WMI) è una tecnologia integrata in tutti i sistemi operativi Microsoft, a partire da Windows ME, fondamentale per l'amministrazione dei sistemi Windows (sia in locale che da remoto). WMI consente di visualizzare e gestire un'ampia gamma di informazioni in maniera uniforme. Per accedere alle potenzialità di tale tecnologia tramite PowerShell è necessario utilizzare il cmdlet Get-WmiObject. La tecnologia WMI fa uso di classi per descrivere le risorse che possono essere gestite. Il primo problema da affrontare è proprio quello di conoscere cosa si può fare con WMI e quali sono le classi utilizzate:  sono disponibili centinaia di classi WMI ciascuna delle quali contiene decine di proprietà relative ad una specifica risorsa. Per visualizzare l'elenco delle classi WMI in PowerShell è possibile utilizzare il seguente comando
Get-WmiObject -List

Per visualizzare le informazioni sulla scheda audio installata nel sistema utilizzeremo la classe Win32_SoundDevice con il seguente comando
Get-WmiObject -Class "Win32_SoundDevice" | Fl * -Force



Get-WmiObject proprietà scheda audio
FIG 1 - Get-WmiObject proprietà scheda audio

martedì 26 luglio 2016

MS Exchange: Elencare i Distribution Groups tramite EMS

Per elencare i gruppi di distribuzione (Distribution Group) definiti sull'infrastruttura di posta MS Exchange è possibile utilizzare il cmdlet Get-DistributionGroup tramite EMS (Exchange Management Shell).
Per default vengono visualizzati solo i primi 1000 item pertanto, se nell'infrastruttura sono presenti più di 1000 gruppi di distribuzione, è necessario utilizzare il parametro -ResultSize così come indicato di seguito.

Get-DistributionGroup -ResultSize Unlimited

Con il cmdlet  Get-DistributionGroup possiamo anche verificare se esiste un determinato gruppo di distribuzione passando il nome al cmdlet: Get-DistributionGroup <nome_gruppo_distribuzione>

Ad es. per visualizzare informazioni sul gruppo di distribuzione denominato "supporto"
Get-DistributionGroup supporto
oppure
Get-DistributionGroup -Identity supporto




Il cmdlet accetta anche caratteri wildcard
Get-DistributionGroup suppor*

Utilizzando il parametro -Anr, è possibile utilizzare una stringa parziale che verrà ricercata tra diversi attributi del gruppo di distribuzione in particolare in CommonName (CN)DisplayNameFirstNameLastName e Alias.
Il seguente comando restituisce tutti i gruppi di distribuzione in cui all'interno di uno degli attributi indicati precedentemente compare la stringa "supporto"
Get-DistributionGroup -Anr supporto 

Per visualizzare maggiori dettagli relativamente ad un gruppo di distribuzione è possibile utilizzare un cmdlet Format come ad es. Format-List
Get-DistributionGroup -Identity supporto | Format-List