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

Canary-токены: ликбез

Canary-токен — это цифровая ловушка, которая сигнализирует о несанкционированном доступе или активности в системе. Они работают путем внедрения, казалось бы, ценной, но ложной информации (учеток от аккаунтов, ключей API или других конфиденциальных данных) в различные сегменты сети, кодовую базу или приложение. Когда злоумышленник активирует эти токены, срабатывает оповещение, уведомляющее владельца токена о потенциальном взломе. 

Метод исследования

В этом исследовании я использовал учетные данные AWS API в качестве canary-токенов, разместив их в общедоступных местах в интернете. Для генерации токенов я воспользовался сервисом Canarytokens от Thinkst. Это неплохой бесплатный сервис, предоставляющий разные типы токенов: учетные данные AWS, токены DNS, исполняемые токены и многое другое. При срабатывании токена данные об инциденте приходят вам на электронную почту. 

Я решил разместить canary-токены в следующих местах:

  • Публичные репозитории кода/образов: GitHub, GitLab, BitBucket, DockerHub.

  • Публичные сервисы под моим управлением: FTP-сервер, веб-сервер, блог.

  • SaaS-сервисы: Pastebin, JSFiddle.

  • Пакетные менеджеры: NPMJS, PyPI.

  • Бакеты облачных хранилищ: AWS S3, GCP Google Cloud Storage.

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

Я отслеживал всех, кто использовал мои canary-токены для несанкционированного доступа в AWS, и собирал ценные данные: IP-адреса, user agents, временные метки и методы, используемые злоумышленниками. 

Оповещение об активации токена на электронную почту
Оповещение об активации токена на электронную почту

Я решил использовать в качестве приманки реквизиты от AWS, чтобы собрать реальные данные о действиях, которые можно наверняка классифицировать как противоправные. Другие типы токенов, такие как DNS-токены, исполняемые токены или графические токены, могут сработать, если кто-то просто прикасается к ним, например, из обычного любопытства, что не обязательно является сознательным нарушением закона. А вот попытка получить доступ к чужому аккаунту AWS с использованием учетных данных, которые вы нашли в интернете — это уже явно противоправное действие.

Мотивация к исследованию

Моя мотивация для проведения данного исследования проистекает из сочетания личного любопытства и желания напомнить специалистам по кибербезопасности о редко используемом инструменте: canary-токенах. Я нахожу их концепцию интригующей и классной. Идея использования как бы невзначай «оставленных» данных в качестве цифровых ловушек для обнаружения несанкционированного доступа меня заинтересовала, и я захотел выяснить, как они покажут себя в реальных условиях. Меня также заинтриговал вопрос о том, как быстро и как часто злоумышленники сканируют общедоступные ресурсы и взламывают цели, используя незащищенные учетные данные. 

Более того, я считаю, что canary-токены являются недооцененным ресурсом среди ИБ-специалистов. Несмотря на свою простоту и эффективность, эти токены не получили такого широкого распространения, как другие инструменты. Демонстрируя идеи и выводы, полученные в ходе моего исследования, я надеюсь повысить осведомленность о полезности canary-токенов и побудить безопасников использовать их в своих защитных стратегиях.


Результаты исследования

Репозитории кода/образов

Репозитории кода — это самое распространенное место, где люди оставляют свои учетные данные, и, очевидно, GitHub — самый популярный сервис в этой категории. Для трех репозиториев кода (GitHub, GitLab и Bitbucket) я клонировал проект Prowler (инструмент облачного аудита с открытым исходным кодом), добавил config-файл, содержащий canary-токен, и поместил измененный код в новые репозитории, настроив их как общедоступные.

Canary-токен на GitHub
Canary-токен на GitHub

Для DockerHub я создал общедоступный Docker-образ с веб-приложением NodeJS, в исходном коде которого жестко прописаны учетные данные.  Любой, кто извлекает образ, может легко увидеть токены в исходном коде. Я дал образу пикантное название, чтобы сделать его более привлекательным для злоумышленников.

