
Интро
Всем привет!
Живешь себе живёшь, кажется, что в этой жизни уже ничего не удивит и тут бах - Bjorn. 😁
На информацию по этому проекту я наткнулся случайно где-то на просторах телеги. Вот основной репо проекта: https://github.com/infinition/Bjorn.
Bjorn — это инструмент, подобный тамагочи, только для хакеров пентестеров, который сам сканирует сети, находит, оценивает и даже может эксплуатировать уязвимости (понятное дело, что только в разрешённых законом случаях), разработанный для работы на Raspberry Pi с 2,13-дюймовым e-Paper HAT.
Благодаря расширяемой архитектуре и настраиваемым действиям Bjorn можно адаптировать к широкому спектру задач тестирования и мониторинга безопасности.
Возможности, заявленные на странице проекта:
Сканирование сети: определяет активные хосты и открытые порты в сети;
Оценка уязвимости: выполняет сканирование уязвимостей с использованием Nmap и других инструментов;
Системный пентест: проводит атаки методом подбора паролей на различные службы (FTP, SSH, SMB, RDP, Telnet, SQL);
"Заимствование" файлов: извлечение данных из уязвимых сервисов;
Пользовательский интерфейс: отображение в реальном времени на e-Paper HAT и веб-интерфейс для мониторинга и взаимодействия.
Я захотел себе такую штуку и написал пост о Bjorn в своём канале, а также о том, что если пост наберёт больше 50 лайком, я такую штуку соберу и сделаю подробный гайд о том, как всё собрать.
И вот, спустя почти год, я выпускаю эту статью. Спустя почти год - потому что я столкнулся со сложностями, с которыми пришлось повозиться.
Важно отметить, что пока я решал сложности, вышла отличная статья про Bjorn в журнале Хакер, которую рекомендую почитать и которая не конкурирует с моей статьёй, потому что в ней предполагается, что Bjorn у вас уже собран + устанавливая софт для Bjorn из официального репозитория, вы получаете систему, код которой содержит десятки уязвимостей и не обновлялся уже пару лет, что, имхо, не очень хорошо, но давайте по порядку...
Базовая закупка
Если вы уже успели посмотреть репозиторий проекта, то увидели, что информации там не сильно много. Поэтому полагаться будем на ту информация, которая там есть, а также на свой, хотя и не богатый, но всё же опыт (я по высшему образованию - радиоинженер). Идём закупаться:

Первый элемент для покупки - плата Raspberry Pi ZERO 2 W. Как указано в репозитории, вроде как всё устанавливается без проблем на эту 64-bit систему.

Второй элемент - экран. Тут сложнее, потому что в репозитории указаны какие-то версии экрана формата V1... V4, но я такого в описаниях нигде не увидел, поэтому заказал просто самый недорогой вариант. В итоге, экран приехал с маленькой наклейкой на плате, на которой было написано V4.

После того, как приехали и плата и экран, я понял, что для их соединения нужно распаять на плате 40-контактный разъём GPIO. Когда он приехал, я его припаял в мастерской по ремонту техники, которая находится в моём доме. Только потом я увидел, что в продаже также есть уже распаянные платы и если не хотите терять время, сразу купите с распаянным разъемом.
Я ранее никогда не работал с платами Raspberry Pi. Поэтому, в процессе я понял, что придётся докупать:

Переходник для HDMI. На плате есть выход Mini HDMI, поэтому нужен адаптер, который позволит выводить видео с платы на стандартный монитор. Это нам потребуется для базовой установки и настройки Bjorn.

Карту памяти в формате Micro SD. Именно на неё будет устанавливаться операционная система в которую мы потом установим Bjorn. Размер в 64GB мне показался даже большим, чем требуется, но разница в цене между 32 и 64 GB картами настолько не существенна, что я остановился на 64. Почитал на форумах, где писали, что Raspberry Pi ZERO 2 W отлично работает с этим (и даже с большим) объёмом памяти.

OTG-переходник с micro USB на USB. Нам он потребуется для подключения клавиатуры. Этот переходних стоит покупать именно с проводом длиной хотя бы 5 см для удобства (не монолитный, как переходник hdmi).
И последнее, что я купил для старта:

Фирменный (надеюсь) блок питания. Головой понимаю, что, скорее всего, любой блок питания с MicroUSB подойдёт, но решил не рисковать, чтобы не спалить плату на первых же тестах.
Сразу скажу, что все комплектующие, которые я описал выше - подошли и работают отлично!
Единственное, что я также обнаружил позже и что могло бы съэкономить немного времени так это...

Вот такие готовые наборы, которые есть в продаже: GPIO + HDMI и + OTG USB. Поэтому, поизучайте магазины. Может за год ещё более широкие наборы появились.
Установка операционной системы
После того, как приехала карта памяти, мы можем установить на неё операционную систему. Нам для этого потребуется компьютер с кардридером.
Ещё раз подчеркну, что для этого шага из закупаемых комплектующих нужна только карта памяти.
С официального сайта скачиваем специальное приложение - Raspberry Pi Imager.

Выбираем наше устройство: Raspberry Pi ZERO 2 W.
Выбираем операционную систему. Тут первая явная нестыковка, потому что в репозитории указана более старая версия ОС, которую сейчас (вроде как) выбрать уже нельзя. Выбираем более новую версию:
Сначала проваливаемся сюда:

А уже там выбираем (скриншоту почти год, но выбирайте последнюю версию, всё будет работать):

Далее выбираем запоминающее устройство - наша Micro SD и нажимаем Далее.
Нам нужно поменять параметры нашей устанавливаемой ОС. Для этого нажимаем Изменить параметры.

В репозитории проекта прописано, что "Имя хоста" и "Имя пользователя" должны быть установлены на bjorn. Также я указал логин, пароль и страну своего Wi-Fi, чтобы потом не устанавливать их вручную (напомню, у нашей ОС не будет графического интерфейса). Больше ничего другого не менял.

Затем "Далее" - "Применить параметры настройки ОС" - "Да" и начинается запись. После успешной записи и проверки видим подтверждение, что всё прошло успешно.

Первый запуск Respberry Pi, загрузка операционной системы, установка Bjorn
Для этого нам потребуется собрать вот такой стенд:

Да, пока можно без экрана. После того, как установленная OS загрузится, нам нужно установить основной софт Bjorn и для это репозиторий рекомендует нам выполнить скрипт автоматической установки:

И вот именно на этом этапе начались мои изыскания длиной 8 месяцев.
Я столкнулся с двумя проблемами:
1 проблема:
Я запустил, как указано в репозитории, скрипт автоматической установки. Всё прошло "хорошо" и скрипт показал, что установка прошла "успешно", но мой Bjorn не включался - экран не работал. Почему я грешил на экран? Да потому что всё остальное работало - операционка загружалась, видео на внешний монитор выводилось, клавиатура работала, плата подключалась к моему wifi. Я начал грешить на 2 вещи:
Мне плохо припаяли разъём к плате, но этот вариант отпал после того, как я прозвонил тестером все выводы;
Мне прислали изначально сломанный экран. Тут я не стал тянуть и тут же заказал второй такой же экран, который ехал ко мне аж 3 недели. Как вы уже наверное поняли, второй экран тоже не заработал.
Тут конечно я расстроился и переключился на другие проекты, пока однажды меня не посетила мысль - а может ли моя Kali Linux на компьютере рабатать с картой памяти Bjorn, как с виртуальной машиной? И да, оказалось, что так можно, чем я и воспользовался. Задача, которую я поставил своему AI-агенту была простой - изучить систему на карте памяти и найди причину, по которой у меня не работает экран. Спустя 20 минут изучения репозитория и того, что у меня было на карте, агентом был поставлен вердикт - "У вас на карте осутствуют многие пакеты, которые нужны для работоспособности Bjorn". Как в итоге оказалось, для полноценной установки ПО Bjorn, его нужно устанавливать с "иностранного IP-адреса", а скрипт установки не показывал мне неустановленные пакеты. Как только я переустановил систему с использованием "иностранного IP-адреса", у меня всё заработало!
2 проблема:
Оказалось, что при установке ПО Bjorn, устанавливается давольно старое ПО. В нём много дыр безопасности и работает оно не всегда стабильно. Развитие проекта в целом ведётся не совсем понятно. Вот, например, ветки основного репозитория, некоторые из которых ушли далеко вперёд в развитии от главной ветки, от куда и идёт установка.

