Cédric BRASSEUR
Summary
Il est important de différencier ces deux aspects de la sécurité informatique
<?php
$enjeux = [
'Objectifs précédents',
'Légitimité / Crédibilité',
'Droits à la vente de certains produits',
'Obligations légales (hopitaux, banques,...)'
];
?>
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 également
Responsable de la sécurité, de l'intégrité et de la disponibilité des données
Réalise le 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 ?
ISO/IEC 27034
PCI-DSS / PA-DSS
HIPAA
CNIL
RGPD
Autres.. Renseignez-vous !
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.
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 voir les différentes étapes de mise en place d'un S-SDLC.
les développeurs
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 ! "
Réduire les surfaces d'attaques : L'objectif de cette étape est de diminuer au maximum les possibilités afin de n'autoriser que ce qui est nécessaire au bon fonctionnement de l'application.
Plus on réduit les surfaces d'attaques, plus il est simple de maîtriser les éléments constituants notre système. Par exemple, refuser l'accès à tous les ports excepté une whitelist nécessaire à l'application.
Inclus également : La défense en profondeur (données, application, hôte, réseau, physique, politique de sécurité), la séparation des privilèges, la paramètres par défauts (mots de passes, etc...)
La modélisation des menaces est également une étape importante pour s'assurer de la sécurité de son projet.
Diagrammes
Identification
Atténuation
Validation
Documentation et validation entre les parties prenantes
Utilisation du modèle STRIDE
Déterminer les points d'entrées et les interactions
Interventions sur les éléments identifier en phase précédente
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é.
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
SOP (Same Origin Policy)
CORS (Cross Origin
Resource Sharing)
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
ANTI XSS
ANTI XSS
Force le protocole HTTPS !
Se configure au niveau du serveur Apache, en suivant un guide, vous devriez vous en sortir aisément.
Content Security Policy
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é par exemple.
Authentification HTTP
Permet de sécuriser un peu plus une connexion utilisateur via un protocole HTTP en rajoutant du hashage par exemple. Mais ça n'empêche pas qu'il est contournable par un brute force.
Donc mon conseil c'est simplement de forcer HTTPS.
Module d'une application web, serveur ou machine virtuelle, un WAF permet de protéger contre les attaques HTTP malveillantes.
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.
Pour ceux qui finissent vite, n'hésitez pas à fouiner sur les autres challenges du site.
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.
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 !
Pratique très courante et à réaliser en continue, la sécurité n'échappe pas au besoin de réaliser des revues de code.
Plusieurs types :
- Téléchargez https://www.sonarqube.org/downloads/
- Suivez la documentation https://docs.sonarqube.org/latest/setup/get-started-2-minutes/
- Analysez cette application, utilisez git clone ou récupérez le zip sur https://github.com/EditionsENI/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 des solutions.
BDD
Vos systèmes de gestion de bases de données doivent idéalement gérer les droits et utilisateurs directement dans leurs propres systèmes. Ceci vous permettra de bien vérifier qui accède à quoi et surtout contrôler les accès de chaque utilisateur (ou pour chaque rôle).
L'accès physique au serveur de la base de données est également à sécuriser mais ce n'est pas l'objet de cette formation.
Utilisateur
Rôle(s)
Droits
Authentification
Autorisations
Identification des données sensibles :
C'est s'assurer de rendre une information confidentielle en la chiffrant, tout en s'assurant que seule la source de destination sera capable de décrypter le contenu sécurisé.
On va donc rendre une donnée illisible le temps du transport (quelque soit le protocole) et seul le destinataire possède la clé de décryptage pour rendre lisible la donnée envoyée.
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
Réalisez un script en php 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")
Cet environnement doit être sécurisé en permanence et aucune copie ne devrait être réalisée
Cet environnement doit avoir des données cohérentes par rapport à celles de production, mais ne doit pas en être une copie (Exemple carte de crédit). Et dans l'idéal rester sécurisé.
Environnement avec aucune sécurité !
Ne surtout pas utiliser de copie de la base de production sur cet environnement non sécurisé
Plusieurs outils permettent de surveiller en continue tout ce qu'il se passe sur votre base de données.
Ceci devrait être systématique pour chacun de vos projets ayant un besoin en sécurité élevé.
L'objectif est de :
Pour réaliser des opérations sécurisées sur vos APIs, il vous faut pouvoir authentifier et maintenir les sessions de vos utilisateurs. Le maintient de la session est à considérer comme temporaire.
On recharge la session régulièrement et surtout on recharge la session avant une opération critique !
(même si l'idéal est d'éviter qu'un utilisateur lambda puisse réaliser une opération critique sur votre API)
RGPD
Vérifier les entrées utilisateurs !
N'importe qui peut modifier le payload, c'est à vous de vous assurer de la cohérence des données qui vont pouvoir atteindre votre base.
Vérifier la présence d'une authentification
En étant en invité, l'utilisateur ne devrait uniquement que pouvoir créer un compte et lire les données accessibles aux visiteurs.
Encoder les données avant retour
Des données encodées sont des données qui, si elles peuvent être intercéptées, ne pourront pas être lues sans l'opération de décryptage.
Vos APIs doivent gérer les droits et utilisateurs également. Ceci vous permettra de bien vérifier qui accède à quoi et surtout contrôler les accès de chaque utilisateur (ou pour chaque rôle).
Le nombre d'appels maximum à votre API est également à contrôler.
L'utilisation de Framework est conseillée mais pas obligatoire. Ce dernier peut directement intégrer la gestion des droits. Prenons un exemple avec Directus.
Utilisateur
Rôle(s)
Droits
Authentification
Authorisations
Chaque sous domaine est divisé en 4 niveaux de maturité pour associer une "note" à votre application :
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/?tri_co=id_mot
Faites en le plus possible, pensez à trier par difficulté !
Vous pouvez aussi tenter les Web-Serveur Challenges.
Envoyer fichier security_theory.docx
(sans confondre…)
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)