Développeur web : les bonnes pratiques en Cybersécurité

03/09/2019

La cybersécurité devient un enjeu majeur pour toutes les applications web, mais elle reste peu enseignée dans les écoles informatiques. Un développeur web ALTEN a eu l’opportunité d’interviewer Jean-François, Directeur technique d’ALTEN Canada et en charge de la sécurité des SI d’une grande banque d’investissement.
En tant qu’ancien développeur, il nous explique les bonnes pratiques à intégrer dans un projet informatique.

Les applications web constituent la cible initiale des cyberattaques, soit 53% des intrusions relevées sur les SI (F5 Labs). Pourtant, dans le Top 10 des programmes de formation en informatique aux Etats Unis, aucun cours portant sur la cybersécurité n’a été identifié (Arkasha security).
Jean-François dirige aujourd’hui un centre de cybersécurité en Amérique du Nord, avec une équipe «rouge» composée de hackers éthiques (pentesters), et une équipe bleue d’analyse de failles identifiées. Cette dernière se coordonne aussi avec les équipes de développement pour corriger ces vulnérabilités.

 

Bonjour Jean-François, en tant que développeur, la cybersécurité n’est pas vraiment enseignée dans mon école.
Pour commencer, connaissons-nous toutes les failles ou vulnérabilités existantes ? Existe-t-il des grandes catégories ?

Nous partons du principe qu’il n’y a rien d’inconnu en tant que tel. Les failles ou les vulnérabilités, sont détectées grâce à la communauté de cybersécurité qui les répertorie. Souvent, ce sont les éditeurs comme Oracle, Microsoft [etc] qui les identifient et qui les publient. Vous connaissez le principe des anti-virus ? On détecte les virus pour ensuite crée un anti-virus, donc on se bat contre quelque chose qu’on connait, toujours.

Lorsque les scanners en interne ou les Pentester vont tester les vulnérabilités ou essayer de pénétrer un système informatique, ils vont utiliser des techniques connues et essayer d’exploiter des failles connues. Le protocole de Pentest dit qu’on doit absolument tester les failles connues en premier lieu. Ensuite, on peut se demander si on est capable de pivoter sur un autre environnement, si on peut obtenir des droits, et se demander ce qu’on peut exploiter de plus. A ce moment-là on ne parlera plus de faille mais d’exfiltration de données, c’est l’action suivant l’exploitation des vulnérabilités.

Pour un développeur web, il serait intéressant de consulter les guides OWASP (Open Web Application Security Project).
Projet ouvert alimenté par la communauté, voici quelques exemples de vulnérabilités les plus fréquentes dans les applications web :

  1. Injections de commandes (système, SQL, etc.).
  2. Détournement de la gestion de l’authentification et de la session.
  3. XSS (injection de code HTML pour provoquer des actions non désirées sur une page web).
  4. Détournement des droits d’accès d’un utilisateur authentifié.
  5. Configuration non sécurisée des serveurs, applications, base de données ou framework.

C’est un outil que les pentesters utilisent toujours pour dire « je vais tester au moins cette faille-là ». Parfois, des entreprises client demandent aussi à ce qu’on fasse un test spécifique à une vulnérabilité.


 

En quoi OWASP peut-il être utile pour un développeur web ?

Le Projet OWASP donne les guidelines. Quand vous le lisez, il y a des cas d’utilisation concrets.
Par exemple, pour corriger une injection SQL en C#, on ne devrait pas concaténer de bout en bout, mais utiliser telle méthode, telle fonction de code. C’est important pour l’apprentissage d’un développeur web. Il faut qu’ils soient formés, et ces open Project sont là pour ça. Dans le milieu informatique, c’est un projet connu par énormément de monde. Pour ceux qui ne le connaissent pas, il est très important d’en prendre connaissance, cela fait monter les développeurs en compétence.


 

Existe-t-il des plateformes de développement qui pourraient aider les développeurs web à ne pas se soucier des vulnérabilités ?

Si on prend l’exemple du .NET framework, les versions récentes offrent certaines protections de base.
Imaginons qu’un développeur web oublie de traiter une entrée d’input à travers les requêtes HTTP (GET ou POST) avec une procédure de nettoyage (sanitizing).
Grâce au framework, il y aura une validation automatique du côté serveur, sans que le développeur ait à la faire lui-même manuellement. Cela empêche un appel de fonction critique (comme une requête SQL), réalisé par les hackers.

Un autre exemple : les injections de requêtes illégitimes par rebond (cross-site request forgery ou CSRF), elles détournent la relation de confiance entre le navigateur d’un utilisateur et le serveur d’un site vulnérable, pour injecter une requête malveillante. Le framework gère également cette faille. Il génère automatiquement des jetons anti-contrefaçons pour les éléments de formulaire HTML (source) pour s’assurer de la source des requêtes. Il est important de savoir si ces requêtes proviennent de vrais utilisateurs et non d’une identité usurpée.

Le principe d’une attaque CSFR. Crédit image : CERT-FR

Donc oui, les dernières versions des frameworks que nous utilisons, comme .NET et Java, intègrent des protections de base.
Mais ils ne gèrent pas 100% des cas.


 

Comment ton équipe aborde une évolution de framework, comme Angular 5 à Angular 6 ?
Le nouveau framework va corriger certaines failles. Quelle plus-value pouvez-vous apporter aux développeurs web ?

