Pare-feu Windows pour les développeurs de jeux
Cet article décrit le Pare-feu Windows : pourquoi il existe, ce qu’il accomplit et comment il le fait. Plus important encore, il décrit comment configurer votre jeu pour qu’il fonctionne correctement avec le pare-feu.
Contenu :
- Qu’est-ce qu’un pare-feu ?
- Comment savoir si mon jeu est affecté ?
- Le pare-feu avant Windows XP SP2
- Le pare-feu Windows XP SP2 est meilleur
- Utilisation du Pare-feu Windows
- Intégration à l’aide de InstallShield InstallScript
- Intégration à Wise pour Windows Installer
- Intégration à Windows Installer
- Recommandations
Qu’est-ce qu’un pare-feu ?
Le pare-feu fournit une barrière contre les intrusions basées sur le réseau. Il bloque le trafic entrant non sollicité et rend le système principalement invisible sur Internet en rejetant les demandes ICMP (Internet Control Message Protocol). Cela signifie que ping et tracet ne fonctionnent pas. Le pare-feu recherche et rejette également les paquets non valides.
Cette barrière empêche les attaques opportunistes. Les attaques se propagent en trouvant de nombreux systèmes présentant la même vulnérabilité. Le pare-feu peut contrecarrer de nombreuses attaques en mettant en place un signe « ne pas déranger » pour les fonctionnalités qui ne sont pas utilisées actuellement ; l’attaque est ignorée et ne frappe pas la maison. L’avantage essentiel du Pare-feu Windows est que les fonctionnalités et les applications qui ne sont pas utilisées ne peuvent pas être des voies d’attaque.
L’utilisateur configure le système pour identifier les applications et les fonctionnalités nécessaires et doivent être ouvertes au réseau. Cela se produit lors de l’installation d’une application ou lorsqu’elle tente de s’ouvrir au réseau.
Comment savoir si mon jeu est affecté ?
Avec l’arrivée de Windows XP SP2, le Pare-feu Windows a été largement déployé. Tous les jeux Windows multijoueurs sont affectés dans une certaine mesure. Bien que les clients soient généralement en bonne forme, les serveurs, les hôtes et les homologues d’égal à égal ont tous besoin que le pare-feu soit configuré pour continuer à fonctionner. Plus précisément, le trafic entrant non sollicité est supprimé. Le pare-feu intercepte les paquets de filtre du trafic réseau en fonction du contenu des paquets et de l’activité réseau récente. Le pare-feu utilise le contenu et l’activité pour décider de transférer ou de supprimer un paquet. Une fois le pare-feu correctement configuré, un jeu peut accepter le trafic entrant non sollicité comme auparavant.
Qui a un trafic entrant non sollicité ?
- Client/Serveur : tous les participants se connectent à un serveur central. Le serveur central est celui avec le trafic entrant non sollicité. Les clients qui se connectent au serveur sollicitent le trafic de retour, qui est attendu et est autorisé à passer par le pare-feu si les règles pour les clients sont suivies. Le serveur central doit être configuré pour accepter le trafic non sollicité afin de permettre au trafic client de passer par le pare-feu.
- Massivement multijoueur (MMP) : tous les participants sont connectés à un centre de données. Cela équivaut à une relation client/serveur complexe, car le centre de données a le trafic entrant non sollicité. Les participants sont des clients et n’ont généralement pas besoin d’accepter le trafic non sollicité.
- Peer-to-Peer, où tous les participants sont connectés directement les uns aux autres : tous les participants doivent être prêts à accepter le trafic non sollicité de tout nouveau joueur rejoignant le groupe. Dans un sens, chacun des participants doit fonctionner en tant qu’hôte. Ils doivent donc tous être configurés comme s’ils étaient des hôtes.
Les clients sont généralement en bonne forme. Leurs connexions TCP/IP (Transmission Control Protocol/Internet Protocol) sortantes fonctionneront correctement, tout comme les messages UDP (User Datagram Protocol) sortants ainsi que les réponses opportunes à ces messages . Le pare-feu maintient le port ouvert pendant 90 secondes après chaque message sortant en prévision d’une réponse.
Le pare-feu avant Windows XP SP2
Le pare-feu de connexion Internet (ICF) dans Windows XP et Windows Server 2003 est un filtre de paquets avec état et gère à la fois le protocole Internet version 4 (IPv4) et le protocole Internet, version 6 (IPv6). Toutefois, il n’est pas activé par défaut et ne prend pas en charge les piles de réseaux tiers, dont il existe un nombre important dans le monde, comme les grands fournisseurs d’accès Internet, y compris les compagnies de téléphone nationales.
Pour ceux qui ne sont pas sur Windows XP SP2, il est vivement recommandé d’activer l’ICF. Le pare-feu de connexion Internet (ICF) fournit un mappage de ports pour remplacer le filtre de paquets. Pour l’essentiel, vous spécifiez le port à ouvrir et il reste ouvert jusqu’à ce que vous le fermiez. Si l’utilisateur redémarre avant sa fermeture, il reste ouvert jusqu’à ce qu’il soit spécifiquement fermé. Le contrôle du pare-feu et la gestion des mappages de ports s’effectuent via INetSharingManager (IPv4) et INetFwV6Mgr (IPv6).
Le Pare-feu Windows pour Windows XP SP2 est une solution plus complète qui prend en charge les piles réseau tierces et gère les ports de manière plus intelligente : les ports restent ouverts uniquement tant que l’application qui en a besoin est toujours active.
Le pare-feu Windows XP SP2 est meilleur
Windows XP SP2 place les choix et paramètres de sécurité à l’avant-plan. L’objectif est de protéger par défaut et de permettre à l’utilisateur de faire des choix éclairés sur les applications autorisées à s’exécuter sur son ordinateur.
Le nouveau Pare-feu Windows est disponible sur Windows XP SP2 et Windows Server 2003 Service Pack 1 (SP1). Comme l’ICF, il s’agit d’un pare-feu logiciel qui prend en charge À la fois IPv4 et IPv6, mais contrairement à ICF, le Pare-feu Windows :
- Offre une protection au démarrage du système, éliminant une petite fenêtre de vulnérabilité pendant le démarrage.
- Prend en charge les piles réseau tierces.
- Dispose d’un mode « activé sans exception » qui bloque tous les paquets entrants non sollicités. C’est très bien quand vous utilisez un réseau public, comme dans un aéroport ou un café.
En mode « activé sans exception », tous les trous statiques sont fermés. Les appels d’API pour ouvrir un trou statique sont autorisés, mais différés ; autrement dit, ils ne sont pas appliqués tant que le pare-feu n’est pas revenu à un fonctionnement normal. Toutes les demandes d’écoute par les applications seront également ignorées. Les connexions sortantes réussissent toujours.
Pour les nouvelles applications, ajoutez votre application à la « Liste des exceptions » lors de l’installation. Vous pouvez ajouter l’application à l’aide de l’interface INetFwAuthorizedApplications , en fournissant le chemin d’accès complet. Nous aborderons les détails dans l’exemple.
En guise de remarque, vous vous demandez peut-être s’il s’agit d’un risque de sécurité que les applications peuvent ajouter et supprimer des applications de la liste des exceptions de toute intervention de l’utilisateur, ou peut-être pensez-vous que le plus grand risque est que les applications peuvent désactiver le pare-feu complètement. Pour effectuer ces exploits, l’application doit disposer de privilèges d’administrateur. Si vous avez du code malveillant en cours d’exécution en mode administrateur sur votre système, le jeu est déjà terminé et le pirate a déjà gagné. La capacité du pirate à désactiver le pare-feu ne mériterait guère plus qu’une note de bas de page.
Les applications héritées, y compris les applications installées avant la mise à niveau de l’utilisateur vers Windows XP SP2, sont gérées avec la fenêtre contextuelle Liste d’exceptions (voir figure 1). Cette boîte de dialogue indique quand une application tente d’ouvrir un port pour le trafic entrant , soit lors de l’appel de bind() avec un port non nul pour UDP, soit accept() pour le protocole TCP/IP. Vous devez être en cours d’exécution en tant qu’administrateur pour « débloquer » les applications, tandis que « Demandez-moi plus tard » ne l’autorise pas cette fois, mais demande à nouveau la prochaine fois.
Il s’agit d’une boîte de dialogue modale système non bloquante. Lors de l’exécution d’une application Microsoft Direct3D plein écran, la boîte de dialogue s’affiche en dessous ; et l’utilisateur peut ensuite le gérer lorsque l’application quitte le mode plein écran ou les onglets alt sur le bureau. Toutefois, il n’est pas toujours évident pour l’utilisateur que cette boîte de dialogue s’est affichée lorsqu’un jeu s’exécute en plein écran. Il est donc important d’éviter d’afficher cette boîte de dialogue à l’aide de l’interface INetFwAuthorizedApplications , comme indiqué ci-dessous.
Figure 1. Boîte de dialogue contextuelle liste d’exceptions
Vous remarquerez que la fenêtre contextuelle connaît le nom et l’éditeur de l’application. Il n’y a pas de magie ici : il est extrait des informations de version de l’exécutable. Ces informations sont un outil d’administration système important ; il est même utilisé pour le travail de compatibilité des applications en cours. Certaines applications négligent de conserver ces informations de version à jour.
Les utilisateurs peuvent également ajouter leurs applications via l’interface utilisateur (IU) (voir figure 2)
Figure 2 : Configuration du pare-feu
Figure 3. Ajout d’un programme à la liste des exceptions du pare-feu
Le meilleur scénario consiste à automatiser les ajouts et les suppressions de la liste d’exceptions. Le meilleur moment pour effectuer ces ajouts et suppressions est pendant le processus d’installation et de désinstallation. L’ajout ou la suppression de la liste d’exceptions de pare-feu nécessite des privilèges d’administrateur. Veillez donc à en tenir compte.
Utilisation du Pare-feu Windows
Là encore, la plupart des jeux doivent uniquement être ajoutés à la liste des exceptions de pare-feu s’ils peuvent fonctionner en tant que serveur ou s’ils implémentent un protocole de communication d’égal à égal. Le FirewallInstallHelper.dll est un exemple de DLL qui peut être appelé à partir d’un programme d’installation. La source est fournie si vous souhaitez intégrer la source directement dans votre propre application. L’exemple est disponible ici :
Fichier | |
---|---|
Source : | (racine du KIT de développement logiciel)\Samples\C++\Misc\FirewallInstallHelper |
Exécutable: | (racine du SDK)\Samples\C++\Misc\Bin\<arch>\FirewallInstallHelper.dll |
Les fonctions exportées par cette DLL sont les suivantes :
-
AddApplicationToExceptionListW
-
Cette fonction ajoute une application à la liste d’exceptions. Il prend un chemin d’accès complet à l’exécutable et un nom convivial qui apparaîtra dans la liste des exceptions du pare-feu. Cette fonction nécessite des privilèges d’administrateur.
-
AddApplicationToExceptionListA
-
Version ANSI de AddApplicationToExceptionListW
-
RemoveApplicationFromExceptionListW
-
Cette fonction supprime l’application de la liste des exceptions. Il prend un chemin d’accès complet à l’exécutable. Cette fonction nécessite des privilèges d’administrateur
-
RemoveApplicationFromExceptionListA
-
Version ANSI de RemoveApplicationFromExceptionListW
-
CanLaunchMultiplayerGameW
-
Cette fonction indique si l’application a été désactivée ou supprimée de la liste des exceptions. Il doit être appelé chaque fois que le jeu est exécuté. La fonction prend un chemin d’accès complet à l’exécutable. Cette fonction ne nécessite pas de privilèges d’administrateur.
-
CanLaunchMultiplayerGameA
-
Version ANSI de CanLaunchMultiplayerGameW
-
SetMSIFirewallProperties
-
Appelez cette option uniquement si vous utilisez des actions personnalisées dans Windows Installer. Vous trouverez plus de détails à la suite.
-
AddToExceptionListUsingMSI
-
Appelez cette option uniquement si vous utilisez des actions personnalisées dans Windows Installer. Vous trouverez plus de détails à la suite.
-
RemoveFromExceptionListUsingMSI
-
Appelez cette option uniquement si vous utilisez des actions personnalisées dans Windows Installer. Vous trouverez plus de détails à la suite.
Les sections suivantes décrivent des méthodes spécifiques d’appel des fonctions DLL exportées à partir de ce FirewallInstallHelper à partir d’un package InstallShield, Wise ou Windows Installer. Toutes les méthodes affichent les mêmes résultats et il appartient au développeur de déterminer la méthode à implémenter.
Intégration à l’aide de InstallShield InstallScript
Une autre méthode d’utilisation des API de pare-feu consiste à ajouter les appels de fonction à un InstallShield InstallScript. Les étapes requises pour l’intégration sont assez simples :
Ouvrez un projet InstallScript dans l’éditeur InstallShield.
Ajoutez le FirewallInstallHelper.dll au projet en tant que fichier de support.
- Sous l’onglet Assistant Projet, ouvrez l’onglet Fichiers d’application.
- Cliquez sur le bouton Ajouter des fichiers pour ajouter des fichiers au dossier cible de l’application.
- Accédez au FirewallInstallHelper.dll que vous avez créé ou utilisez celui fourni dans le KIT de développement logiciel (SDK) DirectX et ajoutez-le au projet.
Ajoutez InstallScript au projet.
- Ouvrez la vue Installation Designer, puis cliquez sur comportement et logique | InstallScript
- Cliquez sur le fichier InstallScript (généralement setup.rul) pour l’ouvrir dans l’éditeur
- Collez le code suivant dans le fichier InstallScript :
#include "ifx.h" prototype BOOL FirewallInstallHelper.AddApplicationToExceptionListW( WSTRING, WSTRING ); prototype BOOL FirewallInstallHelper.RemoveApplicationFromExceptionListW( WSTRING ); function OnMoved() WSTRING path[256]; begin // The DLL has been installed into the TARGETDIR if !MAINTENANCE then // TRUE when installing UseDLL( TARGETDIR ^ "FirewallInstallHelper.dll" ); path = TARGETDIR ^ "TODO: change to relative path to executable from install directory"; FirewallInstallHelper.AddApplicationToExceptionListW( path, "TODO: change to friendly app name" ); UnUseDLL( TARGETDIR ^ "FirewallInstallHelper.dll" ); endif; end; function OnMoving() WSTRING path[256]; begin // The DLL is about to be removed from TARGETDIR if MAINTENANCE && UNINST != "" then // TRUE when uninstalling UseDLL( TARGETDIR ^ "FirewallInstallHelper.dll" ); path = TARGETDIR ^ "TODO: change to relative path to executable from install directory"; FirewallInstallHelper.RemoveApplicationFromExceptionListW( path ); UnUseDLL( TARGETDIR ^ "FirewallInstallHelper.dll" ); endif; end;
- Modifiez les commentaires TODO par le nom de l’application qui sera affiché dans la liste des exceptions de pare-feu et le chemin d’accès au fichier exécutable du jeu par rapport au répertoire d’installation.
Intégration à Wise pour Windows Installer
Pour intégrer Wise pour Windows Installer, procédez comme suit :
Ouvrez votre projet Wise pour Windows Installer.
Sélectionnez l’onglet « Expert installation » en bas.
Cliquez sur Fichiers, puis ajoutez le FirewallInstallHelper.dll du DXSDK au répertoire d’installation du jeu.
Sélectionnez l’onglet « Script MSI » en bas.
Sélectionnez l’onglet « Exécuter immédiatement » en bas.
Après CostFinalize, ajoutez une action « Set Property » qui définit FULLPATH sur « [INSTALLDIR]relative path to exécutable from install directory ». Par exemple, « [INSTALLDIR]game.exe » sans les guillemets
Sélectionnez l’onglet « Exécuter différé » en bas.
Après PublishProduct, ajoutez une « instruction If » avec la condition « NOT Installed » (respectant la casse).
Dans le bloc Si, ajoutez une action « Appeler la DLL personnalisée à partir de la destination ».
- Définissez le champ Fichier DLL sur « [INSTALLDIR]FirewallInstallHelper.dll ».
- Définissez le champ Nom de la fonction sur « AddApplicationToExceptionListA ».
- Ajoutez un paramètre avec le type « pointeur de chaîne », la source de valeur « Property » et le nom de propriété « FULLPATH ».
- Ajoutez un deuxième paramètre avec le type « pointeur de chaîne », la source de valeur « Constante », puis définissez la valeur de la constante sur le nom d’application convivial que vous souhaitez afficher dans la liste d’exceptions du pare-feu.
- Fermez le bloc If en ajoutant une « instruction End ».
Juste au-dessus de l’action SupprimerFiles en haut, ajoutez un autre bloc If, avec la condition « REMOVE~="ALL » » (respectant la casse et sans les guillemets externes).
Dans le deuxième bloc If, ajoutez une action « Appeler une DLL personnalisée à partir de destination ».
- Définissez le champ Fichier DLL sur « [INSTALLDIR]FirewallInstallHelper.dll ».
- Définissez le champ Nom de la fonction sur « RemoveApplicationFromExceptionListA ».
- Ajoutez un paramètre avec le type « pointeur de chaîne », la source de valeur « Property » et le nom de propriété « FULLPATH ».
- Fermez le deuxième bloc If en ajoutant une « instruction End ».
Intégration à Windows Installer
Pour s’intégrer à Windows Installer à un niveau supérieur, ces étapes doivent être effectuées. Elles seront expliquées en détail ci-dessous :
- Ajoutez 2 propriétés « FriendlyNameForFirewall » et « RelativePathToExeForFirewall », comme décrit ci-dessous.
- Après l’action CostFinalize, appelez « SetMSIFirewallProperties » dans une action personnalisée immédiate pour définir les propriétés MSI appropriées pour les autres actions personnalisées.
- Pendant l’installation après l’action InstallFiles, appelez une action personnalisée différée qui utilise la fonction « AddToExceptionListUsingMSI » de FirewallInstallHelper.
- Pendant la désinstallation après l’action InstallFiles, appelez une action personnalisée différée qui utilise la fonction « RemoveFromExceptionListUsingMSI » de FirewallInstallHelper.
- Pendant la restauration, appelez une action personnalisée différée qui appelle également la fonction « RemoveFromExceptionListUsingMSI » de FirewallInstallHelper.
Voici les étapes nécessaires pour effectuer cette opération à l’aide d’un éditeur MSI tel qu’Orca qui se trouve dans le Kit de développement logiciel (SDK) de plateforme. Notez que certains éditeurs disposent d’Assistants qui simplifient certaines de ces étapes :
Ouvrez le package MSI dans Orca.
Ajoutez ce qui suit à la table Binaire :
Nom Données PARE-FEU Pointez-le sur le FirewallInstallHelper.dll. Ce fichier étant incorporé dans le package MSI, vous devrez effectuer cette étape chaque fois que vous recompilez FirewallInstallHelper.dll. Ajoutez ce qui suit à la table CustomAction :
Action Type Source Cible FirewallSetMSIProperties msidbCustomActionTypeDll + msidbCustomActionTypeBinaryData + msidbCustomActionTypeContinue = 65 PARE-FEU SetMSIFirewallProperties Pare-feuAjouter msidbCustomActionTypeDll + msidbCustomActionTypeBinaryData + msidbCustomActionTypeContinue + msidbCustomActionTypeInScript + msidbCustomActionTypeNoImpersonate = 3137 PARE-FEU AddToExceptionListUsingMSI Pare-feuRemove msidbCustomActionTypeDll + msidbCustomActionTypeBinaryData + msidbCustomActionTypeContinue + msidbCustomActionTypeInScript + msidbCustomActionTypeNoImpersonate = 3137 PARE-FEU RemoveFromExceptionListUsingMSI FirewallRollBackAdd msidbCustomActionTypeDll + msidbCustomActionTypeBinaryData + msidbCustomActionTypeContinue + msidbCustomActionTypeRollback + msidbCustomActionTypeInScript + msidbCustomActionTypeNoImpersonate = 3393 PARE-FEU RemoveFromExceptionListUsingMSI FirewallRollBackRemove msidbCustomActionTypeDll + msidbCustomActionTypeBinaryData + msidbCustomActionTypeContinue + msidbCustomActionTypeRollback + msidbCustomActionTypeInScript + msidbCustomActionTypeNoImpersonate = 3393 PARE-FEU AddToExceptionListUsingMSI Ajoutez ce qui suit à la table InstallExecuteSequence :
Action Condition Séquence Notes FirewallSetMSIProperties 1010 Cela se place peu après CostFinalize. Pare-feuAjouter NON installé 4021 Cette action personnalisée se produit uniquement lors d’une nouvelle installation. Le numéro de séquence place l’action après InstallFiles et après les restaurations. FirewallRollBackAdd NON installé 4020 Cette action personnalisée se produit uniquement lorsqu’une nouvelle installation est annulée. Le numéro de séquence place l’action après InstallFiles et avant l’action Ajouter personnalisé. Pare-feuRemove Installé 3461 Cette action personnalisée se produit uniquement pendant la désinstallation. Le numéro de séquence place l’action directement avant RemoveFiles et après les restaurations. FirewallRollBackRemove NON installé 3460 Cette action personnalisée se produit uniquement lorsqu’une désinstallation est annulée. Le numéro de séquence place l’action directement avant RemoveFiles et avant l’action supprimer personnalisée. Ajoutez ce qui suit à la table Property :
Propriété Valeur FriendlyNameForFirewall Doit être le nom affiché par la liste d’exceptions. Par exemple, « Exemple de jeu » RelativePathToExeForFirewall Doit être l’exécutable installé du jeu. Par exemple, « ExampleGame.exe »
Pour plus d’informations sur Windows Installer, consultez Windows Installer.
Recommandations
Le pare-feu est là pour rester. Ces recommandations donneront à vos clients une bonne expérience de pare-feu avec votre jeu Windows :
- Ne demandez pas aux utilisateurs de désactiver le pare-feu pour jouer à votre jeu. Cela rend l’ensemble de la machine vulnérable même quand ils ne jouent pas à votre jeu.
- Rendre la configuration du pare-feu transparente pour vos utilisateurs. Ajoutez votre application à la liste des exceptions pendant l’installation et supprimez-la de la liste des exceptions pendant l’installation.
- Envoyez des commentaires à l’utilisateur si le mode multijoueur est bloqué par l’état du pare-feu. Par exemple, désactivez les fonctionnalités réseau si elles ne fonctionnent pas, soit parce que l’application est interdite, soit parce que le système est en mode « aucune exception ».