На днях стало известно о том, что сотни разработчиков пострадали от действий неизвестного взломщика. Злоумышленник каким-то образом получил доступ к репозиториям пользователей хостинг-сервисов Git (GitHub, Bitbucker, GitLab), удалил хранящийся там код и теперь требует деньги за восстановление данных.

Пока что способ, который применялся злоумышленником для взлома репозиториев остается неизвестным. Вместо удаленных данных злоумышленник оставляет сообщение с требованием выплаты выкупа в размере 0,1 биткоина ($570 по текущему курсу). В сообщении говорится о том, что код сохранен и находится на подконтрольном взломщику сервере. Данные пострадавших разработчиков будут окончательно удалены в том случае, если выкуп не будет получен в течение 10 дней.



Насколько можно понять, пострадавшие уже начали выплачивать требуемую сумму. Ресурс BitcoinAbuse.com, занимающийся анализом определенных биткоин-адресов, за последние 24 часа для указанного злоумышленником биткоин-кошелька было зафиксировано несколько десятков транзакций.



Некоторые пользователи, пострадавшие в результате атаки, заявили, что их пароль к учетной записи был не слишком надежным. Кроме того, эти разработчики удаляли токены доступа для приложений, которые не использовались в течение длительного времени. Возможно, киберпреступник просканировал сеть с целью выявления файлов конфигурации Git. Данные файлов помогли злоумышленнику добиться поставленной цели.

Ситуацию уже успели прокомментировать представители GitLab. Директор по безопасности хостинга Кэти Ванг заявила, что расследование проблемы продолжается уже больше суток. Так, пользователей сервиса, которые пострадали в результате действий злоумышленника предупредили о проблеме. Ванг подтвердила слова пострадавших, рассказав о том, что они использовали недостаточно надежные пароли.



В качестве рекомендации пользователям предложили использовать менеджеры паролей, а также двухфакторную идентификацию, что помогает предотвратить возникновение подобных проблем в будущем.

GitHub блокирует некоторые учетные записи до выяснения обстоятельств. «GitHub заморозил мой аккаунт на время расследования, надеюсь, я смогу получить свою учетную запись обратно уже сегодня», — заявил один из пользователей сервиса.

Пострадавшие пользователи обсуждают происшествие здесь, а возможное решение предлагается на StackExchange.

Стоит отметить, что злоумышленник не удаляет весь код, как оказалось, он меняет заголовки Git-коммитов. Это означает возможность восстановления кода пострадавшими, правда, не в 100% случаев.

