- Заводим GNU/Linux на ARM-плате с нуля (на примере Kali и iMX.6)
- Сборка корневой файловой системы
- Сборка Linux
- Das U-Boot
- Вместо заключения
- Arm для kali linux
- Some Notes on This Procedure
- Real-World Custom Kali Linux Builds for ARM Devices
- An Annotated Example of a Generic ARM Build of Kali Linux
- Install Required Tools and Dependencies
- Enable Cross-Compilation
- Define Architecture and Custom Packages
- Build the Kali rootfs
- Set Up the Base rootfs
- 2nd Stage chroot
- 3rd Stage chroot
- Manual Configuration Within the chroot
- Cleanup
- Kali Linux на ARM-компьютерах
- Kali Linux на крошечных компьютерах ARM
- Raspberry Pi
- Chromebooks — Хромбуки
- CompuLab — Utilite и TrimSlice
- SolidRun — CuBox
- Allwinner — Cubieboard и Mini-X
- HardKernel — ODROID
- Beaglebone Black
- RioTboard
- USB Armory от Inverse Path
- Вывод
Заводим GNU/Linux на ARM-плате с нуля (на примере Kali и iMX.6)
tl;dr: собираю образ Kali Linux для ARM-компьютера, в программе debootstrap , linux и u-boot .
Если вы покупали какой-нибудь не очень популярный одноплатник, то могли столкнуться с отсутствием для него образа любимого дистрибутива. Приблизительно то же самое случилось с планируемым Flipper One. Kali Linux под IMX6 просто нету (я готовлю), поэтому собирать приходится самостоятельно.
Процесс загрузки достаточно простой:
- Инициализируется железо.
- Из некоторой области на запоминающем устройства (SD-карта/eMMC/etc) считывается и выполняется загрузчик.
- Загрузчик ищет ядро операционной системы и загружает его в некоторую область памяти и выполняет.
- Ядро загружает всю остальную ОС.
Для моей задачи хватает такого уровня детализации, подробности можете прочесть в другой статье. Упомянутые выше «некоторые» области отличаются от платы к плате, что и создаёт некоторые сложности с установкой. Загрузку серверных ARM-платформ пытаются стандартизовать с помощью UEFI, но покуда это доступно не для всех, придётся собирать всё по отдельности.
Сборка корневой файловой системы
Для начала нужно подготовить разделы. Das U-Boot поддерживает разные ФС, я выбрал FAT32 для /boot и ext3 для корня, это стандартная разметка образов для Kali под ARM. Я воспользуюсь GNU Parted, но вы можете сделать то же самое более привычным fdisk . Также понадобятся dosfstools и e2fsprogs для создания ФС: apt install parted dosfstools e2fsprogs .
- Отмечаем SD-карту как использующую MBR-разметку: parted -s /dev/mmcblk0 mklabel msdos
- Создаём раздел под /boot на 128 мегабайт: parted -s /dev/mmcblk0 mkpart primary fat32 1MiB 128MiB . Первый пропущенный мегабайт необходимо оставить под саму разметку и под загрузчик.
- Создаём корневую ФС на всю оставшуюся ёмкость: parted -s /dev/mmcblk0 mkpart primary ext4 128MiB 100%
- Если вдруг у вас не создались или не изменились файлы разделов, надо выполнить `partprobe`, тогда таблица разделов будет перечитана.
- Создаём файловую систему загрузочного раздела с меткой BOOT : mkfs.vfat -n BOOT -F 32 -v /dev/mmcblk0p1
- Создаём корневую ФС с меткой ROOTFS : mkfs.ext3 -L ROOTFS /dev/mmcblk0p2
Отлично, теперь можно её заполнять. Для этого дополнительно потребуется debootstrap , утилита для создания корневых ФС Debian-подобных операционных систем: apt install debootstrap .
- Монтируем раздел в /mnt/ (используйте более удобную для себя точку монтирования): mount /dev/mmcblk0p2 /mnt
- Собственно заполняем файловую систему: debootstrap —foreign —include=qemu-user-static —arch armhf kali-rolling /mnt/ http://http.kali.org/kali . Параметр —include указывает дополнительно установить некоторые пакеты, я указал статически собранный эмулятор QEMU. Он позволяет выполнять chroot в ARM-окружение. Смысл остальных опций можно посмотреть в man debootstrap . Не забудьте, что не любая ARM-плата поддерживает архитектуру armhf .
- Из-за разницы архитектур debootstrap выполняется в два этапа, второй выполняется так: chroot /mnt/ /debootstrap/debootstrap —second-stage
- Теперь нужно зачрутиться: chroot /mnt /bin/bash
- Заполняем /etc/hosts и /etc/hostname целевой ФС. Заполните по аналогии с содержимым на вашем локальном компьютере, не забудьте только заменить имя хоста.
- Можно донастроить всё остальное. В частности я доустанавливаю locales (ключи репозитория), перенастраиваю локали и часовой пояс ( dpkg-reconfigure locales tzdata ). Не забудьте задать пароль командой passwd .
- Задаём пароль для root командой passwd .
- Приготовления образа для меня завершаются заполнением /etc/fstab внутри /mnt/ .
Загружать буду в соответствии с созданными ранее метками, поэтому содержимое будет таким:
LABEL=ROOTFS / auto errors=remount-ro 0 1
LABEL=BOOT /boot auto defaults 0 0
Наконец, можно примонтировать загрузочный раздел, он нам понадобится для ядра: `mount /dev/mmcblk0p1 /mnt/boot/`
Сборка Linux
Для сборки ядра (и загрузчика потом) на Debian Testing надо установить стандартный набор из GCC, GNU Make и заголовочных файлов GNU C Library для целевой архитектуры (у меня armhf ), а также заголовки OpenSSL, консольный калькулятор bc , bison и flex : apt install crossbuild-essential-armhf bison flex libssl-dev bc . Так как загрузчик по умолчанию ищет файл zImage на файловой системе загрузочного раздела, пора разбивать флешку.
- Клонировать ядро слишком долго, поэтому просто скачаю: wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.9.1.tar.xz . Распакуем и перейдём в директорию с исходниками: tar -xf linux-5.9.1.tar.xz && cd linux-5.9.1
- Конфигурируем перед компиляцией: make ARCH=arm KBUILD_DEFCONFIG=imx_v6_v7_defconfig defconfig . Конфиг находится в директории arch/arm/configs/ . Если такового нет, вы можете попробовать найти и скачать готовый и передать название файла в этой директории в параметр KBUILD_DEFCONFIG . В крайнем случае сразу переходите к следующему пункту.
- Опционально можно докрутить настройки: make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
- И кроскомпилируем образ: make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
- Теперь можно скопировать файлик с ядром: cp arch/arm/boot/zImage /mnt/boot/
- И файлы с DeviceTree (описание имеющегося на плате железа): cp arch/arm/boot/dts/*.dtb /mnt/boot/
- И доустановить собранные в виде отдельных файлов модули: make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- INSTALL_MOD_PATH=/mnt/ modules_install
Ядро готово. Можно всё отмонтировать: umount /mnt/boot/ /mnt/
Das U-Boot
Так как загрузчик интерактивный, для проверки его работы достаточно самой платы, запоминающего устройства и опционально устройства USB-to-UART. То есть, можно ядро и ОС отложить на потом.
Абсолютное большинство производителей предлагают использовать Das U-Boot для первичной загрузки. Полноценная поддержка обычно обеспечивается в собственном форке, но и в апстрим контрибьютить не забывают. В моём случае плата поддерживается в мейнлайне, поэтому форк я проигнорировал.
Cобираем сам загрузчик:
- Клонируем стабильную ветку репозитория: git clone https://gitlab.denx.de/u-boot/u-boot.git -b v2020.10
- Переходим в саму директорию: cd u-boot
- Готовим конфигурацию сборки: make mx6ull_14x14_evk_defconfig . Это работает только если конфигурация есть в самом Das U-Boot, в ином случае вам потребуется найти конфиг производителя и положить его в корень репозитория в файл .config , или собрать иным рекомендованным производителем образом.
- Собираем сам образ загрузчика кросс-компилятором armhf : make CROSS_COMPILE=arm-linux-gnueabihf- u-boot.imx
В результате мы получаем файл u-boot.imx , это готовый образ, который можно записывать на флешку. Записываем на SD-карту, пропустив первые 1024 байта. Почему я выбрал таргет u-boot.imx ? Почему пропустил именно 1024 байта? Так предлагают сделать в документации. Для других плат процесс сборки образа и записи может немного отличаться.
Готово, можно загрузиться. Загрузчик должен сообщить собственную версию, некоторую информацию о плате и попытаться найти образ ядра на разделе. В случае неудачи будет пытаться загрузиться по сети. В целом вывод довольно подробный, можно найти ошибку в случае проблемы.
Вместо заключения
А вы знали, что лоб у дельфина не костистый? Это буквально третий глаз, жировая линза для эхолокации!
Arm для kali linux
Although you can download pre-rolled Kali ARM images from our download area, there may be applications which will require building your own custom bootstrapped Kali rootfs for ARM.
The following procedure shows an example of building a fairly generic Kali armhf rootfs. If you wish to build for armel, use that value rather than “armhf” when you export the architecture environment variable.
You’ll need to have root privileges to do this procedure, or the ability to escalate your privileges with the command “sudo su”.
Some Notes on This Procedure
The intention in this article is more to provide a high-level overview of how the build scripts work than an actual manual procedure (although it’s completely possible to walk through this example at the command line). The style mimics that used in the build scripts used to create the pre-rolled images. Specifically, you’ll see a construct in several places that looks like:
This simply amounts to creating a new file,
/arm-stuff/rootfs/kali-armhf/etc/apt/sources.list , with the contents:
Real-World Custom Kali Linux Builds for ARM Devices
Before we walk through our example, it’s probably good to see how a custom ARM build would actually be accomplished. Typically, to do a local build of an image for, e.g., Raspberry Pi, the process would be something like the following. As an initial one-time set-up, clone the ARM build scripts repository on GitHub and install the build prerequisites:
To do an ARM build, you must enable cross-compilation for your current shell session:
Then simply invoke the build script for the specific platform. So, for a Raspberry Pi build of Kali Linux 2016.2, execute the commands:
The ARM build scripts are all completely self-contained, aside from the initial one-time installation of the build prerequisites. The first time you run one of the ARM build scripts, it is extremely important that you inspect the output for any errors such as missing tools, etc., correct them, and then re-run the script until you get a clean build. Only at that point can you go ahead to make any customizations you want to the basic build script to create the specific “recipe” you’re after.
It’s possible to speed up your builds by caching the packages you download using apt-cacher-ng, as described in the previous article. Note that this can break some of the standard build scripts unless you uncomment certain lines before building — they’re noted in the scripts themselves. If you’re using apt-cacher-ng, make sure you check your scripts for any necessary changes.
For reliable and predictable results, build your Kali Linix ARM chroot from within a pre-existing and up-to-date Kali Linux environment. This guide assumes that you have already set up your ARM cross-compilation environment.
An Annotated Example of a Generic ARM Build of Kali Linux
The build described here is both minimal and generic. A small number of basic packages are included, and the fuller configuration needed for a real-world platform is omitted for the sake of clarity. Use this example as a reference for understanding what’s going on in the official ARM build scripts and as a high-level guide for writing your own build scripts. It can be successfully followed as a stand-alone tutorial from the command line, but the image produced is not likely to run on any particular device. Use the pre-rolled build scripts, either as-is or with your own customizations, to produce working images for concrete hardware.
Install Required Tools and Dependencies
This is a general set-up task, and should only ever need to be done once.
Enable Cross-Compilation
In order to enable the Linaro cross-compilation, you will need to set these environment variable at the beginning of every session.
Define Architecture and Custom Packages
This is where you define some environment variables for your required ARM architecture (armel vs armhf) and list the packages to be installed in your image. These will be used throughout this article, so make sure to modify them to your needs.
Build the Kali rootfs
Set Up the Base rootfs
As our starting point, we’ll create a standard directory structure and use debootstrap to install a base ARM rootfs from the Kali Linux repositories. We then copy over qemu-arm-static, an ARM emulator, from our host machine into the rootfs in order to initiate the 2nd stage chroot.
2nd Stage chroot
First, we’ll chroot into our newly-created base rootfs, use debootstrap a second time to construct our second-stage rootfs, and configure base image settings such as repositories (in /etc/apt/sources.list ), host name (in /etc/hostname ), default network interfaces and behavior (in /etc/network/interfaces and /etc/resolv.conf ), etc. Change these to suit your requirements.
Now, we’re ready to assemble our third-stage chroot.
3rd Stage chroot
This is where your specific customizations come in. Your $packages list is installed, as are keymaps, a default kali user password of “kali” is set, and other configuration changes and fixes are applied.
Here, we’ll create the script to do the third-stage chroot
Now, we’ll run it from within our second-stage chroot.
Manual Configuration Within the chroot
If you need to make any further modifications in your rootfs environment, you can do so by manually chrooting into it with the following command and making any needed changes.
Once you’ve completed your modifications, leave the chroot’ed rootfs with the command
Cleanup
Lastly, we create and run a cleanup script in our chroot to free up space used by cached files and run any other cleanup jobs we may require, and unmount the directories we were using in our rootfs.
Congratulations! Your custom Kali ARM rootfs is located in the
/arm-stuff/rootfs/kali-$architecture directory. You can now tar up this directory or convert it to an image file for further work.
Kali Linux на ARM-компьютерах
ARM — это архитектура микропроцессоров. В подавляющем количестве настольных компьютеров используются процессоры с архитектурой x86. Главным достоинством ARM называют энергоэффективность. Главным достоинством x86 называют универсальность и большую приспособленность для ресурсоёмких задач вроде редактирования фотографий, музыки и видео, а также шифрования и сжатия данных. Как бы там ни было, в большинстве телефонов, которые у нас с вами в руках, находятся ядра с архитектурой ARM.
Архитектура ARM также стала довольно популярной в крошечных компьютерах, сделанных на одной плате, либо в формфакторе «флешки» («свистка»), либо в виде маленькой коробочки. Настоящей звездой стала серия Raspberry Pi — одноплатный компьютер размером с банковскую карту. Главное достоинство этих компьютеров — цена: первые модели стоили 20-25 долларов, самая современная и производительная модель стоит 35 долларов. Учитывая универсальность Raspberry Pi — возможность запускать полноценный настольные операционный системы, а также возможность использовать в разнообразной робототехнике и очень мное прочее — остаётся признать, что интерес к Raspberry Pi вполне заслужан.
На ARM компьютерах можно запустить операционные системы которые скомпилированы под архитектуру ARM. К таким относятся Android, для многих популярных дистрибутивов Linux есть ARM версии. Намного хуже на этой платформе дела обстоят с Windows.
Нужно обратить внимание, что крошечный компьютеры также бывают и с архитектурой x86, на которых можно запускать и Kali Linux и Windows.
Kali Linux на крошечных компьютерах ARM
Под самые популярные ARM компьютеры уже сделаны готовые образы Kali Linux — т. е. установка не вызывает каких-либо сложностей и вопросов. Вопросы вызывает другое — цель этого. Для чего вообще нужны дома эти маленькие компьютеры?
Не смотря на свои крошечный размеры, эти компьютеры я бы назвал нетранспортабельными — у них нет экрана, у них нет аккумулятора. Их можно взять с собой, но на них нельзя работать не подключив их к розетке. Другой их минус — они очень маломощны (у них маленькая производительность). Т.е. если вы хотите что-то дешёвое, пусть не очень производительное, но транспортабельное (можно взять с собой в ВУЗ, в самолёт и там работать на этом компьютере) — то рекомендую обратить внимание на нетбуки или на ноутбуки начального уровня.
Дома ARM с Kali Linux на борту можно использовать для задач, которые не требуют больших вычислительных ресурсов, но которые требуют большого количества времени. К этим задачам можно отнести перебор учётных данных (брутфорсинг), сканирование сетей, использование сканеров уязвимостей — любая из этих задач, особенно брутфорс, могут растянуться на дни. Покупать для этих целей полноценный компьютер — не всегда целесообразно, да и электричество он «сожжёт» много. А вот крошечная Raspberry Pi, которая не занимает места и трудится дни напролёт, почти не потребляя электричества, — это отличный выбор.
Также Raspberry Pi очень даже подойдёт для образовательных целей, например:
- для тренировки атак на инфраструктуру сети — покупать полноценный компьютер только для этого — жалко, а Raspberry Pi, на которой можно установить полноценную ОС с веб-сервером и прочими сетевыми службами, хорошо для этого подходит.
- для тренировки обслуживания «безголового» сервера — хороший вариант для начинающего системного администратора — можно отточить навыки работы при отсутствии графического интерфейса (через SSH), в настройке веб-сервера для локальной сети, разместить там тестовые веб-сайты, посмотреть насколько стабильной работы и какого аптайма удастся достигнуть при разных условиях и т. д.
Для всех рассматриваемых компьютеров существуют готовые образы Kali Linux, вы можете их скачать с сайта Offensive Security (это авторы Kali Linux). Одним из самых популярных вариантов является Raspberry Pi. Кстати, даже есть книга «Penetration Testing with Raspberry Pi». Но на Raspberry Pi свет клином не сошёлся — давайте посмотрим, какие ещё есть маленькие ARM-компьютеры для Kali Linux.
Raspberry Pi
Я бы рекомендовал выбрать модель Raspberry Pi 2 Model B — по сравнению с предыдущими версиями в ней очень большой прирост производительности.
Обратите внимание на комплект поставки – многие продавцы продают не просто плату, а комплектуют её корпусом, дополнительным охлаждением и вентилятором, разными кабелями (HDMI), адаптерами питания, некоторые комплектуют картами памяти с программным обеспечением, которое имеет графический интерфейс и позволяет установить тот или иной дистрибутив Linux.
Также можно докупить Wi-Fi адаптеры, камеры и даже экраны с тачскрином — главное не увлекайтесь слишком сильно, а то количество потраченных денег на конструктор превысит стоимость нетбука — более универсального и транспортабельного решения.
Посмотреть предложения в магазинах для Raspberry Pi 2 Model B.
Chromebooks — Хромбуки
Хромбуки делают разные производители, образы Kali Linux есть для следующих: HP Chromebook, Samsung Chromebook, Samsung Chromebook2, Acer Chromebook, ASUS Chromebook Flip. Хотя и стоят копейки, хромбуки не нашли широкой популярности — и это вполне заслуженно. Хром ОСь (или как там она называется) — это просто браузер, которые не может ничего такого, чего бы не мог браузер Google Chrome. Там ещё разные ограничения — в общем с родной ОС этот компьютер никому не интересен.
А вот с возможностью использовать Kali Linux – это совсем другое дело! Эти компьютеры:
- стильно выглядят
- являются законченными решениями (есть клавиатура, экран и всё остальное — не то что в Raspberry Pi)
- дёшевы
- являются транспортабельными (в них есть аккумулятор и все другие необходимые для работы элементы).
Как я уже сказал, их делают разные производители — поэтому внимательно читайте характеристики.
Посмотреть предложения в магазинах для Chromebook.
CompuLab — Utilite и TrimSlice
CompuLab делает компьютеры представляющие из себя коробочку, в которой всё уже есть (похоже на Raspberry Pi в чехле). Модели имеются самые разные, в том числе не только на ARM.
На мой взгляд, цены за такие устройства у них завышены. Область применения довольно специфичная. На мой взгляд, они не сумели найти золотую середину в таких параметрах как «производительность»-«цена»-«применимость». Для настольных компьютеров эти устройства слабоваты. В качестве игрушки, которую не жалко купить, — дороговато, некоторые модели стоят почти в десять раз дороже чем Raspberry Pi.
Посмотреть предложения в магазинах для CompuLab.
SolidRun — CuBox
Продолжаем рассматривать «чёрные коробочки». У SolidRun — CuBox есть несколько вариантов комплектации, одна из них: 1GHz QuadCore, Wifi / Bluetooth, 2GB RAM, Gigabit LAN. Недостаток такой же как и предыдущей модели — для игрушки дороговато, а для чего ещё его использовать — непонятно.
Посмотреть предложения в магазинах для SolidRun — CuBox.
Allwinner — Cubieboard и Mini-X
На мой взгляд, это хороший конкурент Raspberry Pi. У Raspberry Pi есть козырь, который трудно побить — цена. Все остальные компьютеры, о которых я здесь рассказываю, дороже. Но честно — Raspberry Pi тормозная, хотя ну как можно придираться к компьютеру, который стоит 35 баксов? Если вам важна производительность, то обратите внимание на линейку Cubieboard. Есть одно НО: на сайте Kali имеются готовые образы для Cubieboard2 и Cubietruck (это Cubieboard3). Под Cubietruck4 готового образа нет. Не знаю, насколько это серьёзная трудность — но имейте это ввиду. Перед покупкой будет не лишним проверить, не появились ли собранные версии Kali под Cubietruck4, либо быть готовым гуглить и возиться.
Посмотреть предложения в магазинах для Cubietruck.
Посмотреть предложения в магазинах для Cubieboard.
HardKernel — ODROID
Моделька ODROID XU4 в разы производительнее Raspberry Pi 2 и недорогая. А ODROID-C1+ стоит столько же сколько новая Raspberry Pi 2 Model B.
Посмотреть предложения в магазинах для ODROID XU4.
Посмотреть предложения в магазинах для ODROID-C1+.
Beaglebone Black
Недорогой компьютер на плате. Перед покупкой внимательно читайте описание. Выбирайте последнюю доступную на день покупки ревизию.
Посмотреть предложения в магазинах для Beaglebone Black.
RioTboard
Устройство из разряда «подороже», но характеристики меня не впечатлили.
Посмотреть предложения в магазинах для RioTboard.
USB Armory от Inverse Path
Компьютер сделанный в виде флешки. Подразумевается, что вы вставляете его в гнездо настоящего рабочего компьютера. Доступ к нему осуществляется через SSH. Авторы предполагают использование устройства как веб-сервера, прокси Tor, кошелька Bticoin, зашифрованного хранилища, токена аутентификации или чего угодно другого. Все эти функции могут выполняться стандартным ПО на любом компьютере, поэтому трудно придумать, зачем покупать это устройство.
Мне этот вариант показался совсем неинтересным (или слишком нишевым, что ли).
Посмотреть предложения в магазинах для USB Armory.
Вывод
Маленькие ARM компьютеры не являются предметом первой необходимости. Ту же самую Kali Linux можно установить в виртуальную машину и прекрасно ей пользоваться. Тем не менее, если от Kali Linux требуется длительное выполнение некоторых операций (брутфорс), либо вам интересно попрактиковаться в навыках системного администрирования, например, веб-сервера, то стоит подумать о покупке крошечного ARM компьютера, благо цена у них пониже чем у некоторых игрушек )) А интеллектуальность «игр» с этими устройствами на порядок выше.
Для себя я составил шот-лист устройств из которых буду делать окончательный выбор. На мой взгляд, самыми интересными являются:
- Raspberry Pi 2 Model B
- ODROID XU4
- Cubietruck (или Cubieboard4 — но для него нужно убедиться в возможности установки Kali Linux).