Рубрика Собираем Bjorn — тамагочи для пентестеров

TaLLeR43

Команда мастерской
Почётный совет
Регистрация
15 Апр 2024
Сообщения
113
Реакции
1
Возраст
38
Bjorn — это инструмент, подобный тамагочи, только для хакеров пентестеров, который сам сканирует сети, находит, оценивает и даже может эксплуатировать уязвимости (понятное дело, что только в разрешённых законом случаях), разработанный для работы на Raspberry Pi с 2,13-дюймовым e-Paper HAT.

Благодаря расширяемой архитектуре и настраиваемым действиям Bjorn можно адаптировать к широкому спектру задач тестирования и мониторинга безопасности.

Возможности, заявленные на странице проекта:

  • Сканирование сети: определяет активные хосты и открытые порты в сети;
  • Оценка уязвимости: выполняет сканирование уязвимостей с использованием Nmap и других инструментов;
  • Системный пентест: проводит атаки методом подбора паролей на различные службы (FTP, SSH, SMB, RDP, Telnet, SQL);
  • "Заимствование" файлов: извлечение данных из уязвимых сервисов;
  • Пользовательский интерфейс: отображение в реальном времени на e-Paper HAT и веб-интерфейс для мониторинга и взаимодействия.
Я захотел себе такую штуку и написал пост о Bjorn в своём канале, а также о том, что если пост наберёт больше 50 лайком, я такую штуку соберу и сделаю подробный гайд о том, как всё собрать.

И вот, спустя почти год, я выпускаю эту статью. Спустя почти год - потому что я столкнулся со сложностями, с которыми пришлось повозиться.

Важно отметить, что пока я решал сложности, вышла отличная статья про Bjorn в журнале Хакер, которую рекомендую почитать и которая не конкурирует с моей статьёй, потому что в ней предполагается, что Bjorn у вас уже собран + устанавливая софт для 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 из официального репозитория, вы получаете систему, код которой содержит десятки уязвимостей и не обновлялся уже пару лет, что, имхо, не очень хорошо, но давайте по порядку...

Базовая закупка​

Если вы уже успели посмотреть репозиторий проекта, то увидели, что информации там не сильно много. Поэтому полагаться будем на ту информация, которая там есть, а также на свой, хотя и не богатый, но всё же опыт (я по высшему образованию - радиоинженер). Идём закупаться:

a9f132857b8c21f8bee9e701a8a2fa38.jpg

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

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

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

24cb36d8a66e396cd801de8fcd948191.jpg

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

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

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

72387a31b348223d39bdea9a673559ab.jpg

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

Единственное, что я также обнаружил позже и что могло бы съэкономить немного времени так это...

7dc0a4964af7a60b6954619e0c4b6a16.jpg

Вот такие готовые наборы, которые есть в продаже: GPIO + HDMI и + OTG USB. Поэтому, поизучайте магазины. Может за год ещё более широкие наборы появились.

Установка операционной системы​

После того, как приехала карта памяти, мы можем установить на неё операционную систему. Нам для этого потребуется компьютер с кардридером.

Ещё раз подчеркну, что для этого шага из закупаемых комплектующих нужна только карта памяти.

С официального сайта скачиваем специальное приложение - Raspberry Pi Imager.

a946d9330a3fcea5a351c6a11e3ff600.jpg

Выбираем наше устройство: Raspberry Pi ZERO 2 W.

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

Сначала проваливаемся сюда:

2c23be4eb299b80dc9c71ce158d6867e.jpg

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

Raspberry Pi ZERO 2 W - 64-битная система. И да, нам, судя по всему, не потребуется графическое окружение.

Raspberry Pi ZERO 2 W - 64-битная система. И да, нам, судя по всему, не потребуется графическое окружение.
Далее выбираем запоминающее устройство - наша Micro SD и нажимаем Далее.

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

161813805fff40edc3e763bd6883cd7a.jpg

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

e10ed0711b538766571b14d588b66a1e.jpg

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

566e5bfffa62ed04ce7dbedf0856574f.jpg

Первый запуск Respberry Pi, загрузка операционной системы, установка Bjorn​

Для этого нам потребуется собрать вот такой стенд:

Слева напрово: питание, USB-клавиатура, HDMI на монитор.

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

df0518d3379ccadda3c2848e390a38b2.jpg

И вот именно на этом этапе начались мои изыскания длиной 8 месяцев.

Я столкнулся с двумя проблемами:

1 проблема:​

Я запустил, как указано в репозитории, скрипт автоматической установки. Всё прошло "хорошо" и скрипт показал, что установка прошла "успешно", но мой Bjorn не включался - экран не работал. Почему я грешил на экран? Да потому что всё остальное работало - операционка загружалась, видео на внешний монитор выводилось, клавиатура работала, плата подключалась к моему wifi. Я начал грешить на 2 вещи:

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

2 проблема:​

Оказалось, что при установке ПО Bjorn, устанавливается давольно старое ПО. В нём много дыр безопасности и работает оно не всегда стабильно. Развитие проекта в целом ведётся не совсем понятно. Вот, например, ветки основного репозитория, некоторые из которых ушли далеко вперёд в развитии от главной ветки, от куда и идёт установка.

872ab1e1f41118793e5ad8ef390e6403.jpg

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

Мой форк Bjorn​

Для того, чтобы развивать свой форк, я теми же AI-агентами провел глубокий анализ всех главных веток основного проекта, а также всех форков, которые хотя бы что-то привнесли в кодовую базу. По результатам этого анализа, у меня появился бэклог функций, фиксов, новых модулей и т.п., которые я разбил по релизам и уже некоторое время их выпускаю.

Bjorn - Chumikov Sec

Главное, из того что я сделал к текущему релизу 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.

Итого​

894a883ea037acccf4adcec709495c8d.jpg

Спустя почти год, но я всё же исполнил своё обещание и собрал проект. Не просто собрал, а даже многое улучшил! Программное обеспечение стало существенно лучше и стабильнее.
 
Назад
Сверху