Visualizzazione post con etichetta PHP. Mostra tutti i post
Visualizzazione post con etichetta PHP. Mostra tutti i post

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.