Logo Zéphyrnet

Vulnérabilités du micrologiciel dont vous ne voulez pas dans votre produit

Date :

Vulnérabilités du micrologiciel dont vous ne voulez pas dans votre produit
Illustration: © IoT For All

Les vulnérabilités du micrologiciel font référence aux faiblesses de sécurité ou aux failles trouvées dans le micrologiciel d'un appareil. Le micrologiciel est un type de logiciel intégré aux périphériques matériels et fournissant un contrôle et des fonctionnalités de bas niveau.

Il agit comme un pont entre le matériel et le logiciel de niveau supérieur. Ces vulnérabilités peuvent être exploitées par des attaquants pour obtenir un accès non autorisé et contrôler ou manipuler l'appareil.

Au cours de la dernière décennie, nous avons été témoins de nombreuses failles de sécurité ciblant les appareils IoT commerciaux et industriels. Par exemple, les cybercriminels ont réussi à éteindre le chauffage de deux bâtiments de la ville finlandaise de Lappeenranta, et d'autres attaques telles que ShamoonBarrage de New York, et le Mirai Botnet ont affecté les appareils IoT industriels tels que les routeurs Deutsche Telekom, entraînant une interruption des services.

Bien qu’il soit largement reconnu que la sécurité était un point faible des appareils IoT, peu de progrès avaient été réalisés pour résoudre ce problème jusqu’à l’année dernière, lorsque la Russie a attaqué l’Ukraine. L’attaque a démontré la véritable puissance des cyberattaques, avec le piratage par Anonymous du système de vidéosurveillance du Kremlin et la Russie attaquant le réseau électrique ukrainien.

À la suite de ces incidents, les États-Unis et l’Union européenne ont exprimé leur intérêt pour la réglementation de la posture de cybersécurité de l’IoT/IIoT, ce qui constitue une étape indispensable. Cependant, la question demeure : par où commencer et quelles sont les vulnérabilités les plus dangereuses pouvant conduire à de telles attaques ?

Existe-t-il une solution miracle qui puisse protéger les fabricants de ces attaques ? Jetons un coup d'œil à certaines des vulnérabilités les plus dangereuses et à leurs atténuations potentielles.

Saint Graal des vulnérabilités : RCE

La plupart des professionnels de l'informatique connaissent le concept d'exécution de code à distance (RCE), qui est l'une des menaces de sécurité les plus redoutées pour les micrologiciels. Si un attaquant parvient à exploiter une vulnérabilité RCE, il prend le contrôle total du ou des appareils et peut potentiellement créer un botnet.

De plus, les attaquants peuvent voler les données des utilisateurs ou se livrer à des activités d'espionnage contre divers fabricants. Essentiellement, un attaquant peut obtenir n’importe quel résultat qu’il souhaite.

La question se pose : comment les attaquants peuvent-ils détecter les vulnérabilités RCE dans les appareils, et quels types peuvent conduire à une RCE ?

Voyons les plus courants.

  • Contournement d'authentification : Les attaquants peuvent contourner les mécanismes d'authentification des appareils IoT qui utilisent des mots de passe faibles ou par défaut. Parfois, ils peuvent exploiter des bugs logiques ou contourner des contrôles de sécurité spécifiques. Plusieurs techniques peuvent entraîner un contournement de l'authentification, notamment les mots de passe par défaut, les attaques par force brute, les vulnérabilités du réseau ou les vulnérabilités du micrologiciel.
  • Débordements de tampon : Une vulnérabilité de débordement de mémoire tampon se produit lorsqu'un programme tente de stocker plus de données dans une mémoire tampon qu'il ne peut en contenir, provoquant le débordement des données dans des emplacements mémoire adjacents. Un attaquant peut exploiter cette vulnérabilité en créant des données d'entrée qui débordent de la mémoire tampon et écrasent les emplacements mémoire adjacents avec du code malveillant.
  • Défauts d'injection : Les failles d'injection se produisent lorsqu'un attaquant peut injecter du code malveillant dans un appareil IoT via des entrées ou des interfaces non sécurisées, telles qu'un formulaire Web ou une API.

Nous allons approfondir chacun d’eux.

Contournement d'authentification

L'authentification est un aspect crucial de la sécurité des systèmes embarqués. Il garantit que seules les personnes autorisées peuvent accéder à l'appareil et à ses fonctionnalités.