L’objectif principal, c’est se dire : Comment sécuriser le code ? Est-ce en mettant à jour le framework qu’on corrigera certaines failles ? Ou bien suffit-il d’adopter les bonnes pratiques de programmation pour son framework actuel ?
En tout cas, s’il faut changer de framework, la démarche à adopter est d’accompagner les développeurs à revoir leur code, pour les rendre compatible avec la nouvelle version.

Nous organisons régulièrement des workshops chez nos clients pour sensibiliser les nouveaux développeurs : quelles vulnérabilités existent sur ce framework ? Comment scannons-nous ces vulnérabilités? Comment le scanner évolue-t-il avec le temps ? Quelle est notre démarche globale ?

D’autre part, au delà du code, il est important de sensibiliser les employés ou les utilisateurs aux bonnes pratiques en sécurité informatique : verrouillage de session, prévenir des campagnes de phishing
Le but c’est, qu’avec notre assistance, il n’y ait plus de vulnérabilité qui sortent au bout de la chaîne de montage.


 

On entend beaucoup parler des outils de Cybersécurité à base d’IA, comme Darktrace. Est-ce suffisant pour empêcher les cyber-attaques ?

Non. Darktrace, c’est un outil d’intelligence qui fait du apprentissage de «pattern of life» (train de vie) des utilisateurs.
À l’instar du logiciel anti-virus qui détecte une anomalie parce qu’il connaît le comportement des virus, Darktrace détecte une anomalie parce qu’il relève un comportement suspect de l’utilisateur.

L’éditeur nous a montré qu’il suffirait de l’installer sur le réseau pendant deux mois, pour qu’il soit capable de détecter les habitudes de vie d’un tel ou tel utilisateur :

  • Il va apprendre par exemple l’heure à laquelle Jonathan arrive le matin, les sites qu’il consulte, les serveurs auxquels il se connecte régulièrement, son heure de pause déjeuner, la vitesse à laquelle Jonathan tape sur son clavier, sa vitesse de déplacement de souris…
  • Et si quelqu’un se connecte sur son poste, sans avoir ces «patterns», le système de sécurité sera immédiatement notifié.

Un outil IA comme Darktrace détecte une usurpation d’identité grâce à la modélisation du comportement humain de chaque utilisateur.

Donc oui, cet outil apporte une sécurité beaucoup plus pérenne. Pour moi, ce sera une partie de l’avenir.
Mais au regard de la protection des données personnelles comme RGPD, son usage est limité à un cadre professionnel, au sein d’une entreprise par exemple. Un tel outil ne serait pas envisageable pour sécuriser une application web grand public.


 

Du coup, comment peut-on faire pour détecter une vulnérabilité de façon pro-active ?

Concernant les vulnérabilités en tant que telle, on pense souvent aux tests d’intrusion (pentest), mais on utilise d’abord les scanners comme Qualys, Nessus, Rapid7, Curador…
Ils roulent sur les réseaux et détectent des vulnérabilités de surface comme :

  • les versions obsolètes de Windows
  • les versions obsolètes d’Open SSL
  • la possibilité d’injecter du JavaScript dans une page
  • un site non sécurisé
  • pas de certificat SSL

Au final les scanners vont aller partout, ils vont scanner les routeurs, les postes de travail, les serveurs informatiques, les commutateurs réseaux, les caméras IP, les télévisions intelligentes, les téléphones IP… Ils vont scanner tous les équipements connectés.

Nous, on a dû demander à un fournisseur de caméras de mettre à jour son logiciel, parce qu’un hacker aurait pu prendre le contrôle. Mais en général, il suffit de modifier la configuration pour y remédier. Ça ne demande pas nécessairement à un développeur de revoir le code de son application.

Un scanner comme Qualys peut détecter les vulnérabilités de surface des différents équipements sur le réseau.

Les tests d’intrusion (pentest), permettent des analyses et une exploitation des vulnérabilités beaucoup plus en profondeur par rapport aux scanners. On installe des agents directement sur les serveurs informatiques. C’est plus facile en termes d’efficacité et de détection. Lorsque qu’un agent est installé sur un serveur, il peut communiquer à ce moment-là directement avec une centrale et signaler un problème, tandis qu’un scanner doit passer par un scan complet du réseau pour trouver les vulnérabilités.


 

Comment éviter les vulnérabilités dans notre programmation, de façon proactive ?

Dans le cadre de notre projet, nous avons des développeurs .NET et Java avec des backgrounds en sécurité. Ils sont capables de converser avec les développeurs des équipes en place pour leur indiquer comment écrire et corriger leur code.

Mais comment faire pour être plus proactif dans un contexte où il y a beaucoup de développements en interne ?

C’est justement le cas chez notre client. comment éviter des vulnérabilités en production lorsque plusieurs centaines d’équipes développent des logiciels tous les jours ?
Chez notre client, nous avons participé à la mise au point d’un scanner de vulnérabilité du code. Avant que le code part en production, il passe dans un outil d’intégration comme Jenkins, puis un scanner de code comme Checkmarx va passer à travers le code.

Utilisation d’un scanner Checkmarx permet de détecter les vulnérabilités de son code. (crédit photo : Notes about Software)

Il identifie facilement les vulnérabilités que nous avons vu plus haut (OWASP Top 10) : injection de commandes SQL, XSS (cross-site scripting)… ou encore utilisation d’une version d’une librairie JavaScript vulnérable à une injection.

 

> Pour en savoir plus sur le projet cybersécurité ALTEN dirigé par Jean-François :

Red Team vs Blue Team : le centre Cybersécurité ALTEN Canada

Share