Skip to main content

Modélisation des menaces pour les applications Node.js

Écrit par

31 août 2016

0 minutes de lecture

Cet article a été rédigé par Gergely Nemeth, PDG de RisingStack, qui développe Trace by RisingStack pour surveiller et déboguer les applications et microservices Node.js.

Contre quoi protéger mon application ? Dois-je me prémunir contre les attaques par script intersites ? Et contre les injections SQL ? Dois-je me protéger contre la falsification de requêtes intersites ? La réponse courte est oui. Mais comme toujours, ce n’est pas si simple : selon l’identité de votre éventuel attaquant et les ressources auxquelles il peut accéder (et leur valeur), vous devez défendre votre application de différentes manières. Parler de sécurité n’a de sens que si vous connaissez les réponses à ces questions : « À l’abri de qui ? » et « Pour combien de temps ? »

C’est pourquoi vous devez modéliser les menaces qui pèsent sur votre logiciel. Les arbres d’attaque comptent parmi les meilleures solutions à votre disposition.

Que sont les arbres d’attaque ?

Les arbres d’attaque fournissent une méthode formelle et systématique pour décrire la sécurité des systèmes face à différentes attaques. En résumé, les attaques contre un système sont représentées sous forme d’arborescence, avec l’objectif comme nœud racine et les différentes façons de l’atteindre comme nœuds feuilles. — Bruce Schneier

Exemple d’arbre d’attaque

Vous trouverez ci-dessous un arbre d’attaque simplifié portant sur un coffre-fort physique, dont l’objectif évident pour l’attaquant est de l’ouvrir. Dans cet exemple, il dispose de deux moyens principaux : crocheter la serrure ou découvrir la combinaison. Pour découvrir la combinaison, il peut soudoyer quelqu’un ou écouter aux portes. Pour réussir à écouter aux portes, il doit surprendre une conversation et amener sa cible à révéler la combinaison.

Arbre d’attaque montrant les étapes pour accéder à un coffre-fort : crocheter la serrure ou découvrir la combinaison en écoutant aux portes ou en soudoyant quelqu’un.

Une fois les liens entre les objectifs établis, nous pouvons leur attribuer des valeurs. Dans cet exemple, il s’agit de possible (P) et impossible (I). N’oubliez pas que ces valeurs sont définies du point de vue de l’attaquant. Ainsi, si l’attaquant dispose de ressources financières importantes, la corruption est possible. Du point de vue d’un étudiant, elle serait probablement impossible.

Après avoir attribué ces valeurs, vous verrez précisément quels chemins vous devez protéger :

Diagramme d’arbre d’attaque montrant les différentes façons d’accéder à un coffre-fort : crocheter la serrure, découvrir la combinaison, écouter aux portes, soudoyer quelqu’un et surprendre une conversation.

Bien entendu, vous pouvez aussi attribuer d’autres valeurs aux feuilles, comme le coût de l’attaque.

Créer des arbres d’attaque pour les applications Node.js

Maintenant que vous connaissez les bases des arbres d’attaque, il est temps de les appliquer à vos applications Node.js !

Commencez par identifier les objectifs d’attaque possibles : chacun d’eux donnera naissance à un arbre distinct. Pour chaque objectif, essayez de recenser autant d’attaques que possible, puis répétez l’opération pour construire l’arbre complet. Il est possible que plusieurs arbres partagent le même sous-arbre : ce n’est pas un problème.

Une fois vos arbres d’attaque suffisamment aboutis, vous pouvez vous en servir pour prendre des décisions en matière de sécurité. Vous pourrez alors déterminer si votre système est vulnérable à un type d’attaque donné, comme le script intersites ou la falsification de requêtes intersites.

Vous serez surpris de ce que vous allez découvrir : la plupart des gens tentent de protéger leur système contre des vecteurs d’attaque qui ne le nécessitent pas, tout en laissant d’importantes failles de sécurité sans protection.

Exemple d’arbre d’attaque pour une application Node.js

Examinons l’arbre d’attaque d’une application Node.js. Chez RisingStack, nous développons une solution de surveillance Node.js ; je vais donc illustrer le concept dans l’univers de Trace.

Page de connexion de Trace by RisingStack avec des champs pour l’adresse e-mail et le mot de passe, un lien « Mot de passe oublié », un bouton « Connexion » et une option d’inscription.

L’arbre d’attaque que je vais créer ici a un objectif simple : contourner l’authentification, comme dans l’exemple du coffre-fort physique.

Arbre d’attaque illustrant les moyens de contourner l’authentification à l’aide d’un cookie obsolète, d’un mot de passe utilisateur volé ou d’identifiants modifiés.

L’exemple ci-dessus montre comment contourner l’authentification d’un compte Trace. Le premier sous-arbre illustre le cas d’un cookie volé. Dans notre exemple, ce vol pourrait être rendu possible par une dépendance non sécurisée.

  • Pour mieux protéger vos cookies, vous pouvez activer le mode Secure : cet attribut indique au navigateur de n’envoyer le cookie que si la requête est transmise via HTTPS.

  • Vous pouvez également réduire la durée de vie d’un cookie : même s’il était volé, il ne pourrait être utilisé que pendant une période limitée.

Le deuxième sous-arbre montre qu’un compte est accessible avec le nom d’utilisateur et le mot de passe valides. Dans ce cas, l’attaquant devrait les obtenir auprès de l’utilisateur, ce que nous ne pouvons pas contrôler.

  • Vous pouvez compliquer la tâche de l’attaquant en ajoutant une authentification à deux facteurs.

Le troisième sous-arbre montre que les identifiants sont directement modifiés dans les bases de données de Trace by RisingStack. Pour cela, l’attaquant devrait accéder aux bases de données.

  • Même si des attaquants accèdent à vos données, vous disposez d’une dernière protection : chiffrez votre jeu de données !

Ces exemples sont loin d’être exhaustifs et peuvent facilement devenir plus complexes, mais j’espère qu’ils vous donnent une idée de la façon de commencer à modéliser les menaces qui pèsent sur la sécurité de votre système.

Lancez-vous dans les compétitions Capture The Flag

Apprenez à résoudre des défis Capture The Flag en regardant à la demande notre atelier virtuel d’initiation.