Анализ тысяч открытых баз данных ElasticSearch

Анализ тысяч открытых баз данных ElasticSearch

Тысячи серверов ElasticSearch и их базы данных свободно доступны без какой либо защиты.

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

15 июня 2020 при сканировании порта 9200, было найдено 436 терабайт утекших данных. Эти данные принадлежат таким предприятиям, как Amazon, DigitalOcean, Google, Microsoft, ESPN и многим китайским корпорациям.

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

Пример полей найденных у Amazon:
*Важно понимать - это лишь быстрый пример. Сервер может принадлежать тому, кто использует Amazon в качестве хостинга. Найти и детально изучить базы можно будет после прочтения этого гайда.


 "fields_list": [
     "auth_user",
     "auth_user.company_id",
     "auth_user.country",
     "auth_user.country.address_format_id",
     "auth_user.country.country_name",
     "auth_user.country.ebay_countrycode",
     "auth_user.email",
     "auth_user.first_name",
     "auth_user.is_active",
     "auth_user.is_staff",
     "auth_user.is_superuser",
     "auth_user.issuperadmin",
     "auth_user.last_name",
     "auth_user.password",
     "auth_user.reset_password",
     "email",
     "first_name",
     "gender",
     "last_name",
     "orders",
     "phone",
     "tab_id",
     "tab_name",
     "tab_parent_id",
     "tin",
     "totalorder"
]


Утечка данных ElasticSearch

Самые популярные индексы баз данных называются Readme, Kibana или nightlionsecurity.com.
Readme - скорее всего говорит о том, что база данных взломана и залочена с требованием выкупа.
Kibana - помогает анализировать логи (в которых тоже много всего интересного)
Последний - компания, рекламирует себя путем переименования утекших баз данных.

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

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

Топ 3 самых уязвимых стран


СтранаКоличество серверов
China5468
United States4256
Germany1070
52a3fce162a029a3fac92bb47428da08.jpg


Топ уязвимых доменов по Alexa Rank

Alexa RankDomains
16451espn.com.mx
18568htmlbook.ru
21661qyresearch.com
25914econet.ru
28058baiduyunpan.com
30961btba.cc
31947btba.com.cn
32804espn.com.au

Топ 10 самых уязвимых организаций

ОрганизацияКоличество серверов
Hangzhou Alibaba Advertising Co., Ltd.2478
Amazon.com, Inc.1933
DigitalOcean, LLC1332
Google LLC1203
Shenzhen Tencent Computer Systems Company Limited910
OVH SAS825
Microsoft Corporation745
Hetzner Online GmbH336
Linode, LLC321
China Unicom Beijing Province Network236

Как хакеры могут воспользоваться данными


Вариантов эксплуатации подобных данных очень много, рассмотрим несколько простых.

Продажа данных. Простой дамп базы данных и продажа ее в даркнете. Это может быть как продажа целой базы так и отдельный тип данных, номера и пароли платежных карт.

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

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

Шпионаж. Данные могут быть проданы конкурентам или использованы для собственного обогащения. Например можно вложиться в компанию перед большим слиянием.


Как найти базы данных Elasticsearch

WEB интерфейс

Все данные фактически лежат на поверхности, нужно только постучаться. Что мы и сделаем используя поисковик Spyse.
Самый простой способ поиска информации это использование Web интерфейса .

Алгоритм поиска:
Перейдите на spyse.com , нажмите кнопку расширенного поиска ( advanced search ) на домашней странице и используйте всего один фильтр, чтобы найти нужную информацию - IP > Ports & Technologies > Opened Ports List > equals to > target – 9200 (номер порта который мы исследуем)

d37fcd72a89d0ea26ca1313d0ad17c24.png


Ссылка на поисковый запрос.


cfad2fa1bef251e75df436378556c052.png


В результатах поиска вы найдете все IP-адреса с открытым портом 9200, на котором мы предполагаем есть Elasticsearch. Но если вы хотите убедиться, используйте простой запрос Get для каждого IP-адреса и в ответе получите подтверждение гипотезы.

Вся дополнительная информация - связанные организации, интернет-провайдеры, домены и поддомены, рейтинг Alexa, номер AS и т. д... Уже связана с помощью алгоритмов Spyse.

Для более продвинутых пользователей которые хотят автоматизировать поиск рекомендуется освоить работу с API.

Использование API

Первый запрос предоставляет почти ту же информацию, что и web, за исключением только всех доменов, связанных с IP. Это связано с тем, что если IP не имеет записи PTR, он не будет связан с доменом. Чтобы предотвратить эту ситуацию и расширить диапазон исследования, добавив несколько новых доменов, нужно использовать один дополнительный запрос.

Пример первого запроса:

