Requêtes HTTP et modules Apache: Vecteurs d’attaque créatifs

Question légèrement peu orthodoxe ici:

J’essaie actuellement de casser un Apache avec une poignée de modules personnalisés.

Ce qui a donné naissance aux tests est qu’Apache transfère en interne les requêtes jugées trop volumineuses (par exemple, une corbeille de 1 Mo) vers les modules connectés, les forçant à gérer les données inutiles et le manque de manipulation des modules personnalisés. monter en flammes. Aïe, aïe, aïe.

Heureusement, ce problème particulier a été résolu, mais la question se pose de savoir s’il existe ou non d’autres vulnérabilités similaires.

En ce moment, j’ai un outil à ma disposition qui me permet d’envoyer une requête HTTP brute au serveur (ou plutôt des données brutes via une connexion TCP établie qui pourrait être interprétée comme une requête HTTP si elle en suivait une, par exemple “GET … “) et j’essaie de trouver d’autres idées. (Les attaques de niveau TCP comme Slowloris et Nkiller2 ne sont pas mon objective pour le moment.)

Quelqu’un at-il quelques idées intéressantes sur la façon de confondre les modules personnalisés du serveur avec l’auto-immolation des serveurs?

  • UTF-8 cassé? (Bien que je doute qu’Apache se soucie de l’encodage – j’imagine que ça ne fait que jongler avec les octets bruts.)
  • Des trucs à peine trop longs, suivis d’un 0 octet, suivi d’un courrier indésirable?
  • etc

Je ne me considère pas comme un très bon testeur (je le fais par nécessité et par manque de main-d’œuvre; je n’ai malheureusement même pas une compréhension plus simple des internes d’Apache qui m’aiderait), c’est pourquoi je J’espère une réponse perspicace ou deux ou trois. Peut-être certains d’entre vous ont-ils effectué des tests similaires pour vos propres projets?

(Si stackoverflow n’est pas le bon endroit pour cette question, je m’excuse. Je ne sais pas où le mettre.)

Selon les autres modules que vous avez connectés, et quels autres éléments les activent (ou s’agit-il uniquement de requêtes trop volumineuses?), Vous pouvez essayer certaines des solutions suivantes:

  • Mauvais encodages – par exemple, utf-8 comme vous l’avez mentionné, il existe des scénarios où les modules dépendent de cela, par exemple certains parameters.
  • manipulation des parameters – encore une fois, en fonction de ce que font les modules, certains parameters peuvent les perturber, soit en modifiant les valeurs, en supprimant les parameters attendus, soit en ajoutant des parameters inattendus.
  • Contrairement à votre autre suggestion, je regarderais des données qui sont juste assez courtes , à savoir un ou deux octets plus courts que le maximum, mais dans des combinaisons différentes – parameters, en-têtes, corps de requête, etc.
  • Rechercher dans la contrebande de requêtes HTTP (également ici et ici ) – des en-têtes de requête incorrects ou des combinaisons non valides, telles que des terminateurs de contenu multiples ou non valides, peuvent induire le module en erreur.
  • Considérons également gzip, le codage par blocs, etc. Il est probable que le module personnalisé implémente le contrôle de longueur et le décodage, dans le désordre.
  • Qu’en est-il de la demande partielle? Par exemple, les demandes provoquant une réponse 100-Continue ou les demandes de plage?
  • L’outil de fuzzing, Peach , recommandé par @TheRook, est également une bonne direction, mais ne vous attendez pas à un retour sur investissement optimal la première fois.
  • Si vous avez access au code source, une révision du code de sécurité ciblée est une excellente idée. Ou même un scan de code automatisé, avec un outil comme Coverity (comme @TheRook mentionné), ou un meilleur outil …
  • Même si vous n’avez pas access au code source, envisagez un test de pénétration de sécurité, soit par un consultant / pentester expérimenté, soit au moins avec un outil automatisé (par exemple, appscan, webinspect, netsparker, acunetix, etc.). .

Apache est l’un des projets logiciels les plus rigoureux de la planète. Trouver une vulnérabilité dans HTTPD d’Apache ne serait pas une mince affaire et je vous recommande de vous faire les dents sur des proies plus faciles. Par comparaison, il est plus courant de voir des vulnérabilités dans d’autres HTTPD tels que celui-ci dans Nginx que j’ai vu aujourd’hui (pas de blague). Il y a eu d’autres vulnérabilités de divulgation de code source qui sont très similaires, je regarderais ceci et en voici une autre . lhttpd a été abandonné sur sf.net pendant presque une décennie et il existe des débordements de tampons connus qui l’affectent, ce qui en fait une application amusante à tester.

Lorsque vous attaquez un projet, vous devez examiner quel type de vulnérabilités ont été détectées par le passé. Il est probable que les programmeurs commettront les mêmes erreurs encore et encore et souvent, des modèles apparaissent. En suivant ces modèles, vous pouvez trouver plus de défauts. Vous devriez essayer de rechercher des bases de données de vulnérabilités telles que la recherche de Cist par Nist . Une chose que vous verrez est que les modules Apache sont le plus souvent compromis.

Un projet comme Apache a été lourdement fuzzé. Il existe des frameworks de fuzzing tels que Peach . Peach vous aide à créer des problèmes de plusieurs manières, notamment en vous fournissant des données de test désagréables. Fuzzing n’est pas une très bonne approche pour les projets matures. Si vous optez pour cette voie, je ciblerais les modules Apache avec le moins de téléchargements possible. (Les projets d’avertissement avec des téléchargements très faibles peuvent être endommagés ou difficiles à installer.)

Lorsqu’une entreprise s’inquiète de la sécurité, elle paie souvent beaucoup d’argent pour un outil d’parsing automatisé de sources tel que Coverity. Le Department Of Homeland Security a donné à Coverity une tonne d’argent pour tester des projets open source et Apache en est un . Je peux vous dire de première main que j’ai trouvé un débordement de tampon avec fuzzing que Coverity n’a pas détecté. La couverture et d’autres outils d’parsing du code source, tels que les Rats open source , génèrent beaucoup de faux positifs et de faux négatifs, mais ils aident à réduire les problèmes qui affectent une base de code.

(Lorsque j’ai lancé RATS pour la première fois sur le kernel Linux, j’ai failli tomber en panne parce que mon écran répertoriait des milliers d’appels à strcpy () et strcat (), mais lorsque je travaillais avec du texte statique, ce qui est sûr.)

La recherche de vulnérabilités dans un développement d’exploitation est très amusante . Je recommande d’exploiter les applications PHP / MySQL et d’explorer The Whitebox . Ce projet est important car il montre que certaines vulnérabilités réelles ne peuvent être trouvées que si vous lisez manuellement le code ligne par ligne. Il a également des applications réelles (un blog et une boutique) très vulnérables aux attaques. En fait, ces deux applications ont été abandonnées en raison de problèmes de sécurité. Un fuzzer d’applications Web comme Wapiti ou acuentix violera ces applications et d’autres. Il y a un truc avec le blog. Une nouvelle installation n’est pas vulnérable à beaucoup. Vous devez utiliser l’application un peu, essayez de vous connecter en tant qu’administrateur, créez une entrée de blog et parsingz-la. Lorsque vous testez une application d’application Web pour une injection SQL, assurez-vous que le rapport d’erreur est activé. Dans php, vous pouvez définir display_errors=On dans votre php.ini.

Bonne chance!