Revue de code François Harvey
←
→
Transcription du contenu de la page
Si votre navigateur ne rend pas la page correctement, lisez s'il vous plaît le contenu de la page ci-dessous
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
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
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