Le contournement de l'authentification fait référence à une situation dans laquelle un attaquant peut accéder à un appareil sans fournir les informations d'authentification nécessaires, telles qu'un nom d'utilisateur et un mot de passe. Cette vulnérabilité de sécurité permet aux attaquants de prendre le contrôle de l'appareil et de ses fonctionnalités, pouvant potentiellement endommager l'appareil ou accéder à des données sensibles.

Il existe diverses techniques que les attaquants peuvent utiliser pour contourner l'authentification. Une méthode standard consiste à exploiter des mots de passe par défaut ou faibles. De nombreux appareils IoT disposent d’identifiants de connexion par défaut largement connus et faciles à trouver en ligne.

Les attaquants peuvent utiliser ces informations pour accéder à l'appareil sans passer par le processus d'authentification. Ils peuvent également recourir à des attaques par force brute pour deviner des mots de passe faibles.

Une autre méthode pour contourner l’authentification consiste à exploiter les vulnérabilités du micrologiciel. Par exemple, cela peut se produire en utilisant une version vulnérable d’un logiciel open source ou en utilisant un bug logique dans le flux d’authentification.

De plus, les vulnérabilités du réseau peuvent être exploitées pour contourner l'authentification. Les attaquants peuvent intercepter le trafic réseau pour capturer les informations de connexion ou utiliser des attaques de l'homme du milieu pour usurper l'identité de l'appareil et contourner l'authentification.

Atténuation du contournement de l'authentification

Il est essentiel de modifier les identifiants de connexion par défaut et d'utiliser mots de passe forts. Les mots de passe forts doivent contenir des lettres majuscules et minuscules, des chiffres et des symboles et comporter 12 caractères.

Deuxièmement, restez à jour sur tous les composants open source tiers que vous utilisez dans votre produit.

Troisièmement, la sécurisation du réseau est cruciale pour atténuer le contournement de l’authentification. Ceci peut être réalisé en mettant en œuvre des protocoles de communication sécurisés, tels que HTTPS ou TLS, pour chiffrer le trafic réseau. Enfin, effectuez régulièrement des tests d’intrusion sur chaque nouvelle version de produit.

Débordement de tampon

Le débordement de tampon est l’une des vulnérabilités les plus connues et les plus répandues dans les systèmes logiciels. Ces vulnérabilités peuvent survenir pour diverses raisons. Une cause courante est le manque de validation des entrées dans un programme, qui permet à un attaquant de saisir des données supérieures à la taille de la mémoire tampon allouée.

Cela peut conduire à une situation dans laquelle les données excédentaires écrasent les emplacements de mémoire adjacents, entraînant un comportement inattendu ou des pannes. Une autre cause de vulnérabilités de dépassement de tampon est l'utilisation de fonctions non sécurisées qui n'effectuent pas de vérification des limites, telles que strcpy et strcat. Nous démontrerons un bug de dépassement de tampon dans un scénario réel.

Pour ce faire, nous utiliserons DVRF (putain de micrologiciel de routeur vulnérable) comme notre cible. Après avoir déposé le firmware sur notre plateforme, il extraira l'image et décompilera chaque binaire pour rechercher des vulnérabilités potentielles.

Nous avons choisi cette cible car elle est accessible à tous et nous ne voulons compromettre aucun firmware de fabricant accessible au public.

Comme nous le voyons ici, le programme prend deux arguments entiers, paramètre_1 ainsi que  paramètre_2, et déclare une variable locale appelée local_200 De type undefined2 (un entier non signé de 2 octets ou 16 bits). Il affiche également un tableau appelé auStack510 de taille 502 octets.

Le programme utilise ensuite le jeu de mémoires() fonction pour définir tous les octets dans auStack510 à zéro. Après cela, il vérifie si la valeur de paramètre_1 est inférieur à 2. Si tel est le cas, le programme imprime un message d'utilisation et se termine avec un code d'erreur 1.

If paramètre_1 est supérieur ou égal à 2, le programme imprime un message de bienvenue et copie le contenu d'une chaîne pointée par le deuxième argument _(*(carboniser)(param_2 + 4))_** dans local_200 utilisant l' strcpy () fonction. C’est là que réside la vulnérabilité de débordement de tampon.

