Qu'est-ce qu'une injection de commande ?

Publié: 2023-05-17

L'architecture client-serveur omniprésente du Web offre aux pirates une vaste surface d'attaque, laissant à la fois le site Web et le serveur vulnérables à une exploitation malveillante. Les risques de sécurité augmentent considérablement si un site Web est configuré pour communiquer avec l'environnement de l'hôte en fournissant directement des commandes au système d'exploitation.

Pour alimenter certaines fonctionnalités, les sites Web peuvent avoir besoin d'interagir avec l'environnement shell du serveur, en appelant des commandes shell ou des scripts externes. S'il n'est pas mis en œuvre de manière sécurisée, cela peut permettre à un attaquant de manipuler les variables de communication et de faire des ravages sur le serveur en envoyant une requête bien conçue au système d'exploitation. Ce type d'attaque par injection est communément appelé injection de commande.

Les injections de commandes sont l'un des types de cyberattaques les plus dévastateurs que les pirates informatiques ont dans leurs boîtes à outils. La possibilité d'interagir avec le système d'exploitation de l'hôte offre un grand potentiel d'exploitation qui s'étend bien au-delà de la portée du site Web ciblé. Les injections de commandes peuvent être si puissantes qu'un pirate peut même effacer l'intégralité du serveur, laissant la victime reconstruire toute l'infrastructure à partir de zéro.

Dans ce guide complet sur les injections de commandes, vous apprendrez comment les attaquants peuvent contourner les défenses qui séparent les environnements de site Web et de serveur et comment minimiser le risque d'être victime de ce type de cyberattaque.

Avant de pouvoir plonger dans le monde insidieux des injections de commandes, examinons le fonctionnement des shells du système d'exploitation et examinons la manière dont les applications Web peuvent interagir avec eux. Cela vous aidera à comprendre quel véhicule est utilisé pour envoyer des requêtes malveillantes à l'environnement du serveur.

Injection de commande

Qu'est-ce qu'un shell de système d'exploitation ?

Un shell de système d'exploitation est un type spécial de programme qui fournit aux utilisateurs une interface pour interagir avec le système d'exploitation. Intermédiaire entre l'utilisateur final et le système d'exploitation du serveur, un shell interprète les commandes fournies via l'interface de ligne de commande et assure leur exécution dans le contexte de l'environnement de l'utilisateur.

Les shells permettent aux utilisateurs et aux applications d'envoyer des instructions au système d'exploitation à l'aide d'un certain nombre de commandes prédéfinies. Cela inclut les commandes shell internes qui font partie du shell lui-même, les commandes externes installées sur le serveur en tant que fichiers exécutables et les alias spécifiques configurés par l'administrateur système.

Les shells de système d'exploitation sont couramment utilisés pour effectuer une grande variété de tâches, telles que la gestion de fichiers et de répertoires, l'installation et la configuration de services logiciels et la configuration de sites Web et d'applications Web. Souvent, les sites Web doivent également appeler des commandes shell pour manipuler des fichiers et effectuer d'autres tâches.

Comment les sites Web interagissent-ils avec le système d'exploitation du serveur ?

Les sites Web et les applications Web, ou plus précisément les fonctionnalités qu'ils fournissent, s'exécutent dans leur propre environnement confiné. Cet environnement est entièrement séparé des zones critiques du système d'exploitation du serveur. Et bien que certaines techniques malveillantes, telles que la traversée de répertoires, permettent aux attaquants d'accéder à des zones autrement restreintes du serveur de la victime via le navigateur, il existe plusieurs couches de défense qui interdisent un tel comportement.

Tout le code est généralement confiné à la racine du document du site Web - un répertoire spécial sur le serveur dédié aux fichiers du site Web. Ceci, combiné au mécanisme de protection des autorisations de fichiers, garantit que les opérations du site Web sont limitées au répertoire racine du site Web et ne peuvent pas affecter d'autres zones du système.

Les fonctions du site Web sont également limitées aux fonctionnalités fournies par le langage de programmation utilisé par opposition aux capacités fournies par les commandes du système d'exploitation du serveur. Pour interagir avec l'environnement du serveur, un site Web doit utiliser des fonctions spécifiques qui agiront comme un pont entre son environnement contenu et le système d'exploitation. Les fonctions system() et exec() sont couramment utilisées à cette fin.

