PromptSpy deschide drumul atacurilor pe Android prin intermediul GenAI


Cercetătorii ESET au identificat PromptSpy, primul malware de Android cunoscut care abuzează de inteligența artificială generativă (GenAI) în fluxul său de execuție.

Aceștia au scos la iveală primul caz cunoscut de malware pentru Android care abuzează de GenAI pentru a manipula interfața de utilizator în funcție de context. Deși învățarea automată (machine learning) a mai fost folosită în scopuri similare – recent, cercetătorii de la Dr.WEB au descoperit Android.Phantom, care utilizează modele TensorFlow pentru a analiza capturi de ecran ale reclamelor și a da click automat pe elemente pentru fraudă publicitară la scară largă – acum este prima dată când vedem GenAI folosit în acest mod. Întrucât atacatorii se bazează pe transmiterea de instrucțiuni (prompt-uri) către un model AI (în acest caz, Gemini de la Google) pentru a ghida manipularea malițioasă a interfeței (UI), am numit această familie de malware PromptSpy. Este al doilea malware bazat pe AI pe care l-am descoperit – după PromptLock în august 2025, primul caz cunoscut de ransomware operat prin AI.

Deși GenAI este implementată doar într-o parte relativ minoră din codul PromptSpy – cea responsabilă pentru asigurarea persistenței – are totuși un impact semnificativ asupra capacității de adaptare a malware-ului. Mai exact, Gemini este utilizat pentru a analiza ecranul curent și pentru a oferi PromptSpy instrucțiuni pas cu pas despre cum să garanteze că aplicația malițioasă rămâne fixată (pinned) în lista de aplicații recente, prevenind astfel închiderea ei prin glisare sau oprirea de către sistem. Modelul AI și instrucțiunile (prompt-ul) sunt predefinite în cod și nu pot fi modificate. Deoarece malware-ul de Android se bazează adesea pe navigarea prin UI, utilizarea GenAI le permite atacatorilor să se adapteze la aproape orice dispozitiv, configurație sau versiune a OS, ceea ce poate extinde considerabil numărul de potențiale victime.

Scopul principal al PromptSpy este descărcarea unui modul VNC integrat, oferind operatorilor acces de la distanță pe dispozitivul victimei. Malware-ul pentru Android utilizează abuziv, de asemenea, Serviciul de Accesibilitate (Accessibility Service) pentru a bloca dezinstalarea prin intermediul unor ferestre cu elemente suprapuse peste comenzi (ce fac invizibile comenzile), capturează datele de pe ecranul de blocare (lockscreen) și înregistrează video. Acesta comunică cu serverul său de Comandă și Control (C&C) prin protocolul VNC, utilizând criptarea AES.

Pe baza indiciilor de localizare a limbii și a vectorilor de distribuție observați în timpul analizei, campania pare să fie motivată financiar și să vizeze în principal utilizatori din Argentina. Interesant este faptul că mostrele PromptSpy analizate sugerează că a fost dezvoltat într-un mediu vorbitor de limba chineză.

PromptSpy este distribuit prin intermediul unui site web dedicat și nu a fost niciodată disponibil în magazinul Google Play. În calitate de partener al App Defense Alliance, am împărtășit totuși concluziile noastre cu Google. Utilizatorii de Android sunt protejați automat împotriva versiunilor cunoscute ale acestui malware prin Google Play Protect, care este activat implicit pe dispozitivele Android ce dispun de Google Play Services.

Principalele idei din articol:
– PromptSpy este primul malware de Android cunoscut care utilizează GenAI direct în fluxul său de execuție, chiar dacă momentan o face doar pentru a-și asigura persistența pe dispozitiv.
– Malware-ul folosește modelul Gemini pentru a interpreta elementele de pe ecranul dispozitivului compromis. AI-ul îi oferă instrucțiuni dinamice despre cum să execute comenzi specifice pentru a forța fixarea aplicației în lista de „aplicații recente”.
– Scopul principal al PromptSpy (care nu depinde de AI) este instalarea unui modul VNC, care le permite atacatorilor să vadă ecranul victimei în timp real și să efectueze acțiuni de la distanță.
– Deși nu a fost încă detectat în telemetria curentă (ceea ce ar putea indica un proof of concept/ concept demonstrativ), descoperirea unui domeniu de distribuție sugerează existența unei variante care vizează utilizatorii din Argentina.
– PromptSpy poate să captureze datele de pe ecranul de blocare, să blocheze propria dezinstalare, să colecteze informații despre dispozitiv, să facă capturi de ecran și să înregistreze video activitatea de pe ecran.

