Méthodes connues de lancement automatique d'un programme
au démarrage d'un système d'exploitation Windows 32bits

Dernière mise à jour : 27/05/2004
Auteur : joke0 at caramail.com

Cette page est une annexe de la FAQ du forum de discussion Usenet fr.comp.securite.virus.

Résumé
Cette page évoque les différentes méthodes dont peut se servir un programme, légitime ou non, pour se lancer automatiquement au démarrage d'un système d'exploitation Windows 32 bits.
Avertissement
Le registre et les fichiers mentionnés dans cette page sont des éléments sensibles de votre système d'exploitation, ils sont donc à manipuler avec précaution :

• Registre
Edition avec regedit.exe. Faire une sauvegarde avant toute modification en lancant scanregw.exe, et exporter (registre/exporter) au préalable les clefs que vous voulez supprimer. En cas de problème, vous pourrez toujours les réimporter dans le registre.

• Fichiers
Au lieu de les supprimer, il vaut mieux les renommer, les archiver ou leurs ajouter une extension .old.

Légende
Les clefs de registre sont entre [crochets], les valeurs et leurs données sont en rouge. (ex.: valeur = "données").
Les paramètres contenus dans des fichiers sont en bleu.

1. Dossiers de démarrage

Les dossiers vers lesquels pointent ces clefs verront tous les fichiers exécutables qu'ils contiennent exécutés. Valable pour tous les Windows.

• [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders]
  Startup = "C:\windows\menu démarrer\programmes\démarrage"

• [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders]
  Startup = "C:\windows\menu démarrer\programmes\démarrage"

• [HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders]
  Common Startup = "C:\windows\menu démarrer\programmes\démarrage"

• [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders]
  Common Startup = "C:\windows\menu démarrer\programmes\démarrage"

Exemple 1:      C:\windows\Menu Démarrer\Programmes\Démarrage
Exemple 2:      C:\windows\All Users\Menu Démarrer\Programmes\Démarrage
Exemple 3:      C:\winnt\Documents and Settings\All Users\Start menu\Programs\Startup

    Section Fichiers

2. Win.ini