На графике ниже можно увидеть количество попыток доступа к GitHub и DockerHub за час с момента публикации canary-токенов. BitBucket и GitLab здесь не показаны: к моему удивлению, никто не проявил интереса к опубликованным на этих платформах токенам.

С GitHub дело обстояло ровно наоборот: первая попытка доступа с помощью canary-токенов была предпринята в течение нескольких секунд после публикации проекта. На DockerHub первая попытка была зафиксирована спустя 170 часов (~7 дней), после чего попытки повторялись каждые несколько дней. 

Количество попыток доступа в час на GitHub и DockerHub
Количество попыток доступа в час на GitHub и DockerHub

На следующей диаграмме показано распределение IP-адресов, которые пробовали использовать canary-токены на GitHub в течение первых 500 часов.

IP-адреса, которые пытались получить доступ к токену GitHub
IP-адреса, которые пытались получить доступ к токену GitHub

Публичные сервисы под моим управлением

Для этой категории я запустил EC2 на AWS, установил несколько сервисов и открыл его для интернета:

  • FTP-сервер с анонимным доступом —  я установил FTP-сервер с открытым исходным кодом, настроил его на разрешение анонимного доступа и поместил в него файл с canary-токеном.

  • Веб-сервер — я настроил веб-сервер на порт 80, добавил файл robots.txt и разместил токен по пути /aws.config. Файл robots.txt должен был направлять боты-скрейперы к /aws.config.

Canary-токен по пути /aws.config
Canary-токен по пути /aws.config

К сожалению, приманка никого не заинтересовала, и я не зафиксировал ни одной попытки доступа ни к FTP, ни к веб-серверу. Тогда я решил облегчить задачу злоумышленникам и переместил токен в корневой каталог веб-приложения, а затем, спустя день, начал получать интересные результаты.

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

Так или иначе, первые успешные результаты поступили только после того, как токен в /aws.config был перемещен в корневую папку веб-сервера. Потребовалось почти 50 часов, чтобы скрейперы зашли на мой веб-сайт и начали использовать токен.

На диаграмме ниже показано количество попыток доступа в первые 600 часов с момента выпуска токена. Я сравниваю canary-токен в корневом каталоге с токеном на Pastebin (про него в следующем разделе), т. к. у них было сопоставимое количество попыток.

Количество попыток доступа в час на Pastebin и на веб-сайте
Количество попыток доступа в час на Pastebin и на веб-сайте

SaaS-сервисы

1) Pastebin — онлайн-сервис, который позволяет пользователям хранить текстовые документы (фрагменты кода, файлы конфигурации, логи) и обмениваться ими. Пользователи могут создать «пасту», отправив текст, который затем сохраняется на сервере Pastebin и которому присваивается уникальный URL-адрес — им можно поделиться с другими пользователями.

Для Pastebin я протестировал 2 токена: один токен — на защищенной паролем пасте с простым для взлома паролем 123456. Второй токен был без пароля.

Canary-токен на Pastebin с паролем
Canary-токен на Pastebin с паролем

2) JSFiddle — онлайн-инструмент и среда совместной веб-разработки, которая позволяет пользователям писать, тестировать и обмениваться фрагментами кода на HTML, CSS и JavaScript. Я создал новый фрагмент кода с жестко прописанным canary-токеном, который имитировал службу, перечисляющую бакеты S3.

Токен на JSfiddle
Токен на JSfiddle

Результаты показывают, что Pastebin — действительно неподходящее место для размещения чего-либо конфиденциального, по крайней мере, без предварительной защиты паролем: токен был немедленно обнаружен и использован. А вот запароленные пасты, судя по всему, не взламываются — по этому токену я получил 0 обращений.

JSFiddle, похоже, не так уж плох — я также получил на нем 0 обращений. Полагаю, поскольку он используется для клиентского кода, разработчики вряд ли часто оставляют в коде что-то секретное и потенциально ценное, поэтому хакеры его и не мониторят.

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

Менеджеры пакетов

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

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

Для этого раздела исследования я выбрал два популярных менеджера пакетов: Pypi и NPMJS. Я создал приложения с жестко прописанными в коде canary-токенами и разместил пакеты в этих репозиториях.

