Доклад за компрометиране на 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 беше използван бэкенд 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