Maison >Opération et maintenance >Sécurité >Trois techniques d'injection de processus dans la matrice Mitre ATT&CK
Trois techniques d'injection de processus dans la matrice Mitre ATT&CK : injection de processus classique, Process Hollowing
et Process Doppelgänging
.
L'objectif principal des logiciels malveillants utilisant l'injection de processus est généralement d'éviter la détection par un logiciel antivirus ou d'effectuer des opérations d'élévation de privilèges. Ici, nous discuterons principalement en détail des trois méthodes du premier cas.
1 : Injection de processus classique (injection de DLL)
C'est la méthode la plus classique, et le processus est également très simple et clair :
OpenProcess -> VirtualAllocEx -> WriteProcessMemory -> CreateRemoteThread
2 : Processus d'évidement
Il s'agit d'une méthode très ancienne, généralement traduite en chinois par « créer une marionnette processus" », le processus créé à l'aide de cette méthode peut être déguisé en n'importe quel processus juridique, tel que IE. Lorsqu'il est visualisé à l'aide d'un pirate de processus dans la mémoire, ses ressources d'icônes, sa description et sa signature numérique seront toutes les valeurs d'IE. Cela peut être difficile à détecter pour les intervenants d’urgence au cours de l’enquête.
Résumez cette méthode dans un langage concis, c'est-à-dire que le processus malveillant crée d'abord un processus dans un état suspendu, puis annule son mappage mémoire d'origine et le remplace par un code malveillant pré-préparé, puis effectue des opérations sur le fichier image modifié. Restaurer l’état d’exécution du processus après la redirection.
Idées d'implémentation :
1. Créez le processus cible via CreateProcess et transmettez le paramètre CREATE_SUSPENDED pour suspendre le processus
2. .Par NtQueryProcessInformation Obtenez l'adresse de base du fichier image dans la mémoire du processus cible. (Structure de données du bloc PEB)
3. Effacez les données de mémoire (section) du processus cible via NtUnmapViewOfSection. Les paramètres entrants sont le handle du processus et l'adresse de base du. fichier image
4. Demandez une nouvelle mémoire via VirtualAllocEx (l'adresse de départ est l'adresse de base du fichier image précédent et la taille est la taille du fichier image). payload)
5. Écrivez la charge utile dans la mémoire via WriteProcessMemory
6 Redirigez l'adresse de base de la charge utile écrite dans la mémoire
7. thread cible via GetThreadContext et modifiez le registre eax du contexte pour Corriger le point d'entrée du code
8 Définissez le point d'entrée via SetThreadContext
9. Réveillez le processus via ResumeThread et exécutez la charge utile.
Idées de confrontation :
De la mise en œuvre Il ressort de l'idée que les étapes 1, 4, 5, 6, 7, 8 et 9 sont des méthodes conventionnelles de création d'un processus puis d'injection c'est vous-même. Seules les étapes 2 et 3 sont spéciales. Il peut être détecté à l’aide de méthodes de détection conventionnelles telles que les fonctions de touche Hook.
Trois : Processus Doppelgänging
Il s'agit d'une méthode d'injection relativement nouvelle, proposée pour la première fois lors de la conférence européenne du chapeau noir en 2017. Cette méthode est similaire à Process Hollowing dans son principe et ses performances. Lorsque le processus créé à l'aide de Process Doppelgänging est visualisé en mémoire à l'aide de Process Hacker, ses ressources d'icônes, sa description et sa signature numérique sont tous les programmes cibles spécifiés.
Cette méthode tire parti des caractéristiques de la transaction Windows (TxF), en utilisant des fichiers malveillants pour écraser les fichiers légitimes dans la transaction. À ce stade, la transaction n'est pas soumise (c'est-à-dire que l'écrasement ne se produira pas). le disque), puis une section est créée (actuellement copie de la transaction). Après avoir obtenu le handle de section, la transaction est annulée pour empêcher les fichiers malveillants d'écraser les fichiers légitimes sur le disque. Après cela, le handle de la section en mémoire est utilisé pour créer le processus. Le processus créé contient des informations sur les fichiers exécutables légaux.
Comme vous pouvez le constater, puisque le fichier doit être écrasé dans la transaction, cette méthode nécessite une autorisation en écriture sur le fichier cible.
Idées d'implémentation :
1. Créer un objet de transaction TxF (NtCreateTransaction)
2. Ouvrir les fichiers exécutables légaux avec l'API de transaction, c'est-à-dire ajouter le fichier à l'objet de transaction (CreateFileTransacted)
3. Ouvrez le fichier malveillant et allouez-lui de l'espace mémoire (CreateFile, GetFileSizeEx -> NtAllocateVirtualMemory -> ; ReadFile)
4. Écrasez le fichier exécutable légitime dans la transaction avec le fichier malveillant dans la mémoire (WriteFile)
5. la transaction en cours (NtCreateSection)
6. Annulez la transaction et restaurez l'écrasement dans un fichier exécutable légal (NtRollbackTransaction)
Utilisez la section dans la mémoire pour créer l'objet de processus. (NtCreateProcessEx )
8. Obtenez le point d'entrée du fichier malveillant, créez un bloc de paramètres de processus, puis écrivez le bloc de processus dans la mémoire du processus (NtQueryInformationProcess -> RtlInitUnicodeString -> RtlCreateProcessParametersEx)
9. Mettez à jour le bloc de paramètres de processus dans le PEB, créez un thread pour l'objet de processus cible et exécutez du code malveillant (NtCreateThreadEx)
Contre-mesures :
À partir des étapes, Hook Cette technique peut être détectée en portant des jugements sur les fonctions clés (telles que NtCreateThreadEx).
Résumé
Plusieurs tendances peuvent être dégagées de l'évolution des trois techniques ci-dessus.
Le premier point est que la capacité de dissimulation dans la mémoire devient de plus en plus forte. Depuis le début, il n'y avait aucune dissimulation, jusqu'à maintenant, elle peut se comporter dans la mémoire conformément au programme légal.
Le deuxième point est que la méthode de libération de la charge utile en mémoire devient de plus en plus difficile à détecter. Initialement, la charge utile était copiée directement en mémoire. Les attaquants peuvent désormais utiliser certaines fonctionnalités (telles que TxF) pour dissimuler davantage la libération. processus.
Le troisième point est que les fonctions clés de la phase finale ne subissent presque aucun changement. Même si la libération de la charge utile devient de plus en plus cachée, elle sera toujours libérée dans la mémoire et appelée pour exécution. En accrochant un nombre limité de fonctions clés, la charge utile finale devrait être vidée.
Autres recommandations de didacticiels connexes : Sécurité du serveur Web
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!