Fichier impliqué dans le démarrage de Windows, localisé dans le répertoire de Windows.
Il peut être édité plus facilement avec msconfig.exe (non présent d'origine sous 95/NT/2k).

[windows]
load = fichier1.exe
run = fichier2.exe

fichier1.exe et fichier2.exe sont exécutés à chaque démarrage normal de windows.

3. System.ini

Fichier impliqué dans la configuration système. Editable facilement avec msconfig.exe.

[boot]
Shell = Explorer.exe fichier.exe

Dans cette section, Explorer.exe et fichier.exe seront exécutés.
Voir aussi le point 17 pour le problème concernant le démarrage de l'explorateur Windows.

[386Enh]
device = virus.vxd

En s'enregistrant dans la section [386Enh], un malware se lancera à chaque démarrage en tant que pilote virtuel de périphérique. Un exemple, le virus Win95.Fono.

4. Autoexec.bat

Ce batch est exécuté à chaque démarrage au niveau du DOS (Win9x, ME) il est localisé à la racine du disque dur (C:\). Sous Windows NT/2k/XP, il est analysé et seules les variables d'environnement sont prises en compte.

5. Config.sys

Config.sys est un fichier de configuration hérité du DOS au même titre qu'autoexec.bat. Il est aussi localisé à la racine du disque dur uniquement pour les versions Windows 9x et Millenium. Il peut exécuter des commandes grâce à l'interpréteur de commandes command.com:

shell=c:\command.com /e:32768 /k c:\infected.bat

Sur les Windows NT, ce fichier n'est présent que pour des raisons de compatibilité.

6. Winstart.bat

Se comporte comme un batch habituel. Utilisé pour supprimer des fichiers spécifiques, il s'exécute à chaque démarrage si présent dans le répertoire Windows .
N'est pas pris en compte sous Windows NT/2k/XP.

7. Wininit.ini et Wininit.exe

Uniquement valable pour Win9x et WinME.

Wininit.ini
Fichier utilitaire présent dans le dossier Windows souvent utilisé par les programmes d'installation pour supprimer des fichiers au redémarrage. S'il existe, il est utilisé une fois par le programme wininit.exe puis renommé en wininit.bak.

Il ne permet pas le lancement automatique direct, mais il peut être utiliser pour déplacer des fichiers vers des points de démarrage automatique (comme les dossiers de démarrage, voir le point 1.)

[Rename]
NUL=c:\temp\programme.exe
c:\windows\system\fichier.exe=c:\temp\fichier.tmp

Dans cet exemple, le fichier c:\temp\programme.exe va être supprimé.
Fichier.tmp va être renommé en fichier.exe et déplacé dans le sous-répertoire System.

Wininit.exe
Ce programme est systèmatiquement exécuté peu après l'affichage du logo Windows. Il peut donc être remplacé ou modifié pour effectuer des tâches illégitimes.

    Section Registre

Attention, toutes les clefs décrites dans cette section peuvent aussi contenir d'autres clefs. Dans la plupart des cas leur contenu sera lui aussi pris en compte. En d'autres termes, description de la clef [...\clef1] concerne aussi la clef [...\clef1\clef2].

8. Les Clefs Run

Les "clefs Run" du registre Windows sont l'endroit le plus populaire pour faire démarrer un programme illégitime.

• [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run]
• [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce]
• [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunServices]
• [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce]
• [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run]

• [HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run]
• [HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnce]
• [HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServices]
• [HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce]
• [HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run]

• [HKEY_USERS\xxxxxx\Software\Microsoft\Windows\CurrentVersion\Run]
• [HKEY_USERS\xxxxxx\Software\Microsoft\Windows\CurrentVersion\RunOnce]
      xxxxxx étant le nom chiffré d'un utilisateur.

(Pour toutes les clefs:)    Une valeur = c:\Dossier\programme.exe
(Avec les flux sous NTFS:)     Une valeur = rundll32.exe c:\winnt\system32:malware.dll, init

programme.exe sera exécuté à chaque démarrage normal s'il est enregistré dans l'une de ces clefs.
malware.dll sera exécuté comme un .exe grâce à rundll32.exe. Cette dll est invisible car en utilisant une fonctionnalité de NTFS, son flux de donnée a été ajouté à celui du dossier system32. Plus d'explications sur le site de JC. Bellamy.

Un exemple d'utilisation de la technique: la backdoor Afcore.q.

• [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnceEx]
• [HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnceEx]
• [HKEY_USERS\xxxxxx\Software\Microsoft\Windows\CurrentVersion\RunOnceEx]
    Une application = ||notepad.exe

Le fichier notepad.exe sera aussi exécuté à chaque démarrage.
Plus d'informations sur: http://support.microsoft.com/default.aspx?scid=KB;fr;q232509

9. Les Services

Au démarrage, Svchost.exe scrute la partie du registre réservée aux services pour générer une liste de ceux qu'il doit charger. Les groupes sont identifiés à la clef de registre suivante :

[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Svchost]

Chaque groupe Svchost peut contenir un ou plusieurs noms de service extraits de la clef de registre suivante :

[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Un_Nom_de_Service]

Le ver Welchia procède ainsi. Pour plus d'informations sur Svchost.exe, voir les explications pour Windows 2000 et Windows XP sur le site de Microsoft.

10. Control

Plusieurs possibilités depuis cette clef :

[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager]
    BootExecute = programme.exe

Ici, programme.exe sera exécuté à tous les démarrages.

Wininit.exe n'existant pas sur les WindowsNT, il faut utiliser PendingFileRenameOperations pour déplacer/renommer des programmes qui étaient en cours d'utilisation. Bien sûr comme pour wininit, ce procédé ne peut être utilisé que pour un lancement indirect.

[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager]
    PendingFileRenameOperations = \??\c:\temp\worm.sys !\??\c:\winnt\system32\prog.sys

Dans cet exemple, le fichier worm.sys sera déplacé dans c:\winnt\system32 et renommé prog.sys. Si le ficher existait, il sera écrasé.

[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\MPRServices]

Pour plus de précisions, voir les descriptions des backdoors Haxdoor.i, et NetCrack.11.a.

11. AppInit_DLLs, Load et Run

Sous les WindowsNT (NT, 2k, XP), toutes les dll spécifiées à cet endroit seront chargées par chaque application win32 s'exécutant lors d'une ouverture de session.

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows]
    AppInit_DLLs = programme.exe
                Load = c:\Dossier\programme.exe
    et           Run = c:\explorer.scr

La technique AppInit_DLLs est utilisée par le virus Elkern largué par le ver Klez.e. Plus d'info sur microsoft.com. Les deux autres valeurs sont mises en oeuvre par le ver Kullan.

12. Winlogon

Une possibilité offerte sur les OS WindowsNT (NT, 2k, XP) :