Пакет Python на Pypi с canary-токеном
Пакет Python на Pypi с canary-токеном
Пакет NodeJS на NPMJS с canary-токеном
Пакет NodeJS на NPMJS с canary-токеном

Диаграмма ниже отображает количество попыток доступа к NPMJS и Pypi в первые часы после их публикации в открытом доступе.

Попытки доступа к пакетам на NPMJS и Pypi в первые часы после релиза
Попытки доступа к пакетам на NPMJS и Pypi в первые часы после релиза

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

Вероятно, мне следовало предусмотреть этот сценарий и учесть, что canary-токены будут срабатывать не только при запуске пакета злоумышленником, но и в результате работы подобных сервисов. С другой стороны, у меня есть данные, показывающие, что один и тот же IP-адрес несколько раз пытался выполнить вызовы API AWS, используя токены, оставленные в пакетах на Pypi и NPMJS. Такое поведение не свойственно роботам, автоматически скачивающим общедоступные пакеты: это уже явно был злоумышленник, который пытался составить список хранилищ и секретов.

Злоумышленник пробует составить список всех хранилищ после активации canary-токена в пакете на Pypi
Злоумышленник пробует составить список всех хранилищ после активации canary-токена в пакете на Pypi

Бакеты

Бакеты в AWS (Amazon Web Services) и GCP (Google Cloud Platform) — это контейнеры, используемые для хранения и управления объектами данных, такими как файлы, образы и резервные копии. В «дырявых» бакетах иногда раскрываются учетные данные: некоторые люди используют бакеты для хранения резервных копий и файлов конфигурации, не осознавая, что бакет настроен как общедоступный.

В этой части части исследования я разместил по одному canary-токену в общедоступных бакетах на AWS S3 и GCP Google Cloud Storage.

Canary-токен в общедоступном бакете на S3
Canary-токен в общедоступном бакете на S3

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

Увы, ни один из бакетов не сгенерировал обращений, когда я сделал их общедоступными. Только после того, как я опубликовал адрес бакета на Pastebin, GitHub и на своем сайте, я получил несколько обращений, которые выглядят так, будто кто-то из Соединенных Штатов пытается использовать ряд функций API на AWS (полагаю, это был обычный человек, а не рептилоид).

Скорость получения доступа

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

Для каждого сервиса измерялось время между развертыванием canary-токена и моментом активации токена
Для каждого сервиса измерялось время между развертыванием canary-токена и моментом активации токена

Схемы атак

Получив оповещение о срабатывании canary-токена, вы можете посмотреть, какое действие злоумышленника привело к его активации. Оставленные мной токены представляли собой учетные данные API AWS, поэтому я мог отследить, какое событие API AWS пытались вызвать злоумышленники. К сожалению, здесь сервис canarytoken.org немного разочаровывает — он не сохраняет подробную информацию о прошлых событиях (она не отправляется по электронной почте). В общей сложности мне удалось отловить около 70% событий — остальная часть информации была утеряна. Вот график с разбивкой по типу событий:

Количество событий в AWS API по всем canary-токенам
Количество событий в AWS API по всем canary-токенам

Событие InvokeModel в AWS относится к действию по вызову модели машинного обучения, развернутой в сервисах AWS, таких как AWS SageMaker. Когда это событие запускается, указанная модель обрабатывает входные данные и возвращает результаты прогнозирования. У меня есть несколько идей, почему это оказалось популярным выбором у злоумышленников, но я оставлю вам возможность поразмышлять над этим самостоятельно.

Распределение попыток доступа по сервисам

На этой диаграмме показано общее число попыток доступа через токены, размещенные на разных сервисах (включая сервисы, у которых не было обращений). 

Анализ IP-адресов

В общей сложности в логах canary-токенов было найдено 45 уникальных IP-адресов. Вот подробная информация о них:

Распределение попыток доступа через canary-токены по IP-адресам
Распределение попыток доступа через canary-токены по IP-адресам
Распределение попыток доступа через canary-токены по регионам

