Audit de code source

Un audit de code source pour évaluer le niveau de sécurité de vos applicatifs.

Objectif d’un audit de code source

Compétences cybersécurité

L’audit de code source permet d’évaluer le niveau de sécurité d’un ou plusieurs composants d’une application ou d’un logiciel, afin de s’assurer que les règles et bonnes pratiques en termes de spécification et de conception ont été respectées.

Il peut être réalisé dans l’optique d’améliorer la qualité du code existant ou de rechercher des failles potentielles pour de futures attaques.

Ce type d’audit permet à l’entreprise d’avoir une vue d’ensemble de la qualité de son code source, afin d’améliorer sa sécurité et sa conformité.

À la suite de cet audit, des recommandations sont proposées par les experts.

Bénéfices attendus d’un audit de code source

La réalisation d’un audit de code source de sécurité permet notamment à votre organisation de :

  • Identifier les mauvaises pratiques de programmation pouvant mener à des vulnérabilités ;
  • Déterminer des pistes d’amélioration du code existant ;
  • Disposer d’une vision approfondie de la sécurité de l’application (exhaustivité de l’analyse, plus approfondie qu’un test d’intrusion) ;
  • Sensibiliser les développeurs à l’importance d’intégrer la sécurité dans le développement de l’application (DevSecOps) ;
  • Intégrer les résultats d’audit dans une documentation des bonnes pratiques de développement sécurisé ;
  • Avoir une visibilité de l’architecture applicative de haut niveau de l’application.

Méthodologie d’un audit de code source

Ressources

Notre méthodologie s’appuie sur des entretiens avec les développeurs, des analyses du code et la documentation associée.

Ces sources d’informations sont évaluées vis-à-vis de multiples référentiels tels que ceux de l’OWASP, de l’ANSSI, les recommandations des éditeurs logiciels, la documentation frameworks/applications, etc.

Points de contrôle

Ces sources d’informations sont échantillonnées afin de se concentrer sur les fonctionnalités de sécurité les plus critiques. De manière non exhaustive, voici les principaux points de contrôles systématiquement vérifiés par nos auditeurs lors d’une revue de code :

Gestion des entrées utilisateur : validation, filtrage et suivi

« Ne jamais faire confiance à l’utilisateur » : telle est la règle fondamentale lors du développement d’applications interactives. La robustesse et la cohérence des méthodes choisies sont étudiées, avec l’objectif de dénicher de potentielles failles de sécurité et des axes d’amélioration.

  • Les briques applicatives interagissant avec des données fournies par les utilisateurs (chaînes de caractères, liens, fichiers…) sont systématiquement vérifiées pour s’assurer qu’un traitement préalable, appelé « assainissement », est implémenté. Plusieurs méthodes s’offrent aux développeurs pour assainir les entrées utilisateurs : 
    • Filtrage de caractères spéciaux ;
    • Utilisation d’un framework intermédiaire ;
    • Validation du type des données ;
    • Scan par antivirus des fichiers téléversés par les utilisateurs ;
  • L’interaction de l’application avec des bases de données et des services tiers est également analysée pour s’assurer de l’implémentation de pratiques de développement sécurisées :
    • Mise en place de requêtes préparées ;
    • Transmission des données avec un protocole chiffré ;

Une application intègre généralement de nombreux services, que ce soit par la séparation explicite du frontend et du backend, la présence d’une API, l’interconnexion à une base de données ou à des services d’envoie d’emails. 

Dans ce cas, la sécurité de ces interconnexions peut aussi être évaluée par un audit de code source, pour déterminer si les mécanismes de contrôle d’accès sont correctement pris en compte, si des configurations réseaux particulières sont mises en place ou si des mesures de chiffrement adéquates sont implémentées. 

Par exemple, l’audit de code source tient compte des points suivants :  

  • Sécurisation TLS des connexions aux autres applications ;
  • Gestion des droits pour la connexion à une base de données SQL.

La qualité des mécanismes d’authentification et de session est étudiée pour s’assurer de leur robustesse face à diverses attaques (force brute, fixation de session, contournement de session, etc). La compromission de ces mécanismes pourrait mettre en danger la confidentialité, l’intégrité et la disponibilité des données hébergées sur l’application. Les aspects de sécurité suivants sont vérifiés lors d’une revue de code : 

  • Mécanisme de réinitialisation de mots de passe (aléa et intégrité des jetons) ;
  • Gestion des échecs d’authentification ;
  • Aléa, confidentialité et intégrité du jeton de session : JWT, configuration des cookies, Basic Auth, etc ;
  • Durée des sessions : expiration et renouvellement ;
  • Implémentation d’un mécanisme de contrôle de requêtes pour prévenir les attaques par dictionnaire ou par force brute ;
  • Présence d’une politique de mot de passe robuste ;
  • Mécanisme de protection anti-CSRF.

