Это краткое содержание выпуска подкаста «Запуск завтра» о 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 и Яндекса.
«К сожалению, наши данные в интернете ничего не стоят. И никакой реальной ответственности компании из-за проблем с безопасностью данных не несут. Поэтому мы, программисты, продолжаем делать дырявые сервисы, это просто реальность.
Мы не представляем, как информация, которую мы выкладываем в интернет, дальше живёт своей жизнью. Это очень большая проблема. Поэтому хочется объяснить людям, как устроена приватность в интернете».
Ещё больше удивительных историй — в подкасте «Запуск завтра». Запуск завтра, а слушать можно уже сегодня.