Разбивка IP-адресов злоумышленников по странам слабо отличается от того, что мы обычно наблюдаем в других подобных исследованиях киберактивности. Большинство айпишников относятся к Соединенным Штатам, также отметились несколько стран Азии. Единственный сюрприз для меня здесь — отсутствие китайских IP-адресов. Впрочем, я бы не придавал особого значения источнику IP-адресов, поскольку многие злоумышленники наверняка используют в целях осторожности какой-нибудь зарубежный автоматизированный облачный сервис. AWS Internal и SNS попали в диаграмму из-за того, что CanaryTokens иногда указывает их в качестве источника IP-адресов.

Анализ вредоносных IP-адресов

Мне также было интересно, будут ли IP-адреса отмечены как вредоносные в каком-нибудь сервисе по тестированию IP-адресов. VirusTotal предоставляет бесплатный IP-скан, который проверяет классификацию IP-адресов с использованием 92 различных движков. При проверке движок относит IP к одной из четырех категорий: «Чистый», «Без рейтинга», «Вредоносный», «Подозрительный». Я прогнал все 45 уникальных IP-адресов по каждому из 92 движков (всего 4140 результатов) и получил следующие результаты:

  • Чистые: 1283 (31.0%);

  • Без рейтинга: 2848 (68.8%);

  • Подозрительные: 2 (0.04%);

  • Вредоносные: 7 (0.02%).

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

Анализ user agent 

Данные по user agent дают представление о том, как боты получали доступ к AWS. Такие данные легко подделать, но они могут быть использованы для идентификации злоумышленников: можно отследить номер версии ПО, используемого для доступа к AWS.

На следующей диаграмме показано количество попыток доступа для каждого user agent.

Попытки доступа для каждого user agent по всем canary-токенам
Попытки доступа для каждого user agent по всем canary-токенам

Большинство запросов было выполнено с использованием той или иной версии botocore3 (основной библиотеки, используемой в официальном AWS SDK). Также представлено большое количество хорошо известных HTTP-библиотек, таких как python-requests, axios и AIOHttp. Это дает основания полагать, что попытки доступа выполнялись автоматически с использованием специально разработанных инструментов (а не вручную с помощью AWS CLI).

Заключительные мысли

Вещи, которые меня удивили

Анализ собранных данных преподнес два неожиданных открытия:

  1. Никаких попыток доступа к BitBucket и GitLab. Приступая к эксперименту, я был уверен, что токены на этих сервисах будут найдены довольно быстро — возможно, не так быстро, как на GitHub, но все же я не ожидал, что будет 0 обращений. Я до сих пор не уверен, как это объяснить: возможно, эти сервисы менее популярны, или их сложнее сканировать ботами-скрейперами.

  2. Я нахожу довольно удивительным, что некоторые токены были схвачены и использованы буквально через несколько секунд после размещения. Токен NPMJS был схвачен менее чем за минуту (включая дополнительное время на вход в аккаунт и обнаружение попытки доступа). С GitHub и Pypi та же ситуация — токены на этих платформах были активированы через пару минут после того, как я их разместил. 

Мнение о canary-токенах 

Как я уже упоминал в начале, canary-токены — это недооцененный инструмент, позволяющий дешево и быстро создать дополнительный слой безопасности для приложения или ИТ-продукта. Несмотря на свою простоту, они могут сыграть решающую роль в обнаружении несанкционированного доступа и потенциальных угроз. 

Стратегически разместив canary-токены в своих системах, вы заранее выявлять вредоносную активность, быстрее на нее реагировать и митигировать последствие. Развертывание canary-токенов требует минимальных усилий и затрат, но при этом они могут значительно повысить уровень вашей безопасности. 

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

Выводы из эксперимента

Основной вывод: существуют группы злоумышленников, которые весьма эффективно используют веб-скрейперы, чтобы «пылесосить» сеть на предмет плохо лежащих секретов. Скорее всего, хакеры перехватят ваш токен или пароль в течение нескольких минут или часов в зависимости от того, на каком сервисе вы его оставили 

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

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


  1. vitaly_il1
    31.10.2024 15:12

    Спасибо, интересно - не знал про  canary tokens