kai.kzLab

Утечка Uber 2016 года: как ключ AWS в приватном репозитории на GitHub открыл данные 57 млн человек

Команда KAI Lab · · 9 мин чтения

Осенью 2016 года атакующие вошли в приватный репозиторий Uber на GitHub с паролями, утёкшими раньше в других крупных взломах, нашли в коде ключ доступа к AWS открытым текстом и с 13 октября по 15 ноября скачали 16 файлов из хранилища S3. По заявлению Uber, утекли имена, email и телефоны 57 млн пользователей по всему миру и номера водительских удостоверений около 600 000 водителей в США.

Uber заплатила атакующим 100 000 долларов через свою программу bug bounty и больше года никому не сообщала — ни пострадавшим, ни Федеральной торговой комиссии США (FTC), которая в это время расследовала безопасность того же хранилища. Утечку раскрыл в ноябре 2017 года новый генеральный директор.

Главное об утечке в одной таблице

ВопросОтвет
Когдафайлы скачаны с 13 октября по 15 ноября 2016; Uber узнала 14 ноября 2016; раскрыла 21 ноября 2017
Как вошлив приватный GitHub Uber — с паролями из чужих утечек; двухфакторную аутентификацию там не требовали
Что нашлиключ доступа к AWS открытым текстом в коде
Что скачали16 файлов из S3, почти всё — незашифрованные бэкапы баз с данными, собранными до июля 2015 года
Сколько людейпо Uber: 57 млн пользователей по миру и около 600 000 водителей в США. По FTC только по США: 25,6 млн имён с email, 22,1 млн имён с телефонами, 607 000 номеров удостоверений
Что не утеклопо Uber: история поездок, номера карт и счетов, номера социального страхования, даты рождения
Как узналиодин из атакующих написал в Uber, что взломал её «базы», и потребовал шестизначную сумму
Последствиярасширенное соглашение с FTC на 20 лет, соглашение с Минюстом США в 2022 году, приговор бывшему директору по безопасности

Хронология утечки Uber

КогдаЧто произошло
12 мая 2014Первая утечка: инженер выложил ключ AWS в публичный GitHub, ключ давал полный доступ ко всем данным в S3. Утекают данные водителей
Сентябрь 2014Uber обнаруживает утечку 2014 года
Февраль 2015Уведомления получают 48 949 водителей, в 2016 году находят ещё около 60 000
13 октября 2016Атакующие начинают скачивать файлы из S3
14 ноября 2016Один из атакующих связывается с Uber и требует выкуп
15 ноября 2016Последнее скачивание
После обнаруженияUber платит 100 000 долларов через подрядчика, который ведёт её программу bug bounty
21 ноября 2017Генеральный директор Дара Хосровшахи раскрывает утечку. Двое, кто руководил реакцией на инцидент, уходят из компании
Октябрь 2018FTC окончательно утверждает расширенное соглашение с Uber
22 июля 2022Uber заключает с Минюстом соглашение о непреследовании и признаёт, что скрывала утечку от FTC
Октябрь 2022Присяжные признают бывшего директора по безопасности Джозефа Салливана виновным в препятствовании разбирательству FTC и сокрытии преступления

Цепочка атаки: четыре слабых звена

Жалоба FTC описывает утечку как цепочку, где каждое звено можно было закрыть недорого.

  1. Пароли. Инженеры заходили в репозитории Uber через личные аккаунты GitHub, обычно привязанные к личной почте. Запрета на повторное использование паролей не было, двухфакторную аутентификацию не требовали. Атакующие сказали, что вошли с паролями, утёкшими в других крупных взломах.
  2. Ключ в коде. В приватном репозитории лежал ключ доступа к AWS открытым текстом.
  3. Права ключа. С ним атакующие дошли до хранилища S3 с бэкапами баз. Многофакторную аутентификацию для программного доступа сервисных учёток к S3 Uber не требовала как минимум до ноября 2016 года.
  4. Данные открытым текстом. Бэкапы и служебные выгрузки баз лежали в S3 незашифрованными. Почти все утёкшие данные были собраны до июля 2015 года — старые бэкапы продолжали храниться и ждать своего часа.

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

Та же ошибка два года назад

Самое неприятное в жалобе FTC — слова «ещё раз». В мае 2014 года инженер Uber выложил ключ AWS в публичный репозиторий на GitHub. Ключ давал полные административные права на все данные в S3, и посторонний скачал файл с данными водителей: больше 100 000 имён и номеров удостоверений, 215 номеров банковских счетов, 84 номера социального страхования.

До сентября 2014 года у Uber вообще не было отдельных ключей: все программы и инженеры пользовались одним ключом AWS с полными правами. Ключи после этого разделили, но в 2016 году история повторилась с другого входа: ключ снова оказался в коде, только теперь в приватном репозитории.

Выкуп под видом bug bounty и год молчания

