51
Revue de code François Harvey

Revue de code · « Revue de code » • Analyse complète du code source d'un logiciel • Identification des faiblesses et des vulnérabilités

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Revue de code · « 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

Page 2: Revue de code · « Revue de code » • Analyse complète du code source d'un logiciel • Identification des faiblesses et des vulnérabilités

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

Page 3: Revue de code · « Revue de code » • Analyse complète du code source d'un logiciel • Identification des faiblesses et des vulnérabilités

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

Page 4: Revue de code · « Revue de code » • Analyse complète du code source d'un logiciel • Identification des faiblesses et des vulnérabilités

« Revue de code »

• Analyse complète du code source d'un logiciel • Identification des faiblesses et des vulnérabilités

Page 5: Revue de code · « 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

Page 6: Revue de code · « Revue de code » • Analyse complète du code source d'un logiciel • Identification des faiblesses et des vulnérabilités

Comprendre le code des autres

Page 7: Revue de code · « 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

Page 8: Revue de code · « Revue de code » • Analyse complète du code source d'un logiciel • Identification des faiblesses et des vulnérabilités

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

Page 9: Revue de code · « Revue de code » • Analyse complète du code source d'un logiciel • Identification des faiblesses et des vulnérabilités

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

Page 10: Revue de code · « Revue de code » • Analyse complète du code source d'un logiciel • Identification des faiblesses et des vulnérabilités

Contrainte

Page 11: Revue de code · « Revue de code » • Analyse complète du code source d'un logiciel • Identification des faiblesses et des vulnérabilités

Objectifs

Page 12: Revue de code · « Revue de code » • Analyse complète du code source d'un logiciel • Identification des faiblesses et des vulnérabilités

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

Page 13: Revue de code · « Revue de code » • Analyse complète du code source d'un logiciel • Identification des faiblesses et des vulnérabilités

Focaliser

•Maximum de faiblesses •Minimum de temps •Automatiser

Page 14: Revue de code · « Revue de code » • Analyse complète du code source d'un logiciel • Identification des faiblesses et des vulnérabilités

Catégories

Page 15: Revue de code · « Revue de code » • Analyse complète du code source d'un logiciel • Identification des faiblesses et des vulnérabilités

Types de vulnérabilités

Page 16: Revue de code · « Revue de code » • Analyse complète du code source d'un logiciel • Identification des faiblesses et des 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/

Page 17: Revue de code · « Revue de code » • Analyse complète du code source d'un logiciel • Identification des faiblesses et des vulnérabilités

Où ?

• Points d’entrées • Retour utilisateur • Accès aux données • Traitement sensible • Cryptographie • Modélisation d’attaque (Threat Modeling) • Dépendance externe

Page 18: Revue de code · « Revue de code » • Analyse complète du code source d'un logiciel • Identification des faiblesses et des vulnérabilités

Points d’entrées

• Méthode POST • Paramètre GET • Téléversement de fichiers • Gestion des cookies • Service Web • Formulaires

Page 19: Revue de code · « Revue de code » • Analyse complète du code source d'un logiciel • Identification des faiblesses et des vulnérabilités

Points de sorties

• Champs utilisateurs • Système de rapport • Téléchargement de fichiers • Exportation de données

Page 20: Revue de code · « Revue de code » • Analyse complète du code source d'un logiciel • Identification des faiblesses et des vulnérabilités

Accès aux données

• Connexions aux bases de données • Requêtes SQL • Système de cache • Fichiers temporaires • Journalisation

Page 21: Revue de code · « Revue de code » • Analyse complète du code source d'un logiciel • Identification des faiblesses et des vulnérabilités

Traitements sensibles

• Authentification • Changement de profil • Gestion des droits d’accès • Tâches administratives

Page 22: Revue de code · « Revue de code » • Analyse complète du code source d'un logiciel • Identification des faiblesses et des vulnérabilités

Cryptographie

• Chiffrement • Entropie • Communication SSL • Certificat X509 • Nombre aléatoire

Page 23: Revue de code · « Revue de code » • Analyse complète du code source d'un logiciel • Identification des faiblesses et des vulnérabilités

Modélisation des menaces

• Processus-clé • Gestion des risques

Page 24: Revue de code · « Revue de code » • Analyse complète du code source d'un logiciel • Identification des faiblesses et des vulnérabilités

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/

Page 25: Revue de code · « Revue de code » • Analyse complète du code source d'un logiciel • Identification des faiblesses et des vulnérabilités

Pour les dépendances javascript

