Opération TA505: comment nous avons analysé les nouveaux outils des créateurs du cheval de Troie Dridex, Locky ransomware et Neutrino botnet



La géographie des attentats du groupe TA505 pour 2019

Notre équipe d'analystes Threat Intelligence de PT Expert Security Center surveille les cybercriminels depuis TA505 depuis six mois. Le domaine d'intérêt des assaillants est d'ordre financier et les objectifs se situent dans des dizaines de pays sur différents continents.

Pour quel groupe TA505 est connu


Ce groupe d'attaquants a une histoire riche : depuis 2014, il répertorie le cheval de Troie bancaire Dridex, le botnet Neutrino, ainsi que toute une série de cryptographes - Locky, Jaff, GlobeImposter, etc.

L'activité du groupe a été enregistrée dans le monde entier - de l'Amérique du Nord à l'Asie centrale. Remarque: nous avons enregistré des cas isolés de groupements TA505 malveillants en Russie, mais il y a tout lieu de croire que les assaillants n'avaient pas de cibles dans notre pays, et les envois étaient de nature aléatoire.

Malgré la motivation financière prédominante du groupe, parmi ses objectifs au cours des six derniers mois, il y a eu des instituts de recherche, des organisations du secteur de l'énergie, des soins de santé, des compagnies aériennes et même le secteur public.



Répartition des attaques TA505 par industrie pour 2019

Vous trouverez ci-dessous un exemple d'e-mail de phishing contenant des logiciels malveillants développé par le groupe et ciblé, à en juger par son adresse e-mail, au ministère britannique des Affaires étrangères.



Depuis le printemps 2018, le groupe utilise l'outil d'accès à distance FlawedAmmyy et depuis la fin de l'année, il utilise la nouvelle porte dérobée ServHelper. TA505 - l'un des rares à pouvoir se vanter d'une activité vigoureuse pendant longtemps. De plus, à chaque nouvelle vague d'attaques, ils apportent des changements intéressants à leurs outils.



Dynamique de découverte du groupe TA505 par mois pour 2019

Bien sûr, une activité aussi bruyante ne passe pas inaperçue: il existe de nombreuses publications de nos collègues de Proofpoint , Trend Micro , Yoroi et pas seulement sur les techniques malveillantes et les logiciels malveillants. Cependant, de nombreux détails intéressants sont ignorés:

  • identificateur de groupe PE packer;
  • une variante de la porte dérobée ServHelper, dans laquelle l'accent n'est pas mis sur sa propre fonctionnalité, mais sur l'implémentation prête à l'emploi et bien connue de NetsupportManager;
  • infrastructure de réseau: bureaux d'enregistrement, hébergeurs caractéristiques, y compris les intersections avec l'infrastructure du groupe Buhtrap;
  • d'autres groupes VPO non décrits précédemment.

Cet article est le premier d'une série de nos articles sur TA505.

Première partie Rencontre par forfait


À la mi-juin 2019, nous avons remarqué que les prochains téléchargeurs de logiciels malveillants FlawedAmmy sont considérablement différents des versions précédentes: par exemple, la représentation visuelle du code du programme dans l'éditeur hexadécimal a changé, et est même devenue une caractéristique de plusieurs échantillons prélevés:



Représentation ASCII du code de programme

Une analyse rapide du code a montré que nous avons devant nous un packer inconnu de fichiers exécutables. Plus tard, il s'est avéré que ce packer couvrait non seulement les chargeurs susmentionnés, mais également d'autres échantillons du groupe HPE, y compris la charge utile. Nous avons ensuite décidé d'étudier en détail la logique de décompression afin d'extraire automatiquement l'objet cible.

Couche 1. XOR torsadé


La partie clé du déballeur est précédée d'une abondance d'instructions inutiles. Les auteurs de virus ont souvent recours à une telle technique pour confondre les émulateurs de produits antivirus. Toutes les choses intéressantes commencent par l'allocation de mémoire pour un tampon de taille 0xD20 en utilisant la fonction WinAPI VirtualAllocEx. La mémoire est allouée avec les autorisations PAGE_EXECUTE_READWRITE, ce qui vous permet d'écrire et d'exécuter du code.



Début du contenu du décompresseur

La section des données du fichier à l'étude contient un tableau de données qui passe par la procédure de décryptage, et le résultat est écrit dans la mémoire allouée. Algorithme de déchiffrement:

  • interpréter 4 octets comme un entier,
  • soustraire le numéro de série
  • effectuer une opération XOR avec une constante donnée,
  • effectuer un décalage cyclique au niveau du bit vers la gauche de 7 unités,
  • effectuer à nouveau l'opération XOR avec la constante donnée.



Décodage de la première couche
Nous désignons cet algorithme par l'abréviation SUB-XOR-ROL7-XOR pour y faire référence plus loin.
Après la procédure de décryptage, les variables sont initialisées séquentiellement. Cela peut être représenté comme remplissant une structure en C au format suivant:

