Доклад за компрометиране на 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 беше използван backend git-http-backend, а автентикацията беше извършена чрез 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

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster