Accueil Langages Le virus DuQu serait programmé avec un langage inconnu

Le virus DuQu serait programmé avec un langage inconnu

C'est le gros buzz du moment. Le cheval de Troie DuQu, dont il est communément admis qu'il dérive de Stuxnet, un virus qui a beaucoup fait parler de lui en s'attaquant, entre autres, aux centrales nucléaires iraniennes, aurait été écrit avec un langage inconnu, peut-être spécialement dédié à la création de malwares.

Telle est l'opinion des experts de Kaspersky qui ont analysé la bête et pratiqué du reverse engineering dans les règles de l'art. A la suite de quoi ils ont publié un billet de blog très technique et très intéressant.

Selon les analyses, la grande majorité du code est écrite en C++. 60 classes ont même été identifiées. Mais dans le code, apparaît une couche logicielle qui n'est pas du C++, mais un langage pour l'instant non identifié, que les analystes ont baptisé le framework DuQu.

Le framework DuQu

Le code généré par ce framework a des caractéristiques bien à lui :

  • Entièrement objet
  • Les tables de pointeurs de fonctions (l'équivalent des fonctions virtuelles de C++) sont placées dans les instances de classes et peuvent être modifiées après construction
  • Il n'y a pas de distinction entre les classes utilitaires et les classes utilisateur
  • Il n'y a pas de runtime. Les API Windows sont invoquées directement.

Ont encore été remarquées des choses peu banales. Ainsi les tables de fonctions ne sont pas placées à un offset constant dans les instances d'objet. Parfois l'offset est nul, parfois non. Autre chose inédite, le pointeur this n'est pas placé systématiquement sur la pile ou dans un seul et même registre, mais il peut être placé certes sur la pile, mais aussi dans n'importe quel registre.

Pour les analystes de Kaspersky, ce code n'est généré par aucun compilateur connu d'eux, que ce soit en C, C++, ou même Objective-C. Le billet se conclut par un appel à la communauté des programmeurs pour identifier le langage et/ou le compilateur.

Une des hypothèses émises par les programmeurs qui ont déjà donné un avis, est qu'un  compilateur que l'on trouvait sur les vieux  IBM OS400 SYS38, ou même des systèmes sys36 plus anciens pourrait avoir été utilisé.

Cet intéressant billet est à cette adresse : www.securelist.com