[Перевод] Kali Linux: упражнения по модификации пакетов, сборке ядра и созданию ISO-образов
Сегодня публикуем перевод завершения девятой главы книги «Kali Linux Revealed». Здесь будут подведены итоги таких тем, как модификация пакетов, сборка ядра и создание собственных ISO-образов. Кроме того, тут вы найдёте упражнения к этой главе, на которых, надеемся, будет интересно попробовать свои силы как тем, кто уже знаком с Kali, так и тем, кто только начал осваивать этот дистрибутив.
9.5. Итоги
В этой главе вы узнали о том, как модифицировать пакеты с исходным кодом, которые являются основными строительными блоками всех присутствующих в Kali приложений. Кроме того, мы рассказали о том, как настраивать, собирать и устанавливать собственные ядра Kali. Далее, мы поговорили об окружении live-build
и о том, как создавать собственные ISO-образы Kali. Так же в этой главе речь шла о подготовке загрузочных флэш-носителей с поддержкой постоянных хранилищ информации, которые могут быть как зашифрованными, так и незашифрованными. Сейчас мы систематизируем основные положения этой главы и предложим вашему вниманию набор упражнений.
9.5.1. Модификация пакетов
Модификацией пакетов Kali обычно занимаются разработчики, и те, кто отвечает за поддержку и развитие системы, однако, может случиться так, что вам будет недостаточно возможностей, предоставляемых официальными сборками пакетов.
Поэтому знание того, как собрать модифицированный пакет, может быть очень полезным, особенно если вы хотите поделиться новым пакетом с кем-нибудь, развернуть его на множестве машин, или, после установки нового пакета, без проблем вернуть систему в предыдущее состояние.
Когда вам нужно модифицировать некую программу, весьма соблазнительно загрузить исходный код, внести в него изменения и использовать эту модифицированную версию. Однако, если программа нуждается в установке, после которой она доступна во всей системе (то есть, с использованием make install
), тогда такая установка загрязнит файловую систему файлами, неизвестными dpkg
, что довольно скоро приведёт к возникновению проблем, которые не могут быть выявлены на основе анализа зависимостей пакетов. Кроме того, при таком подходе к модификации пакетов, тем, что получилось, сложнее делиться с другими пользователями.
В ходе создания модифицированного пакета общая последовательность действий всегда оказывается одной и той же: скачивание пакета с исходным кодом, извлечение его содержимого, внесение изменений, а затем — сборка пакета. Существует множество инструментов, способных решить каждую из этих задач.
Для того, чтобы приступить к пересборке пакетов Kali, сначала нужно загрузить пакет с исходным кодом, который включает в себя основной *.dsc-файл (Debian Source Control) и дополнительные файлы, на которые есть ссылки в основном файле.
Пакеты с исходным кодом хранятся на HTTP-зеркалах. Самый эффективный способ их загрузки заключается в использовании команды вида apt source source-package-name
. Для её успешного выполнения требуется добавить строку deb-src
в файл /etc/apt/sources.list
и обновить индексные файлы командой apt update
.
Кроме того, можно использовать команду dge
t (из пакета devscripts
) для непосредственной загрузки .dsc-файла и сопутствующих ему материалов. В случае с пакетами, подготовленными специально для Kali, исходный код которых хранится в Git-репозитории на git.kali.org
, загрузить исходный код можно с помощью команды вида git clone git://git.kali.org/packages/source-package
(если после выполнения такой команды ничего загружено не будет, попытайтесь переключиться на ветку kali/master
с помощью команды git checkout kali/master
).
После загрузки исходного кода установите пакеты, перечисленные в зависимостях сборки пакета с исходным кодом, с помощью команды apt build-dep ./
. Её необходимо запустить, из директории пакета, в которой находится исходный код.
Внесение изменений в пакет с исходным кодом заключается в выполнении необходимых действий из следующего списка:
- Первый шаг, который нужно выполнять всегда, заключается в изменении номера версии пакета. Это требуется для того, чтобы система могла отличить новый пакет от исходного. Делается это с помощью команды вида
dch --local version-identifier
или путём модификации других сведений о пакете с помощью утилитыdch
. - Применение патча с помощью команды вида
patch -p1 < patch-file
или модификация серии патчейquilt
. - Настройка параметров сборки, которые обычно можно найти в файле
debian/rules
или в других файлах из директорииdebian/
.
После модификации пакета с исходным кодом можно собрать бинарный пакет с помощью команды dpkg-buildpackage -us -uc -b
, вызываемой из директории с исходным кодом. Эта команда создаст неподписанный бинарный пакет. Полученный пакет потом можно установить с помощью такой команды: dpkg -i package-name_version_arch.deb
.
9.5.2. Сборка ядра
У продвинутых пользователей системы иногда возникает потребность в перекомпиляции ядра Kali. Возможно, вам это понадобится для того, чтобы уменьшить размер стандартного ядра, которое, по умолчанию, содержит множество возможностей и драйверов. Сборка нового ядра может понадобиться для добавления в него нестандартных драйверов или возможностей, или для установки патчей ядра. Тут стоит знать о том, что неправильно настроенное ядро может сделать систему нестабильной, и вы должны понимать, что команда Kali не может обеспечить обновления безопасности для ядер, которые пользователи собирают самостоятельно.
В большинстве случаев для внесения изменений в ядро понадобится установить некоторые пакеты с помощью команды apt install build-essential libncurses5-dev fakeroot
.
Команда apt-cache search ^linux-source
должна вывести список последних версий ядра, созданных командой поддержки Kali. Команда вида apt install linux-source-version-number
устанавливает сжатый архив с исходным кодом ядра в /usr/src
.
Файлы с исходном кодом надо распаковать командой tar -xaf
в директорию, отличающуюся от /usr/src
(например, в ~kernel
).
Когда приходит время настраивать ядро, стоит держать в голове следующие соображения:
- Если вы не являетесь пользователем с огромным опытом, сначала стоит заполнить конфигурационный файл ядра. Для этого лучше всего взять стандартную конфигурацию ядра, скопировав
/boot/config-version-string
в~/kernel/linux-source-version-number/.config
. Как вариант, можно использовать командуmake architecture_defconfig
для построения подходящей для имеющейся архитектуры конфигурации. - Инструмент для конфигурирования ядра с текстовым интерфейсом, запускаемый командой
make menuconfig
, считывает файл.config
и даёт возможность настраивать ядро с помощью обширной системы меню. При выборе элемента выводится документация по нему и список возможных значений, тут же можно и ввести для него новое значение.
Если выполнить команду make clean
из директории с исходным кодом ядра, это приведёт к удалению ранее скомпилированных файлов. Команда make deb-pkg
создаст до пяти Debian-пакетов. Файл, имя которого выглядит как linux-image-version.deb
содержит образ ядра и связанные с ним модули.
Для того, чтобы использовать новое ядро, нужно установить необходимые пакеты с помощью команды вида dpkg -i file.deb
. При этом не обойтись без пакета «linux-image». Пакет «linux-headers» нужно установить лишь в том случае, если имеются внешние модули ядра для сборки, что происходит в том случае, если у вас есть установленные *-dkms-пакеты (проверить, так ли это, можно с помощью команды dpkg -l "*-dkms" | grep ^ii
). Другие пакеты, в большинстве случаев, не используются.
9.5.3. Сборка собственных ISO-образов Kali
Официальные ISO-образы Kali собраны с использованием набора скриптов live-build
, который даёт возможность полной автоматизации работ и настройки всех аспектов создания ISO-образов.
Для использования live-build
нужно, чтобы система была обновлена до последней версии.
Конфигурационные данные Kali live-build можно загрузить из Git-репозиториев Kali с помощью команды apt install curl git live-build
, после которой выполняется команда git clone git://git.kali.org/live-build-config.git
.
Для создания обновлённого, но немодифицированного ISO-образа Kali, достаточно воспользоваться командой ./build.sh --verbose
. Сборка займёт немало времени, так как в ходе выполнения этой операции будут загружены все необходимые пакеты. После завершения сборки новый ISO-образ можно будет найти в директории images
. Если при выполнении этой команды воспользоваться опцией вида --variant variant
, будет собран указанный вариант образа. Различные варианты определяются их конфигурационными директориями, имена которых выглядят как config/variant-*
. Основной образ создаётся с помощью варианта gnome
.
Есть несколько подходов в к настройке ISO-образа, которые заключаются во внесении изменений в конфигурационную директорию live-build
:
- В Live-образ можно добавлять пакеты (или удалять из него существующие пакеты), модифицируя файлы
package-lists/*.list.chroot
. - В образ можно включать собственные пакеты, помещая соответствующие .deb-файлы в директорию
packages.chroot
. Их установка может быть автоматизирована с помощью файловpreseed/*.cfg
. - В Live-файловую систему можно добавлять файлы, размещая из там, где они должны быть, в папке
includes.chroot
. - В ходе процесса сборки образа с использованием
chroot
можно выполнять скрипты, устанавливая их как файлыhooks/live/*.chroot
. Кроме того, скрипты можно вызывать во время загрузки с использованием созданного Live-образа. Их нужно установить по адресу, который выглядит как/usr/lib/live/config/XXXX-name
, например, основываясь на конфигурационной директорииincludes.chroot
. - Для того, чтобы узнать подробности о конфигурировании и тестировании
live-build
, можно воспользоваться отличным руководством Debian Live System Manual.
Развернуть ISO-образ Kali на USB-флэшке довольно просто. При этом на подобном носителе можно настроить постоянное хранилище информации. Хотя этот процесс может показаться немного сложным, при ближайшем рассмотрении оказывается, что на переносном носителе довольно просто создавать зашифрованные и незашифрованные хранилища. Это значительно расширяет функционал подобных загрузочных носителей.
Теперь представляем вашему вниманию упражнения к данной главе.
Упражнения по работе с пакетами и по сборке ядра Kali
Упражнение №1: создание форков пакетов Kali
- Создайте форк пакета
kali-meta
. - Включите в пакет новый метапакет, который содержит 3 ваших любимых инструмента и ничего больше.
- Создайте бинарный .deb-файл, подходящий для дальнейшего использования.
▍Ответы к упражнению №1
1. Сначала настроим систему на работу с пакетами с исходным кодом:
apt-get install devscripts #Для установки dch
nano /etc/apt/sources.list
# Раскомментируйте эту строку: deb-src http://http.kali.org/kali kali-rolling main non-free contrib
Теперь загрузим исходный код. Обратите внимание на то, что вы, если будете следовать этим инструкциям, можете столкнуться с другими версиями пакетов:
apt-get update
apt source kali-meta # Установка всех пакетов kali-linux-*.
cd kali-meta-2017.2.0/
ls -l
nano debian/control
2. Изменим управляющий файл, включим в него собственные пакеты:
Package: kali-linux-muts
Architecture: any
Depends: ${misc:Depends},
kali-linux,
aircrack-ng,
nmap,
sqlmap,
Description: Kali Linux Custom tools for muts
This is Kali Linux, the most advanced penetration testing and security
auditing distribution.
.
This metapackage depends on few of muts' favorites.
Изменим номер версии пакета таким образом, чтобы пересобранные пакеты можно было отличить от исходных:
root@kali:~/kali-meta-2017.2.0# head -1 debian/changelog
root@kali:~/kali-meta-2017.2.0# dch --local muts -m "Added a new metapackage"
root@kali:~/kali-meta-2017.2.0# head -1 debian/changelog # Проверка того, что изменения были выполнены
И, наконец, соберём пакет:
root@kali:~/kali-meta-2017.2.0# dpkg-buildpackage -us -uc -b # Disable signatures (-us -uc), binary-only build (-b)
root@kali:~/kali-meta-2017.2.0# ls -l ../*muts*
-rw-r--r-- 1 root root 6804 Aug 28 13:42 gqrx_2017.2.0muts1_all.deb
-rw-r--r-- 1 root root 6948 Aug 28 13:42 kali-desktop-common_2017.2.0muts1_all.deb
-rw-r--r-- 1 root root 6972 Aug 28 13:42 kali-desktop-gnome_2017.2.0muts1_all.deb
-rw-r--r-- 1 root root 6796 Aug 28 13:42 kali-desktop-kde_2017.2.0muts1_all.deb
-rw-r--r-- 1 root root 6920 Aug 28 13:42 kali-desktop-live_2017.2.0muts1_all.deb
-rw-r--r-- 1 root root 6812 Aug 28 13:42 kali-desktop-lxde_2017.2.0muts1_all.deb
-rw-r--r-- 1 root root 6868 Aug 28 13:42 kali-desktop-xfce_2017.2.0muts1_all.deb
-rw-r--r-- 1 root root 7068 Aug 28 13:42 kali-linux_2017.2.0muts1_amd64.deb
-rw-r--r-- 1 root root 7062 Aug 28 13:42 kali-linux-all_2017.2.0muts1_amd64.deb
-rw-r--r-- 1 root root 7290 Aug 28 13:42 kali-linux-forensic_2017.2.0muts1_amd64.deb
-rw-r--r-- 1 root root 8732 Aug 28 13:42 kali-linux-full_2017.2.0muts1_amd64.deb
-rw-r--r-- 1 root root 6850 Aug 28 13:42 kali-linux-gpu_2017.2.0muts1_amd64.deb
-rw-r--r-- 1 root root 6844 Aug 28 13:42 kali-linux-muts_2017.2.0muts1_amd64.deb
-rw-r--r-- 1 root root 7298 Aug 28 13:42 kali-linux-nethunter_2017.2.0muts1_amd64.deb
-rw-r--r-- 1 root root 7088 Aug 28 13:42 kali-linux-pwtools_2017.2.0muts1_amd64.deb
-rw-r--r-- 1 root root 6864 Aug 28 13:42 kali-linux-rfid_2017.2.0muts1_amd64.deb
-rw-r--r-- 1 root root 6908 Aug 28 13:42 kali-linux-sdr_2017.2.0muts1_amd64.deb
-rw-r--r-- 1 root root 6924 Aug 28 13:42 kali-linux-top10_2017.2.0muts1_amd64.deb
-rw-r--r-- 1 root root 6942 Aug 28 13:42 kali-linux-voip_2017.2.0muts1_amd64.deb
-rw-r--r-- 1 root root 7360 Aug 28 13:42 kali-linux-web_2017.2.0muts1_amd64.deb
-rw-r--r-- 1 root root 7058 Aug 28 13:42 kali-linux-wireless_2017.2.0muts1_amd64.deb
-rw-r--r-- 1 root root 10312 Aug 28 13:42 kali-meta_2017.2.0muts1_amd64.buildinfo
-rw-r--r-- 1 root root 8343 Aug 28 13:42 kali-meta_2017.2.0muts1_amd64.changes
root@kali:~/kali-meta-2017.2.0# ls -l ../kali-linux-muts_2017.2.0muts1_amd64.deb
-rw-r--r-- 1 root root 6852 Aug 28 14:05 ../kali-linux-muts_2017.2.0muts1_amd64.deb
Вот решение на Asciinema (текст из видео копировать нельзя).
Упражнение №2: обновление пакета Kali
- Подготовьте самую последнюю версию набора программ SET для использования с Kali.
- Создайте бинарный файл для дальнейшего использования.
- Можно ли, используя тот же подход, обновить пакет
aircrack-ng
?
▍Ответы к упражнению №2
1. Для начала загрузим Kali-версию SET:
apt source set
Далее, загрузим самую свежую версию SET. Тут, как и в предыдущем упражнении, вы можете столкнуться с другими номерами версий:
wget https://github.com/trustedsec/social-engineer-toolkit/archive/master.tar.gz -O set_7.7.1.orig.tar.gz
tar xvf set_7.7.1.orig.tar.gz
Для того, чтобы не запутаться, переименуем самую свежую версию:
mv social-engineer-toolkit-master social-engineer-toolkit-7.7.1
Скопируем всё, что имеет отношение к Debian:
cp -a set-7.7/debian social-engineer-toolkit-7.7.1/debian
rm -rf social-engineer-toolkit-7.7.1/.git
Обновим номер версии:
cd social-engineer-toolkit-7.7.1
head -1 debian/changelog
dch -v 7.7.1-0muts1 "New upstream release"
head -1 debian/changelog
2. Соберём пакет и проверим его работоспособность:
dpkg-buildpackage -us -uc -b
ls -l ../*muts* # использованный тег версии
dpkg -i ../set_7.7.1-0muts1_all.deb # использованный тег версии
3. В случае с aircrack-ng
всё делается похожим образом:
nano /etc/apt/sources.list
apt-get update
apt source aircrack-ng
wget https://github.com/aircrack-ng/aircrack-ng/archive/master.tar.gz
tar zxpf master.tar.gz
mv aircrack-ng-master aircrack-ng-1.3
cp -rf aircrack-ng-1.2-0~rc4/debian/ aircrack-ng-1.3/
cd aircrack-ng-1.3/
head -1 debian/changelog
dch -v 1:1.3 -m "Upstream update"
nano debian/changelog
dpkg-checkbuilddeps
apt-get install libgcrypt-dev libgcrypt11-dev libnl-genl-3-dev libpcap0.8-dev libpcre3-dev libsqlite3-dev pkg-config zlib1g-dev
dpkg-buildpackage -us -uc -b
Упражнение№3: пересборка ядра
При сборке стандартного ядра Kali действует принцип включения в него максимального функционала. Это нужно для обеспечения поддержки как можно более широкого спектра аппаратных платформ.
- Установите инструмент для измерения производительности вроде
likwid
и запустите быстрый тестlikwid-bench
. - Установите патч graysky2 «Kernel GCC patch» для того, чтобы оптимизировать ядро под ваш процессор.
- Перекомпилируйте ядро после установки патча и выбора своей модели процессора.
▍Ответы к упражнению №3
1. Установим likwid
, запустим тест:
apt-get install likwid
likwid-topology -g | head # выясняем подробности об имеющемся процессоре
likwid-bench -t copy -w S0:100kB:1 # запускаем тест на socket 0
2. Патч для оптимизации ядра под конкретный процессор можно найти здесь. Установим зависимости, необходимые для выполнения перекомпиляции ядра. Тут, как обычно, вы можете столкнуться с другими версиями:
apt install build-essential libncurses5-dev fakeroot
apt-cache search ^linux-source # выполним поиск текущей версии linux-source package
apt install linux-source-4.9 # загрузим её
ls /usr/src # which gets extracted to /usr/src
3. Извлечём исходный код ядра и скопируем туда, где он окажется, текущий конфигурационный файл:
mkdir ~/kernel; cd ~/kernel
tar -xaf /usr/src/linux-source-4.9.tar.xz
cp /boot/config-4.9.0-kali3-amd64 ~/kernel/linux-source-4.9/.config # Copy existing config
Запустим menuconfig
на непропатченной конфигурации ядра:
cd linux-source-4.9
make menuconfig
Перейдём по следующим пунктам меню и посмотрим тип процессора:
Processor type and features --->
Processor family (Generic-x86-64) --->
Выйдем из конфигурации без сохранения. Загрузим оптимизирующий патч и пропатчим ядро:
cd ~/kernel
wget https://raw.githubusercontent.com/graysky2/kernel_gcc_patch/master/enable_additional_cpu_optimizations_for_gcc_v4.9%2B_kernel_v3.15%2B.patch
cd linux-source-4.9/
patch -p1 < ../enable_additional_cpu_optimizations_for_gcc_v4.9+_kernel_v3.15+.patch
make menuconfig
Теперь снова войдём в раздел конфигурационной программы, позволяющий настраивать тип процессора. Тут должны появиться новые пункты:
Processor type and features --->
Processor family (Generic-x86-64) --->
Выберем необходимый тип процессора, сохраним конфигурацию и выйдем из программы. Теперь соберём ядро:
export CONCURRENCY_LEVEL=5 #количество имеющихся CPU +1
make deb-pkg LOCALVERSION=-custom KDEB_PKGVERSION=$(make kernelversion)-1
Запустим тестирование:
likwid-topology -g | head # выясняем подробности об имеющемся процессоре
likwid-bench -t copy -w S0:100kB:1 # запускаем тест на socket 0
Улучшились ли показатели тестирования? Как ощущения? Может, получилось что-то вроде этого?
![0d492886e57771ae2fe355e3060c74cf.jpg](https://habrastorage.org/getpro/habr/post_images/0d4/928/86e/0d492886e57771ae2fe355e3060c74cf.jpg)
Упражнения по сборке Live-образов
Упражнение №1: Особая Live-сборка Kali
В одной из серийMr. Robot Анжеле нужно загрузиться с USB-диска Kali и, для того, чтобы взломать систему, ввести несколько команд. Можете ли вы собрать такой ISO-образ Kali, который позволит ей решить задачу быстрее? Автоматизируйте работу так, чтобы после загрузки Kali Анжеле не пришлось бы касаться клавиатуры.
▍Ответы к упражнению №1
Для решения этой задачи надо собрать для Анжелы Live-ISO и отдать его ей.
# Обновляем систему!
apt-get update
apt-get dist-upgrade
# устанавливаем необходимые инструменты
apt install -y git live-build cdebootstrap curl
# Клонируем конфигурационные файлы Kali live build
git clone git://git.kali.org/live-build-config.git
# Перезаписываем стандартный список пакетов, меняя его на минимально необходимый набор
cd live-build-config/
cat kali-config/variant-default/package-lists/kali.list.chroot
echo cryptsetup > kali-config/variant-default/package-lists/kali.list.chroot
echo openssh-server >> kali-config/variant-default/package-lists/kali.list.chroot
echo nmap >> kali-config/variant-default/package-lists/kali.list.chroot
# Добавляем файлы в live-файловую систему (настраиваем скрипты, выполняющиеся при загрузке)
mkdir -p kali-config/common/includes.chroot/lib/systemd/system/
# Регистрируем собственную службу "Angela" для запуска /usr/bin/startssh
cat << EOF > kali-config/common/includes.chroot/lib/systemd/system/angela.service
[Unit]
Description=Start Custom Script
After=multi-user.target
[Service]
Type=idle
ExecStart=/bin/bash /usr/bin/startssh
[Install]
WantedBy=multi-user.target
EOF
# Создаём /usr/bin (и родительские каталоги) в Live-файловой системе
mkdir -p kali-config/common/includes.chroot/usr/bin/
# Создаём скрипт "startssh", который сделает наше чёрное дело
cat << EOF > kali-config/common/includes.chroot/usr/bin/startssh
#!/bin/sh
echo hola > /root/test.txt
EOF
# Создаём хук, активирующий службу
cat << EOF > kali-config/common/hooks/live/angela.chroot
#!/bin/sh
systemctl enable angela.service || true
EOF
# Делаем его исполняемым
chmod 755 kali-config/common/hooks/live/angela.chroot
# Создаём конфигурационный файл загрузки, настраиваем приглашение, тайм-аут, автозагрузку, и так далее
cat << EOF > kali-config/common/includes.binary/isolinux/isolinux.cfg
include menu.cfg
default vesamenu.c32
prompt 0
timeout 20
ONTIMEOUT live-amd64
EOF
# Собираем ISO!
./build.sh --verbose
Упражнение №2: автоматический установщик минималистичной Live-сборки Kali
- Создайте самоустанавливающийся ISO-образ, содержащий минимально возможное количество пакетов, и включите в него только пакеты
openssh-server
иsalt-minion
. - Добавьте к этому образу ваш публичный SSH-ключ для облегчения последующего доступа к нему.
- Проверьте работоспособность образа.
▍Ответы к упражнению №2
Набор live-build
используют всю структуру директорий в качестве входных данных для своей конфигурации. Мы храним эту конфигурацию и некоторые вспомогательные скрипты в Git-репозитории live-build-config
. Мы будем использовать этот репозиторий как базу для сборки специально настроенных образов. Установим необходимые пакеты и загрузим Git-репозиторий с конфигурацией Kali live-build:
apt install curl git live-build
git clone git://git.kali.org/live-build-config.git
cd live-build-config
Создадим список включаемых в образ пакетов, начиная с salt-minion
:
echo salt-minion > kali-config/variant-default/package-lists/kali.list.chroot
И ещё пакеты:
echo openssh-server >> kali-config/variant-default/package-lists/kali.list.chroot
Создадим директорию для включаемых файлов и поместим там наш preseed.cfg
:
mkdir -p kali-config/common/includes.installer
wget https://www.kali.org/dojo/preseed.cfg -O ./kali-config/common/includes.installer/preseed.cfg
Добавлять файлы в ISO-образ можно, размещая их в конфигурационной директории includes.binary
. Например, это install.cfg
(опции загрузочного меню):
cat << EOF > kali-config/common/includes.binary/isolinux/install.cfg
label install
menu label ^Install
linux /install/vmlinuz
initrd /install/initrd.gz
append vga=788 --quiet file=/preseed.cfg locale=en_US keymap=us hostname=kali domain=local.lan
EOF
Туда же можно добавить файл isolinux.cfg
с опциями загрузки:
cat << EOF > kali-config/common/includes.binary/isolinux/isolinux.cfg
include menu.cfg
ui vesamenu.c32
default install
prompt 0
timeout 5
EOF
echo 'systemctl enable ssh' > kali-config/common/hooks/live/01-start-ssh.chroot
Добавим в ISO-образ и SSH-ключ:
ssh-keygen -f /root/.ssh/id_rsa -t rsa -N '' # необязательно в том случае, если это уже сделано
mkdir -p kali-config/common/includes.chroot/root/.ssh/
cat /root/.ssh/id_rsa.pub > kali-config/common/includes.chroot/root/.ssh/authorized_keys
Соберём образ:
./build.sh --verbose
Упражнение №3: сборка LIve-USB с несколькими постоянными хранилищами и с паролем самоуничтожения
Создайте Live-флэшку с несколькими постоянными хранилищами информации и включите пароль самоуничтожения LUKS.
▍Ответы к упражнению №3
Здесь мы предполагаем, что работа начинается с USB-флэшки, подготовленной в соответствии с инструкциями, приведёнными в разделе 2.1.4., «Копирование образа на DVD-ROM или на USB-флэшку». Подразумевается, что диск имеет размер, достаточный для хранения ISO-образа (около 3 Гб) и данных, которые планируется поместить в постоянное хранилище. Кроме того, мы исходим из предположения, что Linux видит флэш-диск как /dev/sdb
, и что он содержит лишь два раздела, которые являются частью стандартного ISO-образа (/dev/sdb1
и /dev/sdb2
). Считаем важным напомнить, что выполняя действия, которые будут описаны ниже, нужно проявлять осторожность, так как переразбив не тот диск можно потерять важные данные.
Теперь подключаем флэшку к компьютеру (или к виртуальной машине) и выясняем имя устройства с использованием команд dmesg
или fdisk
. Как уже было сказано, предполагается, что это /dev/sdb
. Если какие-то разделы были смонтированы автоматически, их надо отмонтировать. Теперь запускаем процесс разбиения на разделы:
umount /dev/sdb1
umount /dev/sdb2
parted /dev/sdb
Здесь мы будем создавать два хранилища. Одно будет зашифрованным, другое — обычным.
(parted) print
Model: SanDisk Ultra USB 3.0 (scsi)
Disk /dev/sdb: 124GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
1 32.8kB 2794MB 2794MB primary boot, hidden
2 2794MB 2794MB 721kB primary
(parted) mkpart primary 2794 5000
(parted) mkpart primary 5000 100%
(parted) quit
Information: You may need to update /etc/fstab.
Команда mkpart primary
2794 5000
создаёт первый новый раздел (если посчитать их все, то он будет третьим), который начинается с 2794 Мб, и заканчивается на 5000 Мб. Мы используем именно это значение для указания начала раздела, так как образ Kali занимает на устройстве 2794 Мб. Возможно, вам придётся изменить эти значения для того, чтобы привести их в соответствие с размерами вашего ISO-образа или флэш-диска.
После создания двух новых разделов, можно приступать к настройке их в роли постоянных хранилищ информации в нашем окружении загрузки Kali. Мы начинаем этот процесс, используя имя sdb3
для незашифрованного хранилища. Мы сначала форматируем раздел, потом даём ему метку persistence
. Метка должна быть именно такой, это очень важно. Если этот шаг пропустить или назначить разделу другую метку, постоянное хранилище информации работать не будет!
mkfs.ext3 /dev/sdb3
e2label /dev/sdb3 persistence
Затем создаём файл persistence.conf
, который указывает на то, какие папки нам нужно сохранить в постоянном хранилище. В данном случае мы собираемся сохранить там всю файловую систему:
mkdir -p /mnt/usb
mount /dev/sdb3 /mnt/usb
echo "/ union" > /mnt/usb/persistence.conf
umount /mnt/usb
Далее, настраиваем зашифрованное постоянное хранилище. Для этого зашифруем раздел с использованием cryptsetup
, отформатируем его, назначим метку, проверим, всё ли сделано правильно и создадим файл persistence.conf
так же, как делали это выше:
cryptsetup --verbose --verify-passphrase luksFormat /dev/sdb4
cryptsetup luksOpen /dev/sdb4 my_usb
mkfs.ext3 /dev/mapper/my_usb
e2label /dev/mapper/my_usb persistence
ls -l /dev/disk/by-label
mkdir -p /mnt/my_usb
mount /dev/mapper/my_usb /mnt/my_usb
echo "/ union" > /mnt/my_usb/persistence.conf
umount /dev/mapper/my_usb
cryptsetup luksClose /dev/mapper/my_usb
Вот и всё! Теперь с USB-диска можно загрузиться и выбрать, как именно продолжать загрузку: без хранилища, с незашифрованным хранилищем, или с зашифрованным хранилищем.
Для того, чтобы добавить пароль самоуничтожения (LUKS Nuke) к зашифрованному разделу, нужно выполнить следующую команду:
cryptsetup luksAddNuke /dev/sdb4
Итоги
На этом мы завершаем публикацию перевода 9-й главы книги книги «Kali Linux Revealed». Надеемся, эти материалы помогли всем желающим освоить сборку пакетов и ядер Kali, а также подготовку собственных ISO-образов системы.
Уважаемые читатели! Расскажите, удалось ли вам самостоятельно выполнить упражнения к этой главе?
Предыдущие части:
→ Часть 1. Kali Linux: политика безопасности, защита компьютеров и сетевых служб
→ Часть 2. Kali Linux: фильтрация трафика с помощью netfilter
→ Часть 3. Kali Linux: мониторинг и логирование
→ Часть 4. Kali Linux: упражнения по защите и мониторингу системы
→ Часть 5. Kali Linux: оценка защищённости систем
→ Часть 6. Kali Linux: виды проверок информационных систем
→ Часть 7. Kali Linux: формализация исследований и типы атак
→ Часть 8. Kali Linux: контрольные вопросы по исследованию защищённости систем
→ Часть 9. Kali Linux: модификация пакетов
→ Часть 10. Kali Linux: сборка ядра
→ Часть 11. Kali Linux: настройка и сборка ISO-образов