Bericht über die Kompromittierung des Git-Repositorys und der Benutzerbasis des PHP-Projekts

Die ersten Ergebnisse der Analyse eines Vorfalls im Zusammenhang mit der Identifizierung zweier bösartiger Commits im Git-Repository eines PHP-Projekts mit aktivierter Hintertür beim Senden einer Anfrage mit einem speziell gestalteten User Agent-Header wurden veröffentlicht. Bei der Untersuchung der Spuren der Aktivitäten der Angreifer kam man zu dem Schluss, dass der Server git.php.net selbst, auf dem sich das Git-Repository befand, nicht gehackt wurde, sondern die Datenbank mit den Konten der Projektentwickler kompromittiert wurde .

Möglicherweise konnten die Angreifer die im DBMS gespeicherte Benutzerdatenbank auf den Server master.php.net herunterladen. Die Inhalte von master.php.net wurden bereits auf den neuen, von Grund auf installierten main.php.net-Server migriert. Alle Entwicklerkennwörter, die für den Zugriff auf die php.net-Infrastruktur verwendet wurden, wurden zurückgesetzt und der Prozess ihrer Änderung wurde über ein spezielles Kennwortwiederherstellungsformular eingeleitet. Die Repositorys git.php.net und svn.php.net bleiben schreibgeschützt (die Entwicklung wurde auf GitHub verlagert).

Nachdem der erste böswillige Commit über das Konto von Rasmus Lerdorf, dem Gründer von PHP, entdeckt wurde, ging man davon aus, dass sein Konto gehackt worden war und Nikita Popov, einer der wichtigsten PHP-Entwickler, die Änderungen rückgängig machte und die Commit-Rechte blockierte das problematische Konto. Nach einiger Zeit wurde klar, dass die Sperrung keinen Sinn ergab, da jeder Teilnehmer mit Zugriff auf das php-src-Repository ohne Überprüfung von Commits mithilfe einer digitalen Signatur eine Änderung vornehmen konnte, indem er einen fiktiven Autorennamen ersetzte.

Als nächstes schickten die Angreifer im Namen von Nikita selbst einen böswilligen Commit. Durch die Analyse der Protokolle des Gitolite-Dienstes, der zur Organisation des Zugriffs auf Repositories verwendet wird, wurde versucht, den Teilnehmer zu ermitteln, der die Änderungen tatsächlich vorgenommen hat. Trotz der Einbeziehung der Abrechnung aller Commits gab es für zwei böswillige Änderungen keine Einträge im Protokoll. Es stellte sich heraus, dass eine Kompromittierung der Infrastruktur vorlag, da Commits direkt hinzugefügt wurden und die Verbindung über Gitolite umgangen wurde.

Der git.php.net-Server wurde umgehend deaktiviert und das primäre Repository an GitHub übertragen. Schnell wurde vergessen, dass es für den Zugriff auf das Repository neben SSH mit Gitolite noch einen weiteren Eingang gab, der es ermöglichte, Commits über HTTPS zu senden. In diesem Fall wurde das git-http-backend für die Interaktion mit Git verwendet, und die Authentifizierung erfolgte mithilfe des Apache2-HTTP-Servers, der die Anmeldeinformationen durch Zugriff auf die im DBMS auf dem master.php.net-Server gehostete Datenbank überprüfte. Die Anmeldung war nicht nur mit Schlüsseln, sondern auch mit einem regulären Passwort möglich. Die Analyse der HTTP-Serverprotokolle bestätigte, dass böswillige Änderungen über HTTPS hinzugefügt wurden.

Bei der Untersuchung der Protokolle stellte sich heraus, dass die Angreifer nicht beim ersten Mal eine Verbindung herstellten, sondern zunächst versuchten, den Kontonamen zu finden. Nachdem sie ihn jedoch identifiziert hatten, meldeten sie sich beim ersten Versuch an, d. h. Sie kannten die Passwörter von Rasmus und Nikita im Voraus, kannten jedoch nicht ihre Login-Daten. Konnten die Angreifer Zugriff auf das DBMS erlangen, ist unklar, warum sie nicht sofort den dort angegebenen korrekten Login nutzten. Für diese Diskrepanz gibt es noch keine verlässliche Erklärung. Der Hack von master.php.net gilt als wahrscheinlichstes Szenario, da dieser Server sehr alten Code und ein veraltetes Betriebssystem verwendete, das lange Zeit nicht aktualisiert wurde und ungepatchte Schwachstellen aufwies.

Zu den ergriffenen Maßnahmen gehören die Neuinstallation der Serverumgebung master.php.net und die Übertragung von Skripten auf die neue Version von PHP 8. Der Code für die Arbeit mit dem DBMS wurde geändert, um parametrisierte Abfragen zu verwenden, die die Ersetzung von SQL-Code erschweren. Der bcrypt-Algorithmus wird zum Speichern von Passwort-Hashes in der Datenbank verwendet (zuvor wurden Passwörter mit einem unzuverlässigen MD5-Hash gespeichert). Vorhandene Passwörter werden zurückgesetzt und Sie werden aufgefordert, über das Formular zur Passwortwiederherstellung ein neues Passwort festzulegen. Da der Zugriff auf die Repositorys git.php.net und svn.php.net über HTTPS an MD5-Hashes gebunden war, wurde beschlossen, git.php.net und svn.php.net im schreibgeschützten Modus zu belassen und auch alle zu verschieben Die verbleibenden PECL-Erweiterungsrepositorys auf GitHub ähneln dem Haupt-PHP-Repository.

Source: opennet.ru

Kommentar hinzufügen