La méthode OWASP

Comment se tenir à jour ?

Prévenir plutôt que guérir… Quelques sites à surveiller :

Important

Vous êtes la première ligne d’informations !

Les impacts liés à la sécurité

La sécurité informatique dans une application c’est un « équilibre »

  • Impact fonctionnel
  • Limitation de l’expérience utilisateur (UX)
  • Impact financier

Les types de failles

  • L’humain (Social Engineering)
  • D'accès (physique)
  • Applicatif (Hack)
  • L’argent (jusqu’à quel montant une personne donne l’information ?)

Le Social Engineering

Les gens sont souvent trop confiants. Il faut donc les former régulièrement à la sécurité.

Deux exemples en vidéo :

ExpositionRandom
Exemple SECTF à la DefConopen in new windowCall Recreation (@5min, @11min30)open in new window

Intégrer la sécurité à toutes les étapes

La sécurité c’est un état d’esprit à intégrer.

C’est votre métier

Assurer la qualité

S'assurer d'une qualité continue du code avec :

  • Des règles à connaitre (OWASP).
  • Des tests unitaires.
  • Une analyse automatique du code (SonarQube).

Open Web Application Security Project (OWASP)

Open Web Application Security Project (OWASP) est une communauté en ligne travaillant sur la sécurité des applications Web. Sa philosophie est d'être à la fois libre et ouverte à tous. Elle a pour vocation de publier des recommandations de sécurisation Web et de proposer aux internautes, administrateurs et entreprises des méthodes et outils de référence permettant de contrôler le niveau de sécurisation de ses applications Web.

Source: Wikipedia

Site de Owaspopen in new window

OWASP liste 10 grandes catégories de failles à connaitre :

A1 - Injection

Injection SQL, Shell...

Souvent la plus connue et la plus rencontrée :

SELECT * FROM client WHERE id='" . $_GET["id"] . "'
http://exemple.com/liste?id='or '1'='1

C'est la base de la sécurité

Vous trouverez cette exemple un peu partout. C'est le mauvais exemple en termes de sécurité !

Au passage, si vous écrivez :

$id = $_GET['id'];
$maRequete = "SELECT * FROM client WHERE id='{$id}'"

⚠️ C'est aussi une faille, celle-ci est identique à la précédente.

A2 - Violation de Gestion d’Authentification et de Session

Risque de casser / usurper une authentification ou une session. Comprends notamment le vol de session ou la récupération de mots de passe.

Une session en paramètre GET == ⚠️. Si vous partagez le lien, n'importe qui pourra obtenir votre accès !

http://exemple.com/?jsessionid=A2938298D293

A3 - Cross-Site Scripting (XSS)

Risque d'injection de contenu dans une page pour but de provoquer des actions non désirées dans celle-ci.

Les failles XSS sont particulièrement répandues parmi les failles de sécurités Web.

Exécution de code JavaScript sans validation. Le risque ici est qu'il est possible de changer le comportement initialement attendu pour en détourner le sens.

Votre Nom : <input type="text" name="nom" value="" />
alert("Bonjour " + $_POST["nom"]);

A4 - Références directes non sécurisées à un objet

Accès à de la donnée en spécifiant un id directement par un paramètre non filtré.

C'est également quelque chose de très courant. Si vous attendez en paramètre un mode / un id, veillez à toujours contrôler si la ressource chargée correspond aux droits de l'utilisateur.

Si je change client par … admin ?

http://exemple.com/liste?mode=client
SELECT * FROM client where mode=?
$stmt->bindParam(1, $mode);

Requête préparée

Vous noterez ici que nous avons une requête « préparé » ça n'empêche pas le danger…

A5 - Mauvaise configuration Sécurité

Corresponds aux failles de configuration liées aux serveurs Web, applications, base de données ou frameworks.

  • Console d’administration disponible sans authentification en ligne.
  • Listage des répertoires (Exempleopen in new window)
  • Exemples de code non supprimés.
  • Application en debug.

A6 - Exposition de données sensibles

Exposition de données sensibles comme les mots de passe, les numéros de carte de paiement ou encore les données personnelles et la nécessité de chiffrer ces données.

  • Espace client sans SSL.
  • Mot de passe en claire (ou en MD5) dans la base de données.
  • Sauvegarde de données inutiles.

A7 - Manque de contrôle d’accès au niveau fonctionnel

Failles liées aux contrôles d'accès de fonctionnalité.

  • Page d’admin accessible avec un compte utilisateur.
  • Mode non filtré (similaire à l’exemple mode={client,admin}).

A8 - Falsification de requête intersite (CSRF)

Failles liées à l’exécution de requêtes à l’insu de l’utilisateur.

  • Rejeu de requête déjà joué.

Comment le bloquer ?

Ajouter un identifiant/jeton dans la requête, unique et non réutilisable. Intégré de base dans Laravel.

A9 - Utilisation de composants avec des vulnérabilités connues

Failles liées à l’utilisation de composants tiers vulnérables.

  • CMS non à jour
  • Apache / Tomcat non patchés
  • Librairies XYZ non à jour

A10 - Redirections et Renvois Non Validés

Les redirections et les renvois non validés sont une vulnérabilité profitant d’une faiblesse dans le code et dont l’objectif est de rediriger l’utilisateur sur une page malveillante

  • Utilisation de votre site comme « masque » dans du phishing

Exemple :

http://www.shop-vdt.com/login.php?goto=evil.com/login

Mais, une faille c’est quoi ?

L'idée d'OWASP, c'est de former pour comprendre les failles afin de ne plus les produire involontairement… Et surtout avec OWASP on parle de vulnérabilité, et non de risque.

Les outils OWASP

Synthèse OWASP