Funcționalitatea PromptSpy bazată pe AI

Chiar dacă PromptSpy folosește Gemini doar într-una dintre funcțiile sale, acest lucru ne arată cum integrarea instrumentelor AI poate face malware-ul mai dinamic, oferind atacatorilor modalități de a automatiza acțiuni care, în mod normal, ar fi mai greu de realizat prin scripting tradițional.

Așa cum am menționat pe scurt anterior, malware-ul pentru Android se bazează de obicei pe elemente fixe ale ecranului, precum apăsări (taps), coordonate sau selectori UI – metode care pot deveni ineficiente odată cu modificările interfeței pe diferite dispozitive, versiuni de OS sau interfețe personalizate de producători. PromptSpy își propune să obțină persistență rămânând în lista de aplicații recente prin comanda „blochează/ fixează aplicația în recente”, care diferă în funcție de dispozitiv și producător – ceea ce îl face dificil de automatizat prin scripturile fixe, utilizate în mod tradițional de malware-ul pentru Android.

Prin urmare, PromptSpy adoptă o abordare complet diferită: trimite către Gemini un prompt în limbaj natural, împreună cu un dump XML al ecranului curent, oferind astfel AI-ului o vedere detaliată a fiecărui element UI – textul său, tipul și poziția exactă pe ecran. Gemini procesează informațiile și răspunde cu instrucțiuni în format JSON, care indică malware-ului ce acțiune să execute (de exemplu, atingere/ tap) și unde să o realizeze. Malware-ul salvează atât prompt-urile anterioare, cât și răspunsurile oferite de Gemini, permițând astfel AI-ului să înțeleagă contextul și să coordoneze interacțiuni complexe, în mai mulți pași.

Figura 1 prezintă un fragment de cod din inițializarea comunicării dintre PromptSpy și Gemini, inclusiv primul prompt utilizat. Prin transferarea procesului decizional către Gemini, malware-ul poate identifica elementul UI corect și poate executa gestul corespunzător, menținând malware-ul activ chiar dacă utilizatorul încearcă să îl închidă.


Figura 1. Fragment de cod malware cu prompturi incluse direct în cod (hardcoded)

PromptSpy continuă să trimită prompturi către Gemini până când AI-ul confirmă că aplicația a fost fixată cu succes, demonstrând un mecanism de feedback (feedback loop) în care malware-ul așteaptă validarea înainte de a trece la etapa următoare.

Prezentare generală PromptSpy

În februarie 2026, am descoperit două versiuni ale unei familii de malware pentru Android, necunoscută anterior. Prima versiune, pe care am numit-o VNCSpy, a apărut pe VirusTotal pe 13 ianuarie 2026 și a fost reprezentată de trei mostre încărcate din Hong Kong. La 10 februarie 2026, patru mostre ale unui malware mai avansat, bazat pe VNCSpy, au fost încărcate pe VirusTotal din Argentina.

Analiza mostrelor din Argentina a scos la iveală un malware în mai multe etape, cu un payload malițios care abuzează de Gemini de la Google. Pe baza acestor descoperiri, am denumit primul stadiu al acestui malware PromptSpy dropper, iar payload-ul său PromptSpy.

Trebuie menționat că nu am observat încă nicio mostră de PromptSpy dropper sau a payload-ului său în datele de telemetrie ESET, ceea ce ar putea indica faptul că ambele sunt doar proofs of concept. Totuși, având în vedere existența unui posibil domeniu de distribuție, descris în paragrafele următoare, nu putem exclude posibilitatea ca PromptSpy dropper și PromptSpy să existe deja în circulație.

Conform datelor VirusTotal, toate cele patru mostre PromptSpy dropper au fost distribuite prin intermediul site-ului mgardownload[.]com, care era deja offline în timpul analizei noastre. După instalarea și lansarea PromptSpy dropper, deschidea o pagină web găzduită pe m-mgarg[.]com. Cu toate că și acest domeniu era offline, versiunea cached de la Google a arătat că, cel mai probabil, pagina imita site-ul Chase Bank (JPMorgan Chase Bank N.A.) (a se vedea Figura 2).


Figura 2. Datele stocate în memoria cache (cached data) de către Google pentru site-ul fals

Malware-ul folosește o identitate vizuală similară, având numele de aplicație MorganArg și o pictogramă (icon) inspirată de banca Chase (a se vedea Figura 3). Denumirea MorganArg, probabil o prescurtare pentru „Morgan Argentina”, apare și ca nume al site-ului stocat în memoria cache, indicând o țintire regională.


