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

lunedì 25 luglio 2016

PowerShell: Verificare l'esistenza di un oggetto con Test-Path

Il cmdlet Test-Path viene generalmente utilizzato per verificare l'esistenza di un percorso specifico, tuttavia può essere utilizzato per verificare anche altri tipi di oggetti. La sua sintassi è la seguente:

Test-Path [-Path] <String[]> [-Credential <PSCredential> ] [-Exclude <String[]> ] [-Filter <String> ] [-Include <String[]> ] [-InformationAction <System.Management.Automation.ActionPreference> {SilentlyContinue | Stop | Continue | Inquire | Ignore | Suspend} ] [-InformationVariable <System.String> ] [-IsValid] [-NewerThan <Nullable [System.DateTime]> ] [-OlderThan <Nullable [System.DateTime]> ] [-PathType <TestPathType> {Any | Container | Leaf} ] [-UseTransaction] [ <CommonParameters>]

oppure


Test-Path -LiteralPath <String[]> [-Credential <PSCredential> ] [-Exclude <String[]> ] [-Filter <String> ] [-Include <String[]> ] [-InformationAction <System.Management.Automation.ActionPreference> {SilentlyContinue | Stop | Continue | Inquire | Ignore | Suspend} ] [-InformationVariable <System.String> ] [-IsValid] [-NewerThan <Nullable [System.DateTime]> ] [-OlderThan <Nullable [System.DateTime]> ] [-PathType <TestPathType> {Any | Container | Leaf} ] [-UseTransaction] [ <CommonParameters>]

Parametri principali

-Credential
Permette di specificare le credenziali con cui eseguire il comando. É possibile indicare il nome utente (come ad es. "utente1"), il nome utente e il dominio (ad es. "Contoso\utente1") oppure passare un oggetto generato da Get-Credential contenente le credenziali.

-Exclude
Esclude un elemento dalla verifica. Ad es. se si intende escludere i file di testo inclusi in una cartella possiamo utilizzare il parametro -Exclude "*.txt".

-Filter
Permettere si specificare un filtro relativo al parametro -Path.

-Include
L'opposto di Exclude, consente di includere elementi da verificare.

-IsValid
Indipendentemente se il percorso esista o meno, con il parametro IsValid si va a verificare se la sintassi del path specificato è corretta. Restituisce True se la sintassi è corretta e False in caso contrario.

-LiteralPath
Specifica il percorso che si intende verificare. A differenza del parametro Path, il valore di LiteralPath è utilizzato esattamente come digitato: non sono supportati caratteri wildcard e i caratteri di escape vanno racchiusi tra apici singoli.

-Path
Specifica il percorso da testare. Accetta caratteri wildcard. I percorsi che contengono spazi vanno racchiusi tra apici.

-PathType
Permette di specificare se l'oggetto indicato dal parametro Path è di un particolare tipo:
Container. Un elemento che contiene altri elementi come ad es. una directory.
Leaf. Un elemento singolo che non contiene altri elementi come ad es. un file.
Any.  Qualsiasi tipo.

PowerShell, Test-Path
FIG 1 - PowerShell, Test-Path


Vediamo qualche esempio.



Esempio 1
Test-Path -Path "C:\Users\Virtual\Desktop\Cartella Archivio"
Verifica se la cartella C:\Users\Virtual\Desktop\Cartella Archivio esiste in tal caso restituisce True in caso contrario False.

Esempio 2
Test-Path -Path "C:\Progetti\c#\*" -exclude *.cpp
Verifica se la cartella C:\Progetti\c#\ contiene file ad esclusione dei file con estensione .cpp.

Esempio 3
Test-Path -Path HKLM:\Software\Microsoft\PowerShell\
Il cmdlet Test-Path può essere utilizzato anche per verificare la presenza di chiavi di registro. In questo esempio Test-Path verifica se esiste la chiave di registro HKEY_LOCAL_MACHINE\Software\Microsoft\PowerShell.

Esempio 4
Test-Path Env:\OS
Verifica se è definita la variabile d'ambiente OS.

Esempio 5
Test-Path Alias:\cls
Verifica la presenza dell'Alias cls (Clear-Host) in PowerShell.

Esempio 6
Test-Path -Path C:\Temp -PathType Container
Verifica se l'oggetto indicato da Path è un Container, cioè se può contenere altri oggetti come ad es. una directory che contiene altri file e sottodirectory. In questo specifico caso la directory C:\Temp è di tipo Container pertanto verrà restituito True

Esempio 7
Test-Path -Path C:\Temp -PathType Leaf
il tipo Leaf verifica che l'oggetto indicato dal parametro Path non sia in grado contenere altri oggetti.



venerdì 22 luglio 2016

Outlook: Abilitare la modifica dell'oggetto di un'email ricevuta in Outlook 2016

Alcuni utenti, per esigenze lavorative, possono avere la necessità di modificare l'oggetto di un messaggio ricevuto. A differenza delle versioni precedenti di Outlook nella versione 2016, quando si apre un'email, l'intestazione (contenente mittente, destinatario, oggetto e data/ora di invio del messaggio) viene visualizzata in modalità compatta. In tale modalità non è possibile modificare l'oggetto dell'email. Per farlo è necessario cliccare sull'apposita icona triangolare evidenziata in FIG 1 per espandere l'intestazione come in FIG 2. Non è necessario ripetere l'operazione per ogni messaggio aperto, infatti l'impostazione sarà mantenuta anche per i successivi messaggi.


Outlook 2016, espandere intestazione messaggio
FIG 1 - Outlook 2016, espandere intestazione messaggio
Outlook 2016, Intestazione estesa
FIG 2 - Outlook 2016, Intestazione estesa

Per effettuare tale impostazione tramite il registro di sistema è possibile procedere nel seguente modo:
  • Avviare l'editor del registro di sistema (WIN+R e digitare regedit seguito da invio)
  • Posizionarsi su
    HKEY_CURRENT_USER\SOFTWARE\Microsoft\Office\16.0\Outlook\Options\Mail
  • Creare, se non presente, un valore DWORD (32bit), nominarlo MinimalHeaderOn e valorizzarlo a 0

Affinché la modifica effettuata nel registro di sistema diventi effettiva è necessario riavviare Outlook.
Outlook 2016, Registro di sistema - valore MinimalHeaderOn
FIG 3 - Outlook 2016, Registro di sistema - valore MinimalHeaderOn

Modificando l'oggetto di un messaggio la modifica sarà visibile nell'anteprima del messaggio e aprendo l'email ma non nella sezione elenco messaggi dove verrà visualizzato ancora l'oggetto originale. Per visualizzare l'oggetto modificato anche all'interno del pannello contenente l'elenco messaggi è necessario disabilitare, dal menu Visualizza, l'opzione Mostra come conversazioni.
Outlook 2016, disabilitare Mostra come conversazioni dal menu Visualizza
FIG 4 - Outlook 2016, disabilitare Mostra come conversazioni dal menu Visualizza

L'opzione può essere disabilitata anche cliccando, con il tasto destro del mouse, sull'intestazione/colonne della sezione elenco messaggi e deselezionando la relativa voce dal menu contestuale (FIG 5).
Outlook 2016, disabilitare Mostra come conversazioni da elenco messaggi
FIG 5 - Outlook 2016, disabilitare Mostra come conversazioni da elenco messaggi