Qu’est-ce qu’une injection de commande de système d’exploitation ?
Les attaques par injection sont l’un des moyens les plus courants utilisés par les pirates pour attaquer les systèmes, car elles leur permettent d’exécuter facilement de nombreuses commandes et codes. L’injection de commande du système d’exploitation est l’une de ces attaques par injection dont vous devez être conscient. Cela exploite une vulnérabilité que les administrateurs de système, de base de données et d’application Web devraient prendre très au sérieux.
Alors, qu’est-ce qu’une attaque par injection de commande du système d’exploitation ?
Définition de l’injection de commande du système d’exploitation
L’injection de commande du système d’exploitation permet à un attaquant malveillant d’exécuter n’importe quelle commande de son choix en exploitant un système d’exploitation, un programme, une application, une base de données ou un plug-in vulnérable. Cela se produit lorsque les applications ne parviennent pas à valider et à nettoyer correctement les paramètres qu’elles utilisent lors de l’appel de fonctions shell telles que system() ou exec() pour exécuter des commandes système.
Pour mieux comprendre la détection et l’exploitation de l’injection de commandes du système d’exploitation, il est utile d’examiner ce problème en trois grandes catégories.
1. Injection de commande directe
Considérez cela du point de vue de l’attaquant. Le cyberattaquant découvre qu’une application exécute une commande système spécifique ; ils entrent la commande malveillante dans le cadre des arguments attendus. L’application exécute alors la commande d’origine suivie de la commande malveillante.
L’attaquant emploie une variété d’approches pour trouver une telle vulnérabilité. La méthode la plus simple pour lutter contre cela consiste à maintenir le système d’exploitation à jour en permanence ; vous pouvez le faire en collaboration avec une équipe informatique compétente. Vous devez éviter toutes les applications et tous les programmes susceptibles de provoquer des vulnérabilités du système, car l’attaquant peut directement insérer du code et les dommages sont imprévisibles.
2. Injection de commande indirecte
Dans le cas de l’injection indirecte de commandes, l’attaquant ne saisit pas directement un code ou une commande dans le système. Pour cela, ils utilisent une application ou un programme vulnérable dans le système. La vulnérabilité crée un pont entre l’attaquant et le système d’exploitation. Profitant de cette communication, l’attaquant vise à exécuter des codes et des commandes malveillants sur la cible.
L’attaquant exécute une série de tests pour identifier cette vulnérabilité et découvre que le logiciel utilise des données provenant d’une source externe, comme un fichier ou une variable d’environnement, pour appeler une commande système. L’attaquant modifie alors le contenu de la source externe, celle-ci contient donc désormais une commande illicite. Ceci est ensuite exécuté parallèlement aux instructions de l’application d’origine.
La principale différence entre l’injection de commande directe et indirecte est que l’attaquant utilise une application pour communiquer avec le système d’exploitation. Mais il n’y a pas de réelle différence entre les dégâts que peuvent causer les deux formes d’injection, il faut donc s’occuper des deux. C’est pourquoi vous devez vous assurer que les programmes de votre réseau sont fiables et nécessaires. Ne gardez pas d’applications auxquelles vous ne faites pas confiance sur votre appareil.
3. Injection de commande aveugle
Un autre type d’injection de commande de système d’exploitation est l’injection de commande aveugle. Cela signifie que l’application ne renvoie aucune sortie de la commande dans la réponse HTTP. L’attaquant utilise différentes techniques telles que la temporisation et le routage de sortie pour exploiter cette vulnérabilité.
Imaginez que vous recherchiez un site Web et que la valeur « /?search=id » dans l’URL change à chaque recherche. La valeur de l’identifiant ici peut être une page d’utilisateur, l’adresse d’une photo de produit ou n’importe quelle page du site. L’attaquant peut obtenir des résultats différents en modifiant la valeur de l’identifiant. C’est difficile de le faire manuellement, mais il existe des outils comme Burp Suite pour cela. Plus tard, l’attaquant découvre une bizarrerie sur une page : une valeur d’identifiant peut être renvoyée qui, même si elle n’a montré aucun résultat, la réponse du site Web était 200, ce qui indique que tout va bien. Dans un tel cas, l’attaquant pourrait utiliser une injection de commande aveugle.
Une technique telle qu’une temporisation est particulièrement utile. Étant donné que la page qui s’ouvre sera vide, vous ne recevrez aucune réponse, mais vous pourrez peut-être toujours recueillir des informations sur ce qui est stocké dans une base de données en fonction des délais qui ne chargent la page que si un certain caractère est présent. Cela prend trop de temps pour être un processus manuel, mais de nombreux outils peuvent automatiser l’attaque.
Un exemple de scénario d’attaque
Passons en revue tout ce qui précède à travers un exemple. Imaginez que vous ayez une application d’achat qui permet à l’utilisateur de voir si les produits sont en stock. Utilisons une URL comme celle ci-dessous pour accéder à toutes ces informations :
example_unsafe_store.com/stockStatus?productID=245&storeID=
Imaginez que vous transmettiez les identifiants de produit et de magasin en tant qu’arguments à une commande shell, telle que « stockstat.pl 245 38 », car l’application devrait rechercher d’anciens enregistrements. Si le développeur ne prend aucune mesure contre les injections de commandes, un attaquant peut envoyer une entrée pour exécuter la commande souhaitée :
& echo this_a_harmful_command &
Si cette entrée va dans le paramètre productID, la commande exécutée par l’application sera :
stockstat.pl & echo this_a_harmful_command & 38
La commande echo est une méthode utile pour détecter les injections de commande et s’assurer que la chaîne donnée apparaît dans la sortie. Le caractère « & » est un séparateur de commandes shell, donc ce qui est exécuté est trois commandes distinctes, l’une après l’autre. En conséquence, la sortie renvoyée à l’utilisateur sera :
Error -productID not found
this_a_harmful_command
38: command not found
Ici, le fichier « stockstat.pl » a exécuté la commande sans les arguments qu’il attendait et a donc renvoyé un message d’erreur. Ensuite, la commande d’écho injectée par l’attaquant s’est exécutée et l’attaquant a vu l’expression qu’il avait saisie à l’écran. L’argument d’origine, « 38 », s’exécutait comme une commande provoquant une erreur.
Comment se protéger contre les injections de commandes du système d’exploitation
Bien que l’injection de commandes soit un vecteur d’attaque puissant et nuisible, il existe quelques astuces pour l’éviter. La raison d’être des attaques par injection de commande du système d’exploitation est d’exécuter certaines commandes du système d’exploitation à l’aide d’une application. Vous devez empêcher que cela se produise. Il y a quelques problèmes à considérer :
- Vous devez empêcher toute personne ayant accès à l’application d’exécuter du code.
- Vous devez empêcher toute personne ayant accès à l’application de faire des requêtes au serveur avec des expressions syntaxiques.
- Vous devez crypter les phrases que toute personne ayant accès fait des demandes.
Passons en revue chaque élément un par un. Une bonne solution au premier problème consiste à utiliser la méthode de la liste blanche pour empêcher toute personne atteignant la couche application d’exécuter certains codes ou requêtes. Toute personne que vous n’identifiez pas ne pourra pas exécuter de code.
La solution à la seconde consiste à ne pas accepter certaines expressions textuelles utilisées dans les commandes. L’utilisateur ne peut entrer que des valeurs numériques. Appliquez cela avec la méthode de la liste blanche et vous aurez un système beaucoup plus sécurisé.
Le troisième élément concerne le cryptage des paramètres syntaxiques tels que le caractère saisi et les espaces. Par conséquent, la méthode de liste blanche, la vérification syntaxique des entrées et le chiffrement des entrées devraient vous protéger de l’injection de commandes du système d’exploitation.
Les attaques par injection évoluent tous les jours
Il existe de nombreuses méthodes d’injection avec différentes techniques d’attaque, telles que la commande du système d’exploitation, SQL, SSI et XPath. Il n’est pas facile d’essayer d’empêcher chacun d’eux. Gardez à l’esprit que toutes ces attaques évoluent chaque jour et profitent de petites vulnérabilités que les développeurs ont négligées. C’est pourquoi il est essentiel que vous restiez toujours à jour et que vous suiviez de près les développements actuels dans le monde de la cybersécurité.
Laisser un commentaire