Uber узнала об утечке 14 ноября 2016 года от самих атакующих и заплатила им 100 000 долларов через подрядчика, который вёл её программу вознаграждений за найденные уязвимости. FTC в жалобе отдельно подчёркивает, что эти люди не просто нашли уязвимость и сообщили о ней, а воспользовались ею и забрали данные миллионов людей.

Пострадавшим Uber сообщила только 21 ноября 2017 года, больше чем через год. FTC узнала о второй утечке тогда же, хотя всё это время вела непубличное расследование безопасности именно этого хранилища.

Уроки для DevOps

1. Приватный репозиторий — не хранилище секретов

Код копируют на ноутбуки, в CI, подрядчикам, и доступ к нему защищён только паролем того, кто хуже всех бережёт свой. Ключи живут в менеджере секретов, а в репозитории стоит сканер, который не пропускает их в коммит. Проверить, не лежит ли уже ключ AWS в истории, можно одной командой:

# вся история всех веток, а не только текущая версия файлов
$ git log -p --all | grep -n -E 'AKIA[0-9A-Z]{16}'

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

2. Вход в Git-хостинг — корпоративный и с двумя факторами

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

3. Ключи — короткие, узкие и у каждого свои

Один ключ с полными правами на всё хранилище превращает любую утечку в утечку всего. Сервисам нужны роли и временные учётные данные, людям — свои учётки с минимальными правами. Статический ключ, если без него никак, ограничивают по действиям, ресурсам и регулярно ротируют. Как роль сервера с лишними правами открывает данные, видно и на утечке Capital One.

4. Бэкапы — тоже данные, и их тоже крадут

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

5. Инцидент нельзя замолчать

Попытка решить утечку деньгами обернулась для Uber соглашением с FTC на 20 лет и признанием в сокрытии перед Минюстом, а для бывшего директора по безопасности — обвинительным вердиктом. Разбор без поиска виноватых не означает разбор без огласки: пострадавшие и регуляторы должны узнать об утечке, а команда — о том, как система её допустила. Как писать такой разбор, рассказано в статье о постмортеме.

Что проверить у себя завтра:

  • нет ли ключей и паролей в истории репозиториев, включая приватные;
  • включена ли обязательная двухфакторная аутентификация в вашей организации на GitHub или GitLab;
  • какие статические ключи облака существуют и какие у них права;
  • где лежат старые бэкапы баз и зашифрованы ли они.

Реши сам

Вопрос 1. Атакующие вошли в GitHub Uber с паролями из чужих утечек. Какая мера закрыла бы именно этот шаг?

  1. Переименовать репозиторий
  2. Обязательная двухфакторная аутентификация и корпоративные учётки вместо личных для доступа к коду
  3. Сделать репозиторий публичным, чтобы все видели изменения
  4. Перенести код на другой хостинг
Показать ответ

Верный ответ — 2. Пароль из чужой утечки без второго фактора бесполезен. FTC прямо называет отсутствие требования MFA для GitHub и запрета на повторное использование паролей среди причин утечки.

Вопрос 2. Ключ AWS нашли в коде и удалили следующим коммитом. Этого достаточно?

  1. Да, ключа больше нет в репозитории
  2. Нет: ключ остаётся в истории и в клонах, его надо отозвать, выпустить новый и проверить журналы использования
  3. Да, если репозиторий приватный
  4. Достаточно переписать историю через force push
Показать ответ

Верный ответ — 2. Утёкший ключ считается скомпрометированным, пока его не отозвали. Переписанная история не удалит копии, которые уже сделаны, а журналы облака покажут, успел ли им кто-то воспользоваться.

Частые вопросы

Сколько людей пострадало от утечки Uber 2016 года? По заявлению Uber — 57 млн пользователей по всему миру: имена, email и номера телефонов, а также номера водительских удостоверений около 600 000 водителей в США. FTC для США приводит 25,6 млн имён с email, 22,1 млн имён с телефонами и 607 000 номеров удостоверений.

Как атакующие получили доступ? Вошли в приватный репозиторий Uber на GitHub с паролями, утёкшими в других взломах, нашли там ключ AWS открытым текстом и с ним скачали файлы из S3.

Сколько Uber заплатила атакующим? 100 000 долларов через подрядчика, который вёл программу bug bounty. FTC указала, что атакующие не имели ничего общего с добросовестными участниками таких программ.

Какие последствия были для Uber? Расширенное соглашение с FTC: программа защиты приватности, независимые оценки на протяжении 20 лет и обязанность сообщать FTC о подобных инцидентах. В 2022 году Uber заключила соглашение с Минюстом и признала, что скрывала утечку от FTC. Бывшего директора по безопасности присяжные признали виновным, суд назначил ему три года пробации.

Пройти похожий сбой самому

В симуляторе DevOps KAI Lab разбор Uber стоит в четвёртом месяце, посвящённом Git. Там же постмортем о боевом ключе платёжного провайдера, который три недели пролежал в истории репозитория. Как секреты утекают из CI, а не из Git, разобрано на примере взлома Codecov.

Начать можно бесплатно: тест навыков и первые задания первого месяца.

Источники

Читать дальше