Как русские хакеры взломали Clubhouse

Как русские хакеры взломали Clubhouse

Краткий конспект подкаста

Это краткое содержание выпуска подкаста «Запуск завтра» о Clubhouse. «Практикум» — партнёр подкаста, а мы — дети «Практикума». Если есть время — послушайте выпуск

О героях

Первый герой — Александр Крушин, независимый медиаменеджер. Александр основал сервис ClubStat, который собирает и продаёт аналитику пользователей и комнат в Clubhouse.

Второй герой — русский хакер Дмитрий Соболев. Дмитрий нашёл дыру в системе защиты приложения Clubhouse и накрутил себе 200 000 подписчиков, после чего был забанен сервисом.

— Дед, а что такое Clubhouse?

— Это, внучек, в начале 2021 года была такая соцсеть, где фейсбучные интеллектуалы флексили своей отраслевой экспертизой. Сначала туда пускали по талонам, и все были дико на хайпе, а потом всем стало резко плевать. 

— Но почему, дед? 

— Потому что там люди говорили без монтажа и без фильтров, а это было мучительно слушать. В итоге все попробовали по разику и забросили. Остались только бездельники, которым нечем заняться, только радио слушать. Но потом они вспомнили, что им надо работу работать, и они ушли. 

— А сейчас сервис есть?

— Есть. 

— И как там?

— Так, дети, отстаньте от деда. Папа, ты таблетки пил уже? На, пей. 

Инцидент

У Clubhouse всё было хорошо, пока корейский разработчик не обнаружил API приложения. Он описал в документации, как сервис устроен изнутри,
и выложил всё это в открытый доступ. Если есть API и документация, есть повод что-нибудь потыкать. 

Благодаря раскрытому API другие разработчики получили возможность писать программы, чтобы совершать разные действия на серверах Clubhouse. Например, собирать статистику и строить рейтинги популярности гостей и комнат.    

Александр Крушин о том, что такое и зачем нужен ClubStat

ClubStat — сервис, который показывает рейтинг наиболее популярных
у пользователей комнат. С помощью этого инструмента рекламодатели могут анализировать, что происходит в Clubhouse, и прогнозировать, будут ли эффективны рекламные интеграции у конкретных пользователей. 

ClubStat предоставляет глубокую аналитику. Можно узнать, как популярный пользователь Clubhouse провёл эфиры. Например, он участвовал в шести эфирах и на каждый привёл с собой по 5 000 человек. Аналитика покажет, какие эфиры были менее успешными, проанализирует причину. С помощью сервиса можно узнать, сколько человек привёл пользователей в комнату за счёт пуш-уведомления и как долго он удерживал аудиторию.

Сервис не только формирует рейтинги популярных людей, но и поминутно отслеживает, как меняется аудитория в комнате. Можно выяснить, появление какого человека в комнате повлияло на прирост или, наоборот, отток аудитории. 

Как работает алгоритм сбора данных 

Сервис симулирует активность нескольких десятков пользователей. Боты ведут себя как люди и подтягивают нужные данные в единую форму. 

Каждого нового пользователя для пополнения библиотеки регистрируют вручную. Добавляют описание и аватарку, чтобы бот выглядел как живой человек. Это долго, но вполне реально, если у вас около 100 аккаунтов.

За что могут забанить

Аккаунт могут заблокировать по многим причинам, например, если регистрировать бота не через приложение, а через неофициальный API. Причём волна банов пойдёт по всем профилям, которые были зарегистрированы под одним инвайтом. 

Ещё могут забанить за превышение количества запросов к API в секунду. У Александра забанили аккаунт, когда он решил поэкспериментировать со всеми техническими лимитами, которые есть в Clubhouse. «Я знал, что иду на риск, поэтому зарегистрировал новый аккаунт с отдельного инвайта. Так волна банов прошла мимо
и не задела всю сеть».

Как Clubhouse борется с неофициальными сервисами
и почему не идёт на сотрудничество

Clubhouse банит огромные подсети пользователей, которые выглядят подозрительными. Также он перекрывает доступ к нелегальным СДК (software development kit) для передачи голоса. Потом банит тех, кто использовал регистрацию не через Clubhouse, и ограничивает количество активных сессий.

