Si tratta di una novità non da poco, che se confermata getterebbe nuova luce sulla portata dell’affaire Duqu. Stando a quanto sostenuto da Kaspersky, azienda produttrice del software di sicurezza omonimo, parti del codice del malware analizzato in questi mesi alla ricerca di indizi su autori e mandanti del trojan sarebbe stato scritto in un linguaggio di programmazione sconosciuto . Duqu sarebbe il prodotto di uno sforzo di sviluppo e progettazione non indifferente: ora tutto sta a capire chi abbia movente e mezzi per mettere in piedi un’operazione del genere.
Duqu, da più parti definito come “figlio” di Stuxnet, è un malware di cui parecchio si è parlato attorno alla fine del 2011. In circolazione pare dal oltre 12 mesi, a lungo era riuscito a scansare i radar degli antivirus fino a quando Symantec e altri ne avevano rivelato l’esistenza . A differenza di Stuxnet, tuttavia, Duqu sembra un prodotto pensato per attacchi mirati più che per la diffusione indiscriminata: attacchi volti a carpire informazioni riservate e trasmetterle a un server remoto, probabilmente a scopo di spionaggio. A farne le spese pare sia stata soprattutto l’infrastruttura informatica dell’Iran. Particolarità di Duqu: i suoi autori sono stati molto abili a coprire le proprie tracce.
Secondo i tecnici Kaspersky, nel complesso il codice di Duqu è piuttosto normale : si tratta per lo più di un prodotto in C++ elaborato in un Visual Studio 2008 e ivi compilato. Niente di esotico. Più interessante è il meccanismo con cui è stato costruito: moduli indipendenti in grado di funzionare singolarmente, e dunque aperti ad aventuali aggiornamenti di uno solo degli elementi senza che gli altri debbano essere modificati di conseguenza. Su uno di questi però si è concentrata l’attenzione di Kaspersky nell’ultimo periodo: analizzando la DLL del payload scaricato dall’eseguibile base, i tecnici hanno notato che la sezione della libreria dedicata alla comunicazione tra il malware e il centro di comando e controllo remoto ( C&C ), fin qui uno dei segmenti più oscuri della vicenda, non sarebbe frutto di una normale programmazione C++, ma sarebbe stata sviluppata in un linguaggio fino a questo punto non identificato.
Scrivono i ragazzi di Kaspersky: “Il codice della DLL è piuttosto consueta per un binario composto da diversi pezzi di codice. È composta di fette di codice che sono state compilate in un primo tempo in oggetti separati, quindi linkati in una singola DLL. Alcune fette sono comuni a quasi tutti i programmi in C++, come la funzione Standard Template Library (STL), funzioni in runtime e codice originale, eccetto la fetta relativa al codice di interazione con il C&C”. Nel codice analizzato non c’è alcun riferimento a funzioni standard del C++, anche se sembra evidente si tratti del risultato di un linguaggio orientato agli oggetti. Ai tecnici non è rimasta altra scelta che denominarlo “Duqu Framework”, e appellarsi all’intelligenza collettiva della Rete per cercare di scoprirne l’origine.
Le cinque caratteristiche principali del framework sono così riassunte:
– tutto è racchiuso in oggetti;
– la function table è piazzata direttamente nella istanza di classe e può essere modificata a posteriori;
– non c’è distinzione tra classi di utility e codice scritto a mano;
– gli oggetti comunicano tramite chiamate definite in dei metodi, esecuzioni differite e callback attivate da eventi;
– non ci sono riferimenti a funzioni delle librerie di runtime, vengono invocate direttamente le API di Windows native.
Ci sono poi altre particolarità realtive a come sono definite le classi e gli oggetti, a come i parametri vengono passati alle funzioni (al contrario di quanto accade solitamente nei linguaggi più conosciuti, i parametri oggetto sono trasferibili alle classi sia in stack che per registro senza apparente preferenza o esclusiva per uno dei due meccanismi). Nel complesso il framework sembra essere guidato da un meccanismo di attivazione ad eventi, generati da chiamate delle API native di Windows o messo in moto durante l’esecuzione di alcuni brani di codice. Un meccanismo per certi versi simile a quello dell’Objective C, secondo Kasperksy: ma stando alle verifiche effettuate non sarebbe scritto in quel linguaggio (non è stato trovato alcun riferimento a funzioni conosciute), nè sarebbe compilato con un software noto.
Kaspersky sta tentando da qualche settimana di venire a capo del mistero: fino a questo punto sembrerebbe escluso che si tratti di codice C++, Objective C, Python, Ada, Lua, Java . I tecnici aggiungono di aver anche indagato oltre, esplorando alternative piò o meno esotiche: nessuno è stato in grado fino a questo punto di ricondurre il codice ricavato dal reverse engineering della DLL a un contesto conosciuto. Addirittura “vista la dimensione del Progetto Duqu, è possibile che un team diverso da quello che ha sviluppato il malware fosse responsabile solamente per la creazione del framework”. Un lavoro di squadra coordinato, frutto evidentemente di un team organizzato, in cui addirittura il codice potrebbe essere stato partorito da gruppi di sviluppatori diversi e divisi in compartimenti stagni, senza una visione complessiva dell’intero quadro.
L’ipotesi più accreditata fino a questo punto è che sia stato sviluppato un framework originale che facesse da intermediario per la creazione di codice C : una modalità di lavoro inusuale e poco economica sotto il profilo tecnico, e che suscita più domande di quante risposte fin qui sia stato possibile fornire. “Facciamo un’appello alla comunità degli sviluppatori – concludono i tecnici Kaspersky – Chiediamo a chiunque riconosca framework, toolkit o il linguaggio di programmazione in grado di generare quel tipo di costrutto di codice di contattarci”. Potrebbe trattarsi di un lavoro sperimentale o di un suo derivato, e rintracciarne l’origine aiuterebbe a circoscrivere il perimetro entro cui alimentare le ricerche per individuare gli autori del malware.
Luca Annunziata