Si la chaîne pointée par le deuxième argument est plus longue que 16 octets (la taille de local_200) et de strcpy () la fonction écrira après la fin du local_200 tampon et écraser le contenu du fichier adjacent auStack510 un tampon.

Cela peut conduire à un comportement imprévisible, notamment faire planter le programme ou permettre à un attaquant d'exécuter du code malveillant à partir des vulnérabilités du micrologiciel.

Pour éviter ce type d'attaque par débordement de tampon, il est essentiel d'utiliser des fonctions qui limitent la quantité de données écrites dans un tampon, comme strncpy () or snprintf(). De plus, les programmes doivent être compilés avec des protections contre les débordements de tampon, telles que empiler les canaris et randomisation de la disposition de l'espace d'adressage (ASLR, fASLR).

Injections de commandes

L'injection de commandes est une attaque dans laquelle un attaquant injecte du code malveillant dans un shell de commande pour exécuter des commandes arbitraires sur le périphérique cible. Cette attaque peut être menée de plusieurs manières, notamment via des interfaces Web, des champs de saisie et des API.

Dans le micrologiciel, l'injection de commandes est souvent effectuée via des interfaces Web ou des API, car ce sont des moyens courants permettant aux utilisateurs d'interagir avec l'appareil.

Les implications de l’injection de commandes dans le micrologiciel peuvent être graves. Un attaquant qui réussit à injecter du code dans un shell de commande peut exécuter des commandes arbitraires sur le périphérique cible.

Cela peut permettre à un attaquant d'accéder à des données sensibles, de contrôler l'appareil et même de lancer des attaques contre d'autres appareils sur le réseau. De plus, l’injection de commandes peut être difficile à détecter, car elle apparaît souvent comme du trafic légitime.

Ce code semble être une fonction appelée wsc_generate_pin qui génère un code PIN Wi-Fi Protected Setup (WPS). Le code PIN WPS est un numéro à huit chiffres utilisé pour authentifier un appareil sans fil sur un réseau Wi-Fi.

Cependant, il existe une vulnérabilité potentielle d’injection de commandes dans ce code. La vulnérabilité provient de l'utilisation de la fonction système, qui exécute une commande shell. Plus précisément, le sprintf La fonction est utilisée pour construire une chaîne de commande qui est ensuite transmise au système sans validation ou nettoyage approprié de l'entrée.

Le code vulnérable est la ligne en surbrillance :

Ce code construit une commande shell qui écrit la valeur de local_18 à la / dev / aléatoire déposer. Si un attaquant peut contrôler la valeur de local_18, ils peuvent injecter des commandes shell supplémentaires dans le acStack141 tampon, conduisant à l’exécution de code arbitraire. Cette variable provenant de l'utilisateur (WPS Pin), cette vulnérabilité est exploitable.

Pour éviter cette vulnérabilité, il est essentiel de valider et de nettoyer correctement toutes les entrées utilisées pour construire les commandes shell. La validation des entrées peut être effectuée à l'aide d'expressions régulières ou de filtrage de liste blanche.

Le filtrage de la liste blanche implique de définir un ensemble autorisé de caractères ou de valeurs que l'entrée peut contenir. Les développeurs doivent également limiter le nombre de caractères que l'entrée peut avoir pour empêcher les attaques par débordement de tampon, comme indiqué ci-dessus.

Le défi de la sécurité de l'IoT

Nous comprenons que la sécurité de l’IoT constitue un défi important et que de nombreux fabricants rencontrent des difficultés à embaucher des professionnels de la sécurité dans ce domaine. En mettant en œuvre les techniques d'atténuation mentionnées ci-dessus, vous pouvez prendre des mesures substantielles pour sécuriser vos appareils.

De plus, nous recommandons fortement d’utiliser les indicateurs de renforcement au moment de la compilation comme étape initiale la plus simple du parcours d’amélioration de la sécurité.

La réalisation régulière d’audits et de tests de sécurité est également essentielle pour identifier les vulnérabilités potentielles et y remédier rapidement. Pour y parvenir, nous vous recommandons de faire appel à des laboratoires de sécurité tiers ou, à tout le moins, d'utiliser des outils d'analyse de micrologiciels.

spot_img

Dernières informations

spot_img