mardi 18 septembre 2012
Durcissement de votre application Web contre Injections SQL
AVERTISSEMENT:
L'information fournie est au niveau éducatif seulement et ne doit pas être utilisé à des fins malveillantes
Avant de creuser ce qui s'est réellement injection SQL est, permettez-moi de vous expliquer ce qu'est SQL lui même.
Qu'est-ce que SQL?
Structured Query Language (SQL) est un langage de programmation spécialisé pour l'envoi de requêtes aux bases de données. Applications de bases de données les plus petites et d'industriel-force peut être consulté en utilisant des instructions SQL. SQL est à la fois ANSI et une norme ISO. Toutefois, les produits de base de données SQL de nombreux justificatifs faire avec des extensions propriétaires à la langue standard. Les applications Web peuvent utiliser fourni par l'utilisateur d'entrée pour créer des instructions SQL dynamiques pour les demandes de page Web.
Qu'est-ce que l'injection SQL?
L'injection SQL est une technique qui exploite une vulnérabilité de sécurité survenant dans la couche base de données d'une application web. La vulnérabilité est présente lorsque l'entrée utilisateur est soit mal filtrée pour les chaînes de caractères d'échappement littéral embarqués dans les instructions SQL ou l'entrée d'utilisateur n'est pas fortement typés et, partant, de façon inattendue exécuté. Il est en fait une instance d'une classe plus générale des vulnérabilités qui peuvent se produire lorsque l'un de programmation ou de langage de script est incorporé dans un autre.
"Injection SQL" est sous-ensemble de la vulnérabilité d'entrée utilisateur non vérifiées / unsanitized ("buffer overflows" sont un sous-ensemble différent), et l'idée est de convaincre l'application d'exécuter du code SQL qui n'a pas été prévu. Si la demande est la création de chaînes SQL naïvement à la volée, puis de les exécuter, il est simple de créer de vraies surprises.
Les serveurs Web de nombreux organismes a été compromise simplement parce que des injections SQL, y compris les grands noms que je ne voudrais pas de mentionner ici, vous pouvez le rechercher facilement sur Internet.
Qu'est-ce que aveugles Injection SQL?
Ce type d'attaque est appelée une attaque par injection SQL aveugle, parce que l'attaquant ne peut pas profiter de messages d'erreur détaillés à partir du serveur ou d'autres sources d'information sur l'application. Obtenir la syntaxe SQL est juste en général partie la plus délicate du processus d'injection SQL aveugle et peut exiger beaucoup d'essais et d'erreurs. Mais, en ajoutant plus de conditions à l'instruction SQL et l'évaluation de la production de l'application Web, un attaquant finira par déterminer si l'application est vulnérable à l'injection SQL.
Aveugles injection SQL un cas particulier qui joue sur les développeurs de sites Web ou propriétaires de sites Web sentiment de sécurité. Même si elles peuvent penser que tout sur le serveur est étroitement surveillé une attaque par injection SQL aveugle silencieusement jouer la vérité ou conséquences avec le serveur Web. Ce type d'attaque que beaucoup de temps est celle qui fournit le trou de sécurité les plus potentiellement dangereux. C'est parce que un attaquant obtient non seulement l'accès mais il est fourni avec une énorme quantité de connaissances sur la base de données et peuvent potentiellement accéder à un système de fichiers des serveurs. Ce type d'attaque est celui qui est automatisé et requiert bonne quantité de configuration pour réussir. Mais une fois qu'il est fait, il ne nécessite pas de beaucoup d'efforts à répéter.
Quel est le message d'erreur SQL Injection?
Applications Web utilisent souvent les requêtes SQL avec fourni par le client d'entrée dans la clause WHERE pour récupérer des données à partir d'une base de données. Quand une application Web exécute des requêtes telles sans valider ou de la numérisation des données fournies par l'utilisateur afin de s'assurer qu'elle n'est pas nocive, une attaque par injection SQL peut se produire. En envoyant des données inattendues, un attaquant peut générer et d'envoyer des requêtes SQL pour une base de données d'applications web. Un test de vulnérabilités d'injection SQL a lieu en envoyant les données de l'application qui génère une requête SQL non valide. Si le serveur renvoie un message d'erreur, que l'information peut être utilisée pour essayer de gagner un accès non contrôlé à la base de données. C'est la base de l'une des attaques les plus populaires par injection SQL.
Cacher les messages d'erreur ne s'arrête pas l'attaque par injection SQL. Qu'arrive-t-généralement est l'attaquant va utiliser les connaissances acquises à partir de l'échec de cette attaque de changer de tactique. Qu'est-ce qu'ils se tournent vers est aveugle par injection SQL.
Pourquoi injection SQL?
Quand une application web ne parvient pas à désinfecter convenablement fourni par l'utilisateur d'entrée, il est possible pour un attaquant de modifier la construction de backend SQL. Quand un attaquant est capable de modifier une instruction SQL, le processus s'exécute avec les mêmes autorisations que le composant qui a exécuté la commande. (Serveur de base de données exemple, serveur d'application Web, serveur Web, etc.) L'impact de cette attaque peut permettre à des attaquants de prendre le contrôle total de la base de données ou même d'exécuter des commandes sur le système.
Quand un ordinateur ne possède qu'un port 80 ouvert, votre scanner de vulnérabilité les plus de confiance ne peut pas retourner quelque chose d'utile, et vous savez que l'admin toujours patcher son serveur, c'est le point où hacker malveillant se tournent vers le piratage internet. L'injection SQL est un type de piratage Web qui nécessitent rien d'autre que le port 80 et il pourrait bien fonctionner, même si l'administrateur est patch-heureux. Il attaque sur l'application web (comme ASP, JSP, PHP, CGI, etc) lui-même plutôt que sur le serveur Web ou les services qui s'exécutent dans le système d'exploitation.
Types d'injections SQL:
Il existe quatre catégories principales de attaques par injection SQL contre la couche de bases de données dans des applications Web
1. Manipulation SQL: la manipulation est un processus de modification des instructions SQL à l'aide de diverses opérations telles que l'Union Une autre façon pour la mise en œuvre par injection SQL en utilisant la méthode de manipulation SQL est de changer la clause where de l'instruction SQL pour obtenir des résultats différents..
2. Injection de code: L'injection de code est un processus d'insertion de nouvelles instructions SQL ou des commandes de base de données dans l'instruction SQL vulnérables. L'une des attaques par injection de code est d'ajouter un serveur SQL Server commande EXECUTE à la déclaration vulnérables SQL. Ce type d'attaque n'est possible que lorsque plusieurs instructions SQL par la demande de base de données sont pris en charge.
3. Injection Function Call: Appel de fonction d'injection est fonction de processus d'insertion base de données divers appels dans une déclaration vulnérables SQL. Ces appels de fonction pourrait être d'effectuer des appels du système d'exploitation ou de manipuler des données dans la base de données.
4. Dépassement de tampon: débordement de tampon est causé par l'utilisation d'injection appel de fonction. Pour la plupart des bases de données commerciales et Open Source, les correctifs sont disponibles. Ce type d'attaque est possible lorsque le serveur est non patché
Techniques de prévention SQL injection:
Atténuation de la vulnérabilité d'injection SQL serait de prendre l'une des deux voies à savoir soit en utilisant des procédures stockées ainsi que les déclarations sujettes à appel ou à l'aide d'instructions préparées avec des commandes SQL dynamiques. Quelle que soit la façon dont est adoptée, la validation des données est indispensable.
une. La validation des entrées
Désinfection de données est la clé. Le meilleur moyen pour assainir les données consiste à utiliser par défaut, refus, expression régulière. Ecrire des filtres spécifiques. En ce qui concerne le nombre d'utilisation possible, les numéros et les lettres. Si il ya une nécessité d'inclure les signes de ponctuation de toute nature, les convertir en HTML de les coder. De sorte que "devenir" "" ou> devient ">" Par exemple, si l'utilisateur soumet l'adresse E-mail ne permettent que @, -,. Et _ en plus de chiffres et de lettres à être utilisés et seulement après ils ont été convertis à leurs substituts HTML
b. Utilisez de la déclaration préparée
Les déclarations préparées doivent être utilisées lorsque les procédures stockées ne peuvent pas être utilisés pour n'importe quelle raison et dynamiques des commandes SQL doivent être utilisés.
Utiliser une instruction préparée pour envoyer des instructions SQL précompilées avec un ou plusieurs paramètres. Les titulaires de placer des paramètres dans une déclaration préparée sont représentés par la? Et sont appelées variables de liaison. Déclaration préparée sont généralement à l'abri de attaques par injection SQL comme base de données utilise la valeur de la variable bind exclusivement et ne pas interpréter le contenu de la variable en aucune façon. PL / SQL et JDBC pour les requêtes préparées permettent. Déclarations préparées doivent être largement utilisés à la fois pour raisons de sécurité et de performance.
c. Utilisez le minimum de privilèges
Assurez-vous que l'utilisateur demande a des droits spécifiques au strict minimum sur le serveur de base de données. Si l'utilisateur de l'application sur la base de données utilise ROOT / SA / dbadmin / dbo sur la base de données puis, il doit certainement être reconsidérée si l'utilisateur a vraiment besoin de l'application tels grande quantité de privilèges ou peuvent-ils être réduits. Ne donnez pas l'autorisation de l'utilisateur d'accéder à l'application des procédures stockées système permettent d'accéder à celles qui sont créé par l'utilisateur.
d. Les procédures stockées
Pour sécuriser une application contre les injections SQL, les développeurs ne devons jamais permettre fournies par le client des données à modifier la syntaxe des instructions SQL. En fait, la meilleure protection est d'isoler l'application Web à partir de SQL tout à fait. Toutes les instructions SQL requises par l'application devrait être dans les procédures stockées et conservées sur le serveur de base de données. La demande doit exécuter les procédures stockées utilisant une interface sûre, comme les déclarations de JDBC ou remboursables CommandObject d'ADO.
Et beaucoup plus .......
Inscription à :
Publier les commentaires (Atom)
Aucun commentaire:
Enregistrer un commentaire