DeviceLock DLP
1139

Как исследователи обнаруживают открытые базы данных MongoDB и Elasticsearch

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

В закладки

Однако, время идет и акцент в исследовательских изысканиях сместился на поиск оставленных в открытом доступе баз данных. Более половины известных случаев крупных утечек данных за прошлый год - это утечки из открытых баз (обзор утечек за 2018 год тут и тут ).

Сегодня попробуем разобраться как такие БД обнаруживаются исследователями безопасности…

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

Не открою Америки, если скажу, что основными инструментами для поиска открытых баз данных являются специализированные поисковики Shodan, BinaryEdge и Censys. Сразу оговорюсь, что это не бесплатные сервисы и за доступ к полным результатам поиска придется заплатить свои честно заработанные не-рубли (в случае Shodan это $59/месяц, BinaryEdge - $50/месяц, а за Censys - $99/месяц, и это только за минимальные базовые пакеты). Бесплатные версии поисковиков сильно ограничивают количество результатов в выдаче.

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

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

Давайте рассмотрим на примере поисковика Shodan, как найти открытые базы данных MongoDB и Elasticsearch.

Самый простой и очевидный запрос, который напрашивается это «MongoDB»:

Как видно из скриншота, этот запрос вернул нам все проиндексированные сервера MongoDB (на дефолтном 27017 порту). Причем большинство из них (на скриншоте это первые три) будут закрытыми БД, требующими учетных записей для подключения. А это не совсем то, что нам интересно. Точнее, это совсем не то.

Немного усложним запрос, используя поисковые фильтры «all:"mongodb server information" all:"metrics"»:

Результат выглядит уже намного лучше. Все найденные базы были свободно доступными на момент, когда их проиндексировал поисковик. С большой долей вероятности к ним можно будет подключиться по указанным IP-адресам, используя какой-либо менеджер для MongoDB (например, NoSQL Manager for MongoDB или Studio 3T for MongoDB).

Можно ограничить область поиска какой-либо страной. Скажем, давайте поищем открытые MongoDB в Китае (запрос «all:"mongodb server information" all:"metrics" country:"cn"»):

Для поиска открытых баз Elasticsearch удобно использовать запрос «port:"9200" all:"elastic indices"»:

К сожалению, я не нашел способа, как в поисковой строке задать условие поиска по размеру базы. Если вы знаете, как это сделать (задать в поисковой строке фильтр на параметры "totalSize" или "sizeOnDisk"), то пишите в комментариях.

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

Вот небольшой список того, что может пригодится:

- Shodan – официальная консоль На русском про ее использование можно почитать тут.

- GitHub - программа на питоне для поиска открытых баз (MongoDB, CouchDB, Elasticsearch и др.).

- Lampyre – очень мощный (и пока очень глючный!) графический интерфейс для поиска и визуализации найденного. Имеет встроенные шаблоны для поиска MongoDB и много чего еще. На русском небольшая заметка про использование Lampyre тут. Находится в стадии бета-тестирования со всеми вытекающими…

- https://t.me/dataleak (если заблокировано, то https://tele.click/dataleak) - мой скромный канал в Telegram, в котором я обозреваю утечки информации и в частности пишу про то, что находят исследователи безопасности в открытом доступе. Бывает интересно.

Автор: Ашот Оганесян

{ "author_name": "DeviceLock DLP", "author_type": "editor", "tags": [], "comments": 0, "likes": 14, "favorites": 4, "is_advertisement": false, "subsite_label": "devicelock", "id": 60310, "is_wide": false, "is_ugc": false, "date": "Wed, 06 Mar 2019 09:15:31 +0300", "is_special": false }
0
{ "id": 60310, "author_id": 245337, "diff_limit": 1000, "urls": {"diff":"\/comments\/60310\/get","add":"\/comments\/60310\/add","edit":"\/comments\/edit","remove":"\/admin\/comments\/remove","pin":"\/admin\/comments\/pin","get4edit":"\/comments\/get4edit","complain":"\/comments\/complain","load_more":"\/comments\/loading\/60310"}, "attach_limit": 2, "max_comment_text_length": 5000, "subsite_id": 245337, "last_count_and_date": null }
Комментариев нет
Популярные
По порядку

Комментарий удален

{ "page_type": "article" }

Прямой эфир

[ { "id": 1, "label": "100%×150_Branding_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox_method": "createAdaptive", "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfl" } } }, { "id": 2, "label": "1200х400", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfn" } } }, { "id": 3, "label": "240х200 _ТГБ_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fizc" } } }, { "id": 4, "label": "Article Branding", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "p1": "cfovx", "p2": "glug" } } }, { "id": 5, "label": "300x500_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfk" } } }, { "id": 6, "label": "1180х250_Interpool_баннер над комментариями_Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "bugf", "p2": "ffyh" } } }, { "id": 7, "label": "Article Footer 100%_desktop_mobile", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjxb" } } }, { "id": 8, "label": "Fullscreen Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjoh" } } }, { "id": 9, "label": "Fullscreen Mobile", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjog" } } }, { "id": 10, "disable": true, "label": "Native Partner Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyb" } } }, { "id": 11, "disable": true, "label": "Native Partner Mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyc" } } }, { "id": 12, "label": "Кнопка в шапке", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "p1": "bscsh", "p2": "fdhx" } } }, { "id": 13, "label": "DM InPage Video PartnerCode", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox_method": "createAdaptive", "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "bugf", "p2": "flvn" } } }, { "id": 14, "label": "Yandex context video banner", "provider": "yandex", "yandex": { "block_id": "VI-223676-0", "render_to": "inpage_VI-223676-0-1104503429", "adfox_url": "//ads.adfox.ru/228129/getCode?pp=h&ps=bugf&p2=fpjw&puid1=&puid2=&puid3=&puid4=&puid8=&puid9=&puid10=&puid21=&puid22=&puid31=&puid32=&puid33=&fmt=1&dl={REFERER}&pr=" } }, { "id": 15, "label": "Баннер в ленте на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byudx", "p2": "ftjf" } } }, { "id": 16, "label": "Кнопка в шапке мобайл", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byzqf", "p2": "ftwx" } } }, { "id": 17, "label": "Stratum Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fzvb" } } }, { "id": 18, "label": "Stratum Mobile", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fzvc" } } }, { "id": 19, "disable": true, "label": "Тизер на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "p1": "cbltd", "p2": "gazs" } } }, { "id": 20, "label": "Кнопка в сайдбаре", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "p1": "cgxmr", "p2": "gnwc" } } } ] { "page_type": "default" }