Il SoC & Threat Intelligence Team di Swascan ha rilevato un’avanzata campagna di phishing a tema Black Friday.
Le mail di phishing che si ricevono sono di svariato tipo e tra le più note, per esempio, quelle in cui si finge la mancata consegna di un pacco:
Il link che si cela dietro il tasto “CONTROLLA QUI” è il seguente:
http[:]//jomcloud[.]help/?dD1jJmQ9ODUwMzImbD0xNDU4MSZjPTE1NDUyNw==
E’ possibile notare come nella URI sia presente un codice in Base64, di seguito la decodifica:
Dalla decodifica è possibile notare come siano presenti dei codici identificativi che verranno poi utilizzati per reindirizzare la vittima in base alla sua geolocalizzazione: t=c&d=85032&l=14581&c=154527
La GET request che viene effettuata una volta che si preme sul bottone mostra come viene fatta una verifica sulla correttezza della URL:
A questo punto viene contattato il dominio https[:]//jibaaksla[.]com dove si può notare come nella URI come vengono richiamati gli ID presenti al primo link che fa redirect al dominio https[:]//lobbydimer.com::
È possibile notare come anche in questo caso siano presenti nella URI le variabili s1, s2, s3, s4, ow, s10 che verranno poi utilizzare ulteriormente per reindirizzare e customizzare la campagna.
Analizzando la GET request è possibile notare come i cookie nella risposta siano formati dalla variabile s2 + time + id univoco:
Nella URL è presente il seguente Javascript offuscato:
Deoffuscando il codice si ottiene quanto segue:
'use strict';
window.history.pushState({}, '', '/9f93a45f8bd0bf4910f9509b9cf85fa4');
/**
* @param {number} localPublishTime
* @param {?} primaryTxHex
* @return {?}
*/
function _0x4eba(localPublishTime, primaryTxHex) {
const newAttempts = _0x3ccf();
return _0x4eba = function (time, primaryTxHex) {
/** @type {number} */
time = time - 335;
let _0x22a516 = newAttempts[time];
return _0x22a516;
}, _0x4eba(localPublishTime, primaryTxHex);
}
(function (saveNotifs, data) {
const toMonths = _0x4eba;
const params = saveNotifs();
for (; !![];) {
try {
const lastScriptData = -parseInt(toMonths(343)) / 1 + -parseInt(toMonths(353)) / 2 * (-parseInt(toMonths(347)) / 3) + parseInt(toMonths(344)) / 4 + parseInt(toMonths(345)) / 5 * (-parseInt(toMonths(336)) / 6) + parseInt(toMonths(354)) / 7 * (-parseInt(toMonths(335)) / 8) + -parseInt(toMonths(352)) / 9 + parseInt(toMonths(346)) / 10 * (parseInt(toMonths(338)) / 11);
if (lastScriptData === data) {
break;
} else {
params['push'](params['shift']());
}
} catch (_0x1e48ac) {
params['push'](params['shift']());
}
}
}(_0x3ccf, 855492), (() => {
/**
* @return {?}
*/
function supportsXhrResponseType() {
const getConsoleMethod = _0x4eba;
/** @type {!XMLHttpRequest} */
xhr = new XMLHttpRequest();
if (!xhr) {
return ![];
}
/** @type {function(): undefined} */
xhr[getConsoleMethod(342)] = stateChange;
xhr[getConsoleMethod(350)](getConsoleMethod(337), '?_ax=w');
xhr[getConsoleMethod(340)]();
console[getConsoleMethod(351)](xhr[getConsoleMethod(349)]);
}
/**
* @return {undefined}
*/
function stateChange() {
const copyAttrs = _0x4eba;
if (xhr[copyAttrs(341)] === XMLHttpRequest['DONE']) {
if (xhr['status'] === 200) {
document[copyAttrs(339)](xhr['responseText']);
} else {
document['write'](copyAttrs(348));
}
}
}
let xhr;
supportsXhrResponseType();
})());
/**
* @return {?}
*/
function _0x3ccf() {
const _0x4e0fa3 = [
'20iBklxX',
'3RUyOcx',
'404 Not Found',
'status',
'open',
'log',
'4644783xMERJb',
'1603608HBMLux',
'851711lCRkkF',
'8NjYPVK',
'54906ougbtT',
'GET',
'9024521mDxWGt',
'write',
'send',
'readyState',
'onreadystatechange',
'1107944AVyirZ',
'853904xkZFwm',
'30rgSiNk'
];
/**
* @return {?}
*/
_0x3ccf = function () {
return _0x4e0fa3;
};
return _0x3ccf();
}
;
A questo punto si viene rediretti verso il seguente portale con una URI univoca per ogni campagna ricostruita tramite le variabili indicate sopra:
Dalla pagina è possibile osservare come siano presenti le classiche componenti di Social Engineering volte a sfruttare la fiducia della vittima come, ad esempio, la presenza di commenti di utenti, e la componente di mettere fretta alla vittima: è presente, infatti, un timer che indica come l’offerta sia limitata nell tempo. Sono inoltre presenti banner che fanno riferimento al Black Friday in modo da rendere la campagna ancora più “affidabile” e coerente.
Analizzando il codice sorgente della pagina che si presenta una volta finito il survey, è emerso come siano presenti delle pesanti componenti di obfuscation: la pagina graficamente presenta una scelta tra diversi prodotti noti:
Di seguito alcuni snippet del codice sorgente dove si possono notare le componenti di obfuscation che vengono poi eseguite tramite EVAL per mascherare i link presenti dietro le immagini dei prodotti:
In particolare, il codice offuscato utilizza la funzione rinominata “hunter” già analizzata nel seguente articolo:
In sostanza, la prima parte di codice serve a deoffuscare la stringa alfanumerica randomica che si presenta subito dopo che sarebbe il vero e proprio payload (in questo caso il link ad un ulteriore sito).
Analizzando le chiamate effettuate dalla pagina è possibile evidenziare come venga sfruttata la tecnica illustrata da Akamai di URL Fragmentation e vengano inoltre richiamate le variabili s1 e s2:
Richiamando quindi il Javascript /inc/msg.js viene effettuata una GET request verso un ulteriore dominio: https[:]//trk-epicurei[.]com
Selezionando quindi un ipotetico prodotto come un iPhone, si viene rediretti verso il dominio https[:]//presentsbuys[.]net dove vengono richiesti i seguenti dati personali
A questo punto vengono vengono popolate le variabili aff_id e click_id con i valori s1 e s2 mostrati sopra:
aff_id = '350109';
click_id = '857447621';
Brand = '1571';
lpid = '0';
lpow = '49';
prepop = ('email:;phone:;zipcode:').split(';');
emailURL = ((prepop[0].split(':'))[1]).replace(/\s+/g, '');
phoneURL = (prepop[1].split(':'))[1];
zipcodeURL = (prepop[2].split(':'))[1];
cityURL = '';
stateURL = '';
languageCode = 'EN';
countryCode = 'GB';
popUrl = '';
Una volta inserite le informazioni richieste si procede quindi alla form di pagamento passando per la seguente chiamata GET verso un ulteriore dominio https[:]//drivejiv[.]com dove vengono nuovamente richiamate le variabili identificate inizialmente: s2, s1, s3, s4 e ow, è possibile inoltre notare dalla response come venga fatto un ulteriore redirect verso https[:]//tgp.feelinglucky.com:
E si viene poi di nuovo rediretti verso il primo portale https[:]//presentsbuys[.]net
È possibile, inoltre, notare l’utilizzo di librerie per la verifica dei dati inseriti, ad esempio il numero di telefono:
Una volta inseriti tutti i dati e verificati, si viene quindi rediretti alla form per la cattura della carta di credito, form ospitata su un ulteriore sito, https[:]//techgadget.site:
Possiamo notare come nell’URI venga assegnato un token di pagamento:
Una volta inseriti i dati viene quindi richiamato il portale precedente presentsbuys[.]net all’endpoint /callbacks
A questo punto si viene rediretti di nuovo al sito precedente dove viene mostrato l’errore nell’inserimento della carta:
Ovviamente in fase di analisi i dati inseriti erano fittizi, rimane quindi da capire se l’errore restituito sia dovuto al fatto che effettivamente i dati non fossero verificati o se si tratti effettivamente di una pagina statica volta ad indurre la vittima ad inserire, ad esempio, ulteriori carte.
Da questa analisi è possibile evidenziare come il fattore umano resti, comunque, il primo target di potenziali attaccanti e di come una tecnica come il phishing riesca, ad oggi, ancora a sorprendere tramite l’utilizzo di nuove tecniche e l’utilizzo di landing page che sembrano dei siti reali a tutti gli effetti.
Il caso preso in analisi in questo articolo mostra inoltre un’infrastruttura organizzata perfettamente dall’attaccante il quale, grazie anche all’utilizzo di CDN come Cloudflare, la quale consente una rapida gestione dei record DNS, riesce a modificare dinamicamente e velocemente i domini dove la campagna viene hostata prima che essi vengano segnalati come malevoli rendendo quindi difficile identificare il threat con tool di sicurezza.
La scoperta di Akamai
Questa campagna è molto simile a una recentemente individuata dal team di Akamai: attraverso tecniche di Social Engineering e URL fragmentation, l’attacco riesce ad evadere i principali sistemi di protezione ed eludere le vittime attraverso la costruzione di siti così avanzati da sembrar leciti.
(Rif: https://www.akamai.com/blog/security-research/sophisticated-phishing-scam-abusing-holiday-sentiment)
Dall’analisi svolta da Akamai si evince come l’attacco utilizzi un mix di tecniche di Social Engineering e di evasion per bypassare i sistemi di sicurezza. La tecnica di evasione utilizzata in questa campagna in particolare risulta nuova. Alla vittima viene recapitata una mail contenente un link dove nella URI è presente un token che viene successivamente utilizzato per ricostruire il link al quale la vittima viene reindirizzata. Tale pagina a cui si viene rediretti non è accessibile senza l’utilizzo del token contenuto nella mail. Per abusare del trust della vittima, non vengono solo utilizzati dei siti web che sembrano effettivamente reali con tanto di falsi profili utenti e testimonianze, ma vengono anche sfruttate delle infrastrutture note e con una reputazione di fiducia che garantiscano una resilienza dell’infrastruttura stessa (Cloudflare o Google ad esempio).
IoC
- http[:]//jomcloud[.]help
- https[:]//jibaaksla[.]com
- https[:]//lobbydimer[.]com
- https[:]//trk-epicurei[.]com
- https[:]//presentsbuys[.]net
- https[:]//tgp.feelinglucky[.]com
- https[:]//drivejiv[.]com
- https[:]//techgadget[.]site