Figura 3. Dropper-ul solicită permisiunea de a instala aplicații
din surse necunoscute pentru a continua implementarea PromptSpy

Am folosit domeniul m-mgarg[.]com pentru o analiză de tip pivot în VirusTotal, ceea ce ne-a condus la o altă mostră de malware Android (Android/Phishing.Agent.M). VirusTotal a indicat că site-ul falsificat era în limba spaniolă și includea un buton „Iniciar sesión” (Autentificare), sugerând că pagina era probabil concepută pentru a imita site-ul unei bănci (a se vedea Figura 4).

Figura 4. UI a Android/Phishing.Agent.M, care afișează același site fals ca PromptSpy dropper (sursa: https://www.virustotal.com/gui/file/4ee3b09dd9a787ebbb02a637f8af192a7e91d4b7af1515d8e5c21e1233f0f1c7/)

Acest troian pare să funcționeze ca o aplicație însoțitoare, dezvoltată de același atacator aflat în spatele VNCSpy și PromptSpy. În fundal, troianul contactează serverul său pentru a solicita un fișier de configurare, care include un link pentru descărcarea unui alt APK, prezentat victimei, în limba spaniolă, drept o actualizare. În timpul cercetării noastre, serverul de configurare nu mai era accesibil, astfel că  URL-ul exact de descărcare a rămas necunoscut. Totuși, având în vedere că utilizează același site falsificat care imită o bancă, același nume de aplicație, aceeași pictogramă și, cel mai important, este semnat cu același certificat unic de dezvoltator ca PromptSpy dropper, suspectăm cu încredere că această aplicație reprezintă etapa inițială, menită să conducă victimele către instalarea PromptSpy.

Atât VNCSpy, cât și PromptSpy includ o componentă VNC, care le oferă operatorilor acces complet de la distanță pe dispozitivele compromise, după ce victimele activează serviciile de Accesibilitate (a se vedea Figura 5) – ceea ce le permite operatorilor malware să vadă tot ce se întâmplă pe dispozitiv și să efectueze apăsări/ taps, glisări, gesturi și introduceri de text ca și cum ar ține telefonul în mână.


Figura 5. PromptSpy solicită victimei să permită accesul
la Serviciile de Accesibilitate (Accessibility Services)

Pe lângă capabilitățile malițioase deja prezente în VNCSpy, PromptSpy adaugă manipularea interfeței UI asistată de AI, care îl ajută să-și mențină persistența prin păstrarea aplicației malițioase fixate (pinned) în lista de aplicații recente.


Figura 6. Aplicația MorganArg neblocată (stânga) și blocată (dreapta) în lista de aplicații recente,
pictograma cu lacăt reprezentând blocarea

Credem că această funcționalitate este utilizată înainte ca sesiunea VNC să fie stabilită, astfel încât utilizatorul sau sistemul să nu poată închide activitatea PromptSpy din lista de aplicații recente. În Figura 7, puteți observa comunicarea prin rețea a PromptSpy cu Gemini AI.


Figura 7. Comunicarea în rețea între malware și Gemini, cu solicitarea (prompt) și răspunsul evidențiate în dreptunghiuri roșii

Origini

În timpul analizei PromptSpy, am observat că acesta conține șiruri de caractere pentru depanare (debug strings) scrise în chineză simplificată. Include chiar și gestionarea mai multor tipuri de evenimente de Accesibilitate specifice limbii chineze (a se vedea Figura 8), precum și o metodă de debug dezactivată în cod, dar care nu a fost eliminată. Scopul principal al acestei metode este de a oferi explicații localizate (în limba chineză) pentru diferite evenimente de Accesibilitate care apar pe un dispozitiv Android. Astfel, jurnalele de evenimente (event logs) devin mai ușor de înțeles pentru utilizatorii sau dezvoltatorii vorbitori de chineză, în loc să afișeze doar coduri numerice brute.


Figura 8. Analizarea (parsing) și jurnalizarea (logging) diverselor tipuri de evenimente

Cu un grad moderat de certitudine, aceste detalii sugerează că PromptSpy a fost dezvoltat într-un mediu vorbitor de limbă chineză.

Analiza

Analiza noastră tehnică se concentrează pe PromptSpy dropper și pe payload-ul său, PromptSpy. PromptSpy este integrat (app-release.apk) în directorul de resurse (asset directory) al dropper-ului. APK-ul conține funcționalitatea malițioasă principală. Atunci când dropper-ul este lansat, acesta afișează un mesaj care îndeamnă utilizatorul să instaleze ceea ce pare a fi o versiune actualizată a aplicației. În realitate, „actualizarea” reprezintă payload-ul PromptSpy, pe care utilizatorul trebuie să îl instaleze manual (a se vedea Figura 9).


Figura 9. Ecranul inițial al malware-ului, care solicită instalarea payload-ului PromptSpy

Odată instalat și lansat, PromptSpy solicită permisiuni pentru Serviciile de Accesibilitate (Accessibility Service), oferind malware-ului capacitatea de a citi conținutul de pe ecran și de a efectua clicuri automate. Apoi, PromptSpy afișează în prim-plan un ecran fals (decoy) de tip  „loading” (a se vedea Figura 10). Între timp, în fundal, începe să comunice cu Gemini AI pentru a obține instrucțiunile necesare spre a-și bloca procesul în lista de aplicații recente (Recent Apps) – o tehnică simplă de persistență care permite PromptSpy să rămână activ și fixat chiar și după repornirea dispozitivului.


Figura 10. Activitatea de tip „overlay”
(suprapunere)
utilizată ca momeală (decoy)

Atunci când utilizatorul vede activitatea „Loading, please wait”, PromptSpy folosește Accessibility Services pentru a deschide ecranul de aplicații recente și a colecta informații detaliate despre UI: text vizibil, descrieri de conținut, nume de clase, nume de pachete și limitele elementelor pe ecran (screen bounds). Captura dinamică a interfeței este serializată în format XML și inclusă în prompt-ul trimis către Gemini. Gemini răspunde apoi cu instrucțiuni pas cu pas despre cum să execute atingeri/ taps de „blocare/ fixare a aplicației” (app lock).

Acest proces formează o buclă continuă (loop):
– PromptSpy trimite către Gemini contextul actualizat al UI
– Gemini răspunde cu acțiuni noi
– PromptSpy le execută și transmite înapoi starea rezultată a ecranului

Ciclul continuă până când Gemini confirmă că aplicația a fost fixată cu succes în lista de aplicații recente. Iată un exemplu de structură:
Prompt: Ești un asistent de automatizare Android. Utilizatorul îți va furniza datele UI în format XML ale ecranului curent. Trebuie să analizezi XML-ul și să generezi instrucțiuni de operare în format JSON pentru a atinge obiectivul utilizatorului. Nodurile din XML conțin atribute „bounds” în formatul „[left,top][right,bottom]”. Trebuie să calculezi coordonatele centrale pentru a genera instrucțiuni de clic. Reguli principale de evaluare:
– Nu presupune că sarcina este finalizată. Returnează „COMPLETED” doar atunci când există dovezi vizuale clare ale reușitei în XML-ul UI curent (de exemplu, apare text precum „Saved” sau „Success”, starea unui comutator devine checked="true" sau ecranul a ajuns în starea dorită).
– Dacă ultimul pas a fost executat, dar XML-ul curent nu reflectă încă rezultatul, returnează „IN_PROGRESS” cu acțiunea „NONE” (sau așteaptă) pentru a verifica noua stare UI în ciclul următor.
– Dacă există incertitudine, rămâi în starea „IN_PROGRESS” și încearcă să verifici.
– Dacă XML-ul UI curent este gol, folosește „RECENTS” pentru a accesa lista de aplicații recente.

Poți folosi acțiunea SWIPE pentru a derula/ glisa și a găsi elementele țintă:
Când action_type = „SWIPE”, trebuie să furnizezi x1, y1, x2, y2, duration_ms.
Ex.: derulare în SUS – glisare de jos în sus (y2 < y1).
Respectă strict următorul format de ieșire JSON; nu include tag-uri Markdown sau text suplimentar:
{
 "status": "IN_PROGRESS" | "COMPLETED" | "IMPOSSIBLE",
"reasoning": "Explicație detaliată: ce text sau stare specifică a fost observată pe ecran pentru a decide dacă sarcina este finalizată sau necesită următorul pas",
<REDACTED>
}
Obiectiv utilizator: Fixează aplicația MorganArgs curentă în lista de aplicații recente.
Informații dispozitiv:
XML UI curent:
Răspunsul Gemini (instrucțiuni de acțiune):
"status": "IN_PROGRESS",
"reasoning": "Am accesat lista de aplicații recente. Pot vedea MorganArgs în lista aplicațiilor recente. Următorul pas este să apăs lung pe cardul aplicației MorganArgs pentru a deschide meniul de opțiuni, care ar trebui să includă opțiunea de fixare.",
"action_type": "LONG_CLICK",
"x": 586,
"y": 1126,
"x1": -1,
"y1": -1,
"x2": -1,
"y2": -1,
"duration_ms": -1
}
Mesajul de monitorizare (follow-up) al malware-ului cu rezultatele actualizate ale ecranului:
Acțiunea anterioară a fost executată. Acesta este noul XML al interfeței UI – te rugăm să stabilești dacă sarcina este finalizată sau să furnizezi următoarea instrucțiune: <ACTIVITATEA VIZIBILĂ ÎN PREZENT>