En utilisant des fictions telles que system() ou exec() , un site Web peut communiquer avec le shell du serveur en exécutant des commandes shell ou des scripts externes. Cependant, si elles ne sont pas correctement sécurisées, ces fonctions peuvent introduire de graves risques de sécurité, rendant le site Web et le système sous-jacent vulnérables aux injections de commandes.

Qu'est-ce qu'une injection de commande ?

Une injection de commande permet aux attaquants d'exécuter du code arbitraire sur le système d'exploitation du serveur en injectant des commandes shell via une requête HTTP au site Web vulnérable. L'attaque est possible si un site Web s'appuie sur des commandes shell pour activer certaines fonctionnalités et transmet les données fournies par l'utilisateur au système d'exploitation dans le cadre des instructions sans validation ni désinfection des entrées.

Les attaques par injection de commande se produisent lorsqu'un acteur malveillant est capable d'injecter des commandes supplémentaires dans le shell, déguisant un code malveillant dans le cadre d'une requête légitime. Cela permet à l'attaquant d'accéder et de modifier des informations sensibles, d'installer des logiciels malveillants ou d'effectuer d'autres actions nuisibles contre le serveur.

Comment fonctionnent les injections de commande ?

Pour effectuer une injection de commande, un attaquant utilise des caractères spéciaux, tels que « ; », « | ”, et “ && ”, pour ajouter des commandes malveillantes aux paramètres de la requête. Une fois la chaîne transmise au serveur, ces caractères spéciaux sont interprétés par le shell du système, le forçant à transformer les instructions fournies en une série de requêtes distinctes. De cette façon, la requête malveillante du pirate est exécutée comme une instruction isolée, apparemment sans rapport avec la tâche principale transmise pour exécution par le site Web vulnérable.

En plus de cela, les pirates peuvent remplacer une commande shell légitime utilisée par un script par un code malveillant qui a été enregistré sur le serveur dans un fichier portant le même nom que la commande d'origine. En règle générale, un environnement shell définit la variable $PATH , qui est utilisée pour spécifier une liste de sources de commandes externes dans lesquelles le shell doit effectuer des recherches. En modifiant cette variable, les attaquants peuvent forcer des programmes malveillants à s'exécuter sur le serveur.

Un exemple d'injection de commande

Pour effectuer une attaque par injection de commande, les pirates ciblent les failles de sécurité dans l'implémentation des fonctions utilisées pour transmettre des instructions au shell du serveur. Cette fonctionnalité peut être requise pour créer et supprimer des fichiers, entre autres.

Par exemple, imaginons qu'un site Web permette aux utilisateurs de télécharger des images et de les convertir dans un autre format. Le programme enregistre l'image téléchargée, la convertit, puis supprime l'image d'origine.

Des problèmes surviennent si le programme s'appuie sur une entrée utilisateur non nettoyée pour déterminer le nom de l'image à supprimer par la suite. Un pirate peut facilement ajouter une autre commande shell à la chaîne de texte contenant le nom de fichier, qui sera exécutée par le système d'exploitation, ce qui entraînera une attaque par injection de commande réussie.

Dans l'exemple ci-dessous, où imagename est le nom de l'image à supprimer, un pirate peut ajouter des commandes supplémentaires à l'aide de « && », qui sépareront la chaîne en deux parties. La première partie représente un nom de fichier réel, ce qui n'éveillera aucun soupçon, de sorte que le shell exécutera également la deuxième partie des instructions.

L'instruction « rm -rf /home/images/converted » a le potentiel de supprimer toutes les images converties précédemment enregistrées par le programme si l'utilisateur système dont le shell a accepté la demande dispose des autorisations suffisantes pour cette opération. C'est pourquoi les autorisations de fichiers sont l'un des mécanismes de sécurité côté serveur les plus importants qui, s'ils sont configurés correctement, peuvent fournir une couche de défense contre les injections de commandes et d'autres types de cyberattaques.

Bien sûr, il s'agit d'un exemple trop simplifié, et il est peu probable qu'un programme aussi vulnérable existe sur un site Web. Cependant, la logique sous-jacente s'applique aux attaques modernes par injection de commandes. Tout ce qu'il faut, c'est trouver une implémentation faible d'une fonction qui repose sur la transmission de commandes au shell système.

