Audit de code

Un audit de code permet d’évaluer le niveau de sécurité de composant d’un système d’information. Ce type d’audit est applicable à tous les composants, comme des applications web, des API ou encore des clients lourds. Il permet de découvrir des vulnérabilités difficilement repérables ou exploitables dans le cadre d’un test d’intrusion.

Pourquoi et quand faire un audit de code ?

L’audit de code peut être effectué tout au long du cycle de vie d’une application, car il offre un aperçu global de la sécurité d’un composant.

L’audit de code permet d’être plus exhaustif que le pentest et de s’assurer des bonnes pratiques de développement sécurisé.

Il est particulièrement pertinent dans les cas suivants :

  • Avant d'importer du code tiers, comme des dépendances ou des solutions complètes : il est pertinent de réaliser un audit de code pour évaluer la maturité en matière de sécurité de l’application.
  • Pour une application peu mature sur le plan de la sécurité : l’audit de code permet d’identifier efficacement les vulnérabilités sur l’ensemble du périmètre.
  • Pour une robustesse optimale : l’audit de code peut être intégré au cycle de vie du développement logiciel (SDLC), avant chaque mise en production majeure, dans une démarche DevSecOps. Ainsi, les vulnérabilités sont traitées avant leur mise en production.

audit-securite-code

Focus sur le DevSecOps

Selon l’ANSSI, cette approche réduit drastiquement les coûts liés à la correction des vulnérabilités tardives et accélère les délais de mise en production. Les entreprises qui adoptent le DevSecOps bénéficient d’une meilleure anticipation des risques, d’une automatisation des tests et d’une résilience accrue face aux cyberattaques. Mais pour pleinement exploiter ce potentiel, il s’agit de s’appuyer sur des principes structurants (ex. Shift Left, Security Champion, Evil user story).

Méthodologie de l'audit de code

Chez AlgoSecure, nous basons notre méthodologie sur le guide de revue de code de l’OWASP ainsi que sur celui de l’ANSSI. Une première passe est effectuée sur l’ensemble du code à l’aide d’outils d’analyse automatisée pour identifier les vulnérabilités triviales. Ensuite, les fonctionnalités critiques, définies avec le client ou sélectionnées par les auditeurs, sont analysées manuellement.

Voici les contrôles couramment effectués sur l’ensemble des applications :

audit-securite-code

Les entrées utilisateurs sont souvent manipulées par le programme de ce fait des mécanismes de sécurité doivent être appliqués pour empêcher un attaquant d'altérer son exécution normale. Une attaque réussie peut permettre à l'attaquant de récupérer des informations ou de s’introduire dans le système.
L'application devra, entre autres :

  • Appliquer des règles strictes sur le format des données attendues, soit via des DTO (objets de transfert de données), soit par des règles de filtrage.
  • Filtrer les entrées utilisateurs et échapper les caractères spéciaux propres au langage employé. Dans le cas de SQL, des caractères du types * ‘ ‘’ % ; doivent impérativement être éliminés avant de traiter la requête.
  • Utiliser systématiquement des requêtes préparées pour la création des requêtes SQL.
  • Implémenter des contrôles de taille, de type et de stockage sur les fichiers envoyer sur le serveur.

Un utilisateur s’authentifie lorsqu’il se connecte à un service. Une fois authentifié, une preuve de son identité lui est délivrée sous forme de jeton de session. Cette fonctionnalité est particulièrement sensible, car son contournement peut entraîner la compromission de l’ensemble des comptes du système.
Voici les contrôles effectués pour tester la robustesse de ces processus :

  • S’assurer que le système limite le nombre de tentatives de connexion échouées et applique un verrouillage temporaire après plusieurs tentatives, pour se protéger contre les attaques par force brute.
  • S’assurer de l’application d’une politique de mots de passe complexes.
  • Mise en place des messages d’erreurs non verbeux ni techniques sur les interfaces d’authentification
  • S’assurer du caractère aléatoire d’un jeton de session et vérifier qu’un attaquant ne peut pas générer un jeton de session valide pour un autre utilisateur.
  • S’assurer que les jetons de session peuvent être révoqués correctement, notamment en cas de déconnexion.

Dans une application, il est fréquent de gérer plusieurs utilisateurs ayant des accès différents aux données et aux fonctionnalités. AlgoSecure veillera à ce que les droits soient correctement appliqués en vérifiant les points suivants :

  • Les données sont bien associées aux utilisateurs concernés et ne sont pas accessibles par des utilisateurs non autorisés.
  • Certaines fonctionnalités, comme les fonctionnalités d’administration, ne peuvent être exécutées que par des comptes disposant des privilèges adéquats.
  • Aucun objet ne doit être directement référencé de manière à éviter qu’un attaquant puisse les retrouver facilement.

Avec l'utilisation croissante de dépendances, de bibliothèques et de frameworks, une configuration minutieuse par les développeurs est nécessaire pour appliquer des règles de durcissement. Voici quelques règles vérifiées :

  • Activer la journalisation et la surveillance des accès, en particulier pour les fonctionnalités sensibles.
  • S’assurer que l’ensemble des composants tiers est à jour.
  • Désactiver les services inutiles pour limiter la surface d'attaque.
  • Supprimer ou désactiver les pages inutiles, y compris les pages par défaut des bibliothèques.
  • Vérifier la configuration des mécanismes de sécurité, notamment l’application d’une couche TLS et la protection contre les attaques CSRF.
  • S'assurer qu’aucun secret (comme des clés API ou mots de passe) n'est codé en dur dans le code.

Les données sensibles (données nominatives, mots de passe, données de paiement, etc.) doivent être stockées sous forme chiffrée. AlgoSecure vérifiera l’utilisation d’un algorithme de chiffrement fort pour les données identifiées comme sensibles. Il s’assurera notamment :

  • Que les données et les sauvegardes soient chiffrées
  • Que des algorithmes standards et clés fortes sont utilisés
  • Que les clés et mots de passe sont protégés des accès non autorisés

La liste n'est pas exhaustive, car les contrôles effectués sont adaptés à chaque situation. Ils varient en fonction de la technologie utilisée, comme la détection de buffer overflow dans les langages de bas niveau, mais aussi en fonction des fonctionnalités présente sur l’application.

À la suite de cet audit, un rapport est envoyé, expliquant l'ensemble des vulnérabilités découvertes et, surtout, proposant des corrections adaptées à votre contexte.

Les atouts d'Algosecure

Chez AlgoSecure, notre qualification PASSI (Prestataires d'Audit de la Sécurité des Systèmes d'Information) sur la portée Audit de Code témoigne de notre expertise et de notre engagement à fournir des audits de code de haute qualité. Nous aidons nos clients à non seulement identifier et corriger les faiblesses de leur code, mais aussi à mettre en place des pratiques robustes de développement sécurisé.

Vous avez activé l'option "Do Not Track" dans votre navigateur, nous respectons ce choix et ne suivons pas votre visite.