samedi 24 novembre 2012

Durcissement de votre application Web contre les injections SQL


MISE EN GARDE:

Les informations communiquées sont destinées à des fins plan é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 elle-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 base de la plupart des petites et industriel-force peut être consulté à l'aide d'instructions SQL. SQL est à la fois un ANSI et une norme ISO. Cependant, de nombreux produits de base de données SQL supportant le faire avec des extensions propriétaires à la langue standard. Les applications Web peuvent utiliser l'entrée fournie par l'utilisateur 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 faille 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 littérales d'échappement intégrées dans les requêtes SQL ou entrée utilisateur n'est pas fortement typés et donc de manière 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 langage de programmation ou scripting est incorporé dans un autre.

"Injection SQL" est sous-ensemble de la vulnérabilité d'entrée utilisateur non vérifiées / unsanitized ("buffer overflow" sont un sous-ensemble différent), et l'idée est de convaincre l'application d'exécuter du code SQL qui n'était pas 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.

Plusieurs serveurs web d'organisation a été compromise juste parce que des injections SQL, y compris de grands noms dont je ne voudrais pas parler ici, vous pouvez rechercher facilement sur Internet.

Quelle est aveugle injection SQL?

Ce type d'attaque est appelé une attaque par injection SQL aveugle, parce que l'attaquant ne peut pas profiter des messages d'erreur détaillés à partir du serveur ou d'autres sources d'information sur l'application. Obtenir la syntaxe SQL est juste généralement partie la plus délicate du processus d'injection SQL aveugle et peut exiger beaucoup d'essais et d'erreurs. Mais, en ajoutant d'autres 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.

Aveugle injection SQL un cas particulier qui joue sur les développeurs de sites Web ou des 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 Truth or Consequences avec le serveur Web. Ce type d'attaque que beaucoup de temps est celle qui fournit le trou de sécurité les plus potentiellement dommageable. En effet, 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 ne nécessite bonne quantité de configuration pour réussir. Mais une fois qu'il est fait, il ne nécessite pas beaucoup d'effort pour répéter.

Quel est le message d'erreur SQL Injection?

Les applications Web utilisent couramment des requêtes SQL avec fournie par le client d'entrée dans la clause WHERE pour récupérer des données d'une base. Lorsqu'une application Web exécute des requêtes telles ou sans valider 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 soumettre des requêtes SQL à une base de données d'applications web. Un test de vulnérabilités d'injection SQL se fait par l'envoi des données d'application qui génère une requête SQL non valide. Si le serveur renvoie un message d'erreur, cette information peut être utilisée pour tenter d'obtenir un accès non contrôlé à la base de données. C'est la base de l'une des attaques les plus populaires injection SQL.

Masquage des messages d'erreur ne s'arrête pas l'attaque par injection SQL. Qu'est-ce qui se passe généralement est que 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 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 back-end 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, le serveur d'applications Web, serveur Web, etc.) L'impact de cette attaque peut permettre à un attaquant 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é plus grand 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 hacking web. 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) plutôt que sur le serveur Web ou les services en cours d'exécution dans le système d'exploitation.

Types des injections SQL:

Il existe quatre grandes catégories de contre attaques par injection SQL couche de bases de données dans des applications Web

1. Manipulation SQL: la manipulation est train de modifier les instructions SQL en utilisant diverses opérations telles que UNION Une autre façon de mettre en œuvre l'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érable. L'une des attaques par injection de code est d'ajouter un serveur de commande SQL EXECUTER vulnérables à la déclaration SQL. Ce type d'attaque n'est possible que lorsque plusieurs instructions SQL par requête de base de données sont pris en charge.

3. Injection Function Call: Appel de fonction d'injection est fonction de processus d'insertion de base de données différents appels dans une déclaration vulnérables SQL. Ces appels de fonction peuvent être des appels du système d'exploitation ou de manipuler des données dans la base de données.

4. Dépassement de capacité: 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 patchs sont disponibles. Ce type d'attaque est possible lorsque le serveur est non patché

Techniques de prévention SQL injection:

L'atténuation de la vulnérabilité d'injection SQL est nécessaire de prendre l'un des deux chemins dire soit en utilisant des procédures stockées avec les états remboursables ou en utilisant les requêtes préparées avec des commandes SQL dynamiques. Quelle que soit la façon dont on a adopté la validation des données est indispensable.

a. La validation des entrées

Désinfection de données est la clé. Le meilleur moyen d'assainir les données est d'utiliser refus par défaut, expression régulière. Écrire des filtres spécifiques. En ce qui concerne l'utilisation des nombres possibles, des chiffres et des lettres. Si il ya une nécessité d'inclure des 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 à utiliser et seulement après qu'ils ont été convertis à leurs substituts HTML

b. Utilisation d'instruction préparée

Les instructions 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 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. Détenteurs de paramètre dans une requête préparée sont représentés par l'? Et sont appelées des variables liées. Instruction préparée sont généralement immunisés contre les 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 permettent de déclarations préparées. Les instructions préparées doivent être largement utilisées à la fois pour raisons de sécurité et de performance.

c. Utilisez les privilèges minimum

Assurez-vous que l'utilisateur dispose des droits spécifiques d'application 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 demande vraiment besoin de ce montant élevé 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 à ceux qui sont créés 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 de données pour 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 à l'aide d'une interface sécurisée, comme les états rachetables de JDBC ou CommandObject d'ADO.

Et bien d'autres .......

Aucun commentaire:

Enregistrer un commentaire