Также у проекта сотни форков которые находятся в разной степени зрелости и активности. В общем - полная анархия с кодовой базой и понять где лучше, а где хуже - невозможно!Единственный выход из этой ситуации, который я нашёл - я решил, что хочу развивать свой форк!
Мой форк Bjorn
Для того, чтобы развивать свой форк, я теми же AI-агентами провел глубокий анализ всех главных веток основного проекта, а также всех форков, которые хотя бы что-то привнесли в кодовую базу. По результатам этого анализа, у меня появился бэклог функций, фиксов, новых модулей и т.п., которые я разбил по релизам и уже некоторое время их выпускаю.
Главное, из того что я сделал к текущему релизу 1.5.0:
Исправлено: веб-интерфейс был полностью открыт — любой в сети мог выполнить reboot или shutdown вашего Bjorn.
Добавлены: страница логина, HMAC-сессии и PBKDF2-хэш пароля.
Устранено пять классов уязвимостей в коде Bjorn: shell injection, path traversal, XSS, отсутствие CSRF-токенов и Zip Slip при распаковке архивов.
Исправлены утечки ресурсов: FTP/SMB/SSH соединения не закрывались при ошибках, tail -f становился зомби, SQLAlchemy утекал пулами коннектов. На длительных запусках это вызывало краш по Too many open files.
Реализован EPDManager — singleton с RLock на SPI, circuit breaker и авто-recovery. Раньше потоки конфликтовали за GPIO, и экран зависал без восстановления.
Добавлен headless-режим — запуск без e-Paper HAT, рендер в screen.png. Можно тестировать в виртуалке.
Добавлен preview-режим — эмулятор экрана, генерирующий PNG для проверки вёрстки без железа.
Внедрена блокировка двойного запуска через fcntl.flock. Раньше два процесса конфликтовали за SPI и порт 8000.
Исправлена регрессия веб-интерфейса: CSS, JS и иконки падали с 404 после смены корня документов. Интерфейс был без стилей.
Добавлено сканирование нескольких подсетей через список custom_subnets — раньше только свою сеть.
Реализован мониторинг здоровья: лог thread_count, RSS, файловых дескрипторов и статуса EPD. Единственный способ заметить деградацию до краша на многодневных запусках.
Установка ПО Bjorn
Для установки моего форка используй команды:
# Скачиваем скрипт установки wget -O install_bjorn.sh https://chumikovsec.ru/install # Даём ему права и запускаем sudo chmod +x install_bjorn.sh && sudo ./install_bjorn.sh # Выберите вариант 1 для автоматической установки. # Установка может занять некоторое время, так как будет установлено множество пакетов и модулей. # Необходимо выполнить перезагрузку по завершении.
После установки и перезагрузки, вы получаете себе прикольную "игрушку", которая приковывает внимание. Многим, кто у меня её видел, было интересно, что это за штука и как она работает.
Что дальше?
Дальше я запланировал сделать несколько вещей:
1) Напечатать нормальный красивый корпус на 3d-принтере;
2) Решить вопрос с электропитанием. Для этого хочу найти какой-то небольшой перезаряжаемый источник питания, которого будет хватать хотя бы на 2-3 часа автонономной работы Bjorn;
3) Дальше развивать собственный форк, улучшая и оптимизируя работу ПО. Присоединяйтесь!
4) Ну и конечно же провести много "боевых" тестов, чтобы убедиться, что всё работает.
Обо всех этих событиях я буду писать на своём Телеграм-канале Chumikov Sec.
Итого

Спустя почти год, но я всё же исполнил своё обещание и собрал проект. Не просто собрал, а даже многое улучшил! Программное обеспечение стало существенно лучше и стабильнее.
Я пока в интернете не встречал столь подробной инструкции по сборке Bjorn и надеюсь, что данная статья вам поможет, ну а если появятся вопросы, спрашивайте либо в моём Телеграм-канале, либо в репозитории на GitHub.
Ну и поставьте мне лайк за труды, звезду на GitHub и напишите комментарий, понравилась вам статья или нет!