Комментарии (66)


  1. Sirion
    05.05.2019 12:47
    +6

    Лол. Возможно, я чего-то не понимаю, но… Взломщик удалил код из отдельных репозиториев распределённой системы контроля версий и чего-то там требует? В то время как у каждого, кто с этими репозиториями недавно работал, должна быть полноценная свежая копия?


    1. KvanTTT
      05.05.2019 13:07
      +2

      Кто-то использует Github как архив, и актуальная локальная копия может быть далеко не у всех и не для всего.


      1. Sirion
        05.05.2019 13:08

        Тогда они получили ценный урок.


    1. MonkAlex
      05.05.2019 13:08

      Тоже не понял этот момент. Может репозиторий при этом настроен как деплой и сервисы связанные поломались?

      Правда, чтобы это стало проблемой, нужно как минимум отобрать доступ у автора, а тот должна восстановить поддержка сервиса.


    1. olekl
      05.05.2019 13:24

      Там еще утечка упоминается, для приватных может быть критично… Но какой процент будет у пересечения множества приватных проектов и слабых паролей? Так что да, странно.


    1. AlexMoskvichev
      06.05.2019 11:37

      Он не удалить угрожает, а will make your code public or use them otherwise


      1. sumanai
        06.05.2019 12:01

        Он сделает публичный код ещё публичнее?
        Хотя владельцы приватных репозиториев будут не рады.


        1. Acuna
          06.05.2019 17:19

          Нет, угрожает что сделает приватные репы публичными. Еще предстоит выяснить имеется ли у него к ним доступ, но как говорится чем черт не шутит :/


      1. playnet
        06.05.2019 14:47

        Для гита эта угроза (конечно, только для приватных реп) гораздо страшнее чем удаление, так-что git push -f с любой машины где есть копия репы и все данные опять на месте.


    1. unclechu
      08.05.2019 02:20

      недавно работал, есть практика сваливать самый условно-полезный или просто интересный код в публичные репозитории с целью не потерять его со временем.


  1. Geograph
    05.05.2019 13:26
    +1

    Я мало знаком с системами контроля версий, но думал, что они хранят все изменения и можно откатиться в любой момент на любую версию. Как можно полностью всё удалить?


    1. tmin10
      05.05.2019 13:27
      +1

      Удалить сам репозиторий кода, исходники и папочку .git с сервера.


      1. keydon2
        05.05.2019 13:37
        +1

        И все репозитории на машинах всех разработчиков, кто клонировал этот репозиторий.


        1. tmin10
          05.05.2019 17:07

          У пары моих проектов они безусловно есть где-то на моих машинах, но мне проще выкачать из гита их, если понадобятся, а не искать на устройствах. Возможно у некоторых проектов из этого списка такая же история.


          1. Lexicon
            06.05.2019 05:08

            Еще не стоит забывать про фактор срочности.


            Если на ком-то из разработчиков лежит ответственность, в особенности, если репозиторий еще и с CI/CD, автоматически развертывающим ветки, мышление может значительно атрофироваться под действием воображения, искусно растрачивающем ресурсы на пребор каждого из предметов, которые изрядно раззадоренный выходными босс мог бы засунуть "туда" с примерным анализом ущерба проникновения.


            Полагаю, 570$ не самая большая цена, которую можно заплатить в подобной ситуации.


            1. maisvendoo
              06.05.2019 07:10

              Полагаю, 570$ не самая большая цена, которую можно заплатить в подобной ситуации.

              Давайте я украду у Вас что-нибудь ценное, затребую выкуп, а Ваше возмущение буду парировать фразой «что это не слишком большая цена в такой ситуации...»? Нравится?


    1. tyderh
      05.05.2019 13:55

      1) Удалить все ветки и теги.

      2) Установить master в новый коммит с этим сообщением.

      Фактически, все объекты останутся в репозитории, но их восстановление может оказаться тем еще геморроем.


      1. tbl
        05.05.2019 14:21

        В локальной репе разраба по рефлогу откатиться можно после случайного гит пулл/фетч, а потом уже git push -f по всем бранчам и тегам


        1. tyderh
          05.05.2019 14:21

          В локальной репе разраба

          Если она есть, то все очень просто, да. А если вдруг нет?


          1. alan008
            05.05.2019 20:10

            А как они коммитили в эти репы, не имея локальной копии? Странная ситуация, либо репы древние/неактивные (последний коммит был год назад, например)


            1. tyderh
              05.05.2019 20:18
              +1

              А как они коммитили в эти репы, не имея локальной копии?

              Такая ситуация не исключена.


            1. shsmad
              05.05.2019 22:44
              +1

              В GL можно коммитить прямо через веб-интерфейс


    1. F0iL
      05.05.2019 14:08

      git push --force, например.
      восстановить можно будет, но только имея доступ к ФС где лежала репа и если не делали git gc, да и то очень хлопотно.


      1. Sap_ru
        05.05.2019 18:11

        Рефлог же есть. И на github тоже есть. Как-то так:
        curl -u api.github.com/repos:owner/:repo/events
        И с ним тоже можно колдовать и по нему восстанавливаться. Чтобы почистить нужно «housekeeping» (или как он там называется) выполнить, который тоже далеко не сразу после выполняется и не всё чистит (чтобы сам себе злой Буратино не мог всё легко поехрить).


        1. fshp
          05.05.2019 19:06
          +1

          Рефлог он локальный. Вы не можете выкачать с гитхаба коммит, на который не ссылается ни одна голова в репозитории.


          1. Sap_ru
            05.05.2019 20:28

            Я именно про рефлог сервера гитхаба. И коммиты без ссылок доступны по ссылкам вида (например):


            https://api.github.com/repos/<user>/<repo>/git/commits/<hash>

            Восстановление репозитория гитхаба после грандиозного факапа с push --force весьма популярная беда и хорошо гуглится.


            1. fshp
              05.05.2019 20:32

              Но вы не можете выкачать по ssh эти коммиты. Только через api


    1. Barnaby
      05.05.2019 14:19

      Можно переписать историю если есть ключ с правами на запись, гитхаб никак не защищает от push --force, а вот гитлаб должен защитить master. Ну а имея пароль можно делать все что угодно.

      История про тех кто не делает бэкапы, можно же элементарно репы на впс пуллить.


      1. tmin10
        05.05.2019 17:08

        Защиту мастера можно отключить, иначе разработка превратится в ад, что коммиты в мастере не подправить. Надо редко, но когда надо, приходится убирать защиты.


        1. inversed
          05.05.2019 21:43
          +1

          Всё же такие ситуации — исключительные и стоит возвращать защиту ветки обратно после всех проведенных действий.


          1. tmin10
            05.05.2019 23:55

            Да, конечно. Защита от случайных катастрофическмх действий должна быть, главное, чтобы кнопку отключения, если что, не убирали вовсе.


      1. Sap_ru
        05.05.2019 18:12

        Рефлог и доступ к старым комитам на сервере тоже есть.


        1. Carburn
          06.05.2019 19:24

          как?


    1. androidovshchik
      06.05.2019 05:55

      Есть вариант с откатом, например, до самого первого комита
      Насколько я понимаю, восстановить последущие уже нельзя никак, потому что их просто нет в истории комитов
      git reset --hard <хэш>
      git push -f origin <ветка>


      1. mayorovp
        06.05.2019 06:44

        Но и восстанавливается история точно так же…


    1. unclechu
      08.05.2019 02:23

      Можно "форспушнуть", у приличных людей такая практика считается моветоном, Линус Торвальдс за такое сечёт розгами ярко-выраженного социального неодобрения.


  1. orion76
    05.05.2019 13:57

    Хм… эт что получается.
    Гитхаб не делает бэкапы для восстановления данных в случае каких-либо «непредвиденных» ситуаций?
    В Гитхаб нет «защиты» от банального брутфорса?

    Как-то все слишком просто.


    1. lubezniy
      05.05.2019 14:04

      А что, на сервисе, в котором за секунду обрабатываются сотни запросов на изменения, можно иметь бэкап, актуальный на момент взлома?


      1. orion76
        05.05.2019 14:13

        Можно, никто ж не запрещает.


        1. lubezniy
          05.05.2019 17:37

          Запрещать не запрещает, а сделать его как?


          1. Acuna
            06.05.2019 17:35

            Коммент на Хабре оставить, очевидно же)


          1. orion76
            06.05.2019 20:34
            -1

            например: habr.com/ru/post/140031

            или в гугл: DFS, NFS и т.п.


            1. lubezniy
              06.05.2019 21:05
              +1

              Это не бэкап.


      1. Stas911
        06.05.2019 04:50

        Ну не на момент взлома, но, как я понимаю, больше всех пострадали как раз неактивные репозитории, кода которых нет на машинах разработчиков ввиду давности разработки. А для них что вчерашний, что прошлого месяца бэкап вполне сойдет. Я бы на месте гитхаба просто повесил всем кнопку «поднять из бэкапа» и предупреждение, за какую дату бэкап.


        1. lubezniy
          06.05.2019 07:26

          Это если есть возможность вытащить из общего бэкапа пользовательский. А так его задача (если его делает администрация сервиса) — обеспечить быстрое и удобное аварийное восстановление сервиса в целом, а не данных конкретного пользователя.


    1. ilammy
      05.05.2019 14:24

      Насколько я знаю, на GitHub отключен git gc и они никогда не чистят reflog, так что история всех репозиториев полностью сохраняется. Если что-то было запушено, то оно остаётся на серверах GitHub. Так что у них есть техническая возможность восстановить любую ветку.

      Будут ли они это делать — для людей, которые не платят им денег — другой вопрос. Но написать в службу поддержки и попробовать можно.


      1. Sap_ru
        05.05.2019 18:15

        Чистят, но очень редко, неглубоко и только для больших репозиториев. Там даже пипка, помнится, где-то была, на случай, если ты с бодуна закомитил 100500 гигабайт, а потом опомнился. Но пипка мудра и чистит только явные косяки и ОЧЕНЬ большие комиты.


  1. Umpiro
    05.05.2019 14:20

    Взломщик удалил код из тысяч Git-репозиториев.

    Откуда такие цифры?
    A GitHub search reveals that at least 392 GitHub repositories have been ransomed, so far.


    1. Vest
      05.05.2019 14:28

      Автор торопился, он же сотни… стойте… тысячи статей каждый день пишет :)


  1. Cttr
    05.05.2019 14:40
    +2

    Ванг подтвердила слова пострадавших, рассказав о том, что они использовали недостаточно надежные пароли.

    Это она по хешу паролей определила? Или хранят plain?


    1. decomeron
      06.05.2019 00:09

      Так Ванга ж ;-)


  1. apapacy
    05.05.2019 14:51

    Какой бы ни был слабый пароль. Если есть простой подсчет неудачных попыток с последующей блокировкой то перебрать даже все двухбуквеннып пароли не получится. Это ж кто-то брутфорсил месяцами репы со скоростью сотниизапросовивсекунду и это не было выявлено.

    Второй вариант это как-то получили доступ к хэшам паролей.

    Ну или тоже самое плюс слив информации


    1. Alexey2005
      05.05.2019 15:17

      Ну в принципе можно перебирать не пароли, а аккаунты. Взять штуки три самых распространённых паролей и пробовать ими все репы подряд. На каждый реп будет приходиться не более трёх попыток, но при достаточном количестве репов хотя бы несколько сломается.


      1. fshp
        05.05.2019 19:10

        Извините, но этот пароль уже используется пользователем Alexey2005. Придумайте другой пароль.


        1. Am0ralist
          06.05.2019 13:04
          +1

          Вот вам то шутки шутить, а когда в реальной работе видишь...
          image


  1. SergeiMinaev
    05.05.2019 16:17
    +2

    Ванг подтвердила слова пострадавших, рассказав о том, что они использовали недостаточно надежные пароли.


    Интересно, откуда ей знать, какие пароли у пользователей? Лично спрашивала или?


    1. Cerberuser
      05.05.2019 17:04

      По ссылке на StackExchange из статьи есть одно предположение:

      It happened because .git/config includes the remote URLs and people added username:password in it

      Понятно, что в реальных условиях такого быть не должно, но если всё же произошло — собственно, вот она, возможность (для владельцев сервера, разумеется).


      1. mayorovp
        05.05.2019 17:55

        А откуда им знать что у людей в .git/config лежит? Этот же файл никуда не передается…


        1. DerRotBaron
          05.05.2019 20:39
          +1

          Если лежит на плохо настроенном http-сервере, то ещё как передаётся.
          Например, так: https://habr.com/ru/post/422725/


    1. algotrader2013
      05.05.2019 18:34

      Интересно, откуда ей знать, какие пароли у пользователей?

      А кто мешает, даже если пароли соленые, запустить брут на перебор хешей на серверах ГХ на аккаунты, которые пострадали, и хозяева обратились, чтобы проверить гипотезу о слабости паролей?
      К тому же, еще возможен вариант, что по логу видели, что ко всем пострадавшим аккаунтам была попытка брута. В таком случае тоже очевидно, что пароли были слабые.


  1. dimitry78
    05.05.2019 18:55

    вапрос — нафига хранить свой, радной, ламповый код — где-то, контроль над чем не имеешь? ну много разрабов — ок — челы схалявили на свою базу — а тут так сразу и прикрылось…


    1. areht
      06.05.2019 04:23

      а где хранить? У меня хард ssd не резиновый


    1. androidovshchik
      06.05.2019 06:13

      Блин, это же распределенная система, да где угодно и сколько угодно копий своего добра)


  1. KanuTaH
    05.05.2019 20:20

    Читал в свое время эту историю, насколько я помню, "взломщик" в конце концов вышел на связь, изложенная им версия взлома такая — люди тем или иным образом выкладывали свой .git/config с паролями в htdocs.


    1. Acuna
      06.05.2019 17:41

      То есть это как на банковской карте ПИН-код фломастером написать? Понятно…


  1. GLeBaTi
    06.05.2019 13:24

    Кроме того, эти разработчики удаляли токены доступа для приложений, которые не использовались в течение длительного времени.

    В чем опасность? Может имелось ввиду, что наоборот НЕ удаляли токены?