Как взломать компанию с помощью бота Telegram

Как взломать компанию с помощью бота Telegram

Додекаэдр

Источник: Авторы — Адриан Фернандес и Маурисио Трухильо

Сегодня боты Telegram уже привычны, но от этого не менее востребованы, так как способны упростить выполнение многих задач. Проверка расписания транспорта, прогноза погоды и стоимости любого продукта на Amazon, запуск ping, конвертация медиафайлов, выявление вредоносных URL-адресов, администрирование каналов и многое другое делают боты.

Любой пользователь может построить и / или разработать бота. Для тех, кто не является разработчиком, есть несколько веб-приложений, которые помогают создать боты без навыков программирования, — например, «Manybot», хотя и с некоторыми ограничениями.

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

Проблема?

Да. Есть боты, которые, реализуя свои функции, должны выполнять команды в системе, где они работают. Если бот плохо запрограммирован, с небрежностью к безопасности, то его вполне могут задействовать для контроля над системой (Command Injection).

Рассмотрим такую контролируемую среду:

Системный администратор в небольшой компании отвечает за разработку бота на Telegram для поддержки клиентов. Среди требуемых функциональных возможностей нужна также та, что позволит пользователям выполнять ping в любом домене. Этот системный администратор решает запрограммировать бота на Python и разместить на сервере компании. Программа выполнит команду «ping» из параметров, которые поступают от бота.

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

Допустим, сисадмин умеет программировать, но не знает книг Hack ing Web Technologies или Hacking Web: SQL Injection, поэтому он неправильно использует входные параметры. Он не смог запрограммировать такие функции и осуществить правильный контроль, т.е. у него нет злого умысла.

На рисунке 1: Бот выполняет команду /ping google.es

На рисунке 2: Фрагмент уязвимого кода в боте на Python

Чтобы вышеописанное стало возможным, в системе должна быть выполнена команда, поэтому давайте попробуем дать команду для проверки уязвимости Command Injection, таким образом:

Рисунок 3: Инъекция команды ls -l

Как видим, при конкатенации команды она была выполнена без каких-либо проблем.

Сбор информации и эксплуатация

Пользователь, работающий с ботом, не имеет привилегий, но может собирать много информации и выполнять разные команды.

Рисунок 4: Ввод команды uname -a

Осуществив конкатенацию команды «uname -a», мы видим, что она работает на «Ubuntu 14.04» с ядром «4.4.0-31-generic». Поискав немного в Google, можноа проверить, что имеем уязвимость для разных методов эскалации привилегий. Как вы знаете, это также можно сделать с помощью инструмента, написанного на Python под названием AutoLocalPriviligeEscalation, который позволяет узнать, какие эксплоиты действительны для каждой версии неукрепленного ядра Linux.

Рисунок 5: Мы могли бы добавить выполнение auto_searchsploit, если бы мы клонировали его перед GitHub

Для получения еще большего контроля над системой попытаемся вместо ввода команды на повышения привилегий через бота, попробуем получить доступ к Shell, использовав Netcat.

Получение удаленного доступа к Shell через бота Telegram

На машине Kali Linux мы подключаем netcat, чтобы связать нас с жертвой. При этом мы получим доступ к Shell, так как соединение будет установлено нарушенной системой, используя бот в качестве вектора атаки.

Рисунок 6: Netcat слушает порт 4444 в машине злоумышленника Kali Linux.

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

Рисунок 7: Ввод команды Netcat. Если nc нет на сервере, следует загрузить.

Мы также должны перенаправить STDIN и STDERR в / dev / null и добавить в конце '&', чтобы он работал в фоновом режиме и не приостанавливал выполнение бота. После этого можно увидеть, что соединение было установлено с машиной-жертвой.

Рисунок 8: Shell, полученная на машине злоумышленника Kali Linux

Как только мы заполучим Shell, мы можем начать выполнять команды. Как вы можете видеть, всё случилось с помощью уязвимого бота Telegram, имеющего доступ к системе. Но при работе с пользователем без привилегий всё же есть ограничения.

Рисунок 9: Выполнение команд в системе. Нет привилегий

Найдем способ достижения привилегий. Как видели ранее с «uname -a», мы можем видеть детали системы, такие как версия операционной системы, версия ядра.

Окончательная эскалация привилегий с DirtyCow

