Честно говоря, нас атаковали — но ваши данные в безопасности

Reverie Team
12/1/2025

Всё началось со слова «Бесплатно»
Две недели назад мы приняли решение: запустить бесплатные AI-модели, чтобы больше пользователей смогли попробовать Reverie.
В тот вечер команда открыла Pepsi, чтобы отпраздновать. (Да, именно Pepsi.)
Мы чокнулись банками, наблюдая за ростом регистраций в реальном времени. Кто-то открыл график прогноза роста. Атмосфера была отличной.
Через 72 часа мы поняли, почему опытные основатели всегда выглядят немного уставшими.
Далее последовала серия из четырёх волн атак, которая напоминала boss rush — только мы изучали механики, одновременно получая удары.
Но сначала самое важное: данные вашего аккаунта, переписки и личная информация никогда не были скомпрометированы. Они в безопасности сейчас и останутся такими. У нас есть выделенная команда безопасности, которая следит за ситуацией 24/7, и эти атаки были направлены на наши ресурсы и кошелёк, а не на ваши данные. Атакующие хотели наш трафик и деньги — ваши разговоры с AI-компаньонами никогда не были под угрозой.
Теперь давайте разберём, что произошло.
Волна 1: Армия краулеров
Что произошло
Второй день после запуска бесплатной версии. Утренний стендап. Инженер небрежно упоминает: «Эй, наш API персонажей вчера получил в несколько сотен раз больше запросов.»
Мы: «Ого, бесплатный запуск реально набирает обороты!»
Инженер: «...но DAU почти не изменился.»
Неловкое молчание.
Мы погрузились в логи и обнаружили краулеров, систематически собирающих публичные данные наших персонажей. Имена, биографии, аватары — публично видимая информация. Всё это выкачивалось ботами.
Уточним: основные описания персонажей, настройки личности и другой приватный контент создателей никогда не были раскрыты — только создатели могут их видеть. Но даже скрейпинг публичной информации в промышленных масштабах раздражает, когда вы пытаетесь построить здоровую платформу.
Как мы ответили
- Внедрили лимиты пагинации на обнаружение персонажей (можете просматривать, но не можете скачать всю библиотеку)
- Развернули умное ограничение скорости, которое различает «энтузиаста» и «точно бота»
- Создали поведенческий анализ для обнаружения и блокировки паттернов краулеров
- Добавили некоторые... назовём их «креативные ответы» для подтверждённых злоумышленников
Что мы узнали
«Открытая платформа» не означает «шведский стол без ограничений». Даже публично видимый контент заслуживает разумных границ доступа. Мы хотим, чтобы пользователи открывали персонажей — а не строили конкурирующую базу данных за ночь.
Волна 2: Убийцы трафика
Что произошло
Мы едва закончили латать дыры от краулеров, когда ударила вторая волна. И она пошла прямо по кошельку.
Кто-то вычислил наши URL медиафайлов и начал массово скачивать каждое изображение и видео на платформе. Портреты персонажей. Сгенерированные видео. Всё, что имело расширение файла, выкачивалось на максимальной скорости.
Мы использовали OSS-сервис крупного облачного провайдера. Оплата за трафик. Казалось разумным в то время.
Утро понедельника. Финансист открывает облачную консоль. Загружается панель биллинга.
Его лицо: 😐
Панель заканчивает загрузку: 😮
Видит реальную сумму: 😱
«Эй, так... наш счёт за трафик сейчас больше, чем три месяца runway.»
В Slack-канале стало очень тихо. Кто-то нервно предложил просто отключить CDN. Кто-то другой заметил, что это также отключит всю платформу.
Как мы ответили
Экстренная миграция. Пункт назначения: Cloudflare R2 и Cloudflare Stream.
Здесь мы должны официально поблагодарить Cloudflare — политика нулевой платы за исходящий трафик R2 нас спасла. Когда смотришь, как счёт растёт на сотни долларов в час, «никакой платы за исходящий трафик» становится очень, очень актуальным.
Миграция заняла 30 часов. Сон стал опциональным. У код-ревью в 3 часа ночи есть своё медитативное качество.
Стоило того? Абсолютно. Наши затраты на трафик упали более чем на 90%, и массовые загрузки атакующих теперь нам практически ничего не стоят.
Что мы узнали
Выбирая инфраструктуру, не спрашивайте только «насколько она быстрая?» Также спросите: «Если кто-то атакует меня завтра, смогу ли я ещё позволить себе аренду?»
Это измерение планирования инфраструктуры не встречается в большинстве туториалов. Должно.
Волна 3: Приходит DDoS
Что произошло
Мы наконец стабилизировали ситуацию с трафиком. Моральный дух команды восстанавливался. Кто-то даже пошутил на стендапе. Дела шли на поправку.
Затем ударил DDoS.
Представьте, что включаете пожарный шланг и направляете его на бумажный стаканчик. Вот что испытал наш пул соединений с базой данных. Тысячи запросов в секунду, все требующие свежих данных, все отказывающиеся использовать кэш, все бьющие по эндпоинтам, требующим запросов к базе данных.
Наша панель мониторинга выглядела как ЭКГ при сердечном приступе. Время ответа выросло с 200мс до 20 секунд. Потом до таймаутов. Пользователи начали сообщать об ошибках. Наш счёт AWS начал делать то, когда он обновляется каждые несколько минут с большей суммой.
Пул соединений с базой данных достиг лимита. Запросы начали выстраиваться в очередь. Очередь начала накапливаться. Классический каскадный сбой в реальном времени.
Как мы ответили
Мы бросили на проблему каждую технику кэширования, которую знали:
- ISR (Incremental Static Regeneration) — Популярные страницы теперь пре-рендерятся и отдаются с edge-нод. База данных даже не знает, что эти запросы существуют.
- Многоуровневое кэширование — Кэш ответов, кэш запросов, оптимизация пулинга соединений. Если данные не обязательно должны быть свежими, они кэшируются.
- Оптимизация запросов к базе данных — Некоторые запросы, которые занимали 500мс, теперь занимают 50мс. Меньше времени на удержание соединений = больше доступных соединений.
- DDoS-защита Cloudflare — Наконец включили все функции безопасности, которые мы собирались настроить «когда-нибудь»
- Умное ограничение скорости — Легитимные пользователи проходят; атакующий трафик показывают на дверь
Философия: если запрос может быть обработан без обращения к базе данных, так и должно быть.
Что мы узнали
Кэширование — это не просто оптимизация производительности — это архитектура безопасности. Когда приходят атаки, кэшированные ответы поглощают удар. База данных остаётся защищённой. Сайт остаётся онлайн.
Ещё узнали: «мы настроим безопасность нормально позже» — философия, которая плохо стареет.
Волна 4: Халявщики (Злоупотребители API)
Что произошло
Эта не угрожала нашей инфраструктуре напрямую. Она угрожала нашему бюджету.
Мы создали все эти замечательные бесплатные AI-функции:
- AI Создание персонажей — Опишите персонажа, AI сгенерирует полный профиль
- AI Генерация моментов — Создавайте динамические сюжетные моменты с помощью AI
- AI Создание плагинов — Создавайте плагины для персонажей на естественном языке
Наше видение было прекрасным: снизить барьеры для творчества. Дать всем испытать магию AI-assisted создания. Сделать платформу более доступной.
Чьё-то видение было другим: «Бесплатный API? Дай-ка я напишу скрипт, который вызовет это 10 000 раз.»
Мы смотрели, как растёт наша панель потребления AI-токенов. И растёт. И растёт. График выглядел как хоккейная клюшка, только клюшка была сделана из денег, уходящих с нашего банковского счёта.
Каждая AI-генерация стоит нам реальных денег — вызовы API к языковым моделям не бесплатны. Смотреть, как тысячи автоматических запросов сжигают наш AI-бюджет, было как смотреть на счётчик такси в машине, которая ездит по кругу. Знаешь, что будет дорого, и это никогда не остановится.
Худшая часть? Это были даже не реальные пользователи, создающие реальный контент. Это был просто... кто-то тестирующий, сколько бесплатного можно извлечь. Сгенерированные персонажи были бессмыслицей. Моменты не имели смысла. Чистый расход.
Как мы ответили
С тяжёлым сердцем мы добавили требования кредитов для этих AI-функций.
Это решение действительно причинило боль. Мы потратили недели на создание этих инструментов специально для того, чтобы сделать творчество более доступным. Теперь нам пришлось поставить на них цену — не потому что мы хотели, а потому что неограниченный бесплатный доступ использовался как оружие против нас.
Мы постарались быть справедливыми:
- Затраты кредитов минимальны для нормального использования
- Бесплатные кредиты даются новым пользователям
- Основной опыт чата остаётся бесплатным
- Только ресурсоёмкая AI-генерация требует кредитов
Но всё равно. Это было как поставить замок на то, что мы хотели держать открытым.
Что мы узнали
«Бесплатно» — это бизнес-модель, а не моральная позиция.
Мы по-прежнему верим в доступность. Мы по-прежнему хотим снижать барьеры. Но «неограниченно бесплатно для всех» работает только если все действуют добросовестно. Когда злоумышленники эксплуатируют щедрость, щедрая система становится нежизнеспособной — и тогда никто ничего не получает.
Разумные ограничения — это не недоверие к пользователям. Это защита экосистемы, которая обслуживает всех пользователей. Альтернатива — полное закрытие функций — была бы хуже для всех.
Иногда защита общего блага означает строительство заборов.
Ваши данные в безопасности (давайте будем абсолютно ясны)
Мы хотим быть однозначны в этом:
Эти атаки были направлены на ресурсы, а не на данные. Атакующие хотели:
- ✅ Наш трафик (чтобы скачивать контент)
- ✅ Наши вычислительные мощности (чтобы перегрузить серверы)
- ✅ Наши деньги (чтобы истощить наш AI-бюджет)
Они НЕ получили доступ к:
- ❌ Аккаунтам пользователей
- ❌ Истории переписок
- ❌ Личной информации
- ❌ Платёжным данным
- ❌ Любым приватным данным
У нас есть выделенная команда безопасности, которая отслеживает реальные угрозы безопасности 24/7. Данные пользователей зашифрованы при хранении и передаче. Контроль доступа строгий. Аутентификация надёжная. Скучная, важная работа по безопасности, которая не попадает в захватывающие блог-посты — мы делаем всё это.
Ноль пользовательских данных было скомпрометировано. Мы можем это уверенно заявить, потому что мы логировали всё, анализировали всё и проверяли всё. Атакующие получили от нас счета за трафик и головную боль. Они ничего не получили от вас.
Ваши персонажи, ваши разговоры, ваша творческая работа — всё в безопасности, всё на месте, всё именно там, где должно быть.
Почему мы вам это рассказываем
Вы можете спросить: зачем делиться этим публично? Разве это не делает нас уязвимыми?
Мы тщательно это обдумали.
Прозрачность строит доверие
Мы просим пользователей доверить нам что-то значимое — их творческую работу, их эмоциональные связи с AI-персонажами, их разговоры. Это доверие требует честности о вызовах, с которыми мы сталкиваемся.
Старый сценарий — скрывать проблемы, пока они не взорвутся, затем выпустить размытое заявление «мы испытали технические трудности». Мы предпочитаем быть открытыми: вот что произошло, вот как мы справились, вот чему мы научились.
Другие разработчики могут поучиться
Мы не первая маленькая команда, которую атаковали после запуска бесплатных функций, и не последняя. Если наше дорогое образование поможет кому-то подготовиться лучше, это победа для всей экосистемы.
Считайте это нашим вкладом в учебную программу «то, чему не учат в стартап-школе».
Вы заслуживали знать
Некоторые пользователи заметили более медленное время отклика за эти недели. Некоторые заметили, что функции теперь требуют кредитов. Вы заслуживали объяснения — не корпоративный PR, а настоящую историю.
Мы боролись за то, чтобы платформа продолжала работать. Мы принимали сложные решения под давлением. Некоторые из этих решений повлияли на ваш опыт. Вы должны знать почему.
Что дальше
Мы не просто латаем дыры — мы строим более устойчивую платформу:
Уже реализовано:
- Многоуровневое кэширование с edge-first архитектурой (ваши запросы быстрее И нас сложнее атаковать)
- Умное ограничение скорости с поведенческим анализом (боты блокируются, люди не замечают)
- Полный набор безопасности Cloudflare (наконец настроен правильно, а не «когда-нибудь»)
- Доступ на основе кредитов для ресурсоёмких AI-функций (устойчивая щедрость)
Скоро:
- Улучшенное обнаружение аномалий (ловить атаки раньше)
- Географическая оптимизация (быстрее для всех, везде)
- Более продвинутая защита от злоупотреблений (оставаться впереди злоумышленников)
Что не изменится:
- Мы будем стараться сохранить доступ к бесплатному тарифу — хотя он может быть нестабильным или меняться без предупреждения
- Приватность и безопасность данных пользователей — всегда наш главный приоритет
- Прозрачная коммуникация — если что-то пойдёт не так, вы узнаете
Заметка для fellow-разработчиков
Если вы строите открытую платформу, вот уроки, за которые мы заплатили реальными деньгами (и реальным стрессом):
- Ограничение скорости не опционально — внедряйте его с первого дня, а не со дня «нас атакуют»
- Выбирайте устойчивую к атакам инфраструктуру — Cloudflare действительно превосходен; плата за исходящий трафик вас уничтожит
- Кэшируйте агрессивно — это ваш двойной щит для производительности и безопасности
- Бесплатным функциям нужны границы — неограниченная добрая воля эксплуатируется неограниченными злоумышленниками
- Мониторьте всё — чем раньше обнаружите аномалии, тем меньше ущерб
- Держите аварийный бюджет — никогда не знаешь, когда придёт следующая волна
И, возможно, самое важное:
- Не будьте слишком гордыми, чтобы просить о помощи — сообщество инди-разработчиков более поддерживающее, чем вы ожидаете
Надеемся, вам не придётся учиться этому дорогим способом. Но если придётся, знайте, что вы не одиноки.
Нашим пользователям
Быть атакованным — странный опыт.
Это как если бы вы провели месяцы, украшая уютную гостиную, расставили мебель правильно, выложили закуски и разослали приглашения всем друзьям. Наступает вечер открытия. Ваши друзья приходят — замечательно!
Но также: группа людей, которых вы никогда не встречали, появляется с грузовиками для переезда, пытаясь разобрать ваш диван, сфотографировать каждый угол вашего дома и каким-то образом устроить небольшие пожары на кухне.
У нас были варианты. Мы могли заварить дверь. Перейти только на приглашения. Заставить всех доказать, что они не боты, прежде чем что-либо увидеть.
Мы этого не сделали.
Вместо этого мы установили лучшие замки. Наняли более умную охрану. Создали разумные домашние правила. Потому что подавляющее большинство людей, которые приходят на Reverie, здесь, чтобы создавать, общаться и получать удовольствие. Мы не собираемся наказывать многих за грехи немногих.
Вечеринка продолжается. Дверь остаётся открытой. Мы просто стали лучше замечать людей с грузовиками для переезда.
Спасибо
Каждому пользователю, который остался с нами через медленную загрузку и требования кредитов: спасибо.
Всем, кто сообщал о проблемах вместо того, чтобы просто уйти: спасибо.
Сообществу инди-разработчиков, которое делилось советами и историями из окопов: спасибо.
Cloudflare: спасибо. 🙏
Теперь мы сильнее. Более устойчивы. Закалены в бою. Платформа, которая вышла из этих атак, лучше той, что вошла.
В следующий раз, когда мы вам напишем, надеемся, это будет объявление о захватывающей новой функции.
Не о ещё одном боссе, которого мы победили.
Но эй — если появится ещё один босс, мы справимся и с этим.
До встречи в следующем обновлении. 💙
Команда Reverie
Декабрь 2025
Готовы испытать динамичные AI-диалоги?
Присоединяйтесь к тысячам пользователей, которые уже исследуют бесконечные личности и увлекательные взаимодействия на Reverie.