Как создать backdoor kali linux
Думаю, ты слышал про интересный фреймворк Evilgrade, который позволяет надругаться над механизмом обновления многих популярных программ (Windows update, Apple update и еще целой пачки), подсовывая вместо валидных файлов зловредные бинарники. Считаешь, подобной уязвимости подвержены только апдейты приложений? Ты ошибаешься. Скажу больше: скачивать бинарники из Сети не так безопасно, как кажется на первый взгляд. Не веришь? Тогда смотри, а вернее — читай.
Вместо введения
Проникновение на рабочую станцию обычного пользователя представляет собой довольно непростую задачу. Ведь в отличие от серваков, на которых может крутиться большое число дополнительного ПО (веб-серверы, СУБД, FTP-серверы. ), которое увеличивает шанс найти лазейку для получения удаленного шелла, в случае обычной рабочей станции и зацепиться-то особо не за что. Предположим, ты хотел бы получить удаленный доступ к компьютеру своего соседа Васи. А рассеянный Вася забыл отключить автоматическое обновление системы, поэтому пробить его систему каким-нибудь бородатым сплоитом не получится. Ситуация непростая, но и не безвыходная. В таком случае можно положиться на свои навыки социнженера или, к примеру, воспользоваться Evilgrade’ом — автообновления-то у Васи включены! Но есть и еще вариант — BDFProxy.
Знакомься, BDFProxy
Схема работы BDFProxy
Автор предполагает следующие схемы работы инструмента для локальной и беспроводной сетей:
Установка
Пожалуй, отставим лирику и посмотрим, на что способен данный инструмент. Для его работы понадобятся следующие пакеты: самая последняя версия Pefile, ConfigObj, mitmproxy, BDF (тоже самый последний), Capstone (является частью BDF). Итак, клонируем BDFProxy в одноименную папку и запускаем установку:
А сами просто сидим и ждем. Если у тебя не установлен pip , то библиотеку pefile придется устанавливать самому вручную:
После чего все готово к использованию. Как рекомендует автор, перед каждым запуском следует выполнять команду апдейта, на случай изменений и дополнений: ./update.sh .
Настройка
Теперь мы подошли к самому интересному — к правке конфига, который обитает в файле bdfproxy.cfg . Давай посмотрим, что там есть. Помимо установки значения, на каком порту будет работать прокси ( proxyPort = 8080 ), куда будут сливаться логи ( logname = proxy.log ) и какой уровень логирования будет установлен ( loglevel = INFO ), есть еще white- и black-листы. Белые — это те, которые будут как раз таки патчиться, черные — нет. Эти листы существуют как для хостов — там указываем, бинарники с каких серверов патчить, а с каких нет (по умолчанию значение ALL — патчим отовсюду), — так и для ключевых слов — здесь в черный список следует занести то, что патчить не следует. Например, исполняемые файлы популярных программ и DLL-библиотеки: blacklist = Tcpview.exe, skype.exe, .dll . Еще конфиг позволяет задать настройки для каждого типа исполняемых файлов Windows/Linux х86/х64. Но довольно о конфиге — там все достаточно просто и понятно, перейдем к действиям.
Испытания на полигоне
Все вроде как настроено, самое время переходить к непосредственному запуску инструмента и, в лучших традициях, попробовать похакать самого себя. Запускаем тулзу:
В ответ ждем подобного выхлопа:
Как видишь, у нас создался файлик bdfproxy_msf_resource.rc . Просмотрев его, обнаруживаем строчку, как использовать сие чудо:
Как ты уже, наверное, понял, msfconsole — это пожалуй, самый популярный интерфейс для MSF. Он обеспечивает решение «все в одном», консоль централизована и предоставляет эффективный доступ к практически всем опциям, доступным в Metasploit Framework. Msfconsole может показаться слегка путаным и непонятным поначалу, но как только узнаешь его синтаксис команд поближе, начинаешь ценить огромную силу использования этого интерфейса. Возвращаясь в нашу консоль, допиливаем настройки:
Теперь, когда мы будем скачивать какой-нибудь бинарник из интернета, он будет патчиться на лету и при этом будет иметь не очень высокий уровень обнаружения антивирусами. Плюс после его запуска мы получаем полноценный шелл на удаленной машине, остается только к ней подключиться и рулить на свое усмотрение:
Испытания в реальности
В качестве плацдарма для своих испытаний будем использовать Kali Linux, хотя вполне подойдет и любой другой дистрибутив. Если у тебя еще не установлен Tor, то срочно выполняй
и перейдем к его настройке.
Настраиваем Tor
Для начала давай разберемся, какие параметры из конфига тора нам понадобятся. ControlPort — на этом порту Tor будет принимать подключения для управления Tor-сервером. DirPort — на этом порту Tor будет принимать данные от сервера директорий. Установим их, например, в следующие значения:
Далее ExitPolicy — определяет, какой трафик мы будем принимать и форвардить. Имеет формат ExitPolicy Accept | reject address:port . Можно прописать что-то подобное:
Тем самым мы будем резать весь трафик, кроме 80, 443, 110, 143, 993 и 995-го порта. При желании можно что-то добавить или убавить. Как говорится, хозяин — барин. HashedControlPassword — хеш пароля для доступа и конфигурации Tor-сервера, сделать можно командой: tor –hash-password . Nickname — имя нашего сервера. ORPort — порт, ожидающий подключения от других нодов. SocksListenAddress — адрес, по которому Tor будет ждать подключений от приложений, работающих через SOCKS. Формат: SocksListenAddress IP[:PORT] . Установим IP в 127.0.0.1 , а порт оставим дефолтным (9050). Это понадобится нам, если мы захотим использовать Tor в связке с Privoxy или другими прокси.
Конечная часть конфига будет представлять собой что-то подобное:
Теперь через какое-то время наш компьютер станет полноценной exit-нодой! Кстати говоря, настоятельно рекомендую тебе создать для запуска тора отдельного пользователя, а не стартовать его от рута.
Проверка выходных узлов Тора
Случай модификации бинарников
На данный момент о вредоносном узле уже сообщено в Tor, и он помечен как BadExit. Тут, правда, стоит отметить, что из 1110 выходных узлов в сети Tor это был единственный, который добавлял вредоносный код к бинарникам. Все остальные проверены и не делают ничего подобного. Хотя это нельзя гарантировать наверняка: узлы могут действовать избирательно и модифицировать только часть файлов, чтобы не проявить себя при проверке. К слову, компания Symantec внесла свои пять копеек по поводу обнаруженной вредоносной ноды. Зловред, который дописывался ко всем бинарникам, написан под семейство вин-машин, в которые вошли: Windows XP, Windows 2000, Windows Vista и Windows 7. Антивирус его детектит как Backdoor.Miniduke! GEN4. После проникновения программа связывается со своими создателями через сервис микроблогов Twitter, где она ищет твиты в заранее созданных злоумышленниками аккаунтах. Переходя по линкам, опубликованным в Twitter, она загружает основную часть вредоносного кода. Загрузка осуществляется в несколько этапов, после чего зловредный код начинает функционировать как Backdoor, открывая тем самым злоумышленнику доступ к любым данным, находящимся на компьютере жертвы.
Как защититься
Ну а теперь пару слов о методах противодействия. Самое банальное и самое эффективное в данной ситуации — это, конечно же, использование SSL/TLS. Но вот как заставить пользоваться этим разработчиков ресурсов, с которых ты скачиваешь файлы? Еще может выручить сверка хешей реального файла и того, что скачал. Если подозрения все еще мучают тебя, попробуй прогнать файл через тот же VirusTotal или подобные ресурсы, в случае добавления какой-то известной сигнатуры сразу получишь огромное количество детектов заразы.
Делаем выводы
Тор — прекрасный инструмент для защиты личности, однако он не гарантирует безопасность. И не стоит про это забывать. Как видишь, суть одна — не доверять никому и проверять полученные данные: никогда не угадаешь, что именно ты скачал в свеженьком бинарнике. А развернуть подобную тему на своем сервачке — дело совсем недолгое, а если еще и таргетироваться на узкий рынок устройств или ПО, то шансов быть быстро обнаруженным весьма невелик. Так что чти УК РФ, носи белую шляпу и всегда сверяй хеши
Shell — так называют доступ к оболочке удалённой системы. Относительно информационной безопасности, так называют доступ к оболочке, который обеспечивается бэкдором.
Эти шеллы разделают на два вида:
Они различаются особенностями подключения. Первый (прямой) — просто Shell — когда бэкдор прослушивает порт на удалённом компьютере в ожидании, когда на этот порт придёт подключение.
Второй (обратный) — Reverse Shell означает, что с удалённого компьютера делается запрос на машину атакующего, на которой, в свою очередь, уже запущена программа для управления бэкдором — которая также ожидает подключения от компьютера «жертвы».
Оба они имеют разные случаи использования. Прямой шелл используется если у компьютера жертвы белый IP адрес (без использования NAT). Обратный шелл используется, если удалённый компьютер находится за NAT (имеет только локальный IP адрес), либо если файервол блокирует входящие соединения — большинство файерволов настроены пропускать исходящие соединения.
В качестве бэкдоров и программ для создания шэллов могут использоваться разные инструменты, здесь я покажу как создать шелл используя легитимную программу Netcat или Ncat, которые по умолчанию установлены на многих компьютерах Linux и серверах.
На Linux
На сервере, к которому получен доступ, программа netcat может называться по-разному, частые варианты:
Ищите их любую из этих программ.
В последующих командах я покажу на примере ncat, если вы найдёте на удалённом компьютере netcat или nc, то в последующих командах замените исполнимый файл на них.
В Ncat
Для создания шелла на удалённом компьютере:
Для подключения к нему с локального компьютера:
Перед созданием обратного шелла, предварительно на локальном компьютере нужно выполнить:
Затем для создания обратного шелла с удалённого компьютера там нужно выполнить:
В GNU netcat, Netcat и nc
Для создания шелла на удалённом компьютере:
Для подключения к нему с локального компьютера:
Перед созданием обратного шелла, предварительно на локальном компьютере нужно выполнить:
Затем для создания обратного шелла с удалённого компьютера там нужно выполнить:
В Windows
Для создания прямого шелла:
Для создания обратного шелла (подключения до машины атакующего):
Как и в случае с Linux, на машине атакующего уже должна быть запущена Ncat или другая программа для принятия входящего соединения.
Кстати, если вас заинтересовала утилита Netcat, то очень много про работу с этой программой в статье « Как пользоваться netcat (nc), ncat ».
В этой лекции Вы научитесь создавать бэкдор, с помощью которого Вы сможете получить шелл Meterpreter, который Вы будете использовать вместе с Metasploit. Вместо обычного шелла netcat-a, Вы получите более продвинутый шелл meterpreter-a. Должен сказать, что если Вы учили все, о чем мы говорили ранее, то Вы поймете все, что я Вам объясню и покажу. Но если по какой-либо причине тема покажется Вам слишком сложной, не беспокойтесь об этом, так как когда Вы будете переходить на более продвинутый материал, то там будет затронута данная тематика.
Я создам исполняемый файл, который позволит мне использовать шелл meterpreter-a, и для этого я воспользуюсь скриптом сервиса msfpc, который работает на базе msfvenom. Metasploit venom – это инструмент, с помощью которого можно создавать пэйлоады, но сейчас мы будем рассматривать msfpc, который гораздо проще в использовании, нежели msfvenom. Если мы введем команду «msfpc -h», то увидим огромное количество различных типов пэйлоадов:
Я могу создавать пэйлоады, которые будут влиять на машины на Windows, aspx файлы, или powershell, а также линукс .elf и т.д.
Скопируем шаблон для заполнения в самом верху вывода команды, и вставим в консоль для постепенного заполнения:
Удаляем последние два параметра и в третьем оставляем TCP. После этого мне нужно выбрать параметр STAGED или STAGELESS. Что это такое? STAGELESS пэйлоад более самостоятелен, так как сам запускается, исполняется, и внутри у него есть весь необходимый функционал. А вот STAGED-пэйлоад разделен на несколько частей. Сначала выполняется первая часть, а затем вторая. На самом деле я удалю этот параметр и Вам не стоит о нем сейчас беспокоиться.
Для нас беспокойным будет следующее; а именно, какой шелл мы будем использовать. BIND-SHELL или REVERSE-SHELL. Мы уже знаем разницу между ними, и для нас лучший вариант – это использование обратного шелла.
Затем у меня есть выбор, хочу ли я, чтобы это был пэйлоад Metasploit или команда, которую я хочу запустить. Я могу выбрать опцию CMD, чтобы затем выбрать команду, которую я хочу запустить. Или же я могу выбрать пэйлоад Metasploit, чтобы потом работать в шелле meterpreter-a. Благодаря последнему пэйлоаду, у меня будет больше возможностей, и я выбираю опцию MSF.
Далее мне нужно выбрать порт – это 4444.
После этого мне нужно выбрать айпи-адрес, и в данном случае это будет айпишник моей машины на Kali Linux, потому что это обратный шелл. Это 192.168.119.128.
И в конце, а вернее в начале, мне нужно выбрать тип пэйлоада, который я хочу сгенерировать. Другими словами, на какой системе я буду его запускать, и в каком приложении. Я хочу, чтобы это был пэйлоад для Линукса.
Запись будет иметь вид:
Жмем «Enter», и даем инструменту творить магию:
Обратите внимание на строку CMD и команду, которую я бы вводил, используя msfvenom, но это не пришлось делать, так как есть опция CMD, и за меня была проделана вся работа.
В итоге мы создали исполняемый файл с расширением «.elf». В дополнении ко всему у нас создается скрипт Metasploit:
Когда я его запущу, то будет запущен Metasploit со всеми параметрами. Теперь я могу запустить этот скрипт. Все, что мне нужно, так это скопировать эту строку с параметрами, и вставить в новое окно терминала:
Он ждет подключение от пэйлоада meterpreter.
Мне нужно загрузить этот исполняемый файл, а затем запустить его на системе, на Линуксе. Для этого я хотел бы познакомить Вас с уязвимостью веб-приложений, для разнообразия. Мы рассмотрим уязвимость выполнения команд (Command Execution). Уязвимость выполнения команд, как следует из имени, позволяет нам запускать и выполнять команды на машине цели, без необходимости загружать php-шелл. Мы можем сразу выполнять команды в системе. Такое можно проверить в приложениях, которые позволяют проверить пинг на сайте, и эти значения отображаются на самой странице. Если эти функции настроены неправильно, то Вы сможете комбинировать команды. Обычно ограничиваются типы запускаемых команд. Давайте предположим, что есть веб-сайт, который позволяет проверить пинг других веб-сайтов. Этот веб-сайт в реальности позволяет запрещать все, кроме команды ping, и не разрешать ничего другого, но если неправильно его настроить, то Вы можете запустить более одной команды, и это даст Вам доступ к функционалу операционной системы, на которой хостится этот веб-сайт. Давайте я покажу Вам, что я имею ввиду на сайте DVWA:
И если Вы погуглите, то можете встретить аналогичные сайты, с подобным функционалом. Если я введу, например локальный айпи-адрес, то на сайте отобразится время на выполнение команды:
Что произойдет, если я попытаюсь объединить его с другой командой. Введем наш локальный айпи-адрес и добавим команду pwd, перед которой будут стоять два амперсанда:
В выводе я получаю текущую директорию (выделено салатовым в самом низу). Но самое важное то, что я запустил не одну команду, а две, что очень хорошо для атакующего, т.е для нас.
Давайте проверим, запущен ли wget в этой системе. Для этого пишу команду: «127.0.0.1 && wget -h»:
И к счастью для меня «wget» был запущен. Все, что мне остается, так это использовать «wget», чтобы подключиться к Kali и скачать .elf файл.
Перед этим мне нужно настроить нашу машину на Kali качестве веб-сервера и поместить этот «.elf» файл в директорию, чтобы я мог его скачать через wget на машину цели. Я копирую данный файл в директорию /var/ www/html. Команда будет выглядеть как: «cp linux-meterpreter-staged-reverse-tcp-4444.elf /var/www/html/backdoor.elf»:
Далее я запускаю сервер Apache2, с помощью команды «service apache2 start»:
Давайте проверим, прошла ли загрузка. Запускаем команду «ls»:
Отлично. Я смог загрузить файл с Кали Линукс на машину Metasploitable2. Итак, перед запуском файла нужно сделать его исполняемым. Это делается с помощью команды «chmod +x backdoor.elf», и если все прошло корректно, то мы увидим х напротив файла бэкдора:
Последний шаг. Запуск файла. Это делается с помощью команды: «192.168.119.140 && ./backdoor.elf»:
Переходим в терминал, и у нас есть открытая сессия:
Чтобы взаимодействовать с сессией, нужно ввести команду «sessions –i 1», где I значит – interact (взаимодействие):
Готово. Теперь у меня есть шелл meterpreter, который позволяет мне взаимодействовать с системой на Metasploitable2. Например, можно выполнить команду «sysinfo»:
Для того, чтобы перейти в стандартный терминал линукс, нужно ввести команду «shell»:
Вот, собственно и все. Таким образом можно запустить бэкдор, который даст нам доступ к шеллу meterpreter, и захватить шелл используя Metasploit Framework.
Конечно, для того, чтобы запустить бэкдор, мне понадобилось использовать уязвимость веб-приложения, скачать исполняемый файл на машину, и запустить его на этой машине. Это всего лишь один из возможных способов.
Этичный хакинг и тестирование на проникновение, информационная безопасность
Для генерации рабочей полезной нагрузки нам нужно ясное понимание о том, как и что работает, также перед началом работы вам нужно понимать такие термины как:
- transports
- launchers
- listeners
- payloads
Transport
Transport (транспорт) — это то, каким образом (с использованием каких протоколов и технологий) сервер и клиент передают между собой информацию.
Доступны следующие варианты:
Launchers
Launchers (лончеры) позволяют pupy запускать настраиваемые действия перед запуском обратного соединения.
Лончер connect обычно называют Reverse Shell (Обратный шелл). А bind — это то, что обычно называют просто Shell. Подробности об их различиях и случаях применения здесь.
Listeners
Listeners (прослушиватели) — используются с лончером connect, то есть при Reverse Shell (Обратном шелле), когда нужно ждать подключение от удалённого компьютера.
Если в качестве лончера выбран bind, то нам не нужен прослушиватель на нашем компьютере — нам достаточно сразу подключиться к удалённой системе.
Прослушиватели при запуске должны получить два параметра:
- порт, к которому будет сделано подоключение
- транспорт, который использует полезная нагрузка
По умолчанию лончер пытается прослушивать на порту 443 используя транспорт ssl. Эту конфигурацию можно изменить в файле pupy.conf. О том, как добавлять свои собственные прослушиватели, будет рассказано далее.
Формат полезной нагрузки
Pupy умеет создавать файлы для различных операционных систем: Windows, Linux, OSX, Android. Поддерживаются различные архитектуры процессора (64- и 32-битные). При создании полезной нагрузки нужно указывать эти данные в параметрах. Это в первую очередь относится к исполнимым файлам — то есть для исполнимых файлов нужно указать, например, что бэкдор должен быть запущен в операционной системе Windows с архитектурой процессора 64-бита.
Pupy умеет создавать не только исполнимые файлы, но и другие форматы, а именно:
- client: исполнимые файлы для запуска на целевой машине (.exe, .dll, .lin, .so).
- py: файл python.
- pyinst: файл python готовый для использования с pyinstaller.
- py_oneliner: python oneliner (то есть исполнимый код в одну строку) (запускает в фоне прослушивающий сервер)
- ps1: файл powershell.
- ps1_oneliner: powershell oneliner (запускает в фоне прослушивающий сервер).
- rubber_ducky: полезен с rubber ducky.
Генерировать полезную нагрузку можно двумя способами: используя отдельный файл pupygen.py, либо запустив Pupy и в консоли используя команду
Можно выбрать любой вариант — у этих способов идентичные опции запуска. Я буду показывать на примере работы в сессии Pupy, поэтому начинаю с запуска этой программы.
Запуск Pupy
В статье про установку Pupy я рассказывал о двух вариантах установки и рекомендовал первый. Запуск сессии Pupy различается в зависимости от метода установки. При установке прямо в систему, сессия запускается так:
При первом запуске генерируются ключи и сертификаты, которые используются в программе для шифрования соединений с удалёнными системами:
Они сохраняются в файл /root/.config/pupy/crypto/credentials.py
Программа также говорит:
Опции gen
Как сказано выше, gen (и pupygen.py) используются для генерации полезной нагрузки и у них одинаковые опции. Рассмотрим их.
Как можно увидеть, некоторые значения установлены по умолчанию. Если запустить команду
без каких-либо опций, то будет сгенерирована полезная нагрузка, она в качестве значений по умолчанию примет следующие значения:
- формат полезной нагрузки: client
- лончер: connect (то есть обратный шелл до нашей машины)
- в качестве IP адреса берётся автоматически определённый наш адрес
- порт для подключения: 443
- платформа: windows/x86
- транспорт: ssl
Но все эти опции мы, конечно же, можем перенастроить нашими параметрами.
Все опции рассмотрены выше, поэтому нет смысла детально объяснять команды — если вам в них что-то непонятно, тогда вернитесь к их описанию.
Начнём с создания обратного шелла — в этом случае удалённый компьютер («Жертва») подключается к компьютеру «Атакующего». Поэтому при создании полезной нагрузки нужно указать IP адрес, к которому должна подключаться Жертва. К примеру, IP адреса своих интерфейсов можно посмотреть командой
Я буду делать тесты в локальной сети, у компьютера Атакующего локальный адрес 192.168.1.112 — поэтому я буду использовать его, а вы замените его на ваше значение.
Файл успешно создан и сохранён по пути /root/.config/pupy/output/pupyx64.KrN0Qe.exe
Переименую и скопирую его в более близкий путь:
Поскольку с удалённого компьютера будет делаться подключение к нашему компьютеру, то перед запуском только что созданного файла на целевой системе нам нужно создать прослушиватель, который будет ожидать подключения к нему.
Кстати, при запуске Pupy один прослушиватель запускается автоматически, об этом говорить строка:
То есть заключается слушатель для транспорта ssl на порту 443.
Новые слушатели создаются, удаляются и показываются командой listen.
Создание слушателей listen
Общий вид команды такой:
Говорит о том, что всё прошло успешно.
Выведем список всех слушателей:
Всё готово — теперь я переношу файл с полезной нагрузкой на целевую систему и запускаю его там.
Через несколько секунд после запуска будет выполнено подключение к компьютеру атакующего и появится примерно следующая информация:
К управлению сессиями, выполнению команд на удалённой машине и эксплуатации мы перейдём в следующей части. А пока рассмотрим ещё несколько популярных примеров генерации полезной нагрузки.
Создание бэкдора для Windows
В этом случае мы не указываем IP адрес, поскольку данная полезная нагрузка никуда не подключается. Но мы указываем порт — этот порт будет открыт на компьютере Жертвы в ожидании подключения Атакующего.
Подключение к бэкдору
Для подключения используется команда connect. Рассмотрим её опции.
Как можно увидеть, обязательно нужно указать IP и порт подключения. Транспорт можно не указывать.
Кстати, в Windows IP адрес можно узнать командой
Для подключения к порту 54321 хоста 192.168.1.101:
Как сделать бэкдор для Linux
Для Linux можно также создать обратный шелл и обычный шелл.
Для создания обратного шелла:
Прослушиватель запускается точно так же, как это было показано выше:
Для создания бэкдора, который будет ждать подключения от нас:
Для подключения к нему:
Итак, в этой части мы научились создавать полезную нагрузку и подключаться к бэкдору.
В следующей части мы рассмотрим как выполнять команды на удалённой системе: Как удалённо управлять компьютерами через бэкдор
Читайте также: