Докладвайте за компрометирането на git хранилището и потребителската база на PHP проекта

Публикувани са първите резултати от анализа на инцидент, свързан с идентифицирането на два злонамерени комита в Git репозитория на PHP проект с активиран бекдор при изпращане на заявка със специално проектиран хедър на User Agent. В хода на проучването на следите от дейността на нападателите беше заключено, че самият сървър git.php.net, на който се намира git хранилището, не е бил хакнат, но базата данни с акаунтите на разработчиците на проекта е била компрометирана. .

Възможно е нападателите да са успели да изтеглят потребителската база данни, съхранявана в СУБД на сървъра master.php.net. Съдържанието на master.php.net вече е мигрирано към новия main.php.net сървър, инсталиран от нулата. Всички пароли на разработчици, използвани за достъп до инфраструктурата на php.net, бяха нулирани и процесът на промяната им беше иницииран чрез специален формуляр за възстановяване на паролата. Хранилищата git.php.net и svn.php.net остават само за четене (разработката е преместена в GitHub).

След откриването на първия злонамерен комит, направен през акаунта на Расмус Лердорф, основателят на PHP, се предполагаше, че акаунтът му е бил хакнат и Никита Попов, един от ключовите PHP разработчици, отмени промените и блокира правата за ангажимент за проблемната сметка. След известно време дойде осъзнаването, че блокирането няма смисъл, тъй като без проверка на ангажименти с помощта на цифров подпис, всеки участник с достъп до хранилището на php-src може да направи промяна, като замени измислено име на автор.

След това нападателите изпратиха злонамерен комит от името на самия Никита. Чрез анализиране на регистрационните файлове на услугата gitolite, използвана за организиране на достъпа до хранилищата, беше направен опит да се определи участникът, който действително е направил промените. Въпреки включването на отчитане на всички ангажименти, в дневника нямаше записи за две злонамерени промени. Стана ясно, че има компрометиране на инфраструктурата, тъй като ангажиментите се добавят директно, заобикаляйки връзката през gitolite.

Сървърът git.php.net беше незабавно деактивиран и основното хранилище беше прехвърлено към GitHub. В бързината беше забравено, че за достъп до хранилището, в допълнение към SSH, използвайки gitolite, имаше друг вход, който ви позволяваше да изпращате ангажименти през HTTPS. В този случай git-http-backend беше използван за взаимодействие с Git и удостоверяването беше извършено с помощта на HTTP сървъра Apache2, който провери идентификационните данни чрез достъп до базата данни, хоствана в СУБД на сървъра master.php.net. Входът беше разрешен не само с ключове, но и с обикновена парола. Анализът на регистрационните файлове на http сървъра потвърди, че злонамерени промени са добавени чрез HTTPS.

При изучаване на регистрационните файлове беше разкрито, че нападателите не са се свързали от първия път, а първоначално са се опитали да намерят името на акаунта, но след като са го идентифицирали, са влезли при първия опит, т.е. те знаеха предварително паролите на Расмус и Никита, но не знаеха техните данни за вход. Ако нападателите са успели да получат достъп до СУБД, не е ясно защо не са използвали веднага правилния вход, посочен там. Това несъответствие все още не е получило надеждно обяснение. Хакването на master.php.net се счита за най-вероятния сценарий, тъй като този сървър използва много стар код и остаряла операционна система, която не е актуализирана дълго време и имаше неотстранени уязвимости.

Предприетите действия включват преинсталиране на сървърната среда master.php.net и прехвърляне на скриптове към новата версия на PHP 8. Кодът за работа със СУБД е модифициран за използване на параметризирани заявки, което усложнява подмяната на SQL кода. Алгоритъмът bcrypt се използва за съхраняване на хешове на пароли в базата данни (преди това паролите се съхраняваха с помощта на ненадежден хеш MD5). Съществуващите пароли се нулират и ще бъдете подканени да зададете нова парола чрез формуляра за възстановяване на парола. Тъй като достъпът до хранилищата git.php.net и svn.php.net чрез HTTPS беше обвързан с MD5 хешове, беше решено да се оставят git.php.net и svn.php.net в режим само за четене и също така да се преместят всички останалите към тях PECL хранилища за разширения в GitHub, подобно на основното PHP хранилище.

Източник: opennet.ru

Добавяне на нов коментар