Toate acțiunile sugerate de Gemini – apăsări/ taps, glisări, navigare – sunt executate prin intermediul Accessibility Services, permițând malware-ului să interacționeze cu dispozitivul fără intervenția utilizatorului. Principala capacitate malițioasă a PromptSpy constă în serviciul său VNC încorporat. Le permite atacatorilor să vizualizeze de la distanță ecranul victimei în timp real și să controleze dispozitivul în totalitate. Malware-ul comunică cu serverul său de comandă și control (C&C) codificat (hardcoded) la adresa 54.67.2[.]84 utilizând protocolul VNC; mesajele sunt criptate AES folosind o cheie, de asemenea, codificată în interiorul aplicației.

Prin acest canal de comunicare, malware-ul poate:
– să primească o cheie API Gemini,
– să încarce lista aplicațiilor instalate,
– să intercepteze codul PIN sau parola de blocare a ecranului,
– să înregistreze video ecranul de deblocare prin pattern unlock,
– să raporteze dacă ecranul este aprins sau oprit,
– să raporteze aplicația care rulează în prezent în prim-plan,
– să înregistreze ecranul și gesturile utilizatorului pentru aplicațiile specificate de server,
– să realizeze capturi de ecran (screenshots) la cerere.

PromptSpy abuzează, de asemenea, de Serviciile de Accesibilitate ca mecanism anti-ștergere (anti-removal). Când utilizatorul încearcă să dezinstaleze payload-ul sau să dezactiveze Serviciile de Accesibilitate, malware-ul suprapune dreptunghiuri transparente peste anumite zone ale ecranului – în special peste butoanele care conțin substrings (fragmente de text) precum stop (oprire), end (sfârșit), clear (ștergere) și uninstall (dezinstalare). Suprapunerile (overlays) sunt invizibile pentru utilizator, dar interceptează acțiunile, făcând dezinstalarea  dificilă. În Figura 11, am rulat PromptSpy cu indicatorul de depanare (debug flag) activat (păstrat în cod de către dezvoltatori), care colorează dreptunghiurile transparente pentru a vizualiza exact unde apar. Pe dispozitivul real, acestea sunt complet invizibile.

