Справаздача аб кампраметацыі 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

Дадаць каментар