Bericht über die Kompromittierung des Git-Repositories und der Benutzerdatenbank des PHP-Projekts

Die ersten Ergebnisse der Untersuchung des Vorfalls, der mit der Entdeckung zweier bösartiger Commits mit einem Backdoor im Git-Repository des PHP-Projekts verbunden ist, wurden veröffentlicht. Bei der Analyse der Spuren der Angreifer wurde festgestellt, dass der Server git.php.net, auf dem das Git-Repository gehostet wurde, nicht gehackt wurde, jedoch die Datenbank mit den Konten der Entwickler des Projekts kompromittiert wurde.

Es wird nicht ausgeschlossen, dass die Angreifer in der Lage waren, die Benutzerdatenbank, die in der Datenbank des Servers master.php.net gespeichert war, herunterzuladen. Der Inhalt von master.php.net wurde bereits auf den neuen Server main.php.net übertragen, der von Grund auf neu eingerichtet wurde. Alle Passwörter der Entwickler, die für den Zugang zur Infrastruktur von php.net verwendet wurden, wurden zurückgesetzt, und der Prozess zur Änderung dieser Passwörter wurde über ein spezielles Formular zur Passwortwiederherstellung initiiert. Die Repositories git.php.net und svn.php.net bleiben im Nur-Lese-Modus verfügbar (die Entwicklung wurde auf GitHub verlegt).

Nach der Entdeckung des ersten bösartigen Commits, der über das Konto von Rasmus Lerdorf, dem Gründer von PHP, gemacht wurde, wurde die Vermutung geäußert, dass sein Konto gehackt wurde und Nikita Popov, einer der Hauptentwickler von PHP, die Änderungen zurückgesetzt und die Commits für das problematische Konto blockiert hat. Nach einiger Zeit wurde jedoch klar, dass die Blockade keinen Sinn machte, da ohne die Verifizierung der Commits durch digitale Signatur jeder Teilnehmer mit Zugang zum Repository php-src Änderungen vornehmen konnte, indem er einen fiktiven Namen des Autors verwendete.

Anschließend sendeten die Angreifer einen bösartigen Commit im Namen von Nikita selbst. Durch die Analyse der Protokolle des Dienstes gitolite, der für den Zugriff auf die Repositories verwendet wird, wurde versucht zu ermitteln, welcher Teilnehmer tatsächlich die Änderungen vorgenommen hat. Trotz der Aktivierung der Protokollierung aller Commits gab es für die beiden bösartigen Änderungen keine Einträge im Protokoll. Es wurde klar, dass eine Kompromittierung der Infrastruktur stattgefunden hatte, da die Commits direkt, unter Umgehung der Verbindung über gitolite, hinzugefügt wurden.

Der Server git.php.net wurde sofort abgeschaltet und das ursprüngliche Repository auf GitHub migriert. In der Eile wurde übersehen, dass es neben SSH mit der Verwendung von gitolite noch einen anderen Zugang gab, der das Senden von Commits über HTTPS ermöglichte. In diesem Fall wurde das Backend git-http-backend für die Interaktion mit Git genutzt, und die Authentifizierung erfolgte über den HTTP-Server Apache2, der die Berechtigungen durch einen Zugriff auf die in der Datenbank gespeicherten Informationen überprüfte. Server Der Zugriff war nicht nur über Schlüssel, sondern auch über ein normales Passwort möglich. Die Analyse der Logs des HTTP-Servers bestätigte, dass die schädlichen Änderungen über HTTPS hinzugefügt wurden.

Bei der Analyse der Logs wurde festgestellt, dass die Angreifer nicht beim ersten Versuch verbunden waren, sondern zunächst versuchten, den Benutzernamen zu erraten. Nachdem sie den Namen herausgefunden hatten, konnten sie sich beim ersten Versuch anmelden, d.h. sie kannten im Voraus die Passwörter von Rasmus und Nikita, wussten aber nicht ihre Benutzernamen. Wenn die Angreifer Zugriff auf die Datenbank erhielten, bleibt unklar, warum sie sofort nicht den dort angegebenen korrekten Benutzernamen verwendet haben. Diese Inkonsistenz hat bisher keine verlässliche Erklärung gefunden. Der Hack von master.php.net wird als das wahrscheinlichste Szenario betrachtet, da auf diesem Server sehr alter Code und ein veraltetes Betriebssystem verwendet wurde, die schon lange nicht mehr aktualisiert wurden und unbehobene Schwachstellen aufwiesen.

Zu den ergriffenen Maßnahmen gehört die Neuinstallation der Serverumgebung von master.php.net und die Übertragung der Skripte auf die neue PHP-Version 8. Der Code zur Arbeit mit der Datenbank wurde so umgestaltet, dass parametrische Abfragen verwendet werden, die die Einspeisung von SQL-Code erschweren. Zum Speichern von Passwort-Hashes in der Datenbank wurde der Algorithmus bcrypt verwendet (früher wurden Passwörter mit dem unsicheren MD5-Hash gespeichert). Die bestehenden Passwörter wurden zurückgesetzt und es wurde angeboten, ein neues Passwort über das Passwort-Wiederherstellungsformular festzulegen. Da der Zugriff auf die Repositories git.php.net und svn.php.net über HTTPS an MD5-Hashes gebunden war, wurde beschlossen, git.php.net und svn.php.net im Nur-Lese-Modus zu belassen und alle verbleibenden PECL-Erweiterungsrepositories auf GitHub zu übertragen, ähnlich wie das Hauptrepository von PHP.

Quelle: opennet.ru

60GB SSD 8Gb DDR4