« Le message que je souhaite vraiment que vous reteniez [de cette présentation] est le suivant : si vous voulez réellement protéger votre réseau, vous devez vraiment bien le connaître. » Responsable du TAO, NSA, USENIX Enigma 2016
Une partie essentielle de la « connaissance de votre réseau » consiste à surveiller les mécanismes de persistance des terminaux, c'est-à-dire la multitude de façons dont un système d'exploitation peut charger et exécuter automatiquement du code. Depuis plus d'une décennie, les services d'arrière-plan constituent l'un des emplacements de persistance les plus couramment utilisés sous Windows. Existants depuis l'époque de Windows NT et XP, les services constituent un moyen fiable de charger discrètement des processus et des bibliothèques en arrière-plan lors du démarrage du système, de la connexion d'un utilisateur ou lorsque certaines conditions sont remplies. Même si l'on accorde souvent beaucoup d'attention au suivi des nouvelles techniques de persistance dissimulées, il est important de ne pas perdre de vue les principes fondamentaux, d'autant plus que les logiciels malveillants basés sur des services restent très répandus.
Il était autrefois impossible de surveiller de près les services système en cours d'exécution à l'échelle de toute une entreprise. Il y a deux ans, la pratique courante consistait à réaliser un audit mensuel accompagné d'une analyse manuelle approfondie afin de détecter les anomalies. Aujourd'hui, cela peut être réalisé de manière continue et automatisée grâce à la plateforme Tanium et à son module « Incident Response ».
Les outils d'accès à distance (RAT) et autres logiciels malveillants peuvent persister en tant que services de trois manières différentes : sous forme de fichiers exécutables de service autonomes, de modules de service hébergés et de composants COM+. Dans cet article, je vais passer en revue les différentes façons dont les pirates exploitent les services Windows, et vous expliquer comment Tanium peut vous aider à les détecter.
Services autonomes
Les services autonomes exécutent un fichier exécutable ou une ligne de commande spécifiée dans la valeur « ImagePath » de leurs clés de registre de configuration respectives. Le registre Windows contient les paramètres de configuration de tous les services en cours sous la clé parente « HKLM\System\CurrentControlSet\Services ».
Tanium offre depuis longtemps la possibilité de surveiller les services Windows à grande échelle (sur l'ensemble du parc Windows). Le capteur « État du service avec hachage MD5 », par exemple, collecte et compare le nom du service, son état (en cours d'exécution, arrêté, etc.), la ligne de commande, le hachage de ImagePath et le contexte utilisateur sous lequel le service s'exécute. Cela signifie que les services autonomes se démarqueront par un faible nombre d'occurrences si leur configuration ou leur état est inhabituel, ou s'il diffère d'une instance à l'autre portant le même nom. Les utilisateurs de Tanium ont utilisé ce capteur pour identifier des services mal configurés mais légitimes en fonction de leur état (tels que les services antivirus arrêtés), ainsi que des services malveillants en fonction de leur nom, du contexte utilisateur, de la ligne de commande ou de hachages ImagePath différents pour des instances de service portant le même nom.
Du point de vue d'un pirate, les services autonomes sont moins prisés, car le chemin d'accès à l'exécutable est facilement accessible via le Gestionnaire des tâches, la commande « tasklist.exe » ou les requêtes du Gestionnaire de contrôle des services. Imaginons un pirate informatique qui souhaite dissimuler un logiciel malveillant sous le nom d'un service légitime, à savoir « Print Spooler ». Le chemin d'accès au fichier exécutable de ce service est « c:\windows\system32\spoolsv.exe ». Une instance corrompue du service pourrait charger un fichier binaire malveillant à partir d'un nom de fichier ou d'un emplacement comportant de légères modifications, tels que « c:\windows\spoolsv.exe » ou « c:\windows\system32\spoolsvc.exe ». Cette technique permet de dissimuler efficacement les logiciels malveillants lors d'une analyse « à première vue », mais elle peut être facilement contournée par une analyse statistique cumulative de l'ImagePath ou de la ligne de commande. Les capteurs Tanium, tels que « État du service avec le hachage MD5 », mettront rapidement ces valeurs aberrantes de côté pour une analyse et une enquête ultérieures.
Services hébergés et applications COM+
Les services hébergés sont implémentés sous forme de bibliothèques – généralement des bibliothèques de liens dynamiques (DLL) – plutôt que sous forme de fichiers exécutables autonomes. Ils sont généralement chargés par le processus hébergeant les services Windows, « svchost.exe ». La capture d'écran ci-dessous présente les résultats fournis par le capteur « Service Status with MD5 Hash » de Tanium pour plusieurs services hébergés, tels que « Application Management » et « Base Filtering Engine ». Pour chaque service, la valeur de hachage fournie correspond à celle de « svchost.exe » plutôt qu'à celle de la DLL hébergée.
Comment Windows sait-il quelle DLL charger pour un service hébergé donné ? La configuration du registre pour chacun de ces services comprend une sous-clé et une valeur, « \Parameters\ServiceDLL », qui désignent la DLL à charger. Pour des raisons d'efficacité et de sécurité, Windows charge également les services hébergés par groupes sous des instances partagées du processus d'hébergement (plutôt que de créer une instance distincte de « svchost.exe » pour chacun d'entre eux).
Les groupes de services hébergés sont configurés sous la clé de registre « HKLM\Software\Microsoft\Windows NT\CurrentVersion\Svchost ». Chaque groupe offre différents niveaux d'accès ; « netsvcs » est l'un des groupes disposant des privilèges les plus élevés pour les services ayant accès au réseau, et il est donc fréquemment utilisé par les pirates. La valeur « netsvcs » est un tableau de chaînes de caractères contenant les noms des services à charger dans ce groupe, comme l'illustre la capture d'écran ci-dessous.
Les pirates peuvent exploiter les services hébergés pour charger une DLL malveillante de plusieurs façons. Une approche consiste à choisir un nom de service hébergé qui soit « inoccupé », c'est-à-dire pour lequel aucun service n'est configuré sous « HKLM\SYSTEM\CurrentControlSet\services ». Les programmes de déploiement de logiciels malveillants pourraient parcourir ces entrées inutilisées, créer les clés de registre nécessaires (y compris un paramètre ServiceDLL) et ainsi assurer leur persistance en tant que service hébergé. Par exemple, sur les anciennes versions de Windows, les pirates ciblaient souvent le service “6to4” , qui fait partie du groupe « netsvcs » mais qui est souvent inactif en l'absence d'une configuration correspondante. L'attaquant pourrait configurer ce service pour qu'il pointe vers un nom de DLL d'apparence plausible, tel que « c:\windows\system32\6to4svc.dll », et ainsi passer inaperçu lors d'une inspection visuelle. Une autre approche consiste simplement à modifier le paramètre ServiceDLL d'un service Windows existant mais désactivé, puis à le configurer pour qu'il démarre automatiquement.
Les services système COM+ constituent une autre variante des services hébergés susceptibles de charger des DLL malveillantes. Dans ce cas, le processus « dllhost.exe » charge l'application COM+ qui peut comporter plusieurs composants sous forme de DLL. À titre d'exemple, le service ComSysApp figurant sur la capture d'écran ci-dessous est chargé d'héberger les applications COM+. La ligne de commande affiche le chemin d'accès à « dllhost.exe » ainsi qu'un GUID « Processid » qui identifie l'application COM+, et dans le code, les « composants » peuvent être répertoriés. Ces composants sont des DLL utilisées pour la mise en œuvre de l'application.
En résumé, les services hébergés et les services COM constituent un moyen discret et largement utilisé pour assurer la persistance des RAT et d'autres logiciels malveillants. Les analystes doivent aller au-delà de la simple surveillance des processus ou de la vérification des noms de services et des chemins d'accès aux images (ImagePaths) afin de détecter les services qui chargent des DLL malveillantes.
Identification des DLL de services non autorisées à l'aide de Tanium
Tanium propose plusieurs capteurs qui peuvent vous aider à détecter et à analyser facilement les DLL de service à l'échelle de l'entreprise. Tout d'abord, nous allons vous présenter un nouveau capteur, « Service Module Details », qui sera intégré à la prochaine version 3,0 de notre solution de gestion des incidents, prévue pour la fin du mois. La capture d'écran ci-dessous présente une partie des données fournies par ce capteur (la colonne « count » a été omise).
Ce capteur offre une vue d'ensemble des trois types de services évoqués ci-dessus. Veuillez noter la présence d'une colonne « Chemin d'accès au module », en plus des colonnes « Nom du service » et « Chemin d'accès à l'image ». Les deux premières lignes de cet exemple indiquent le chemin d'accès à deux DLL de composants pour l'application COM+ nommée « COMSysApp ». Les autres résultats sont tous hébergés par « svchost.exe » et comprennent le chemin d'accès à la DLL de chaque service concerné. L'analyse de ces données, comme pour tous les capteurs Tanium, s'effectue en temps réel. Cela signifie que vous pouvez détecter en quelques secondes, parmi des dizaines ou des centaines de milliers de systèmes, les cas aberrants de services chargeant des DLL malveillantes.
Identification des membres indésirables au sein des groupes de services hébergés
Au cours du dernier trimestre, la mise à jour de la solution Incident Response de Tanium a intégré un nouveau capteur d'analyse des services, baptisé « Audit des noms de services hébergés ». La capture d'écran ci-dessous présente un exemple de résultat pour le groupe « netsvcs ».
Les données fournies par ce capteur permettent d'inspecter rapidement l'ensemble des services au sein de groupes de services à grande échelle. Pour chaque groupe, la colonne « Liste triée des noms de services hébergés » présente une liste alphabétique des noms de services. Cela garantit que les résultats de chaque système « s'empilent » ; les systèmes proposant un service peu courant au sein d'un groupe sont ainsi identifiés comme des valeurs aberrantes. Bien sûr, les systèmes peuvent disposer d'ensembles de services différents selon le système d'exploitation et leur rôle, mais nous avons constaté que les données fournies par le capteur se regroupent en fonction de la version du système d'exploitation et du type de plateforme. Les utilisateurs de Tanium peuvent utiliser la fonctionnalité « drill-down » pour analyser facilement les systèmes présentant des résultats aberrants, ou basculer vers Tanium Trace afin d'examiner l'historique des données d'analyse forensic relatives à la création d'un service non autorisé.
Vous souhaitez découvrir Tanium en action ? Prenez rendez-vous pour une démonstration individuelle ou participez à notre webinaire hebdomadaire. Venez échanger avec nos experts Tanium lors de nos prochains événements organisés dans le cadre de l' :.