Injection de commande et injection de code : quelle est la différence ?

Les injections de commandes sont souvent confondues avec les injections de code, qui constituent un autre type dangereux d'attaque au niveau de l'application. Bien que les deux appartiennent au même groupe d'attaque, il existe des différences significatives entre les deux.

L'injection de code est un terme général qui fait référence à tout type d'attaque au niveau de l'application où un pirate informatique est capable d'injecter un code malveillant dans un site Web ou une application Web, généralement en exploitant une validation d'entrée insuffisante ou d'autres types de vulnérabilités. L'injection de code est un groupe complet d'attaques par injection qui comprend les scripts intersites (XSS), les attaques par inclusion de fichiers et les injections SQL, entre autres.

L'injection de commande est une forme élevée d'injection de code. Plutôt que d'effectuer des actions nuisibles contre l'interpréteur de code et d'exploiter les fonctionnalités du site Web de la victime, un attaquant cible le système d'exploitation du serveur, effectuant des actions involontaires contre le shell du système. Les attaques par injection de commande permettent aux pirates de sortir de l'environnement confiné du site Web de la victime, augmentant considérablement l'étendue des dommages qu'ils peuvent causer.

Le potentiel destructeur des injections de commandes est ce qui en fait le type d'attaques de type injection le plus périlleux. C'est pourquoi il est crucial de savoir comment détecter et atténuer les vulnérabilités d'injection de commandes sur votre site Web avant que les pirates n'aient la possibilité de les utiliser à leur avantage et de faire des ravages sur les actifs critiques de l'entreprise.

Comment détecter les vulnérabilités d'injection de commande ?

Le noyau de WordPress maintient un cadre de sécurité robuste qui protège efficacement les sites Web contre les injections de commandes et d'autres types d'attaques par injection. Cependant, les nombreuses options de personnalisation offertes par la plate-forme de création de sites Web laissent de la place à ces vulnérabilités pour exister sur les sites Web WordPress. Même les plugins et thèmes WordPress réputés peuvent contenir des failles de sécurité qui peuvent exposer les sites Web à une vaste gamme d'attaques malveillantes.

iThemes propose des rapports hebdomadaires sur les vulnérabilités de WordPress qui vous permettent d'identifier et de corriger rapidement les failles de sécurité récemment révélées dans les plugins et les thèmes WordPress, y compris les vulnérabilités d'injection de code et de commande. Reportez-vous simplement au dernier rapport de vulnérabilité pour déterminer si des failles de sécurité ont été récemment découvertes dans les plugins et les thèmes que vous utilisez sur votre site Web WordPress, et vérifiez si un correctif de sécurité a été publié.

iThemes Security Pro rationalise et automatise la gestion des vulnérabilités, éliminant ainsi le besoin d'effort manuel. Grâce à ses capacités complètes d'analyse des vulnérabilités, iThemes Security Pro identifie et vous avertit de manière proactive de toute faille de sécurité découverte sur votre site Web WordPress et installe automatiquement des mises à jour de sécurité chaque fois qu'un correctif est disponible.

Comment défendre votre site WordPress contre l'injection de commandes ?

Les plugins et thèmes vulnérables constituent l'un des principaux vecteurs d'attaque que les pirates utilisent pour obtenir un accès non autorisé aux sites Web WordPress afin de voler des informations sensibles, d'installer des logiciels malveillants et de lancer des attaques réseau. Bien que le respect des pratiques de codage sécurisé relève de la responsabilité des développeurs de plugins et de thèmes, les propriétaires de sites Web WordPress doivent mettre en œuvre des mesures de sécurité pour réduire le risque d'être victime d'attaques par injection de code et de commande. Une approche multiforme de la sécurité WordPress est nécessaire pour gérer efficacement tous les risques de sécurité.

Effectuer des mises à jour régulières du logiciel

S'assurer que votre site Web WordPress est régulièrement mis à jour est essentiel pour prévenir les cyberattaques potentielles. Les mises à jour logicielles en temps opportun garantissent que les nouveaux correctifs de sécurité sont installés sur votre site Web dès leur publication. La correction rapide des vulnérabilités ne laisse aucune place aux attaquants pour identifier et exploiter les faiblesses de sécurité sur votre site Web WordPress.

