390k. Websites mit geöffnetem .git-Ordner

Im Juli beschloss der Sicherheitsforscher Vladimir Smitka, das Internet auf offene .git Ordner zu ĂŒberprĂŒfen, nachdem kĂŒrzlich ein Ă€hnliches Audit fĂŒr tschechische und slowakische Internetdomains durchgefĂŒhrt worden war.


Leck


Wie das Sprichwort sagt: "Es ist nie passiert, und hier ist es wieder." Ich möchte Sie daran erinnern, dass vor 9 Jahren genau das gleiche mit dem russischen Segment des Internets zu .svn das vom offenen .svn Syndrom betroffen war. Das Folgende sind die Ergebnisse der sorgfÀltigen Arbeit eines tschechischen Forschers, Werkzeuge und Methoden.


GrĂŒnde fĂŒr die SicherheitslĂŒcke


Ein Angreifer kann aus dem .git Verzeichnis viele wichtige Informationen fĂŒr die Sicherheit der Site .git . So sieht ein typischer Projektbaum aus.


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

Dort können Kennwörter und ZugriffsschlĂŒssel fĂŒr verschiedene APIs, Datenbanken und Cloud-Dienste gespeichert werden.


Wie es sein sollte, .git ein Versuch, den Ordner .git zu öffnen, hĂ€ufig einen HTTP 403-Fehler aus. Der Grund ist jedoch nur das Fehlen von index.html / index.php und die Rechte zum automatischen Indizieren des Ordners, solange einzelne Dateien noch verfĂŒgbar sind . Um sicherzustellen, dass die Site nicht anfĂ€llig ist, sollten Sie die Seite /.git/HEAD öffnen.


Diese Datei enthÀlt einen Link zum aktuellen Projektzweig.


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

Selbst wenn die automatische Indizierung von Verzeichnissen deaktiviert ist, können Sie den gesamten .git Ordner problemlos wiederherstellen, indem Sie einzelne Dateien herunterladen und AbhĂ€ngigkeiten vom Prozessor fĂŒr regulĂ€re AusdrĂŒcke ermitteln, da die .git Struktur klar definiert ist. Es gibt auch ein spezielles Tool - GitTools , das automatisch alle erforderlichen Aktionen ausfĂŒhrt .


Produktionsmittel


Trotz der KomplexitĂ€t und Ehrgeiz der Aufgabe waren die Kosten in Bezug auf Geld bescheiden. FĂŒr alles, fĂŒr alles, brauchte es 250 US-Dollar.


Server


Smithka mietete fĂŒr das Projekt 18 VPS und 4 physische Server. Ihm zufolge fiel seine Wahl nicht auf AWS, da die vollen Kosten des Dienstes unter BerĂŒcksichtigung des erwarteten gigantischen Verkehrsaufkommens, des erheblichen Speicherplatzes und der hohen CPU-Auslastung nicht einfach berechnet werden konnten. Der Preis fĂŒr gemietete VPS wurde im Voraus bekannt gegeben.


Liste der Domains


Die Liste basiert auf den Textprotokollen des OpenData Rapid7- Projekts im JSON .


DNS-Datenbankschema weiterleiten
 { "$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" } } } 

Nach einigen Filtern von TLDs und DomĂ€nen der zweiten Ebene hatte die Liste immer noch ĂŒber 230 Millionen EintrĂ€ge .


Als nÀchstes wurde die Datenbank in Blöcke von 2 Millionen DatensÀtzen aufgeteilt und die Last wurde unter Verwendung einer PHP-Anwendung auf verschiedene Server verteilt.


Software


Python hing an den asynchronen asynchronen Kommunikationsbibliotheken mit aiohttp als Arbeitstier . Ein Versuch, Requests und Urllib3 fĂŒr diese Zwecke zu verwenden, war erfolglos. Ersteres war möglicherweise geeignet, aber der Forscher verstand die ZeitĂŒberschreitungen in der Dokumentation nicht. Der zweite hat die Domain-Umleitung nicht bewĂ€ltigt und hat daher den Speicher auf den Servern ziemlich bald erschöpft.


Um die Plattform und das Profil anfĂ€lliger Websites zu identifizieren, verwendete Smitha das WAD- Dienstprogramm, das auf der Wappalyzer- Datenbank basiert - eine Erweiterung fĂŒr den Webbrowser, mit der Sie die auf der Seite verwendeten Technologien ermitteln können.


Einfache Befehlszeilenprogramme wie GNU Parallels wurden ebenfalls verwendet, um die AusfĂŒhrungszeit des Handlers zu beschleunigen und zu verhindern, dass das Skript aufgrund eines Einfrierens angehalten wird.


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

Ergebnisse


Der Scan dauerte 2 Wochen, als Ergebnis der Forscher:


  • entdeckte 390.000 gefĂ€hrdete Websites;
  • 290 Tausend E-Mail-Adressen gesammelt;
  • 90.000 EmpfĂ€nger ĂŒber die gefundene SicherheitsanfĂ€lligkeit informiert.

Als Antwort auf seine BemĂŒhungen erhielt Smithka:


  • 18 Tausend Fehler bei der NachrichtenĂŒbermittlung;
    • etwa 2000 Dankesbriefe;
    • 30 Fehlalarme mit Honeypot-Systemen;
    • 1 Drohung, die kanadische Polizei anzurufen;

Plattform


Die beliebteste Programmiersprache war PHP . Wenn Sie das Ergebnis jedoch auf den relativen Anteil eines bestimmten PL normalisieren, weicht PHP dem Vorsprung von Python und Node.js. Es ist jedoch nicht klar, wie zuverlÀssig solche Statistiken zur Bestimmung des Marktanteils einer bestimmten Programmiersprache sein können.


Apache steht ganz oben auf der Liste der Beliebtheit von Webservern, wobei Nginx an zweiter Stelle steht und der chinesische Klon Nginx Tengine plötzlich an dritter Stelle steht.


Das beliebteste Betriebssystem war Ubuntu , dann Debian und CentOS auf dem dritten Platz.


Betriebssystem


Die CMS-Nominierung stellte sich fast als Einzelschauspieler heraus, und dieser Schauspieler ist WordPress mit 85% aller gefundenen Plattformen.


Was kommt als nÀchstes?


Das Reparieren einer SicherheitsanfÀlligkeit ist einfach.


.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/de422725/


All Articles