Как я создал бота знакомств и как вся история дошла до полиции
Эта история со мной произошла в марте этого года. Местами это был будто сериал, местами — стендап-шоу. Причем тут бот знакомств, хакер, полиция и мемы — далее в статье.
Меня зовут Рустам, я разработчик ботов (Python), сайтов (WordPress, бакенд Spring Boot) и бывший интернет-маркетолог. И я поведаю про довольно интересный и стрессовый момент в своей жизни, когда думал, что всё держу под контролем, но это оказалось не так.
Июль-август, 2020
В тот момент я менял профессию, т. к. разочаровался и перегорел в интернет-маркетинге (настраивал таргет FB*, Instagram*, VK и т. д.) и решил уйти в айти. Оба направления стрессовые, но в маркетинге правила меняются каждые 2 недели, в айти же этот промежуток условно можно представить как полгода-год.
Но проблема. Я не знаю Python и для его более глубокого изучения решаю сделать бота. У меня есть студенческое региональное сообщество (VK), которое довольно активно и для ещё бóльшего вовлечения я решаю сделать бота знакомств. Если ты имеешь в своем сообществе не только мемы, а ещё и такого бота — все конкуренты будут меркнуть на твоём фоне.
Бот разработан, запущен, я заливаю код на Github как pet-project для будущего поиска работы на фрилансе и благополучно о нём забываю.
Декабрь, 2020
Я создаю ютуб-канал на айтишную тематику (который потом забрасываю), где первым видео рассказываю, как я легко и просто за 3 недели сделал бота знакомств (как Дайвинчик) без предварительного знания Python. Ссылку на канал добавлю в конце статьи (если прям будет интересно), т. к. речь сейчас не о нём.
Так как в названии видео фигурировал «Дайвинчик» — естественно это видео смотрели преимущественно школьники. Спустя год оно залетело в какой-то SEO-запрос и эти школьники начали долбить личку мне с идиотскими предложениями. Были, конечно, и адекватные предложения, но это очень малый процент. К примеру — школьник пытается выслужиться перед любимым ютубером (видимо пересылая ему мои ответы), пытаясь предложить какие-то крутые темы:
Или их примерные ожидания в цене за покупку исходников новой версии бота (такие школьники обычно покупают и перепродают исходники на форумах):
Неверное решение, что я рассказал в видео, что сделал бота легко и просто. Продешевил, так сказать, свою работу. Это действительно было легко из-за моего бэкграунда, так как у меня два айтишных диплома, ещё будучи маркетологом я уже поднимал VDS-ки, делал лендинги и JS-скрипты.
Март, 2022
Прошло почти 2 года с момента создания первой версии бота знакомств. Я на фрилансе 1,5 года как разработчик. В основном для зарубежных заказчиков я правил сайты, для СНГ-заказчиков — делал ботов для VK и Telegram.
Я уже был на максимальной уверенности, что не допускал никаких фатальных ошибок в этой теме. Пока не настало…
16:14, 11 марта, 2022
Я захожу в своё студенческое сообщество просто посмотреть комментарии и замечаю, что количество подписчиков уже не пятизначное, а четырехзначное. Меня прошибает пот: «Кого-то взломали…»
Захожу в Журнал действий и вижу там такую картину:
Взломали. Но. Меня.
Любой ключ доступа с этого момента потенциально опасен. Вычищаю:
Сразу пишу в чат админов. Насчет 10к человек, конечно, я тогда погорячился:
Не думайте что это «какие-то там 5к подписоты», для узкотематических региональных сообществ это довольно много.
Кроме ключей доступа я сразу убрал из админов новоназначенного хакера, который успел назначить себя админом:
И через 9 минут я уже писал в ТП по поводу возврата подписчиков:
Можете не читать всё полотно текста от ТП, там никакой конкретной информации, просто копипаст про информационную безопасность. Но спасибо им за оперативность, ответили за 5 часов и решили проблему через 7 часов.
Вот, кстати, как выглядело всё после решения:
Но вернемся к общению с ТП. Обратите внимание, я написал, что взломали мой токен. Я сразу понял, что если я назначил админом кого-то — взломали мой личный токен, выданный на моё standalone-приложение.
Для непросвещенных:
- Токены для ботов сообществ. Они имеют конкретные методы, которые им дозволено иметь. И неважно, это бот, который отвечает Вам в личке или бот, которого добавляют в какой-то пользовательский чат. Как пример — они имеют метод удаления пользователя из чата, но не имеют метода для добавления пользователя в чат. Т. е. у них существенные ограничения. В документации VK для разработчиков в методах, которые им разрешены — прямо пишется, что его можно вызвать с токеном сообщества.
- Личные токены через standalone-приложение. Эти токены затрагивают личный аккаунт пользователя и работают уже с более широким пулом методов. При этом для каждого токена можно выдать доступ к одной или к нескольким группам методов (friends, groups и т. д.)
Удалять пользователей из паблика токен сообщества не может, т. к. этот метод работает только с личным токеном. Значит меня взломали именно через личный токен. И назначили админа через этот токен. Все эти мысли помогли мне найти источник проблемы, о которой я расскажу позже.
А в этот момент я, естественно, вычистил все личные токены и на всякий остановил все личные standalone-приложения.
Реакция хакера не заставила себя ждать:
Я не стал ничего отвечать, т. к. не хотел давать никакой реакции. Его, судя по всему, это задело и он начал атаковать мой личный аккаунт своими ботами (у половины, кстати, лица для аватарок были сгенерированы нейросетью), которые кидали мне заявку в друзья (2-3 в минуту):
Я проанализировал тогда эти аккаунты. Это были стандартные ботоаккаунты, которые монетизировали через вступление в кучу групп.
17:30, 11 марта, 2022
Я в полиции. Составляю заявление по факту атаки. У меня железная логика, что 5000 удаленных пользователей — это минимум на 5000 рублей ущерба (если считать по ценам 2015 года, а так, конечно, я бы оценил ущерб минимум в 100 тысяч, по 20 рублей за подписчика, ввиду того что мы имеем региональную 18+ аудиторию в 2022 году). Ну а 5000 рублей — это уже уголовная ответственность. Даже если откинуть этот момент — то просто факт взлома я бы интерпретировал как неправомерный доступ к компьютерной информации, при этом это деяние повлекло уничтожение или модификацию некоторых данных. На момент написания заявления ТП VK ещё не вернула подписчиков, поэтому всё это имело силу.
Сам поход в полицию был довольно комичным. Сначала мою историю слушал дежурный с улыбкой на лице, постоянно переспрашивая:
— Сообщество? Во ВКонтакте? С мемами?
— Да-да.
Или:
— Ой, Вы что фильмов пересмотрели, где полиция так легко ловит хакеров?
Ну я то понимал, что один запрос от полиции в VK в рамках уголовного дела — и всё было бы действительно легко. VK выдал бы и IP и номер привязанной симки. Конечно, 100% симка была с сервиса sms-активаций, а сам пользователь сидел бы под прокси, но клубок бы начал распутываться.
Меня направляют в какой-то кабинет и вот, я сижу напротив девушки, с которой совместно, как диктант, составляю заявление. Опять же, комичность всей ситуации остаётся (из-за направленности сообщества и сообщений от хакера), но всё та же атака продолжается на меня даже в отделе. Боты продолжают и продолжают добавляться ко мне в друзья, что я даже показываю как доказательство своих слов при описании всей истории. Высчитываем примерный ущерб и на выходе от дежурного я получаю талон-уведомление:
Забегая вперед — через 4 дня пришло письмо с отказом о возбуждении уголовного дела: «В связи с отсутствием события преступления». Я не решился обжаловать это решение, т. к. к этому времени уже остыл, хотя, возможно, стоило бы. Да и подписчиков к этому моменту уже вернули и доказать факт ущерба уже было не особо реально.
Поздний вечер и ночь, 11-12 марта, 2022
Я дома. Я должен понять, как меня взломали. Для этого я смотрю логи бота, смотрю личку сообщества, к которому был подключен бот, смотрю доступ к своему личному e-mail, телефону, смотрю логи доступа к серверу, на котором хостится бот. Ничего.
Существовали методы атаки бота через SQL-инъекции, когда при заполнении анкеты, к примеру, вводили:
Т. е. вводили SQL-запросы, который дробили изначальный на части и после они исполнялись. Но:
- У меня была защита от такого вида атаки. Я просто заменял все кавычки, звездочки и точки с запятой на пустоту перед добавлением в SQL-запрос.
- Даже если бы подобная атака прошла — в БД не было токенов. Я там их не хранил, они были в самом Python-коде в тот момент.
И почти в 2 часа ночи я понял, как произошёл взлом:
Перенесёмся на 1,5 года назад. Я не просто так добавил в статью, что тогда заливал код на Github. Я делал бота, запушил первую версию бота в репозиторий, спустя несколько дней запушил измененную вторую версию.
Для непросвещенных, опять же:
Github — это система управления проектами и версиями кода. Понятным языком: разработчики туда могут заливают код, могут с помощью него откатывать код на прошлые версии, могут смотреть чужой код и т. д.
Github — это не файлообменник, хотя он может выполнять его функции:
Проблема была в том, что моя первая версия была с этими самыми токенами. Я не проверил все файлы перед пушем в репозиторий и далее, конечно, я их не увидел, потому что при изменении кода токены остались в истории изменения (в так называемых commits), а в новой версии кода всё уже было хорошо.
И я смог понять всю хронологию событий:
- Моё видео на ютубе нашли и решили глянуть код
- Нашли публичный репозиторий с кодом, зашли оттуда в коммиты
- Увидели токены и решили извлечь лулзы
Выводы
Мне всегда нравился сериал Мистер Робот (тот самый про хакера с Рами Малеком) и я всегда представлял себя на месте главного героя. Но в реальной жизни оказалось всё наоборот.
Как мне потом сказали: «Ты отделался малой кровью». У меня было две ошибки (сам слив и что я заметил его не сразу, а спустя 2 часа), но, при этом, несколько верных действий:
- Я не создавал токены с выданными на всё правами.
- Я смог проанализировать и найти свою ошибку за короткий промежуток времени.
- Моя реакция была быстрой. Прямо сейчас, при написании статьи я вижу время в журналах действий, время сообщений и это понимаю. Всё-таки в стрессе человек иногда может намного больше, чем обычно.
Это был интересный опыт и я сделал один важный вывод для себя:
Если ты ленишься, не проверяя всё — это сделает кто-то другой.
UPD. Тут в комментариях несколько моментов затронули, которые нужно подробнее объяснить:
- Это не взлом.
Если интерпретировать слово "взлом" как в Гугле, а именно что это "несанкционированное проникновение в компьютерную систему" — то это именно он. Человек мог либо пройти мимо, либо проинформировать меня. Но он выбрал путь взлома. Не имеет значения, какую ошибку я допустил. Имеет значение, какой умысел был при взломе. - Зачем идти в полицию?
Потому что я плачу за это налоги. И потому что это ущерб, который теоретически не смогли бы откатить. Люди должны отвечать за действия.
Можете посмотреть мой кринжовый видос с того самого ютуб-канала. Удалять я эти видео не буду, пусть останутся, как история. Но я далее буду делать более взрослый контент (не хочу школьников в личке), связанный с моим опытом в IT и с опытом анализа получения трафика различными методами.
Что также вы сможете найти в моем Telegram-канале — Jdigit. Подписывайтесь, контент-план уже расписан на месяц.
Если вам нужен свой бот знакомств или любой другой (для VK и Telegram), практически любой сложности — велком в личку.
*Meta, владеющая Instagram и Facebook, признана экстремистской в России.