struct ZOZ { HMODULE hkernel32; void *aEncodedBlob; unsigned int nEncodedBlobSize; unsigned int nBlobMagic; unsigned int nBlobSize; }; 

où:

  • hkernel32 - descripteur de bibliothèque kernel32.dll;
  • aEncodedBlob - pointeur vers le bloc de données encodé, nous l'avons mentionné lorsque nous avons fait référence à la similitude visuelle des échantillons ci-dessus;



Bloc de données codé

  • nEncodedBlobSize - taille de 4 octets du bloc de données codé;
  • nBlobMagic - Constante de 4 octets devant le bloc de données, sur laquelle nous reviendrons plus tard;
  • nBlobSize - taille de 4 octets du bloc de données décodé;

Nous avons appelé la structure ZOZ (c'est "505" sur leetspeak ).



Remplir la structure ZOZ

À la suite des actions décrites, l'exécution du code sera redirigée vers le tampon décrypté (maintenant, il ne fait aucun doute que les données décryptées sont du code exécutable), et le pointeur vers la structure remplie sera transmis en tant que paramètre de fonction:



Appel du code déchiffré avec la structure " ZOZ " passé en argument



Morceau de code déchiffré démonté

Couche 2. Plus c'est petit, mieux c'est


Après avoir transféré le contrôle à l'élément de code déchiffré, la première étape consiste à déterminer les adresses des fonctions WinAPI GetProcAddress, VirtualQuery, VirtualAlloc, VirtualProtect, VirtualFree et LoadLibraryA. Cette liste se retrouve souvent dans le travail des codes shell: après tout, ils doivent préparer et remplir correctement la mémoire pour le lancement ultérieur de la charge utile.

Une fois les procédures préliminaires terminées, le bloc de données codé transmis est tronqué: sur cinq octets, les deux premiers sont supprimés et les trois autres sont enregistrés:



Réduction du bloc de données codées

Ensuite, la procédure de décryptage, que nous avons appelée SUB-XOR-ROL7-XOR, est effectuée . Dans ce cas, en tant que constante pour l'opération XOR, une autre valeur nBlobMagic est utilisée, qui a été transmise dans la structure ZOZ .



Réutilisation de SUB-XOR-ROL7-XOR

Après cela, le tableau résultant est transféré vers une fonction dans laquelle une série de transformations plus complexes a lieu. Par les valeurs caractéristiques des constantes, il est facile d'établir qu'il s'agit de la mise en œuvre du populaire PE-wrapper FSG (Fast Small Good). Il est curieux que la version originale du packer FSG comprime PE en sections, et l'implémentation de l'algorithme dans notre cas fonctionne avec PE dans son ensemble.



Implémentation de FSG Packer

À ce stade, le fichier cible PE décompressé est prêt pour une analyse plus approfondie. Le reste du shellcode écrasera le PE d'origine dans l'espace d'adressage avec la version décompressée et l'exécutera correctement. Il est intéressant de noter que dans le processus d'ajustement du point d'entrée d'un module chargé, les structures sont manipulées en PEB. La raison pour laquelle les attaquants ont décidé de transmettre le descripteur kernel32 à partir de la logique de la première couche au lieu de le récupérer à l'aide des mêmes structures PEB est inconnue.



Écraser la valeur du point d'entrée du module chargé dans PEB

Conclusion


Ainsi, l'algorithme de décompression de la charge utile:

  • décodage de code shell à l'aide de SUB-XOR-ROL7-XOR,
  • remplir la structure ZOZ et appeler le shellcode,
  • réduction de cinq à trois de la charge utile,
  • décodage de la charge utile à l'aide de SUB-XOR-ROL7-XOR,
  • packer de décompression FSG.

Au cours de l'évolution des logiciels malveillants, la logique a changé: par exemple, le nombre de décalages cycliques de l'algorithme SUB-XOR-ROL7-XOR (sept dans le cas considéré) a changé de cinq, neuf, la version packer pour la plate-forme x64 a été publiée, etc. Le packer cybercriminel unique est excellent épigraphe aux narrations futures sur les outils et les caractéristiques du TA505.

Dans les articles suivants, nous parlerons de la façon dont les outils TA505 se sont développés et modifiés au cours des dernières attaques, de l'interaction des participants avec d'autres cyber-groupes, et nous étudierons les modèles de malwares précédemment non examinés.

Auteurs : Alexey Vishnyakov et Stanislav Rakovsky, Positive Technologies

CIO


b635c11efdf4dc2119fa002f73a9df7b - b635c11efdf4dc2119fa002f73a9df7b emballé b635c11efdf4dc2119fa002f73a9df7b
71b183a44f755ca170fc2e29b05b64d5 - 71b183a44f755ca170fc2e29b05b64d5 démarrage non 71b183a44f755ca170fc2e29b05b64d5

Source: https://habr.com/ru/post/fr469813/


All Articles