Изучая безопасность мессенджера Telegram, меня поразила одна его "особенность" при работе с ботами - выяснилось, что при добавлении в канал бота никак нельзя ограничить его в правах на удаление подписчиков. То есть, говоря прямо, любой бот может вычистить всю аудиторию канала за считанные минуты.
Добавлять ботов в Telegram-каналы можно только как администраторов с целью автоматизации выполнения различных сервисных действий - например, планирование публикации постов и сбор всевозможной аналитики по каналу.
Почти все администраторы Telegram-каналов пользуются сторонними ботами от разных сервисов вроде Telemetr или Telepost и аналогичных. Причем сервисы часто специально навязывают добавление своего бота в канал. Например, всевозможные биржи рекламы вообще отказываются работать с каналом без наличия их бота - без него нельзя автоматизировать публикацию рекламы.
Таким образом администаторы добавляют к себе в канал бота за ботом, уповая на то, что следующая настройка прав не оставляет ботам никаких возможностей, кроме как работать с постами:
Однако, даже забрав у бота все права, доступные для редактирования из официального клиента, бот все еще будет оставаться администратором и иметь возможность не только читать любую администраторскую информацию о канале, но и выкидывать подписчиков.
С точки зрения Telegram API удаление подписчика из чата выглядит как бан с помощью API-метода editBanned. Т.е технически у всех ботов, которые попадают в канал, есть "несгораемые" права по бану участников.
Самое странное в этой ситуации то, что в Telegram API присутствует "скрытая" возможность отнимать у ботов права на удаление подписчиков, но в официальной версии Telegram она скрыта из интерфейса:
Если же сделать этот API-запрос вручную, "насильно" выставив настройкуban_users
, то обнаружится, что сервера Telegram по какой-то причине игнорируют её. Скорее всего, из-за этого настройка и отсутствует в официальных клиентах, хотя появилась она очень давно - можно посмотреть по истории TL Layer.
Как от этого защищаться? Пока Telegram не предлагает ничего лучше, чем написать собственный скрипт на основе Telegram API, который бы мониторил все удаления подписчиков в канале ботами и банил бы их. К счастью, банить подписчиков боты могут только пачками по 200 (ограничение Telegram на просмотр последних подписчиков канала), поэтому как только какой-то бот забанит первого подписчика, такого бота можно незамедлительно выбрасывать из канала. Это позволит не потерять всех подписчиков за несколько секунд.
Проблема тут только в том, что Telegram API не позволяет одним ботам банить других ботов, из-за чего скрипт мониторинга придется запускать от имени Telegram-пользователя, а не от имени Telegram-бота. С другой стороны, Telegram отправляет уведомления об удалении пользователей из каналов только ботам, а обычным пользователям - не отправляет????. Из-за всей этой неразберихи в API рабочая схема защиты будет выглядить так:
Добавляем в канал своего бота, который будет мониторить удаления подписчиков другими ботами
Если было обнаружено удаление, удаляем обнаруженного бота от имени второго аккаунта - пользователя
Код с использованием библиотеки Pyrogram для защиты канала по такой схеме может выглядеть примерно так:
# аккаунт бота
bot = Client(...)
async def banBastard(channelId, botId):
# запускаем аккаунт пользователя для удаления паршивца
user = Client(...)
async with user:
await user.ban_chat_member(channelId, botId)
# callback получения нотификаций об удалении пользователей в каналах, куда добавлен бот
@bot.on_chat_member_updated()
async def onMemberHandler(client, update):
banned = update.new_chat_member.status == enums.ChatMemberStatus.BANNED
byBot = update.new_chat_member.restricted_by.is_bot
if banned and byBot:
await banBastard(update.chat.id, update.new_chat_member.restricted_by.id)
# запускаем бота для прослушивания нотификаций об удалении пользователей
async def main():
async with bot:
while True:
await asyncio.sleep(1)
bot.run(main())
Есть и более простой, но менее надежный способ для администраторов Telegram-каналов. Но придется, как бы сюрреалистично это ни звучало...добавить в канал бота @channel_guardian_bot - он будет отслеживать все удаления подписчиков другими ботами и присылать уведомления. Если быстро среагировать, можно будет спасти существенную часть своей аудитории.
По какой причине разработчики Telegram не спешат с реализацией этой очевидно необходимой защиты на стороне сервера, я затрудняюсь ответить. Но пока их changelog будет выглядеть так, словно ничего, кроме сториз делать уже не осталось, администраторы Telegram-каналов спокойно спать не будут.
Комментарии (65)
InsanusMokrassar
01.10.2023 16:03+10Поэтому пишите своих ботов или запускайте проверенных и настроенных под свои нужды
kma21
01.10.2023 16:03+1никто не даёт гарантий того, что проверенные боты не будут взломаны и/или не начнут творить дичь и без взлома, по причине их автора. например, потому что вы из РФ.
https://habr.com/ru/news/656219/
https://habr.com/ru/news/655829/InsanusMokrassar
01.10.2023 16:03+4По поводу ссылок: при всей популярности таких обновлений полтора года назад, это осудили даже те, кто мог бы и поддержать такое решение.
В остальном: большие и серьезные компании не пойдут на подобные странные решения, поэтому в большинстве своем стандартным (читай, либам от разработчика языка) обычно можно доверять, а в остальном нужно уже руководствоваться головой.
Ну и всегда можно написать свою либу для всего :)
MountainGoat
01.10.2023 16:03+2На написанной вами операционной системе, а то мало ли...
qqrm
01.10.2023 16:03Хорошо, хоть не на саморучно спаянном компьютере. Хотя, на ютубе есть и такие молодцы, но без фольгированных шапочек, конечно.
NikitaSidor
01.10.2023 16:03-2Telegram бот - это мощное оружие в арсенале маркетинговых компаний. И не зря говорят, что информация имеет более высокую стоимость, чем деньги.
rombell
01.10.2023 16:03+2Это нонсенс, так как стоимость и есть деньги.
Возможно, Вы имели в виду "ценность"? Ценность, действительно, может быть измерима в деньгах, а может и не быть — например, ценность "посидеть на закате на берегу красивого озера".
bogolt
01.10.2023 16:03-5Просто не используете проприетаный мессенджер вместо адекватный опен-сорс решений. А если уж используете то примите последствия. Владельцам мессенджера даже не обязательно что-либо у вас отбирать, они могут просто менять правила игры на ходу а вам придется под них подстраиваться.
AlexanderS
01.10.2023 16:03+6А адекватные это какие? Matrix?
enkryptor
01.10.2023 16:03+11— Не используйте до обеда проприетарных мессенджеров.
— Гм… Да ведь других нет.
— Вот никаких и не используйте!
Markscheider
01.10.2023 16:03+9Просто не используете проприетаный мессенджер вместо адекватный опен-сорс решений.
Я бы, может, и не хотел, но если вся моя аудитория в этом проприетарном мессенджере - придется туда лезть.
ptr128
01.10.2023 16:03+1Но это не является препятствием для предложения этой же аудитории каких-то преференций при использовании свободного peer-to-peer решения.
lda93
01.10.2023 16:03Я даже не представляю себе, какие такие преференции могут предложить используемые мною каналы, чтобы сподвигнуть меня ради этого установить ещë один мессенджер, тем более опенсосный.
ptr128
01.10.2023 16:03+1Ну вот Вы исключение. А большинство, которых я знаю, на телефоне имеют по множеству установленных подобных приложений (WhatsApp, Botim, Viber, Telegram, Jami, Teams, IVA, Skype и т.п.). Хотя бы потому, что с ОАЭ общаться надо через Botim или C’Me, с коллегами, через Teams или IVA, внутри локальной сети без выхода в интернет - через Jami.
тем более опенсосный
А почему "тем более"? Опыт показывает, что как раз такие наиболее безопасны, так как их код доступен для аудита.
qqrm
01.10.2023 16:03Доступен != проверен. Были статьи, что таким аудитом мало кто занимается. А если и занимается - то скорее в корыстных целях, без публикаций найденного.
ptr128
01.10.2023 16:03Доступен, значит нет препятствий для проверки. Сами можете проверить в любой момент. Код, надеюсь, не разучились читать, сидя на хабре? )
Lfyz
01.10.2023 16:03Каково пересечение "большинства, которое вы знаете" с ЦА рандомного бизнеса?
ptr128
01.10.2023 16:03Целевые аудитории в разных проектах настолько различны, что измерять среднюю температуру по больнице смысла не вижу )
Lfyz
01.10.2023 16:03Тогда откуда уверенность, что какие-то преференции смогут перетянуть ЦА в удобный бизнесу мессенджер?
Из предыдущего Вашего заявления у меня сложилось впечатление, что она основывается на выборке "большинство, которых я знаю"
anmilez
01.10.2023 16:03Вы можете привести пример опенсорсного мессенджера с функцией размещения контента, который будет востребован и продавцами реклами, и пользователями, которые ещё должны захотеть ради автора с его каналом читать не только телеграм-каналы (его постоянная аудитория), а ещё что-то отдельное опенсорсное.
ptr128
01.10.2023 16:03захотеть ради автора с его каналом читать не только телеграм-каналы
Сам я "читаю телеграм-каналы" только с алертами из систем, за которые я отвечаю или которыми пользуюсь. И многие из этих каналов уже переведены на Jami. Благо swarm в Jami был стабилизирован еще в прошлом году. Ну и потому, что внутри локальной сети без выхода в интернет Jami замечательно рассылает алерты, в отличии от Telegram.
anmilez
01.10.2023 16:03И многие из этих каналов уже переведены на Jami
В этих каналах есть тысячи подписчиков, которые приходят почитать посты на досуге по вечерам, попутно скролля ленты в других соцсетях, и которых ещё нужно уговорить заходить не только в фб/вк/телегу/нужное добавить, а в ещё одно приложение, причём исключительно для того, чтобы почитать там канал автора?
Я не верю, что вы не видите разницу в кейсах.ptr128
01.10.2023 16:03В этих каналах есть тысячи подписчиков
В Россетях или РАО ЕС Восток - да, тысячи. Сама идеология swarm в Jami в принципе не накладывает ограничение на количество подписчиков. Ну и как я указал выше, никто не возмущался, так как там достаточно много хостов не имеющих выхода в интернет, но на которых важно видеть алерты.
ptr128
01.10.2023 16:03Я не верю, что вы не видите разницу в кейсах.
почитать посты на досуге по вечерам, попутно скролля ленты в других соцсетяхЯ просто не понимаю вообще на хрена это нужно. Попытки предпринимал. Но так мусора и рекламы при этом видишь 90%, то просто жалко своего времени.
anmilez
01.10.2023 16:03Тут вопрос, зачем это нужно автору :)
И как сохранить это в рабочем состоянии с минимальными потерямиptr128
01.10.2023 16:03Находясь на специализированном техническом сайте, мне казалось, что тут больше технические вопросы рассматриваются, а не бизнеса заработка на телеграм каналах :)
Поэтому Telegram, Jami, WhatsApp, Viber и т.п. я и рассматриваю как инструменты, а не как атрибут целевой аудитории. Вот и позволяю себе свободно выбирать инструмент, не заботясь о том, насколько сложно клиенту будет ткнуть пальцем пару раз в магазине приложений. Так как мои клиенты уже готовы платить за нужную им информацию и им, в общем случае, совершенно монопенисуально, какими техническими средствами к ним эта информация будет доставляться. Лишь бы стабильно работало, гарантировало безопасность и клиентское приложение было бесплатным.
anmilez
01.10.2023 16:03+1мне казалось, что тут больше технические вопросы рассматриваются, а не бизнеса заработка на телеграм каналах
Конкретно в этом посте рассматривается вполне себе технический вопрос защиты контента администрируемых каналов от скомпрометированных ботов. Вопрос, который возник из-за недостаточной настраиваемости прав этих самых ботов.
Какую именно функцию они выполняют - реклама, заработок или борьба со спамом - не имеет значения, потому что суть проблемы от этого не меняется.
Использование мессенджеров, не имеющих аналогичной функции (каналы с управлением через ботов), проблему точно не решает :)
ptr128
01.10.2023 16:03Использование мессенджеров, не имеющих аналогичной функции (каналы с управлением через ботов), проблему точно не решает :)
Поэтому я и вел речь о Jami, который через dbus поддерживает управление каналами (swarm) ботом.
anmilez
01.10.2023 16:03+1Это если удалось уговорить тысячу людей установить себе новое приложение исключительно для того, чтобы продолжать иметь доступ к контенту (возвращаемся в начало).
anmilez
01.10.2023 16:03А при чём тут мессенджеры? Автор использует телеграм как площадку для размещения контента не потому, что он мессенджер, а потому что он - площадка для размещения контента. Мессенджеров может быть хоть десяток (у меня их, например, больше десятка), но каналы даже как функция есть далеко не во всех. Это не говоря о том, что ещё подписчику надо согласиться лезть в условный вацап исключительно для того, чтобы почитать канал автора в нём, в то время как все остальные он читает в телеге. Вероятность близка к нулевой.
dmitrye1
01.10.2023 16:03Напомнило войны ботов в IRC, но там, вроде, архитектурный косяк, так с этим и похоронили. Хочется верить, что в Телеге поправят.
GDragon
01.10.2023 16:03+6Учитывая множество недоработок, косяков и просто неоднозначных решений в телеге которая сломя голову пошла путём сшибания бабла, методами очень схожими со скамом - сомневаюсь.
nalinor
01.10.2023 16:03Если же сделать этот API-запрос вручную, "насильно" выставив настройку
ban_users
, то обнаружится, что сервера Telegram по какой-то причине игнорируют её.Думаю, просто авторы документации опечатались, написав, что эта настройка доступна для каналов. Вероятно, есть какая-то причина, по которой они решили не добавлять такую возможность, поскольку если бы хотели - то уже сделали.
Perlovich
01.10.2023 16:03+5Немного добавлю к статье.
например, планирование публикации постов
Раньше было актуально, но в сам ТГ добавили планировщик. Мне кажется, около полгода назад дело было. Нормально работает, сам пользуюсь, не жалуюсь.
Т.е технически у всех ботов, которые попадают в канал, есть "несгораемые" права по бану участников.
Тут, мне кажется, важно пояснить, что в группах это работает по-другому. В группах есть отдельное право на бан пользователей, которое явно должно выдаваться боту (или человеку-администратору), если мы хотим, чтобы бот мог кого-то банить.
Для тех, кто не в курсе разницы между каналами/группами, поясню. В каналы могут добавлять посты только админы (т.е. люди, которым мы доверяем). В группы может добавлять посты любой участник. Все комментарии в канале автоматически идут в привязанную к каналу группу. Довольно неочевидная система. Соответственно, для мониторинга спама/флейма/абьюза боты добавляются именно в группу, а не в канал.
Naps
01.10.2023 16:03В каналы например добавляются боты-админы, что бы принимать заявки на вступление.
InsanusMokrassar
01.10.2023 16:03+1В телеге до сих пор нет никаких возможностей ранжирования и взаимодействия (для админов, то есть с коллективной оценкой качества поста ПЕРЕД публикацией) с постами, а запланированные посты доступны только запланировавшему их. Так что ваш вариант с планированием публикации по таймеру является рабочим решением только если вы единственный админ в канале и у вас не контентный, а новостной канал (то есть появился пост - вы сразу его опубликовали)
К слову, условный функционал предложек для каналов сейчас никаким образом не реализован, остаются только боты
Kenya-West
01.10.2023 16:03Всё понял, спасибо. Вот почему возможность планировки постов в ботах до сих пор существует - потому что в случае с ботом планированные посты видят все админы.
anmilez
01.10.2023 16:03+1Предположу, что имелось в виду планирование публикации именно рекламных постов со стороны бирж, как раз и требующих наличия в канале их собственных ботов для этого самого планирования. Логично, что никакие другие решения их не устроят, потому что у них там не будет контроля за публикациями и честностью статистики.
ostrovityanin
01.10.2023 16:03+5А как именно это "выяснилось"?
Вы экспериментально этоп проверяли? Можете написать бота который с выключенным add members удалит у меня юзеров в канале?
roman_deev
01.10.2023 16:03Полтора года назад уже написали такого https://t.me/LyBlog/578 А с момента репорта об этом в Telegram прошло уже 2 года.
Desperandum_Oven
01.10.2023 16:03-3Щас бы, имея возможность написать полнофункционального бота для контент менеджмента буквально с базовыми знаниями того же питончика, вместо этого добавлять проприетарный кал без исходников
Fell-x27
01.10.2023 16:03+6Не у всех есть базовые знания питончика. Не все - программисты. Не все - даже скрипткидди. Не все даже знают, что такое питон. Не все даже понимают элементарные, казалось бы, концепции, типа массивов.
tantie
01.10.2023 16:03+1Еще такие боты собирают данные о пользователях по их id. Затем эти данные появляются в базах данных, где можно узнать по id пользователя список его групп и др изменения профиля.
enkryptor
01.10.2023 16:03+2По первым двум абзацам может показаться, что любой добавленный в группу бот становится администратором. Важно понимать, что это не так. В статье речь про сценарий, когда бот намеренно добавляется в роли администратора, но с ограниченными правами.
Penelope99
01.10.2023 16:03+1Если такова опасность, что можно потерять весь канал, то лучше правда своего бота написать
GDragon
01.10.2023 16:03+1Формально ты теряешь не канал а всех подписчиков, но тут что пнём по сове, что совой об пень...
Ksoo
01.10.2023 16:03А нету еще проксей, который будут становится между ботом и апи, и фильтровать че этот бот себе позволяет?
mayorovp
01.10.2023 16:03Чтобы такую проксю поставить — надо бота хостить самостоятельно, а тут уже и своего собрать не настолько сложно становится.
Кроме того, возникает проблема доверия этой самой проксе...
boldMahoney
Поэтому для критически важных вещей надо использовать on-premise решения и желательно с открытым кодом.
mini_nightingale
Не многие этот самый открытый код смотрят, тем более постоянно.
В теории там может внезапно что-то поменяться, допустим добавиться выпил свего и вся, аля очередная "акция чтобы %гладиолус%".
garwall
для этого и существуют LTS-релизы
CherryPah
Всегда казалось что LTS это про насколько долго в дальнейшем будут выпускаться патчи с "гладиолусами", а не про неизменность релиза.
Kenya-West
Это ничего не гарантирует. Где гарантии того, что у автора не появится Тайлер-Дёрденовское альтерэго и он не напишет "красную кнопку" на боте и не вольёт в мастер?
Где гарантии того, что я это увижу?
Исключение такой ситуации — это отказаться от Telegram и уйти в лес трогать берёзы (причем именно берёзы), другого не дано.
13werwolf13
тут история не про гарантии а про шансы
шанс того что автор опсосного решения с гитхаба рискнёт залить малварь (либо будет взломан), как и шанс того что если такой залив произойдёт то он останется незамеченным гораздо меньше чем в облачных сервисах
vcKomm
Скажите это автору node-ipc
shasoftX
Точнее тем кто пользуется node-ipc
13werwolf13
ну что могу сказать: "шанс быть застреленным коровой ничтожно мал, но никогда не равен нулю" ©