lunedì 9 giugno 2014

Visualizzare funzioni di una DLL tramite DLL Export Viewer

Chi programma sa bene che a volte è necessario conoscere le funzioni messe a disposizione di una DLL esterna. Proprio in questi casi DLL Export Viewer può fare al caso nostro. Oltre a visualizzare le funzioni e il loro indirizzo di memoria virtuale contenute all’interno di un file DLL permette anche di visualizzare le funzioni e le DLL richiamate da un processo in esecuzione sulla macchina. Tali informazioni ci possono essere d’aiuto anche in ambito di debug di un’applicazione: ad es. una volta verificato l’indirizzo della funzione che ci interessa possiamo inserire un breakpoint all’interno del nostro debugger.

Il tool può essere scaricato da www.nirsoft.net/utils/dll_export_viewer.html, non richiede installazione e l’utilizzo è molto semplice. L’ultima versione al momento disponibile è la 1.63. Una volta avviato il file eseguibile ci verrà presentata una finestra in cui dovremmo selezionare l’operazione di nostro interesse:


Schermata iniziale DLL Export Viewer
Fig. 1 Schermata iniziale
Load all functions from standard system DLLs (user32, Kernel32, and so on…)
Ci permette di visualizzare tutte le funzioni presenti nelle DLL di sistema

Load functions from the following DLL file: (You can specify wildcard too)
Permette di specificare una DLL da analizzare

Load functions from the DLL files specified in the following text file: (CRLF delimited file)
Permette di indicare un file di testo contenente l’elenco delle DLL da analizzare

Load functions from all DLLs attached to the selected process:
Elenca le funzioni e le DLL richiamate da un particolare processo.

Una volta selezionata l’opzione desiderata ed eventualmente indicata la DLL da analizzare possiamo cliccare su OK per procedere con la visualizzazione dell’elenco delle funzioni. 

Fig. 2 Analisi DLL


L’applicazione ci permette di salvare il report in formato HTML, di ricercare con google informazioni su una particolare funzione e di copiare nella clipboard il suo indirizzo.


Insomma DLL Export Viewer rappresenta un piccolo tool che potrà essere molto utile ai programmatori e sistemisti.

sabato 7 giugno 2014

MS Exchange: abilitare/disabilitare Exchange ActiveSync, MAPI, OWA, POP o IMAP per una cassetta postale tramite EMS


