390k. sites Web avec dossier .git ouvert

En juillet, le chercheur en sécurité Vladimir Smitka a décidé de vérifier sur Internet la présence de dossiers .git ouverts aprÚs qu'un audit similaire ait été récemment mené pour les domaines Internet en République tchÚque et en Slovaquie.


fuite


Comme le dit le proverbe: "cela ne s'est jamais produit, et le voici Ă  nouveau." Permettez-moi de vous rappeler, il y a 9 ans, exactement la mĂȘme histoire avec le segment russe d'Internet touchĂ© par le syndrome de .svn ouvert. Voici les rĂ©sultats du travail minutieux d'un chercheur tchĂšque, des outils et des mĂ©thodes.


Raisons de la vulnérabilité


Un attaquant peut extraire de nombreuses informations critiques pour la sécurité du site à partir du répertoire .git . Voici à quoi ressemble une arborescence de projet typique.


 ├── HEAD ├── branches ├── config ├── description ├── hooks │ ├── pre-commit.sample │ ├── pre-push.sample │ └── ... ├── info │ └── exclude ├── objects │ ├── info │ └── pack └── refs ├── heads └── tags 

Les mots de passe et les clĂ©s d'accĂšs Ă  diverses API, bases de donnĂ©es et services cloud peuvent y ĂȘtre stockĂ©s.


Souvent, comme prévu, une tentative d'ouverture du dossier .git génÚre une erreur HTTP 403, mais la raison est simplement le manque d' index.html / index.php et les droits d'indexation automatique du dossier, tandis que des fichiers individuels sont toujours disponibles . Afin de vous assurer que le site n'est pas vulnérable, vous devez ouvrir la page /.git/HEAD .


Ce fichier contient un lien vers la branche de projet actuelle.


 $ cat .git/HEAD ref: refs/heads/master 

MĂȘme si l'indexation automatique des rĂ©pertoires est dĂ©sactivĂ©e, vous pouvez facilement restaurer l'intĂ©gralitĂ© .git dossier .git en tĂ©lĂ©chargeant des fichiers individuels et en dĂ©terminant les dĂ©pendances par le processeur d'expressions rĂ©guliĂšres, car la structure .git est clairement dĂ©finie. Il existe Ă©galement un outil spĂ©cial - GitTools , qui effectue automatiquement toutes les actions nĂ©cessaires.


Moyens de production


Malgré la complexité et l'ambition de la tùche, les coûts en termes d'argent étaient modestes. Pour tout, pour tout, il a fallu 250 dollars américains.


Serveur


Smithka a louĂ© pour le projet 18 VPS et 4 serveurs physiques. Selon lui, son choix n'est pas tombĂ© sur AWS car le coĂ»t total du service, compte tenu des gigantesques volumes de trafic attendus, de l'espace disque important et des charges CPU Ă©levĂ©es, n'a pas pu ĂȘtre facilement calculĂ©. Le prix des VPS louĂ©s a Ă©tĂ© fixĂ© Ă  l'avance.


Liste des domaines


La liste est basée sur les journaux de texte du projet OpenData Rapid7 au JSON .


Transférer le schéma de la base de données DNS
 { "$id": "https://opendata.rapid7.com/sonar.fdns_v2/", "type": "object", "definitions": {}, "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "timestamp": { "$id": "/properties/timestamp", "type": "string", "description": "The time when this response was received in seconds since the epoch" }, "name": { "$id": "/properties/name", "type": "string", "description": "The record name" }, "type": { "$id": "/properties/type", "type": "string", "description": "The record type" }, "value": { "$id": "/properties/value", "type": "string", "description": "The response received for a record of the given name and type" } } } 

AprÚs un certain filtrage des TLD et des domaines de deuxiÚme niveau, la liste comptait encore plus de 230 millions d'entrées .


Ensuite, la base de données a été divisée en blocs de 2 millions d'enregistrements et la charge a été répartie sur différents serveurs à l'aide d'une application PHP.


Logiciels


Python était suspendu aux bibliothÚques de communication asyncio async avec aiohttp comme cheval de bataille . Une tentative d'utilisation de Requests et d' Urllib3 à ces fins a échoué, dont la premiÚre aurait bien pu convenir, mais le chercheur n'a pas compris les délais d'attente dans la documentation. Le second n'a pas géré la redirection de domaine, et pour cette raison, la mémoire des serveurs a été épuisée trÚs rapidement.


Pour identifier la plateforme et le profil des sites vulnérables, Smitha a utilisé l'utilitaire WAD , basé sur la base de données Wappalyzer , une extension pour le navigateur Web qui vous permet de déterminer les technologies utilisées sur la page.


Des utilitaires de ligne de commande simples comme GNU Parallels ont Ă©galement Ă©tĂ© utilisĂ©s pour accĂ©lĂ©rer le temps d'exĂ©cution du gestionnaire et empĂȘcher l'arrĂȘt du script en raison d'un blocage unique.


 cat sites.txt | parallel --bar --tmpdir ./wad --files wad -u {} -f csv 

Résultats


Le scan a duré 2 semaines, en conséquence, le chercheur:


  • dĂ©couvert 390 000 sites Web vulnĂ©rables;
  • 290 000 adresses e-mail collectĂ©es;
  • a informĂ© 90 000 destinataires de la vulnĂ©rabilitĂ© trouvĂ©e.

En réponse à ses efforts, Smithka a reçu:


  • 18 mille erreurs de livraison de messages;
    • environ 2000 lettres de remerciements;
    • 30 fausses alarmes avec des systĂšmes de pots de miel;
    • 1 menace d'appeler la police canadienne;

plate-forme


Le langage de programmation le plus populaire s'est avĂ©rĂ© ĂȘtre PHP . Cependant, si vous normalisez le rĂ©sultat Ă  la part relative d'un PL particulier, alors PHP cĂšde la place Ă  la tĂȘte de Python et Node.js. Cependant, la fiabilitĂ© de ces statistiques pour dĂ©terminer la part de marchĂ© d'un langage de programmation donnĂ© n'est pas claire.


Apache est en haut de la liste de la popularité des serveurs Web, avec Nginx à la deuxiÚme place et le clone chinois Nginx Tengine à la troisiÚme place.


L'OS le plus populaire était Ubuntu , puis Debian et CentOS en troisiÚme place.


OS


La nomination CMS s'est presque rĂ©vĂ©lĂ©e ĂȘtre un théùtre Ă  acteur unique, et cet acteur est WordPress avec 85% de toutes les plateformes trouvĂ©es.


Et ensuite


Réparer une vulnérabilité est facile.


.htaccess


 RewriteRule "(^|/)\.(?!well-known\/)" - [F] 

.nginx


 location ~ /\.(?!well-known\/) { deny all; } 

apache22.conf


 <Directory ~ "/\.(?!well-known\/)"> Order deny,allow Deny from all </Directory> 

apache24.conf


 <Directory ~ "/\.(?!well-known\/)"> Require all denied </Directory> 

Caddyfile


 status 403 /blockdot rewrite { r /\.(?!well-known\/) to /blockdot } 

Source: https://habr.com/ru/post/fr422725/


All Articles