Le contrôle d’accès représente un aspect clef de la sécurité d’une application, s’assurant que les utilisateurs puissent  strictement interagir avec les données qui sont en adéquation avec leurs permissions. D’après l’OWASP, les vulnérabilités liées au contrôle d’accès sont les plus courantes sur les applications Web :

  • Absence d’exposition d’informations sensibles de l’application  : niveau d’opacité des informations (aucune divulgation d’informations sensibles) ;
  • Sécurité de l’implémentation du contrôle d’accès : accès aux données d’autres utilisateurs (horizontal) et accès à des fonctionnalités d’administration (vertical) ;
  • Référence d’objets directs et prédictibilité des identifiants.
  • Facilité d’utilisation (contrôle du séquençage des opérations) ;
  • Cohérence de la construction d’un objet de session dans un tunnel ;
  • Conditions aux limites et débordement.

Il est impératif que les données sensibles soient chiffrées et que le code source ne contienne aucune information confidentielle :  

  • Gestions des secrets : s’assurer de la non présence d’informations confidentielles dans le code source (mots de passe, sel, poivre, jeton de session) ;
  • Utilisation de fichiers de configuration et de variables d’environnement ;
  • Utilisation d’algorithmes à l’état de l’art et de clefs de taille robuste ;
  • Protection de l’accès aux secrets.

La journalisation est indispensable pour assurer la traçabilité des événements pouvant survenir au cours du cycle de vie de l’application. Il est cependant important de veiller à ce que les données conservées ne soient pas de caractère sensible. Sont étudiés les points de contrôles suivants :

  • Filtrage ou validation des données sauvegardées dans les journaux ;
  • Nettoyage des données à caractère personnel des journaux (mots de passe, cartes de crédit, informations personnelles…) ;
  • Identification cohérente des sources d’évènements (application ou module à l’origine de l’erreur, code d’erreur ou d’action, date et heure d’apparition, acteur ayant déclenché l’erreur ou l’action).
  • L’utilisation de variables d’environnement en guise de configuration du socle applicatif est préférée à leur intégration directe dans le code source ;
  • Mises à jour régulières des dépendances ;

  • Configuration du serveur web : listage des répertoires, pages d’erreur, mode débogage, etc.

Méthode d’analyse

L’objectif de l’analyse des échantillons de code consiste à :

  • Analyser les résultats pertinents issus des outils automatiques, afin d’identifier s’ils présentent un impact en termes de sécurité ou s’ils sont issus d’erreurs de programmation. Cette analyse permet de dégrossir l’analyse et de se donner une idée de la sécurité générale du code.

  • Analyser manuellement le code des fonctions identifiées comme critiques et proposer un avis sur la sécurité de l’implémentation de la fonction. Cette analyse de sécurité fait  appel à l’expertise de l’auditeur afin d’identifier les écarts par rapport aux pratiques de programmation ainsi que les vulnérabilités dans le contexte de l’audit général.

Présentation des résultats & remise des livrables

Les auditeurs évaluent la sécurité de l’application en revenant sur le TOP 10 de l’OWASP et en mettant en avant les bonnes et les mauvaises pratiques de sécurité.

Les auditeurs sont susceptibles d’identifier des vulnérabilités exploitables dans le code. Dans le cas où des vulnérabilités sont identifiées, Synetis offre aussi la possibilité de démontrer leur exploitabilité par le biais de tests d’intrusion.

Les langages couverts par nos experts

Nos auditeurs ont audité une variété d’applications conçue avec les langages de programmation suivants :

  • C / C++
  • Java
  • JavaScript / NodeJS
  • .Net ,  C#
  • Python
  • Perl
  • PHP
  • Ruby
  • Shell / PowerShell
  • SQL

L’audit de code source permet donc à votre organisation d’évaluer le niveau de sécurité de ses applications ou de ses logiciels. À la suite de cet audit, il peut être pertinent d’envisager un test d’intrusion afin de simuler de véritables scénarios d’attaque.

Protection et surveillance des si

Nos experts Audit
répondent à vos questions