https://api.spyse.com/v2/data/ip/search?limit=10&search_params=%7B%22ip_port_open_ports%22%3A%20%5B%7B%22operator%22%3A%20%22eq%22%2C%20%22value%22%3A%20%229200%22%7D%5D%7D

Запрос можно проверить прямо в документации API Spyse. Для этого авторизуйтесь используя API token найденный на странице с API . После, найдите POS / Ip / port и введите значения {«ip_port_open_ports»: [{«operator»: «eq», «value»: «9200»}]}

Пример:

{
  "limit": 1,
  "offset": 0,
  "search_params": [
    {
   "ip_port_open_ports": {
     "operator": "eq",
     "value": "9200"
   }
    }
  ]
}

Результаты:

{
   "ip":"3.122.243.58",
   "maxmind_geo":{
   "city_name":"Frankfurt am Main",
   "continent_code":"EU",
   "continent_name":"Europe",
   "country":"Germany",
   "country_iso_code":"DE",
   "location":{
   "lat":50.1188,
   "lon":8.6843
   },
   "tz":"Europe/Berlin",
   "updated_at":"2020-02-19T08:48:32.423012Z"
   },
   "maxmind_isp":{
   "as_num":16509,
   "as_org":"Amazon.com, Inc.",
   "isp":"Amazon.com",
   "org":"Amazon.com",
   "updated_at":"2020-02-19T08:48:32.423049Z"
   },
   "ptr_record":{
   "value":"ec2-3-122-243-58.eu-central-1.compute.amazonaws.com",
   "updated_at":"2020-02-18T15:58:17.539008Z"
   },
   "score":7,
   "severity_details":{
   "HIGH":10,
   "MEDIUM":19,
   "LOW":2
   },
   "updated_at":"2020-02-18T15:58:17.539008Z"
}
 


Для проверки действительно ли на порту есть Elasticsearch рекомендуется написать короткий скрипт который сам будет проверять цели.

Имеем информацию по IP на которых есть Elasticsearch. Второй запрос подразумевает сбор всех доменов привязанных к IP.

Пример запроса:
https://api.spyse.com/v2/data/domain/search?limit=10&search_params=%7B%22domain_dns_a%22%3A%20%5B%7B%22operator%22%3A%20%22eq%22%2C%20%22value%22%3A%20%223.93.170.245%22%7D%5D%7D

Проверьте это в документации API Spyse – GET /domain/search > {“domain_dns_a”: [{“operator”: “eq”, “value”: “8.8.8.8”}]}

Данные собраны.

Дальнейшие действия применимы только к базам данных Elasticsearch и направлены на получение информации с базы данных. Все, что нужно сделать, это правильно обратиться к базе (это зависит от версии эластика). Запросы, как обычно, представлены в документации по Elasticsearch .


Анализ баз данных Elasticsearch

Алгоритм поиска:

Обращаемся к адерсу где находится Elasticsearch в формате «ip: port / _stats».

Пример:

curl http://171.244.129.66:9200/_stats


36dd4db9c66703b2b673ddc2e0931797.png


Ответ вернет индексы, размер и количество документов. Ответ может быть и отрицательным:
> Информация о том, что у нас нет разрешения на такие действия.
> Ошибка.
Если доступ запрещен или у нас нет доступа, можно попробовать получить информацию другим способом, указав путь _nodes.

Пример:

curl http://171.244.129.66:9200/_nodes


ed2333639fada4407cad705d96b2214f.png


Когда индексы будут собраны, собираем их маппинги делая запросы формата: “ip:port/_mapping”, и после собираем их поля по пути “sql?format=json” запросы с пейлоадом в формате “{“query”:”DESC indexname“}”
Пример:

curl http://171.244.129.66:9200/_mapping


9181051338ac516e4accee789fac2780.png


На последнем этапе - получение точных данных.
Отправляем путь «index / _ search» в для получения 10 случайных записей каждого индекса.

curl --header "Content-Type: application/json" --request GET --data '{"query":"DESC products"}' '178.32.101.214:9200/_sql?format=json'


a3dca87a014f05dbd8ecf90a3b2f773d.png


Проблемы с Elasticsearch

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

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

Разработчики Elasticsearch предоставляет основные правила и рекомендации по безопасности , которыми команда Spyse призывает не пренебрегать.

Spyse не поддерживает хакеров и не приветствует использование данных в злонамеренных целях. Подобный статьи направлены на изменение глобального безответственного отношения к кибер-безопасности интернет инфраструктур.
Alt text

Один хакер может причинить столько же вреда, сколько 10 000 солдат! Подпишись на наш Телеграм канал, чтобы узнать первым, как выжить в цифровом кошмаре!