Uite Cloudflare, nu e Cloudflare: anatomia unui atac ascuns într-o temă WordPress
Acest articol este disponibil și înEnglish

Totul a început cum încep majoritatea poveștilor cu WordPress - cu o actualizare de temă pe care nimeni n-a luat-o în considerare. Site-ul părea în regulă, consola nu raporta erori, traficul era normal. Doar că nimic nu era normal în Paradis. Să dăm un pic timpul înapoi.
Acum câteva zile, am primit un telefon de la un prieten care-mi zicea că site-ul lui redirecționa la nimereală anumiți vizitatori către o "pagină de validare anti-bot" care arăta exact ca verificarea anti-bot de la Cloudflare.
Am cerut un backup complet al site-ului, iar după ce am scotocit prin fișiere, am găsit un mic fragment de cod ascuns într-un loc unde n-ar fi trebuit să fie nimic interesant, pentru că nimic interesant nu se întâmplă de obice în/wp-content/themes/sugar/assets/js/jquery.sliphover.min.js
.
La suprafață, totul arăta ca un simplu plugin jQuery, patru kilobytes de cod legitim. Dar la final - ascunși ordonat după un punct și virgulă - se aflau alți doi kilo care nu aveau ce căuta acolo. Un script mic, elegant și total rău intenționat, conceput să comunice cu un command and control center și să ceară scripturi pentru campanii malițioase de la un site numit traffipulse.com
.
Cum s-a desfășurat atacul?
Atacatorii compromiseseră tema blogului printr-un plugin vulnerabil, strecurând codul malițios într-una dintre dependențele sale JavaScript. N-au umblat deloc în logica PHP, doar au injectat un payload într-un fișier încărcat pe fiecare pagină. Șmecher, nu?
De acolo, scriptul rula în liniște, analizând dacă vizitatorul „merită efortul”.
Scriptul țintea utilizatori de Windows 10 cu browsere moderne, ignorând orice părea bot, crawler sau browser headless. Evita inclusiv ecranele mici, pentru că, sincer, ce utilzator normal s-ar da pe net cu un ecran de 320 de pixeli?
Cloudflare care nu e Cloudflare
Dacă îndeplineai criteriile, codul descărca un link de lahttps://traffipulse.com/api/get
, care genera o pagină cu instrucțiuni pentru a „verifica” utilizatorul. Tot ce trebuia să faci era să apeși câteva taste pentru a trece testul.
Pentru a face farsa credibilă, prelua faviconul și domeniul site-ului, le codifica și le adăuga în acest ecran de verificare. Ți se părea că validezi browserul. În realitate, introduceai comenzi pe propriul calculator fără să-ți dai seama.
Mecanismul de inginerie socială
Vizitatorilor li se afișa o casetă falsă „Verify you are human” care le cerea să apese combinația Windows + R, să lipească o comandă din clipboard și să apese Enter. Atacatorii mizau pe încredere: dacă pagina arată suficient de oficial, oamenii vor asculta. Rezultatul era că respectiva comandă copiată se executa în PowerShell sau mshta
, descărcând și rulând un payload direct de pe infrastructura atacatorilor. Este inginerie socială mascată sub formă de „verificare de securitate”, iar motivul pentru care malware-ul viza doar Windows 10 cu browsere moderne e simplu - acestea oferă cele mai bune condiții pentru trucul cu clipboard-ul.
Măiestria din spatele haosului
Există o doză de artă în genul ăsta de atac. Scriptul evita mediile automate de analiză folosind verificări precum navigator.webdriver
și HeadlessChrome
. Folosea localStorage pentru a reține utilizatorii care „trecuseră” deja validarea, astfel încât să nu afișeze de două ori pagina falsă. Și reîncerca cererile de rețea cu întârzieri crescătoare, în stilul cuiva răbdător - sau meticulos de rău intenționat.
Astea toate sunt în general semnele unei campanii care știa exact ce face: viza oameni, nu boți, se integra perfect și nu se afișa atunci când nu era nevoie.
Curățarea mizeriei
Partea ușoară a fost eliminarea:
- Identifică și șterge conținutul malițios din
jquery.sliphover.min.js
- nu șterge tot pentru că va afecta funcționalitatea site-ului. - Fă update la plugin-uri, teme și WordPress core la cele mai noi versiuni disponibile.
- Schimbă toate parolele posibile, pentru că e mai bine să fii precaut decât să-ți pară rău mai târziu.
De ce contează
Incidentul ăsta nu viza să vandalizeze site-uri sau să instaleze ransomware. A fost ceva mai subtil - un atac pe "linia de producție", ascuns în partea de "cosmetică" a site-ului, care compromit fișiere familiare de pe infrastructură și le transformă în vectori de infectare cu infostealeri. Un payload mic, dar suficient de sofisticat cât să funcționeze impecabil. Suficient de simple ca să păcălească pe oricine, suficient de bine făcute ca să pară legitime.
Imaginea de ansamblu
Astfel de atacuri arată că JavaScript-ul de front-end face parte din suprafața ta de atac. Fiecare plugin, fiecare temă, fiecare resursă „gratuită” urcată de cineva acum cinci ani poate deveni o portiță e intrare în site și implicit, în calculatoarele clienților tăi.
Dacă modelul tău de securitate se limitează la „am instalat Wordfence deja”, probabil îți scapă partea în care front-end-ul îți fură utilizatorii înainte ca serverul să observe.
Post-mortem
O singură temă compromisă, un fișier infectat și o actualizare uitată - atât a fost nevoie pentru o noapte nedormită și mii de linii de cod luate la puricat ad labam. Serverul de comandă al atacului poate dispărea mâine, dar vectorul de infecție - neglijența colectivă și complexitatea rămân.