Considérations relatives à la sécurité : Microsoft Windows Shell
Article
Cette rubrique fournit des informations sur les considérations de sécurité liées à l’interpréteur de commandes Windows. Ce document ne peut pas fournir tout ce que vous avez besoin de savoir sur les problèmes de sécurité. Au lieu de cela, utilisez-le comme point de départ et référence pour ce domaine technologique spécifique.
L’interpréteur de commandes contrôle un certain nombre d’aspects importants du système, dont plusieurs qui présentent des risques de sécurité potentiels s’ils ne sont pas gérés correctement. Cette rubrique décrit certains des problèmes les plus courants et la façon de les résoudre dans vos applications. N’oubliez pas que la sécurité ne se limite pas aux exploits basés sur Internet. Sur les systèmes partagés, y compris les systèmes accessibles par le biais des services Terminal Server, vous devez également vous assurer que les utilisateurs ne peuvent pas faire quoi que ce soit qui pourrait nuire à d’autres personnes qui partagent le système.
La majorité des problèmes de sécurité potentiels de Shell peuvent être atténués en installant correctement votre application.
Installez l’application sous le dossier Program Files.
Système d’exploitation
Emplacement
Windows XP, Windows Server 2003 et versions antérieures
CSIDL_PROGRAM_FILES
Windows Vista et versions ultérieures
FOLDERID_ProgramFiles, FOLDERID_ProgramFilesX86, FOLDERID_ProgramFilesX64, FOLDERID_ProgramFilesCommon, FOLDERID_ProgramFilesCommonX86 ou FOLDERID_ProgramFilesCommonX64. Pour plus d’informations, consultez KNOWNFOLDERID .
Ne stockez pas les données utilisateur dans le dossier Program Files.
Utilisez le dossier de données approprié pour les données communes à tous les utilisateurs.
Système d’exploitation
Emplacement
Windows XP, Windows Server 2003 et versions antérieures
CSIDL_COMMON_APPDATA
Windows Vista et versions ultérieures
FOLDERID_ProgramData
Utilisez le dossier de données utilisateur approprié pour les données qui appartiennent à un utilisateur particulier.
Système d’exploitation
Emplacement
Windows XP, Windows Server 2003 et versions antérieures
CSIDL_APPDATA, CSIDL_PERSONAL et autres.
Windows Vista et versions ultérieures
FOLDERID_RoamingAppData, FOLDERID_Documents et autres.
Si vous devez installer à un emplacement autre que le dossier Program Files, veillez à définir correctement les listes de contrôle d’accès (ACL) afin que les utilisateurs n’aient pas accès à des parties inappropriées du système de fichiers. Toutes les données spécifiques à un utilisateur particulier doivent avoir une liste de contrôle d’accès qui empêche tout autre utilisateur d’y accéder.
Lorsque vous configurez des associations de fichiers, veillez à spécifier correctement la ligne de commande. Utilisez un chemin d’accès complet et encapsulez tous les éléments qui contiennent des espaces blancs entre guillemets. Encapsulez les paramètres de commande entre guillemets distincts. Dans le cas contraire, la chaîne peut être analysée incorrectement et l’application ne se lancera pas correctement. Deux exemples de lignes de commande correctement formées sont présentés ici.
L’emplacement des dossiers d’installation standard peut varier d’un système à l’autre. Pour obtenir l’emplacement d’un dossier standard sur un système Windows Vista ou ultérieur particulier, appelez SHGetKnownFolderPath avec la valeur KNOWNFOLDERID appropriée. Dans Windows XP, Windows Server 2003 ou les systèmes antérieurs, appelez SHGetFolderLocation ou SHGetFolderPath avec la valeur CSIDL appropriée.
Shlwapi
L’API Shlwapi (Shell Lightweight API) inclut un certain nombre de fonctions de manipulation de chaîne. L’utilisation incorrecte de ces fonctions peut entraîner des chaînes tronquées de manière inattendue, sans notification de la troncation retournée. Dans les cas suivants, les fonctions Shlwapi ne doivent pas être utilisées. Les fonctions alternatives répertoriées, qui présentent moins de risques, devraient être utilisées à leur place.
Avec des fonctions telles que PathRelativePathTo qui retournent un chemin d’accès de fichier, définissez toujours la taille de la mémoire tampon sur MAX_PATH caractères. Cela garantit que la mémoire tampon est suffisamment grande pour contenir le plus grand chemin de fichier possible, ainsi qu’un caractère null de fin.
Pour plus d’informations sur les fonctions de chaîne alternatives, consultez À propos de Strsafe.h.
Autocomplétion
N’utilisez pas la fonctionnalité de saisie semi-automatique pour les mots de passe.
ShellExecute, ShellExecuteEx et fonctions associées
Lorsque vous fournissez le chemin d’accès du fichier exécutable, indiquez le chemin complet. Ne dépendez pas de l’interpréteur de commandes pour localiser le fichier.
Si vous fournissez une chaîne de ligne de commande qui contient des espaces blancs, encapsulez la chaîne entre guillemets. Sinon, l’analyseur peut interpréter un seul élément qui contient des espaces comme plusieurs éléments.
Déplacement et copie de fichiers
Une clé de la sécurité du système est l’attribution correcte des listes de contrôle d’accès. Vous pouvez également utiliser des fichiers chiffrés. Assurez-vous que lorsque vous déplacez ou copiez des fichiers, qu’ils se voient attribuer la liste de contrôle d’accès correcte et qu’ils n’ont pas été déchiffrés accidentellement. Cela inclut le déplacement de fichiers vers la Corbeille, ainsi que dans le système de fichiers. Utilisez IFileOperation (Windows Vista ou version ultérieure) ou SHFileOperation (Windows XP et versions antérieures). N’utilisez pas MoveFile, qui peut ne pas définir la liste de contrôle d’accès attendue pour le fichier de destination.
Écriture d’extensions d’espace de noms sécurisées
Les extensions d’espace de noms shell sont un moyen puissant et flexible de présenter des données à l’utilisateur. Toutefois, elles peuvent provoquer une défaillance du système si elles ne sont pas correctement écrites. Quelques points clés à garder à l’esprit :
Ne supposez pas que les données telles que les images sont correctement mises en forme.
Ne partez pas du principe que MAX_PATH équivaut au nombre d’octets d’une chaîne. Il s’agit du nombre de caractères.
Alertes de sécurité
Le tableau suivant répertorie certaines fonctionnalités qui peuvent, si elles sont utilisées de manière incorrecte, compromettre la sécurité de vos applications.
Les recherches qui dépendent de la vérification d’une série d’emplacements par défaut pour rechercher un fichier spécifique peuvent être utilisées dans une attaque d’usurpation d’identité. Utilisez un chemin complet pour vous assurer d’accéder au fichier souhaité.
Le premier argument, pszFront, doit être suffisamment grand pour contenir pszBack et la fermeture « \0 », sinon un dépassement de mémoire tampon peut se produire. N’oubliez pas que le dernier argument, cchMax, est le nombre de caractères à copier dans pszFront, pas nécessairement la taille du pszFront en octets. Utilisez l’une des alternatives suivantes à la place.
StringCbCat, StringCbCatEx, StringCbCatN, StringCbCatnEx, StringCchCat,StringCchCatEx, StringCchCatN ou StringCchCatNEx.
Le développement de logiciels sécurisés implique l’intégration de la sécurité dans chaque phase de votre cycle de vie de développement, de l’analyse des exigences à la maintenance. Microsoft fournit de nombreux services qui peuvent vous aider à développer du code plus sécurisé et à déployer une application plus sécurisée dans le cloud. Ce parcours d’apprentissage fournit une vue d’ensemble des services et des offres disponibles pour vous aider à créer des logiciels sécurisés dans le cadre d’une solution de