Modélisation des menaces pour les applications Node.js
31 août 2016
0 minutes de lectureCet 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.

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 :

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.

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.

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.