Утечка 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. Утекают данные водителей |
| Сентябрь 2014 | Uber обнаруживает утечку 2014 года |
| Февраль 2015 | Уведомления получают 48 949 водителей, в 2016 году находят ещё около 60 000 |
| 13 октября 2016 | Атакующие начинают скачивать файлы из S3 |
| 14 ноября 2016 | Один из атакующих связывается с Uber и требует выкуп |
| 15 ноября 2016 | Последнее скачивание |
| После обнаружения | Uber платит 100 000 долларов через подрядчика, который ведёт её программу bug bounty |
| 21 ноября 2017 | Генеральный директор Дара Хосровшахи раскрывает утечку. Двое, кто руководил реакцией на инцидент, уходят из компании |
| Октябрь 2018 | FTC окончательно утверждает расширенное соглашение с Uber |
| 22 июля 2022 | Uber заключает с Минюстом соглашение о непреследовании и признаёт, что скрывала утечку от FTC |
| Октябрь 2022 | Присяжные признают бывшего директора по безопасности Джозефа Салливана виновным в препятствовании разбирательству FTC и сокрытии преступления |
Цепочка атаки: четыре слабых звена
Жалоба FTC описывает утечку как цепочку, где каждое звено можно было закрыть недорого.
- Пароли. Инженеры заходили в репозитории Uber через личные аккаунты GitHub, обычно привязанные к личной почте. Запрета на повторное использование паролей не было, двухфакторную аутентификацию не требовали. Атакующие сказали, что вошли с паролями, утёкшими в других крупных взломах.
- Ключ в коде. В приватном репозитории лежал ключ доступа к AWS открытым текстом.
- Права ключа. С ним атакующие дошли до хранилища S3 с бэкапами баз. Многофакторную аутентификацию для программного доступа сервисных учёток к S3 Uber не требовала как минимум до ноября 2016 года.
- Данные открытым текстом. Бэкапы и служебные выгрузки баз лежали в 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 с паролями из чужих утечек. Какая мера закрыла бы именно этот шаг?
- Переименовать репозиторий
- Обязательная двухфакторная аутентификация и корпоративные учётки вместо личных для доступа к коду
- Сделать репозиторий публичным, чтобы все видели изменения
- Перенести код на другой хостинг
Показать ответ
Верный ответ — 2. Пароль из чужой утечки без второго фактора бесполезен. FTC прямо называет отсутствие требования MFA для GitHub и запрета на повторное использование паролей среди причин утечки.
Вопрос 2. Ключ AWS нашли в коде и удалили следующим коммитом. Этого достаточно?
- Да, ключа больше нет в репозитории
- Нет: ключ остаётся в истории и в клонах, его надо отозвать, выпустить новый и проверить журналы использования
- Да, если репозиторий приватный
- Достаточно переписать историю через 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.
Начать можно бесплатно: тест навыков и первые задания первого месяца.
Источники
- FTC. Uber Technologies: Revised Complaint, октябрь 2018 — утечки 2014 и 2016 годов, практики безопасности, выплата и сокрытие.
- FTC. Federal Trade Commission Gives Final Approval to Settlement with Uber, октябрь 2018; Revised Decision and Order.
- Uber, Дара Хосровшахи. 2016 Data Security Incident, 21.11.2017.
- Минюст США. Uber Enters Non-Prosecution Agreement Related to 2016 Data Breach, июль 2022.
- Минюст США. Former Chief Security Officer Of Uber Convicted…, октябрь 2022; о приговоре.