[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Winlogon]
     Userinit = c:\windows\system32\svcpack.exe
Autres valeurs concernées: Notify, Shell, System, VmApplet.

Cette technique est utilisée par le ver Fagot. La clef Winlogon permet d'autres lancements, par exemple, la backdoor Haxdoor.i démarre depuis [...\Winlogon\Notify\debugg].
Pour le démarrage du shell, voir aussi le point 17.

13. ShellServiceObjectDelayLoad

Aussitôt lancé, l'Explorateur exécute les applications enregistrées à cette clef.
Valable pour tous les Windows.

[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\ShellServiceObjectDelayLoad]
    {Une_clef} = 'Un Nom de Service'

Il faut que [HKEY_CURRENT_USER\Software\Classes\CLSID\{Une_clef}\InProcServer32] existe.

Pour plus de détails, reportez-vous à la description du Trojan.Bookmarker.C.

14. SharedTaskScheduler

Sous tous les Windows, pour démarrer une application en même temps que l'explorateur:

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\SharedTaskScheduler]
    {Une_clef} = 'Un Nom de Service'

Il faut que la valeur {Une_clef} soit déclarée dans [HKEY_CLASSES_ROOT\CLSID]

Pour plus de détails, reportez-vous à la description du Trojan.Bookmarker.C.

15. Autorun

Sous Windows NT/2k/XP, un fichier de commandes (.cmd) peut être exécuté au démarrage:

• [HKEY_CURRENT_USER\Software\Microsoft\Command Processor]
• [HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor]
    AutoRun = c:\Startup.cmd

16. Détournement de commandes dans le registre

Chaque clef devrait avoir la valeur "%1" %*. Si elle est changée en serveur.exe "%1" %*, le fichier serveur.exe sera exécuté à chaque fois qu'un exe/pif/com/bat/hta sera lancé. Notez que le principe peut être étendu à d'autres types de fichiers.

A condition que dans [HKEY_CLASSES_ROOT\], les extensions .exe, .com, .bat, .hta, .pif pointent respectivement sur exefile, comfile, batfile, htafile et piffile. Exemple:    [HKEY_CLASSES_ROOT\.exe] (Défaut) = "exefile"

Normalement:

• [HKEY_CLASSES_ROOT\exefile\shell\open\command]
• [HKEY_CLASSES_ROOT\comfile\shell\open\command]
• [HKEY_CLASSES_ROOT\batfile\shell\open\command]
• [HKEY_CLASSES_ROOT\htafile\shell\open\command]
• [HKEY_CLASSES_ROOT\piffile\shell\open\command]
• [HKEY_LOCAL_MACHINE\Software\CLASSES\batfile\shell\open\command]
• [HKEY_LOCAL_MACHINE\Software\CLASSES\comfile\shell\open\command]
• [HKEY_LOCAL_MACHINE\Software\CLASSES\exefile\shell\open\command]
• [HKEY_LOCAL_MACHINE\Software\CLASSES\htafile\shell\open\command]
• [HKEY_LOCAL_MACHINE\Software\CLASSES\piffile\shell\open\command]

    (Pour toutes ces clefs :)    (Défaut) = "%1" %*

Cette méthode est appelée « Unknown Starting Method » ou « Méthode de Lancement Inconnue », elle est utilisée par la célèbre backdoor Subseven et le ver I-Worm.Navidad.

17. Démarrage de l'Explorateur Windows

Windows 95, 98, ME :
Explorer.exe est lancé par une entrée dans system.ini. Cette entrée elle-même ne contient, originellement, aucun chemin d'accés (voir plus bas pour les conséquences).

Windows NT/2000/XP :
Le Shell Windows est l'environnement qui est utilisé pour interagir avec Windows. Pendant le démarrage du système, les Windows NT/2k/XP consultent les entrées registre du Shell:

[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\Shell]

pour déterminer le nom de l'exécutable qui sera chargé en tant que Shell. Par défaut, cette valeur est 'explorer.exe' (sans chemin d'accès).

Le problème est dû à l'ordre de recherche qui est effectué, lors du démarrage du système, s'il n'y a pas de chemin d'accès spécifié. En effet, par défaut l'entrée du registre ou de system.ini (suivant la version de Windows) nomme le programme de Shell, mais pas son chemin d'accès. Windows lance donc une recherche pour trouver son emplacement. Cette recherche se fait dans cet ordre:

• Répertoire courant,
• Répertoires éventuellement spécifiés dans :
  [HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment\Path],