Figura 11. Dreptunghiuri invizibile (afișate colorat pentru exemplificare) care acoperă anumite butoane

Cum PromptSpy blochează dezinstalarea prin suprapunerea elementelor invizibile pe ecran, singura modalitate pentru victimă de a-l elimina este repornirea dispozitivului în Safe Mode – astfel, aplicațiile terțe sunt dezactivate și pot fi dezinstalate normal.

Pentru a intra în Safe Mode, utilizatorii trebuie, de regulă, să țină apăsat butonul power, apoi să apese lung pe Power off și să confirme promptul Reboot to Safe Mode (metoda exactă poate varia în funcție de dispozitiv și producător). Odată ce telefonul repornește în Safe Mode, utilizatorul poate accesa Setări → Aplicații → MorganArg și să-l dezinstaleze fără interferențe.

Concluzie

PromptSpy demonstrează că malware-ul de Android începe să evolueze într-o direcție periculoasă. Bazându-se pe GenAI pentru a interpreta elementele de pe ecran și a decide cum să interacționeze cu ele, malware-ul se poate adapta practic la orice dispozitiv, dimensiune a ecranului sau configurație de UI. În loc să folosească apăsări/ taps predefinite (hardcodate), oferă pur și simplu AI-ului o captură de ecran și primește în schimb instrucțiuni precise, pas cu pas, permițându-i să obțină persistență chiar și în fața schimbărilor de interfață.

Campania arată cum GenAI poate face malware-ul mult mai dinamic și capabil să ia decizii în timp real. PromptSpy este un exemplu de malware Android alimentat de GenAI aflat abia la început și ilustrează rapiditatea cu care atacatorii încep să utilizeze abuziv instrumentele AI pentru a-și spori impactul. O listă completă de indicatori de compromitere (IoC) și mostre poate fi găsită în repository-ul nostru GitHub.

Lukas Stefanko February 21, 2026

Lasa un comentariu