| « De retour pour l'offuscation | Présentation » |
Avant d'attaquer un projet nécessitant un haut niveau de sécurité applicative, j'avais comme beaucoup d'entre nous des connaissances plus ou moins avancées sur la sécurité applicative.
Cela m'a obligé à reprendre mes livres. Alors histoire de joindre l'utile à l'agréable, j'en profite pour préparer ma certification .
Comme je l'ai indiqué dans mon précédent article, voici un résumé des différents types d'attaques existants.
A. Attaque par débordement de buffer (Buffer Overflow)
Aussi connu comme « buffer overrun », le débordement de buffer est avéré lorsqu’une application tente de stocker plus de données dans un buffer que la mémoire allouée à ce dernier ne le permet. Le plus courant est le débordement de pile (stack overflow)
Le code suivant démontre ce type d’attaque en C :
main (int argc, char* argv[])
{
sub(argv[1]) ;
}
void sub(const char* input)
{
char buf[10];
strcpy(buf, input);
}
Lors de l’utilisation normale, tout se passe comme prévu : les données sont stockées dans la pile et récupérées en temps utile.
Par contre si on tente de passer plus de 10 caractères en entrée, sans contrôle supplémentaire, une partie des données contenues dans la pile va se retrouver écrasé par ce qui pourrait très bien être, dans le cas d’une attaque, du code « malveillant ». Ce dernier disposera des mêmes droits que l’application originale.
B. Attaque par erreur de parsing (Parsing Error)
Ce type d’erreur incluant les erreurs de canonisation, vulnérabilité CSS et vulnérabilité d’injection SQL est possible lorsqu’une application ne parvient pas à vérifier correctement les données saisies par l’utilisateur pouvant contenir du code « malveillant »
Erreur de canonisation (Canonicalization error)
Il s’agit d’une vulnérabilité autorisant à parser un nom de fichier avant que le système d’opération n’ait eu le temps de la canoniser.
Par exemple si une application bloque certains fichiers en téléchargement, il est possible d’essayer de forcer le filtre en utilisant des noms synonymes. Par exemple les noms suivants sont synonymes :
- NePasToucher.txt
- NePasT~1.txt
- NePasToucher.txt.
- NePasToucher.txt ::$DATA
Autre exemple dans le cas d’une requête web « GET /docs/index.htm ». Pourquoi ne pas essayer « GET /../../boot.ini ». La plupart des serveurs empêche les attaques les plus courantes de ce type.
Erreur dite Cross-Site Scripting
Il s’agit d’une erreur de parsing permettant à un utilisateur malveillant d’utiliser une zone de saisie afin d’afficher du code potentiellement dangereux pour les autres utilisateurs. Par exemple dans le cas d’un blog ou d’un guestbook on pourrait saisir :
Hi, great page ! <img src= ”attacker.site.com/counter.aspx » width=1 height=1”/> On peut même faire plus performant !
Erreur dite SQL Injection
Il s’agit d’une erreur de parsing permettant à un utilisateur malveillant d’utiliser une zone de saisie utilisée pour créer une requête SQL afin d’y insérer des commandes supplémentaires. Par exemple :
String requete = “Select HasShipped From orders Where ID=’” + Id + “’”;
Si “Id” est récupéré par l’intermédiaire d’un TextBox, si l’utilisateur renter “12345” tout va bien, mais que se passe t’il s’il rentre “12345’ drop table customers – “ ?
Dans le cas de droits permettant l’écriture, ce code va tout simplement supprimer la table concernée.
C. Attaque par déni de service (Denial-Of-Service)
Une attaque de type DoS empêche les utilisateurs légitimes d’accéder à un service réseau. Afin d’éviter à une application d’être trop vulnérable, il est par exemple indispensable, dans le cas d’une allocation mémoire par utilisateur, de ne pas allouer cette dite mémoire avant d’être sur de l’identité de l’utilisateur.
D. Attaque par « craquage » cryptographique
Il s’agit d’intercepter du contenu encrypté et d’essayer de le décrypter. Il s’agit de la méthode utilisée lorsque toutes les autres attaques ont échouées. Le décryptage peut prendre des années voir des milliers, donc l’attaquant compte plutôt sur la négligence du développeur qui a, par exemple, stocké la clé privé dans un emplacement insuffisamment protégé.
E. Attaque dite « Man-In-The-Middle »
Il s’agit d’une attaque sophistiquée dans laquelle un attaquant « simule » le serveur pour intercepter les requêtes d’un client légitime et ensuite se fait passer pour ce client auprès du serveur. Seul une application n’ayant ni authentification, ni encryptage des données peut subir ce type d’attaque.
F. Attaque par « craquage » du mot de passe
Il s’agit de découvrir un mot de passe en effectuant une multitude de tentatives. Les deux approches utilisées sont : brute et dictionnaire