Avec iThemes Security Pro, les nouvelles versions de logiciels, y compris le noyau WordPress, les plugins et les thèmes, sont automatiquement installées une fois qu'elles sont mises à la disposition de la communauté WordPress. La fonction de gestion des versions et l'analyse avancée des vulnérabilités gardent une trace de toutes les mises à jour pour vous, garantissant que votre site Web reste à jour avec les derniers correctifs de sécurité pour éliminer le risque d'attaques par injection de commande réussies.

Si vous gérez plusieurs sites WordPress, iThemes Sync Pro offre une solution complète pour les mises à jour en un clic, la surveillance avancée de la disponibilité et les sauvegardes de sites Web à distance sur tous les sites Web, le tout à partir d'un seul tableau de bord.

Configurer les autorisations de fichiers sécurisés

Les autorisations de fichiers sécurisés sont un élément essentiel pour protéger votre site Web WordPress contre une grande variété d'attaques par injection. Les attaques par injection de commande et par injection de code impliquent qu'un pirate informatique exploite une vulnérabilité dans le code d'un site Web pour exécuter un code malveillant et sont souvent possibles en raison d'autorisations de fichiers non sécurisées.

Si le principe du moindre privilège n'est pas appliqué, les attaquants peuvent accéder à des données auxquelles ils ne devraient pas pouvoir accéder, comme un script qui s'exécute avec des privilèges élevés. Les autorisations de fichiers sécurisés agissent comme une couche de défense supplémentaire contre les attaques par injection de commande, annulant les efforts des attaquants pour exploiter les vulnérabilités découvertes.

Cependant, il n'est pas toujours clair comment configurer les autorisations de fichiers en toute sécurité, car cela dépend en grande partie de l'environnement d'hébergement dans lequel le site Web s'exécute. C'est pourquoi iThemes Security Pro propose des vérifications avancées des autorisations de fichiers pour s'assurer que les autorisations correctes sont en place.

Installer un pare-feu d'application Web

Les pare-feu constituent la première ligne de défense contre un large éventail d'attaques par injection, y compris les injections de code et de commande. Un pare-feu d'application Web (WAF) agit comme un garde pour votre site Web, analysant toutes les requêtes HTTP entrantes et filtrant celles qui correspondent à des modèles malveillants connus, les empêchant ainsi d'atteindre le serveur Web et de lui infliger des dommages.

Les solutions robustes de protection contre la force brute et de gestion des bots proposées par iThemes Security Pro peuvent empêcher les bots malveillants et le trafic Web nuisible d'atteindre votre site Web WordPress. Renforcée par l'ajout d'une authentification multifacteur alimentée par un mot de passe avec des connexions biométriques, cette suite de sécurité complète offre une approche multiforme de la sécurité des sites Web WordPress.

Protégez votre site Web contre les injections de commandes avec iThemes Security Pro

L'injection de commandes est l'un des types de cyberattaques les plus puissants et les plus destructeurs. Situées tout en haut de chaque échelle d'évaluation des risques de vulnérabilité par injection, les injections de commandes continuent de cibler les sites Web et les applications Web, même avec la grande variété de mesures d'atténuation mises en place par les serveurs Web modernes.

En exploitant les failles de sécurité d'un site Web via l'injection de commandes, les attaquants ont la possibilité d'exécuter des commandes arbitraires contre le système d'exploitation de l'hôte. Ce niveau d'accès va bien au-delà de la compromission du site Web ciblé, ouvrant un vaste éventail de possibilités d'exploitation et de contrôle sur l'ensemble du système.

Défendre un site Web contre les injections de commandes et autres cyberattaques est une tâche difficile. Dans le paysage actuel des menaces, s'appuyer sur une seule couche de défense n'est plus suffisant pour assurer la sécurité de votre présence en ligne. C'est pourquoi iThemes Security Pro et BackupBuddy se consacrent à rendre la sécurité de site Web robuste facilement accessible à tous les propriétaires de sites Web WordPress, en vous fournissant les outils nécessaires pour protéger votre entreprise en ligne.