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
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 »
• Analyse complète du code source d'un logiciel • Identification des faiblesses et des vulnérabilités
Pourquoi ?
Des vulnérabilités peuvent être ainsi identifiées de cette façon
Comprendre le code des autres
Métrique du code
• Indice de maintenabilité • Complexité • Lignes de code • Couplage de classe • Profondeur d'héritage • Dépendance • Nombre de langages
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
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
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.
• <form name="input" action="<?php echo ($_SERVER['REQUEST_URI']); ?>" method="post">
• 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("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"), 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
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 ?