Exchange Management Shell (EMS), introdotto con Microsoft Exchange Server 2007, è un'estensione di Powershell orientata agli amministratori dei server Exchange. Quest'articolo sarà il primo di una lunga (spero) serie relativa ai comandi su EMS. In tali articoli non mi soffermerò sulla storia o sulle funzioni di questa potentissima shell (l'argomento è troppo vasto per essere trattato in articoli su blog) ma mi concentrerò solamente su  determinate operazioni o comandi utili.

In quest'articolo vedremo come attivare/disattivare delle caratteristiche delle caselle di posta su Exchange Server tramite EMS.


Il comando trattato in questo articolo è Set-CasMailbox che ci consente di abilitare/disabilitare le seguenti caratteristiche di una casella di posta:

- Internet Message Access Protocol  (IMAP)
- Post Office Protocol  (POP)
- Microsoft Outlook Web App (OWA)
- Messaging Application Programming Interface (MAPI)
- Microsoft Exchange ActiveSync


Per abilitare il protocollo IMAP sulla casella dell'utente
Set-CASMailbox UserName@DomainName -ImapEnabled $True

Per disabilitare il protocollo IMAP sulla casella dell'utente
Set-CASMailbox UserName@DomainName -ImapEnabled $False

Per abilitare il protocollo POP sulla casella dell'utente
Set-CASMailbox UserName@DomainName -PopEnabled $True

Per disabilitare il protocollo POP sulla casella dell'utente
Set-CASMailbox UserName@DomainName -PopEnabled $False

Per abilitare OWA sulla casella dell'utente
Set-CASMailbox UserName@DomainName -OWAEnabled $True

Per disabilitare OWA sulla casella dell'utente
Set-CASMailbox UserName@DomainName -OWAEnabled $False

Per abilitare il protocollo MAPI sulla casella dell'utente
Set-CASMailbox UserName@DomainName -MAPIEnabled $True

Per disabilitare il protocollo MAPI sulla casella dell'utente
Set-CASMailbox UserName@DomainName -MAPIEnabled $False

Per abilitare Exchange ActiveSync sulla casella dell'utente
Set-CASMailbox UserName@DomainName -ActiveSyncEnabled $True

Per disabilitare Exchange ActiveSync sulla casella dell'utente
Set-CASMailbox UserName@DomainName -ActiveSyncEnabled $False



Ovviamente le opzioni -ImapEnabled, -PopEnabled, -OWAEnabled, -MAPIEnabled, -ActiveSyncEnabled possono essere utilizzate anche contemporaneamente e al posto della casella di posta dell'utente possiamo utilizzare anche il display name, l'alias, il Distinguished Name (DN) o dominio\account AD.
Ad es. se vogliamo abilitare l'accesso tramite OWA e disabilitare il protocollo IMAP possiamo utilizzare il seguente comando
Set-CASMailbox UserName@DomainName -OWAEnabled $True -ImapEnabled $False


E se volessimo agire su più caselle?
In questo caso potremmo preparare un file di testo con all'interno le caselle di posta su cui bisogna agire e quindi creare un ciclo che, per ogni casella di posta elencata all'interno del file, provveda ad effettuare gli opportuni settaggi/abilitazioni.
Procediamo con un esempio: supponiamo di voler abilitare/disabilitare l'accesso tramite OWA ad un elenco di caselle di posta.
Per effettuare questa operazione potremmo procedere in modi diversi. Io ho preferito procedere nel seguente modo:

  • Creato un file con estensione CSV con all'interno elencate le caselle di posta su cui agire. Il file CSV non è altro che un file di testo in cui in ogni rigo è indicata la casella di posta/account su cui agire seguito da invio.
  • Creato un file di script Powershell (file con estensione PS1 da lanciare tramite Exchange Management Shell) contenete i comandi da eseguire e accetta come parametri il nome del file CSV conte


Il file PS1 l'ho nominato EnableDisableOWA.ps1 mentre il file CSV elenco.csv
I due file possono essere scaricati cliccando QUI

- Scompattare i file in una cartella
- Eseguiamo EMS
- lanciamo il file ps1 tramite EMS indicando il percorso completo del file e passando, come parametri, il file CSV e $TRUE o $FALSE a seconda se vogliamo abilitare o disabilitare OWA.

ad es. 
 c:\EnableDisableOWA.ps1 c:\elenco.csv $TRUE
per abilitare OWA su tutte le cartelle elencate in elenco.csv 

Il codice contenuto all'interno del file PS1 è il seguente


param($Arg1,$Arg2)
Set-AdServerSettings -ViewEntireForest $true 
$csv = Import-Csv $Arg1 -Header @("MailboxToEnableDisable")
foreach ($line in $csv) { 
  Set-CASMailbox $Arg1 -OWAEnabled $Arg2
} 

analizziamo passo passo lo script
param($Arg1,$Arg2)
L'istruzione param($Arg1,$Arg2) cattura i parametri passati alla chiamata del file di script. Nel nostro caso il file elenco.csv e $TRUE.

Set-AdServerSettings -ViewEntireForest $true
É utile solo nel caso in cui in Active Directory (AD) siano presenti più domini i cui utenti dispongono di casella di posta. In questo modo vengono gestiti tutti gli oggetti della foresta.

$csv = Import-Csv $Arg1 -Header @("MailboxToEnableDisable")
Importa il file CSV indicato come primo parametro durante la chiamata allo Script EnableDisableOWA.ps1

foreach ($line in $csv) { 
  Set-CASMailbox $Arg1 -OWAEnabled $Arg2
}
Per ogni riga del file CSV viene abilitata/disabilitato l'accesso ad OWA a seconda che sia stato passato il parametro $TRUE o $FALSE nella chiamata a EnableDisableOWA.ps1


Le funzioni del cmdlet Set-CASMailbox non finiscono qui: ci sono altri parametri che permettono di effettuare altre operazioni. Tuttavia le altre operazioni esulano dalla trattazione di questo articolo.





venerdì 6 giugno 2014

Keylogger in Ajax

In questo articolo illustrerò come costruire un semplice keylogger per una pagina web sfruttando Ajax.
Prima di iniziare ci tengo a specificare che il presente articolo è solo a scopo informativo e, ricordo, che rubare dati e password è un reato perseguibile penalmente.

Con l’avvento di nuove tecniche di programmazione introdotte dal Web 2.0 abbiamo assistito ad una maggiore iterazione tra gli utenti e le pagine web grazie anche allo scambio di informazioni tra client e server che avviene in maniera più o meno trasparente. Questa evoluzione porta con se nuovi tipi di problemi relativi alla sicurezza.

Di seguito mostrerò come costruire un keylogger su una pagina web. In pratica il keylogger cattura tutto quello che l’utente scrive nella pagina web. Di per sé questo tipo di programma non sembra essere molto pericoloso ma cosa succederebbe se sfruttassimo un sito vulnerabile a XSS? Potremmo fare in modo che il nostro script venga caricato e catturi ciò che digita l’utente sulla pagina del sito vulnerabile.

Per prima cosa creiamo un file HTML con dei campi in cui l’utente andrà a scrivere. Ho chiamato questo file home.html. Ciò che ci interessa è che la nostra pagina, con l’utilizzo di chiamate asincrone, invii dati al server ogni volta che l’utente digiti qualche tasto. Per fare questo ci aiuteremo con javascript e utilizzeremo l’oggetto XMLHttpRequest.  Per intercettare la pressione di un tasto da parte dell’utente, nella pagina HTML  ho usato l’evento onkeypress all’interno del tag  <body> e richiamo l’handler keylog() che andrò a sviluppare all’interno del file keylogger.js.

<body onkeypress="keylog()">

Il ruolo della funzione keylog() presente in keylogger.js è quello di intercettare il tasto premuto e far partire una richiesta GET al server. Event.charCode ci fornisce il valore Unicode del tasto premuto. Nel caso in cui event.charCode non fosse supportato dal browser, andremo a leggere il valore del tasto premuto utilizzando la proprietà event.keycode. Ad es. Internet Explorer supporta solo la proprietà event.keycode. La funzione fromCharCode ci permette di ricavare una stringa dai valori Unicode rilevati:

keyPressed = String.fromCharCode(evt.charCode ?evt.charCode : evt.keyCode);

Una volta individuato il tasto premuto keylog() richiama la funzione makeRequest() che ci permette di effettuare una chiamata GET asincrona verso il server.

makeRequest('log.php?keyPressed=' + keyPressed);

Come è possibile notare, con la funzione makeRequest andiamo a richiamare il file log.php a cui passiamo il tasto premuto. 

Il file log.php è costituito da poche righe di codice; per semplicità sono stati omessi volutamente i controlli e la gestione degli errori. Il suo scopo è quello di ricevere il valore del tasto premuto attraverso GET e salvarlo all’interno di un file di log sul server (file.log). Ovviamente affinché log.php riesca a scrivere il file è necessario fornire gli opportuni permessi sulla cartella.

Qui potete scaricare i sorgenti dei file creati

Conclusioni
Creare un keylogger in una pagina web è un’operazione piuttosto semplice e, in questo caso, volutamente innocua, infatti il nostro keylogger intercetterà solo ciò che viene digitato sulla nostra pagina web. Tuttavia qualche malintenzionato potrebbe creare un'apposita pagina di phishing oppure sfruttare qualche sito vulnerabile a XSS per rubare i dati degli utenti che accedono al sito. Avere un buon antivirus spesso non basta ma bisogna usare buonsenso e prestare la massima attenzione. La forza di una catena si misura dalla forza del suo anello più debole e, nel campo della sicurezza informatica, l'anello più debole è spesso rappresentato dall'essere umano.

giovedì 5 giugno 2014

Sbloccare file PST di Outlook protetti da password: PstPassword


Eccoci a parlare di uno dei tanti utili tool sviluppato da NirSoft: PstPassword.

Spesso mi capita di avere a che fare con clienti che impostano la password alle loro cartelle personali in Outlook. Tutto fila liscio fino a quando Outlook “ricorda” la password inserita ma quando l’utente cerca di aprire il file PST da un’altra postazione o dopo aver reinstallato il sistema ecco che cominciano i guai. Ovviamente l’utente non ricorda la password inserita e anzi, nega spudoratamente di aver protetto il file attribuendo la colpa a Microsoft. In questi casi ci viene in soccorso una piccola utility free sviluppata da NirSoft dal nome PstPassword. È possibile scaricare l’utility da www.nirsoft.net/utils/pst_password.html.

Esistono due versioni: una che permette l’installazione sul sistema mentre l’altra non richiede alcuna installazione ed  è composta da un file .zip con all’interno il file eseguibile e il file di help. Personalmente preferisco sempre le versioni che non si installano, che lasciano meno “residui” sul sistema e che possono essere eseguite anche se l’utente non dispone dei privilegi per installare applicazioni. 

ATTENZIONE: alcuni antivirus potrebbero riconoscere questo tool come un malware. In questi casi conviene staccarsi, per sicurezza, dalla rete e disattivare momentaneamente l’antivirus fino a quando non abbiamo finito di lavorare con il nostro tool.

Una volta avviata l’applicazione appare una finestra con l’elenco dei file PST agganciati in Outlook con indicate le relative password. Nel caso in cui il file PST non fosse in elenco possiamo selezionarlo tramite il menu File->Select PST File  (oppure premendo F7). Le password indicate non sono quelle impostate dall’utente: il tool, in pratica, ci indica altre password con cui è possibile aprire ugualmente il file PST. Ciò sta ad indicare che il sistema di protezione dei file PST non è poi così efficace. Aperto il file PST tramite Outlook, con una delle password indicate da Pstpassword, possiamo eliminare la protezione o impostare una nuova password sperando che questa volta l’utente se la ricordi.

That’s all!


PstPassword
FIG. 1 PstPassword

mercoledì 4 giugno 2014

Impostare i DNS più veloci per la propria connessione: namebench


Il DNS (Domain Name System) è un sistema, basato su un database distribuito, utilizzato per la risoluzione di nomi host in indirizzi ip (risoluzione) e viceversa (risoluzione inversa). 
Quando navighiamo in internet il DNS si occupa di tradurre l’indirizzo che inseriamo nel browser nel corrispondente indirizzo IP. Utilizzando dei server DNS molto lenti compromette anche la velocità della nostra navigazione.

NameBench è un’applicazione open source (http://code.google.com/p/namebench/) che esegue dei test sui DNS segnalandoci quelli che hanno prestazioni migliori. L’applicazione è disponibile per i sistemi Mac OS X, Windows e Unix, non necessita di installazione e può essere eseguita sia in modalità grafica che a linea di comando. Nel momento in cui scrivo è disponibile la versione 1.3.1. In ambiente Windows una volta avviato il file .exe scaricato si scompatta automaticamente nella cartella ..\<account_utente\ AppData\Local\Temp (in XP  ..\<account_utente>\Impostazioni locali\temp)  e dopo pochi secondi ci apparirà una schermata con diverse opzioni che di seguito vediamo in dettaglio.

screenshot di namebench
Fig.1

Nameservers
Nella casella Nameservers vengono elencati una serie di DNS su cui vogliamo effettuare il test. Per default vengono visualizzati i DNS impostati sulla nostra workstation ma è possibile aggiungerne altri manualmente separandoli con una virgola e uno spazio.

Include global DNS providers
Selezionando tale opzione vengono inclusi nel test i DNS globalmente conosciuti e utilizzati come OpenDNS, Google Public DNS e UltraDNS. È possibile modificare l’elenco dei DNS andando a modificare il file namebench.cfg

Include best available regional DNS services
Questa opzione ci permette di includere I DNS più veloci presenti nella nostra regione di appartenenza.

Include censorship checks
Questa opzione ci consente di verificare se il server DNS testato blocca l’accesso a determinate siti.

Upload and share your anonymized results
Abilitando tale opzione si condivide, in modo anonimo, i risultati dei propri test.

Your location
Attualmente questo campo non viene utilizzato.

Health Check Performance
Questa opzione indica a namebench a quanti server DNS può accedere contemporaneamente. Scegliendo l’opzione Fast, namebench accede a 40 server DNS mentre scegliendo l’opzione Slow (consigliata nel caso si hanno problemi sulla connessione ad internet) l’applicazione accede a 10 server DNS in contemporanea impiegando più tempo per portare a termine test.

Query Data Source
I test eseguiti da Namebench consistono nell’interrogare i DNS sull’indirizzo di un elenco di siti. Tale elenco è memorizzato in un file. Il tool viene fornito insieme ad una lista dei 10000 siti più famosi in tutto il mondo secondo alexa.com (alexa-top-10000-global.txt). E’ possibile modificare l’elenco dei siti andando a modificare il file alexa-top-10000-global.txt presente nella cartella \data oppure aggiungendo un altro file di testo nella cartella stessa.


Number of queries
Tale opzione permette di specificare quante query effettuare per ogni server DNS.

Una volta impostate le opzioni desiderate è possibile eseguire il test cliccando sul pulsante Start Benchmark. Dopo alcuni minuti ci apparirà una pagina web con evidenziati graficamente i risultati del test e , in alto a destra, i DNS suggeriti. 


Risultato test namebench
Fig. 2



Risultato test namebench grafico
Fig. 3

Risultato test namebench grafico 2
Fig. 4

Risultato test namebench resoconto
Fig. 5