Ставили MongoDB з дефолтними налаштуваннями? Вітаємо, вона абсолютно відкрита всім

image

Все, напевно, чули про NoSQL бази, зокрема, про MongoDB. Може навіть бути хтось ставив цю базу на свій сервер. Можливо, з дефолтними налаштуваннями. Якщо це так, пора терміново пірнути під кат. Тому що MongoDB з дефолтними налаштуваннями абсолютно відкрита ззовні всім і кожному.

Вступ
Отже, все почалося з листа від вельми недурственного хостингу Hetzner. Ось як воно виглядало:

image

Коротко суть в наступному:

MongoDB — це популярна база в інтернеті, але от біда — вона в багатьох місцях абсолютно відкрита всім. Це неправильно, тому рекомендації щодо безпеки. Ну, ви отримали цей лист, тому що у вас вона відкрита теж. Будете подібні листи і надалі, поки не закінчите.

Я здивувався. Блін, та я дуже здивувався.

Вирішив перевірити, наскільки вона відкрита. Я, просто невимовно здивувався результатами, understatement.

А результати такі: кращого троянського коня світ просто не знав.

Ну, а тепер конкретика.

Перевіряємо доступність ззовні
Це просто. Пробуємо відкрити сайт у браузері за порту 28017. Набираємо — ваш_домен_ру:28017

І, вуаля:

image

Ну, так, так. Поки особливого криміналу поки немає, але як мінімум неприємно, що службова інформація доступна всім.

Перевіряємо далі.

Пробуємо підключитися зовні mongo-клієнтом. Набираємо в консолі на ноутбуці:
mongo ваш_домен.зона:27017


І знову вуаля:

image

Ось так, не запитавши пароля, просто підключаємося до шеллу MongoDB. Тепер ми можемо створювати, змінювати, видаляти, переглядати вміст всіх баз. Це вже повний абзац. Але, на жаль, це тільки квіточки.

Набираємо в shell MongoDB команду ls():

image

Ну і на закуску cat("./etc/passwd"):

image

Далі копирсатися не став. Мені вистачило.

Дивимося налаштування на сервері: less /etc/mongodb.conf. І ось що ми бачимо:
image

Налаштування авторизації по дефолту вимкнені.

Ну і по дефолту слухаємо всі інтерфейси:

image

Що потрібно зробити, щоб полагодити?
Як мінімум додати рядки в конфіг:
bind_ip = 127.0.0.1


І опціонально налаштувати авторизацію:
# Turn on/off security. Off is currently the default
#noauth = true
auth = true


При цьому перевірте, щоб сайт/сервіс не зламався, оскільки, можливо, доведеться навчити авторизуватись і його. Плюс обов'язково потрібно провести повний аудит системи на предмет проникнення.

Трохи лірики і статитики
Статистика пригнічує. Тільки в Німеччині студенти, з яких все почалося, виявили десятки тисяч відкритих баз. Картина в світових масштабах може бути в десятки, а то і сотні разів гірше.

Не буду задавати риторичні питання, а втім, якого біса? Поставлю.

1) Навіщо робити такі дефолтні налаштування?
2) Навіщо в Mongo shell вбудовувати доступ до файлової системи?

Зрозуміло, що сам винен, RTFM. Але навіщо такі налаштування?

Мимоволі закрадається думка: «така „дивна логіка“ зустрічається тільки в дефолтних настройках або, може, ще де-небудь, наприклад, в ядрі?»

Висновки: хочете когось зламати? Порадьте встановити йому дефолтну MongoDB.

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.