Для повышения привилегии можно поискать информацию об известных уязвимостях для конкретной версии системы, в которой мы осуществляем атаку. В этом случае, Ubuntu 14.04, используем инструмент AutoLocalPriviligeEscalation. С его помощью обнаруживаем, что жертва запускает одну из версий, уязвимых для «Dirty COW». Этот эксплойт использует уязвимость в обработке памяти, что вызывает проблему состояния гонки, позволяя, таким образом, писать в области памяти, которые теоретически должны быть только для чтения.

Видео 1: Пример использования DirtyCow

Мы загружаем эксплойт из репозитория Github на атакующую машину. В нашем случае мы помещаем zip на веб-сервер Apache, который мы загрузили. В реальной среде злоумышленник может использовать свой собственный сервер, где будет хранить все вредоносное ПО, используемое для компрометации конкретной системы.

Рисунок 10: Публикация dirtycow exploit на сервере Apache злоумышленника

Из netcat загрузите «wget» zip на зараженный компьютер и переместите его в папку / tmp, чтобы не было отображения и, таким образом, не жертва не могла его видеть. Shell, которую дал netcat, имеет свои ограничения. Например, вы не можете делать «ssh» или «su». Также есть трудности при попытке редактировать файлы и не показывает STDERR. Иначе говоря, будем иметь проблемы при получении Shell с root. Конечно, передача dirtycow.zip по сети может переопределить элементы управления безопасностью и IDS.

Теперь нам придется его распаковать, скомпилировать и запустить, но с терминала netcat невозможно выполнить любую из этих задач. Мы должны сначала «upgradear» shell для получения полного терминала. Есть различные возможности для этого, но самый простой — запустить строку в Python, которая выведет один pseudoterminal (pty). Используя бибилиотеку pty, нам просто нужно применить метод .spawn и добавить «bin / bash», чтобы получить shell.

Рисунок 11: Модернизация shell

Видите подсказку в консоли. Есть много способов сделать так. Возможно, что, в отличие от этого сценария, у жертвы не установлен Python, поэтому придется прибегать к другим методам.

Рисунок 12: Извлечение содержимого эксплойта

Теперь мы должны использовать систему для достижения повышения привилегий, которые нам нужны для контроля над системой. Мы извлекаем zip, ранее загруженный и перемещенный в / tmp на зараженный компьютер с помощью «unzip» (как показано на изображении выше). Затем скомпилируйте его, как показано на следующем изображении.

Рисунок 13: Компиляция DirtyCow

И, наконец, выполните его с опцией «-s» для более быстрого и автоматического процесса, так как эксплойт может оставить систему заблокированной. Теперь видно, что получены привилегии суперпользователя, т.е. мы имеем абсолютный контроль над системой.

Рисунок 14: Запуск DirtyCow

Таких бэкдоров для доступа к системе не мало. Здесь показан лишь небольшой пример.

Заключительные замечания по безопасности ботов Telegram

В Github мы можем найти множество ботов, предлагающих разные функции. Требуется проявлять особую осторожность, поскольку многие из них потенциально уязвимы, и если мы загружаем и используем их, то ставим себе возможные проблемы, подобные описанным выше.

Теперь представьте, что это центральный сервер небольшой компании, и в нем хранятся базы данных, документы и конфиденциальная информация. Мы могли бы украсть эту информацию, даже подготовить DoS в выполняемых ею службах, и многое-многое другое.

Несколько рекомендаций

  • Контролируйте параметры, которые передаете боту.
  • Убедитесь, что команды выполняются только администраторами или уполномоченным персоналом. В Telegram каждый пользователь имеет уникальный идентификатор, который может использоваться, чтобы другие пользователи не запускали его.
  • Используйте регулярные проверки.
  • Используйте функции языка, на котором бот был реализован для повышения безопасности. В Python вы можете использовать shlex.quote (s).

Рисунок 15: JSON с запросами бота

  • Если вы заподозрили, что кто-то пытается выполнить команду, вы можете отключить бот и проверить последние запросы, сделанные с помощью сервера Telegram, которые хранятся в течение 24 часов. Для этого перейдите в браузер и введите https://api.telegram.org/bot[token]/getUpdates, где вы должны прописать токен бота в [токене].

Вывод:
Проверяйте безопасность ваших ботов.


Telegram News в Telegram + чат и во ВКонтакте

Report Page