Revue de code François Harvey

La page est créée Pauline Brunel
 
CONTINUER À LIRE
Revue de code François Harvey
Revue de code
   François Harvey
Revue de code François Harvey
A propos de cette conférence
• Expliquer les concepts généraux
• Revue de code
• Pas de langages spécifiques
• Pas d’outils spécifiques
Revue de code François Harvey
François Harvey
• Professionnel en sécurité de l’information
• J’interviens depuis plus de 20 ans dans le domaine de la sécurité, des
  cyberattaques et de l’infonuagique
Revue de code François Harvey
« Revue de code »
• Analyse complète du code source d'un logiciel
• Identification des faiblesses et des vulnérabilités
Revue de code François Harvey
Pourquoi ?

Des vulnérabilités peuvent être ainsi identifiées de cette façon
Revue de code François Harvey
Comprendre le code des autres
Revue de code François Harvey
Métrique du code
• Indice de maintenabilité
• Complexité
• Lignes de code
• Couplage de classe
• Profondeur d'héritage
• Dépendance
• Nombre de langages
Revue de code François Harvey
Ce qui est nécessaire
Éditeur de texte / IDE !

• Visualisation du code source
• Possibilité d’ajouter des annotations
• Possibilité de mettre des marqueurs
• Analyse des symboles et navigation
• Intégration avec les systèmes de contrôle de versions
• Conservation locale du code source
Revue de code François Harvey
Choix personnel : Slickedit pro
• Annotation personnalisée (avec champ personnalisé)
• Mise en surbrillance de fonctions spécifiques
• Multiple OS (Linux et Windows)
• Portable

                                                   https://www.slickedit.com
Revue de code François Harvey
Contrainte
Objectifs
Les principales raisons
• Trouver des faiblesses et des vulnérabilités
• Valider la présence de mécanismes de sécurité
• Conformité
   • PCI : Demande un audit de code source
Focaliser

•Maximum de faiblesses
•Minimum de temps
•Automatiser
Catégories
Types de vulnérabilités
Faiblesses plus que des vulnérabilités
• CWE (Commun Weakness Enumeration)
• 700+ faiblesses

Faiblesse = Générique
Vulnérabilité = Spécifique

 https://cwe.mitre.org/
Où ?
• Points d’entrées
• Retour utilisateur
• Accès aux données
• Traitement sensible
• Cryptographie
• Modélisation d’attaque (Threat Modeling)
• Dépendance externe
Points d’entrées
• Méthode POST
• Paramètre GET
• Téléversement de fichiers
• Gestion des cookies
• Service Web
• Formulaires
Points de sorties
• Champs utilisateurs
• Système de rapport
• Téléchargement de fichiers
• Exportation de données
Accès aux données
• Connexions aux bases de données
• Requêtes SQL
• Système de cache
• Fichiers temporaires
• Journalisation
Traitements sensibles
• Authentification
• Changement de profil
• Gestion des droits d’accès
• Tâches administratives
Cryptographie
• Chiffrement
• Entropie
• Communication SSL
• Certificat X509
• Nombre aléatoire
Modélisation des menaces
• Processus-clé
• Gestion des risques
Dépendance externes
•   npm
•   composer
•   Nuget
•   Maven
•   Javascript
•   Code source copié d’un autre projet
•   StackOverflow.com ….

Quelques outils :
     • https://snyk.io/
     • https://gemnasium.com/
Pour les dépendances javascript
• retire.js (http://retirejs.github.io/ )
• Plusieurs modes de fonctionnement
• S’intègre à Burp Suite
Analyse selon les patterns
• VCG : Visual Code Grepper
Analyse selon les patterns
• MEDIUM: Potentially Unsafe Code - Potential XSS
• Line: 289 - fichier.php
• The application appears to reflect data to the screen with no
  apparent validation or sanitisation. It was not clear if this variable is
  controlled by the user.
•
• MEDIUM: Potentially Unsafe Code - md5
• Line: 271 - File.php
• MD5 Hashing algorithm.
•      $storageDir = $this->path . '/' . substr(md5($file), 0, 2);
• MEDIUM: Potentially Unsafe Code - mt_rand
• Line: 119 - E:\dev\un-site-web\public_html\wp-
  content\plugins\google-analytics-dashboard-for-
  wp\tools\src\Google\Http\Batch.php
• The application uses pseudo-random number generation that is not
  cryptographically secure. Carry out a manual check to ensure this is
  not being used in a process that requires cryptographically secure
  random numbers.
•        $key = mt_rand();
Complexité != Sécurité
•              $hash    =
    md5(microtime(true).uniqid('',true).substr(str_shuffle("0123456789a
    bcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"), 0,
    rand(20,60)));
Plusieurs programmes selon l’approche
• Codesonar
• Veracode
• SonarQube
Valider la présence de mécanismes de
sécurité
• OWASP Application Security Verification Standard (ASVS)
   •   V2 - Authentication Verification
   •   V3 - Session Management
   •   V4 - Access Control Verification
   •   V5 - Malicious input handling verification
   •   V8 - Error handling and logging verification
   •   V10: Communications security verification
   •   V13 - Malicious controls
Par exemple

curl_setopt($cHandler, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($cHandler, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($cHandler, CURLOPT_CAINFO, "app.ca-bundle");
Approche CWE
CWE-316: Cleartext Storage of Sensitive Information in Memory

private String _password;
vs
private SecureString _password;

Toujours libérer
_password?.Dispose();
Quand
• Durant le développement
• Avant son inclusion (Pre commit)
• Après son inclusion (Post commit)
• Avant la mise en production
• Après un audit externe
Durant le développement
• Intégration dans l’environnement de développement
• Utilisation
   • Fonctions sensibles
   • Couverture du code
   • Lisibilité du code source
• Objectif
   • Sensibiliser le programmeur durant le développement
Plusieurs outils
• SonarLint
• PVS Studio
Avant son inclusion (Pre commit)
• Approche regex
• Utilisation des « hook »
• Utilisation
   •   Vulnérabilité technique : injection, XSS
   •   Fonction bannies
   •   *Lint
   •   Présence de secret (mot de passe ou pattern tels que des NAS, NAM, Crédit)
   •   Lisibilité du code source
• Objectif
   • Préserver la sécurité du code source
Après son inclusion (post commit)
• Configuration personnalisée
• Utilisation des « hook »
• Utilisation
   • Identification des sections sensibles
   • Code fonctionnel si des validations sont requises
   • Moins d’impact pour le développement
• Objectif
   • Faciliter une revue des manuelles
Avant sa mise en production
• Processus manuel
• Utilisation
   • Vulnérabilité logique
   • Processus complet
• Objectifs
   •   Identifier des vulnérabilités logiques
   •   Défaillance dans les processus d’affaires
   •   Couverture de l’analyse des menaces
   •   Validation de la présence des mécanismes de protection
OWASP Code Review Guide v2
• Actuelle (Juillet 2017)
• Couvre bien le TOP 10
• Multi-plateforme

• https://www.owasp.org/images/5/53/OWASP_Code_Review_Guide_
  v2.pdf
Rapport/ Documentation
• Date
• Application
• Développeur et reviseurs
• Documentation
Et si on n’a pas les sources ?
On les reconstruit
• Analyse binaire
  Analyse à partir du code opcode / compilé

• Décompilation :
  La logique/fonction est préservée
Analyse binaire
• Veracode
• IDA
• Codesonar
• Binskim
• Angr (http://angr.io )
Quelques outils de décompilation
•C
  hex-rays / IDA
• JAVA :
   JAD
• .NET
  dotPeek
• Android :
  apktool
Obfuscation
Docker
• https://github.com/docker/docker-bench-security
Conclusion
• Présentation sera déposée sur mon site Web
  https://francoisharvey.ca/blog/
Questions et commentaires ?
Vous pouvez aussi lire