Revue de code · « Revue de code » • Analyse complète du code source d'un logiciel •...

Preview:

Citation preview

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

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 ?

Recommended