Александр писал в Clubhouse, но с ним никто не вышел на связь. Позже услышали от инвесторов: «Они изучили наш и подобные сервисы и поняли, что могут сделать всё сами, если это будет нужно».

Дмитрий Соболев о бане за 200 000 подписчиков

«В конце января я узнал о том, что появилась социальная сеть по инвайтам, куда хотят все попасть. Стало любопытно. Я выпросил свободный инвайт у знакомого и зарегистрировался. 

После регистрации я удивился, что Clubhouse начислил мне сразу два инвайта.
Я потратил один инвайт, а получил два — звучит выгодно. В мыслях сразу созрел коварный план — нагенерить побольше инвайтов с помощью ботов. Для этого нужно было сначала изучить, что находится внутри приложения. 

После регистрации в Clubhouse пользователя просят предоставить доступ к книге контактов. Я отношусь к этому негативно, потому что именно тогда есть вероятность утечки данных. Поэтому первым делом я пошёл смотреть ресурс, который отвечает за выгрузку контактной книги, и начал сопоставлять его с юзерами Clubhouse.

Оказалось, что этот эндпойнт можно дёргать неограниченное количество раз, причём выгружать контакты довольно большими пачками. Тогда я и придумал способ, как определить номер любого человека, зарегистрированного в Clubhouse.

Проблема Clubhouse была в том, что они не ограничивали объём контактной книги и число раз, сколько эту контактную книгу можно загрузить. Можно было вносить контакты огромными пачками. Если не ошибаюсь, наибольшее количество контактов, которые мне удалось загрузить зараз, было около 100 000.

В результате я загрузил не просто свою контактную книгу, а все номера телефонов, которые только могут быть в принципе, — 0001, 0002, 0003 и так далее. Так я получил живых пользователей Clubhouse, которые соответствуют этим номерам телефонов.

Чтобы защитить сервис от подобных утечек, Clubhouse должен был ограничить возможность загружать контактную книгу повторно. Совершенно непонятно, зачем загружать второй и последующие разы адресную книгу после того, как ты это сделал, когда первый раз установил приложение. 

Другой вариант: не давать загружать книгу много раз или хотя бы ограничить количество контактов. Вряд ли у кого-то из пользователей больше 1000 номеров в адресной книге — в любом случае ограничения должны быть. 

Когда я проводил этот эксперимент, в Москве было около 20 миллионов номеров. Потом я скачал список кодов мобильных операторов Москвы, начал по нему генерировать адресные книги и выгружать пользователей Clubhouse всего российского сегмента. При желании я мог взять также список мобильных номеров любого штата Америки и пройтись точно так же.  

На самом деле, когда я узнал об уязвимости, первым делом сообщил об этом вендору
в лице Clubhouse. Мол, неплохо было бы ограничить число запросов. Ну так, для галочки».

Как удалось накрутить 200К подписчиков и стать топ-1
в российском сегменте 

«В Clubhouse есть механизм, который позволяет подписаться сразу на множество людей одновременно. При онбординге в официальном приложении появляется окошко с возможностью подписки на 50 рекомендуемых пользователей сразу. По сути это один запрос, в котором передаётся массив из 50 ID-шников, и вместо 50 там можно указать 2 500. Больше нельзя, потому что стоит глобальный лимит на количество подписок. 

Дальше я ради интереса указал в этом массиве один и тот же ID пользователя два раза и посмотрел, что произойдёт. Стандартный запрос выглядит так: «подпишись на Самата, на Юлю, на Катю, на Мишу» — на них всех происходит подписка. 

Я же сформулировал запрос: «подпишись на Диму и Диму». В этом случае подписка осуществилась фактически один раз, но счётчик показывал два. Получается, так с одного аккаунта можно накрутить себе счётчик до 2 500 подписчиков, при этом реальный подписчик будет только один. 

Когда я накручивал счётчик на первом аккаунте, цифры сначала дошли до миллиона, но, видимо, на серверах Clubhouse сработал какой-то триггер, и мой аккаунт моментально улетел в бан. Второй аккаунт я довёл до 200 000.

Вообще это полный бред, когда количество подписчиков и реальные подписчики — две разные сущности, которых поддерживают отдельно»

Об уязвимости Дмитрий сразу написал вендору, мол, чуваки, у вас дырка. Ответа не последовало. 

Результат накрутки

Дмитрий: 

