— How do I authenticate?
— You don't!
это цитата из FAQ memcached.
Да, в memcached по умолчанию не предусмотрено системы аутентификации, и администратор сам должен сделать маленький шажок, чтобы закрыть свой сервер от свободного доступа. Например, запустить его на 127.0.0.1, или воспользоваться фаерволом. Сколько же сайтов рунета это сделали?
Из чуть более 3.5 млн. сайтов зоны .ru, которые ответили моему скрипту по http, 39 тысяч имеют запущенный и открытый всему миру сервер memcached на стандартном порту 11211. Это количество настолько чудовищно, что я даже задумывался о создании сервиса в формате Memcached As A Service, который бы хранил данные клиентов на случайном наборе из, к примеру, ста открытых memcached серверов. Конечно, скорость работы с таким виртуальным мемкешем была бы намного ниже, но зато какая надёжность)
Популярные сайты, на которых обнаружена уязвимость
Для меня оказалось сюрпризом, что открытый memcached можно найти даже на полностью статических сайтах, заброшенных сайтах в стиле 90-x годов, на сайтах с посещяемостью около нуля — то есть там, где он явно не нужен и сложно вообразить, откуда в такой дыре вообще возник memcached. Но популярные сайты тоже не остались в стороне. В печальную статистику входят, например
- mtsbank.ru МТС банк хранит результаты своих sql запросов в открытом мемкеше
- befree.ru сеть магазинов одежды befree
- kfc.ru знаменитая сеть ресторанов
- ng.ru независимая газета
- rt.ru официальный сайт Ростелекома
- zyxel.ru известный производитель сетевого оборудования
Всем этим сайтам я отправил уведомления о том, что они стали героями статьи. На Ростелекоме доступ закрыли прямо когда я подключился и делал запросы, похвальная скорость работы админов.
Что обычно хранится на «публичных» memcached серверах?
Очень часто это куски вёрстки, либо html целых страниц, массивы чисел, мелкие тексты. Иногда ключами выступают sql-запросы, так что видна ещё и структура базы. Попадаются токены восстановления паролей и подтверждений регистрации. Да, сессии пользователей часто лежат в memcached. В 99% случаев эта сессия стартует для всех посетителей автоматически, пустая и никак не используется) но при этом бережно хранится в оперативке, видимо, для ускорения сайта.
Немного любопытной статистики
объём памяти, отданный под memcached
На большинстве хостов memcached занимает объём памяти по умолчанию (64 Mb). Таких установок почти 18 тысяч. Интересно, что на твёрдом втором месте значение в 256 мегабайт, а вот 128 мегабайт установлено менее чем на двух тысячах серверов. Больше двух тысяч администраторов выделило под memcached целых два гигабайта. При построении графика я выбросил экзотические нестандартные значения, которых было меньше сотни.
объём данных в кеше
Сразу видно, что большая часть открытых memcached серверов просто пустует. Я часто наблюдал полностью пустые хосты, с нулём занятых байт. Почти 25 тысяч серверов держат меньше мегабайта в кеше. Больше двухсот мегабайт в кеше имеют меньше пятисот серверов, больше двух гигабайт не имеет никто.
hit-rate (частота попаданий в кеш)
По горизонтали процент попаданий в кеш, по вертикали количество серверов, имеющих такой процент попадания. Оказалось, что существуют сервера memcached, у которых процент попаданий в кеш составляет строго 0%! Скорее всего, в данном случае инструмент используется не по назначению. Веб-интерфейс memcachedAdmin выдаёт предупреждение, если hit-rate меньше 90%. Таких серверов в оказалось 73% от общего числа.
Планы на будущее
Для полноты картины неплохо было бы просканировать и другие зоны, но для этого нужен достаточно мощный сервер. Если у кого-то вдруг временно простаивает железо, с радостью приму приглашение воспользоваться им в благих целях веб-аналитики.
Автор: catanfa