• Répertoires éventuellement spécifiés dans [HKEY_CURRENT_USER\Environment\Path].

Si un troyen s'auto-installe en tant que c:\explorer.exe , aucune autre entrée n'est nécessaire. Si c:\explorer.exe est un fichier endommagé le système sera bloqué.

Affecte toutes les versions non patchées de Windows.
Plus d'info et patch : http://support.microsoft.com/default.aspx?scid=kb;fr;269049

18. Composants ActiveX

Croyez-le ou non, ceci lance Programme.exe avant le Shell et tous les autres programmes présents dans les clefs Run du registre!

[HKEY_LOCAL_MACHINE\Software\Microsoft\Active Setup\Installed Components\{Une_clef}]
StubPath = c:\chemin d'accès\Programme.exe

Exemple: Backdoor.Beasty.

19. Politiques de Groupe (Group Policies)

Cette technique permet de lancer des scripts ou des programmes juste avant ou juste après l'ouverture d'une session sur un Windows NT/2k/XP. Les paramètres peuvent facilement être édités avec GPEdit.msc.

Juste avant l'ouverture d'une session :

[HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\System\Scripts]
Startup = C:\winNT\system32\GroupPolicy\Machine\Scripts\Startup

Ici, la clef indique que le dossier C:\winNT\system32\GroupPolicy\Machine\Scripts\Startup contient les scripts qui seront exécutés avant l'ouverture de la session.

Juste après l'ouverture d'une session :

[HKEY_CURRENT_USER\Software\Policies\Microsoft\Windows\System\Scripts]
Startup = C:\winNT\system32\GroupPolicy\User\Scripts\Logon

Ici, la clef indique que le dossier C:\winNT\system32\GroupPolicy\User\Scripts\Logon contient les scripts qui seront exécutés juste après l'ouverture de la session.

20. Planificateur de tâches

Le planificateur de tâches est souvent activé par défaut dans la configuration initiale de Windows. Il se lance généralement depuis le registre et la clef RunServices (voir le point 8):

[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServices]
SchedulingAgent = mstask.exe

Les tâches à effectuer sont stockées dans le répertoire Windows sous-répertoire Tasks sous forme de fichiers .job.

21. ICQ

Ces clefs contiennent les applications qui seront exécutées si le logiciel ICQ détecte une connexion internet.

[HKEY_CURRENT_USER\Software\Mirabilis\ICQ\Agent\Apps\test]
Path = test.exe
Startup = c:\test
Parameters =
Enable = Yes

    Autres techniques automatiques

Cette partie regroupe les techniques de lancement automatiques qui ne peuvent se produire au démarrage de Windows.

22. FileExts

Cette technique permet d'exécuter un programme lorsque l'utilisateur lance un .exe depuis l'Explorateur de fichier. Ne fonctionne que sur les Windows NT.

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.exe]
Application = c:\programme.exe

Si depuis l'explorateur on veut lancer un fichier à l'extension .exe, c'est c:\programme.exe qui s'exécutera. Le chemin vers programme.exe doit être spécifié dans la variable d'environnement path. Exemple d'utilisation: la backdoor Easydor.d.

  A faire / A voir

Éléments à examiner/ajouter pour les prochaines mises à jour :

• [HKLM\System\CurrentControlSet\Control\VMM32Files]
• [HKEY_LOCAL_MACHINE\SYSTEM\ControlSet***\Control\Session Manager]
  (*** est un nombre tel 001,002..etc.), ces clefs sont des sauvegardes (voir point 10).
• [HKLM\System\CurrentControlSet\Services\Winsock2\Parameters\Protocol_Catalog\Catalog_Entries]
• [HKLM\System\Control\WOW\cmdline], s'exécuterait quand un prog. 16bits est lancé (WinT/2k/XP).
• Config.sys: lancer un malware par la commande DEVICE qui serait actif sous win32?

    Remerciements

Merci à Ewa N., Ra-Mon, Pierre VG, Frederic Bonroy, Djehuti, Noshi, Tweakie et les autres!

[Retour au début]

Toute correction (forme ou/et fond) est la bienvenue, ainsi que toutes vos suggestions.
Pour les soumettre, merci d'utiliser : joke0 at caramail.com.

Si vous avez des questions, n'hésitez pas à les poster sur fr.comp.securite.virus.

Valid XHTML 1.0!

Liste des aides mises à disposition sur ce site : La page des ressources

Valid CSS 1.0!