• retire.js (http://retirejs.github.io/ ) • Plusieurs modes de fonctionnement • S’intègre à Burp Suite

Page 26: Revue de code · « Revue de code » • Analyse complète du code source d'un logiciel • Identification des faiblesses et des vulnérabilités

Analyse selon les patterns

• VCG : Visual Code Grepper

Page 27: Revue de code · « Revue de code » • Analyse complète du code source d'un logiciel • Identification des faiblesses et des vulnérabilités

Analyse selon les patterns

Page 28: Revue de code · « Revue de code » • Analyse complète du code source d'un logiciel • Identification des faiblesses et des vulnérabilités

• 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">

Page 29: Revue de code · « Revue de code » • Analyse complète du code source d'un logiciel • Identification des faiblesses et des vulnérabilités

• MEDIUM: Potentially Unsafe Code - md5 • Line: 271 - File.php • MD5 Hashing algorithm. • $storageDir = $this->path . '/' . substr(md5($file), 0, 2);

Page 30: Revue de code · « Revue de code » • Analyse complète du code source d'un logiciel • Identification des faiblesses et des vulnérabilités

• 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();

Page 31: Revue de code · « Revue de code » • Analyse complète du code source d'un logiciel • Identification des faiblesses et des vulnérabilités

Complexité != Sécurité

• $hash = md5(microtime(true).uniqid('',true).substr(str_shuffle("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"), 0, rand(20,60)));

Page 32: Revue de code · « Revue de code » • Analyse complète du code source d'un logiciel • Identification des faiblesses et des vulnérabilités

Plusieurs programmes selon l’approche

• Codesonar • Veracode • SonarQube

Page 33: Revue de code · « Revue de code » • Analyse complète du code source d'un logiciel • Identification des faiblesses et des vulnérabilités

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

Page 34: Revue de code · « Revue de code » • Analyse complète du code source d'un logiciel • Identification des faiblesses et des vulnérabilités

Par exemple

curl_setopt($cHandler, CURLOPT_SSL_VERIFYPEER, true); curl_setopt($cHandler, CURLOPT_SSL_VERIFYHOST, 2); curl_setopt($cHandler, CURLOPT_CAINFO, "app.ca-bundle");

Page 35: Revue de code · « Revue de code » • Analyse complète du code source d'un logiciel • Identification des faiblesses et des vulnérabilités

Approche CWE

CWE-316: Cleartext Storage of Sensitive Information in Memory private String _password; vs private SecureString _password; Toujours libérer _password?.Dispose();

Page 36: Revue de code · « Revue de code » • Analyse complète du code source d'un logiciel • Identification des faiblesses et des vulnérabilités

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

Page 37: Revue de code · « Revue de code » • Analyse complète du code source d'un logiciel • Identification des faiblesses et des vulnérabilités

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

Page 38: Revue de code · « Revue de code » • Analyse complète du code source d'un logiciel • Identification des faiblesses et des vulnérabilités

Plusieurs outils

• SonarLint • PVS Studio

Page 39: Revue de code · « Revue de code » • Analyse complète du code source d'un logiciel • Identification des faiblesses et des vulnérabilités

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

Page 40: Revue de code · « Revue de code » • Analyse complète du code source d'un logiciel • Identification des faiblesses et des vulnérabilités

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

Page 41: Revue de code · « Revue de code » • Analyse complète du code source d'un logiciel • Identification des faiblesses et des vulnérabilités

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

Page 42: Revue de code · « Revue de code » • Analyse complète du code source d'un logiciel • Identification des faiblesses et des vulnérabilités

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

Page 43: Revue de code · « Revue de code » • Analyse complète du code source d'un logiciel • Identification des faiblesses et des vulnérabilités

Rapport/ Documentation

• Date • Application • Développeur et reviseurs • Documentation

Page 44: Revue de code · « Revue de code » • Analyse complète du code source d'un logiciel • Identification des faiblesses et des vulnérabilités

Et si on n’a pas les sources ?

Page 45: Revue de code · « Revue de code » • Analyse complète du code source d'un logiciel • Identification des faiblesses et des vulnérabilités

On les reconstruit

• Analyse binaire Analyse à partir du code opcode / compilé

• Décompilation : La logique/fonction est préservée

Page 46: Revue de code · « Revue de code » • Analyse complète du code source d'un logiciel • Identification des faiblesses et des vulnérabilités

Analyse binaire

• Veracode • IDA • Codesonar • Binskim • Angr (http://angr.io )

Page 47: Revue de code · « Revue de code » • Analyse complète du code source d'un logiciel • Identification des faiblesses et des vulnérabilités

Quelques outils de décompilation

• C hex-rays / IDA

• JAVA : JAD

• .NET dotPeek

• Android : apktool

Page 48: Revue de code · « Revue de code » • Analyse complète du code source d'un logiciel • Identification des faiblesses et des vulnérabilités

Obfuscation

Page 49: Revue de code · « Revue de code » • Analyse complète du code source d'un logiciel • Identification des faiblesses et des vulnérabilités

Docker

• https://github.com/docker/docker-bench-security

Page 50: Revue de code · « Revue de code » • Analyse complète du code source d'un logiciel • Identification des faiblesses et des vulnérabilités

Conclusion

• Présentation sera déposée sur mon site Web https://francoisharvey.ca/blog/

Page 51: Revue de code · « Revue de code » • Analyse complète du code source d'un logiciel • Identification des faiblesses et des vulnérabilités

Questions et commentaires ?