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

Основной вычислительный модуль — Raspberry Pi Zero 2 W. Как утверждается в проекте, она прекрасно работает под 64-битной системой.

Экран. Здесь возникла путаница с версиями (V1-V4), упоминаемыми в документации. Я заказал самый доступный вариант, который в итоге оказался маркирован как V4.

Для соединения платы и экрана потребовался 40-контактный GPIO-разъем. Рекомендую сразу покупать плату с уже впаянным разъемом, чтобы не тратить время на поход в мастерскую, как это сделал я.
Так как это мой первый опыт работы с Raspberry Pi, пришлось докупить ряд мелочей:

Mini HDMI-адаптер для вывода картинки на монитор при первичной настройке.

MicroSD карта на 64 ГБ. Этого более чем достаточно, Raspberry Pi Zero 2 W отлично ладит с таким объемом.

OTG-переходник micro-USB на USB для подключения периферии. Выбирайте вариант с кабелем — монолитные штекеры крайне неудобны.
И, конечно, качественный блок питания — экономить на нем чревато проблемами с железом.
Все перечисленные компоненты отлично справились с задачей. Стоит лишь добавить, что сейчас на рынке доступны готовые комплекты — поищите их, это поможет сэкономить время.
Установка ОС
Для записи образа системы потребуется ПК с кардридером. Скачиваем официальную утилиту Raspberry Pi Imager.

Выбираем нашу модель (Zero 2 W) и подходящую 64-битную версию ОС (без графической оболочки, она здесь ни к чему).
В настройках («Изменить параметры») обязательно укажите имя хоста (bjorn), логин, пароль и учетные данные Wi-Fi, чтобы система сразу подключилась к сети после запуска.
Запуск и развертывание Bjorn
Собираем стенд: подключаем питание, клавиатуру и монитор. Экран пока не обязателен. После загрузки системы запускаем скрипт установки из репозитория:

Здесь я застрял на 8 месяцев.
Основные трудности
Проблема №1: Неработающий дисплей. После «успешной» установки, согласно скрипту, экран оставался безжизненным. Проверка контактов и замена экрана результата не дали. Решение пришло после анализа файловой системы карты памяти: выяснилось, что из-за ограничений в региональных репозиториях пакеты вставали «криво». Переустановка с «зарубежного» IP решила вопрос моментально.
Проблема №2: Устаревший код. Исходный проект полон уязвимостей и не обновляется годами. Наблюдается полная неразбериха с ветками и форками. Я принял решение развивать собственный форк с исправлением архитектурных ошибок.
Мой форк: Bjorn — Chumikov Sec
Проведя анализ кодовой базы, я подготовил релиз 1.5.0, включающий следующие улучшения:
-
Безопасность: внедрена авторизация для веб-интерфейса, исправлены уязвимости типов shell injection, path traversal и XSS.
-
Стабильность: устранены утечки ресурсов, из-за которых происходили краши системы (Too many open files).
-
Оптимизация EPDManager: реализовано автовосстановление экрана при зависании.
-
Функциональность: добавлен headless-режим (эмуляция), блокировка двойного запуска и расширенное сканирование нескольких подсетей.
-
Мониторинг: внедрено отслеживание нагрузки и «здоровья» критических процессов.
Установка
Для развертывания моей версии используйте команды:
# Скачивание скрипта
wget -O install_bjorn.sh https://chumikovsec.ru/install
# Запуск
sudo chmod +x install_bjorn.sh && sudo ./install_bjorn.sh
Планы на будущее
В ближайших планах:
1) Разработка полноценного 3D-печатного корпуса;
2) Интеграция компактного аккумулятора для автономности;
3) Дальнейшая оптимизация кода в моем форке;
4) Активное полевое тестирование.
Все обновления буду публиковать в канале Chumikov Sec.
Итог

Спустя год проект успешно реализован и доведен до ума. Надеюсь, мой опыт поможет вам собрать свой Bjorn без тех сложностей, с которыми столкнулся я. Все вопросы можно задавать в моем Telegram или в issues на GitHub.
Буду благодарен за обратную связь, лайк и звезду на GitHub!