«В Clubhouse люди видели количество моих подписчиков, заходили ко мне в инстаграм и предлагали делать разные штуки. Например, просили накрутить столько же подписчиков за деньги или приглашали на конференции. 

Ещё в комнатах, куда приглашали популярных людей, каждому приходилось объяснять, что я не звезда, а цифры фейковые. Это было забавно. 

В описании профиля у меня указано, что я разработчик, исследователь безопасности, дана ссылка на инстаграм. А в инстаграме написано «Казань, Россия». Всё. Несмотря на это, меня всё равно звали в топовые комнаты. Возможно, люди не особо разбираются в том, кого приглашают: если видят, что у меня 200 000 подписчиков, то думают, что все эти люди придут в комнату следом за мной. 

В итоге через две-три недели аккаунт заблокировали. К тому моменту я уже удалил приложение Clubhouse, потому что вся движуха там закончилась. 

Создание инвайтов ботами

Чтобы зарегистрироваться в Clubhouse, в своё время нужно было ввести свой номер телефона, на который придёт СМС с кодом подтверждения. Сервер Clubhouse не даёт зарегистрироваться два раза на один и тот же номер, но прикол в том, как они проверяют этот телефон. 

Например, если вы напишете номер +7-916-746-43-06 и добавите между 916 и 746 пробел, то Clubhouse подумает, что это другой номер телефона. Вы даже можете добавить не один пробел, а два, три пробела — и так на один номер зарегистрироваться три раза. Каждый раз Clubhouse будет думать, что вы даёте ему новый номер телефона. СМС с кодом будут вам доходить, потому что сервис рассылки убирает лишние пробелы.

Благодаря этой уязвимости Дмитрий смог зарегать довольно много аккаунтов для различных действий. Например, он сделал бота в Телеграме, который бесплатно раздавал инвайты: отправляешь боту номер телефона, он в ответ тебе присылает инвайт. За всё время работы бота Дмитрий раздал где-то 10 000 инвайтов.

Дырявые сервисы — это норма

На самом деле с безопасностью всё плохо не только у стартапа типа Clubhouse, но и вообще у всех, наверное, за исключением Фейсбука, ВКонтакте, Google и Яндекса. 

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

Мы не представляем, как информация, которую мы выкладываем в интернет, дальше живёт своей жизнью. Это очень большая проблема. Поэтому хочется объяснить людям, как устроена приватность в интернете».

Ещё больше удивительных историй — в подкасте «Запуск завтра». Запуск завтра, а слушать можно уже сегодня

Получите ИТ-профессию
В «Яндекс Практикуме» можно стать разработчиком, тестировщиком, аналитиком и менеджером цифровых продуктов. Первая часть обучения всегда бесплатная, чтобы попробовать и найти то, что вам по душе. Дальше — программы трудоустройства.
Начать карьеру в ИТ
Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию
Еще по теме
Карьерный путь: руководитель группы в лаборатории ИИ Сбера
Карьерный путь: руководитель группы в лаборатории ИИ Сбера

Разговор с Алексеем Васильевым: управление проектами, учёба в ШАД и разработка систем ИИ.

easy
SSL-сертификаты и безопасный интернет

Ваше соединение надёжно защищено. Или нет.

easy
Линтеры для начинающих
Линтеры для начинающих

Красивый код с самого начала.

easy
Мальчик заливает на FTP, мужчина поднимает Git

Зачем нужен контроль версий и что делать, если ваши друзья его используют.

hard
Что такое PHP и почему его все ненавидят

Несмотря на то, что 83% сайтов в интернете работают на PHP.

easy
Объясни мне: как устроен интернет
Объясни мне: как устроен интернет

Часть 1: Компьютеры и сеть.

easy
Почему в школе до сих пор изучают Pascal
Почему в школе до сих пор изучают Pascal

Паскаль. Турбо Паскаль!

easy
Кто такая Unity и почему она всем нравится

Бесплатный движок с классной графикой, реалистичной физикой и понятным интерфейсом.

easy
Декомпозиция задач: что это и зачем нужно
Декомпозиция задач: что это и зачем нужно

И как сделать так, чтобы всё шло по плану.

easy
Растровая и векторная графика: это как?
Растровая и векторная графика: это как?

Как-нибудь так…

easy
easy