Ми розглянемо складання апаратної закладки, яка не вимагатиме прямого доступу до систем, що атакуються – Wi-Fi Pineapple. Крім того, ми вивчимо, як цей пристрій може бути задіяний не тільки при атаках на Wi-Fi мережі, але і як IP-камера для спостереження за об’єктами.
Камера, що завалялася на полицях, що працює на стеку протоколів UPnP(Universal Plug and Play);
Raspberry Pi Zero 2 (W – опціонально);
пасивний USB хаб;
USB-модем;
Джерело живлення.
У цьому, як і в будь-якому іншому проекті, вибір ОС для одноплатників – справа суто індивідуальна . Я б радив дивитися у бік DietPi у тому випадку, якщо вам потрібен максимально легкий та ненавантажений образ, та у бік Kali-ARM у випадку, якщо ви плануєте використовувати інструментарій Kali , який постачається з коробки. Подальший гайд будуватиметься на Raspberry Pi Zero 2 W з Kali на борту .
Завантажуємо готовий образ з https://www.kali.org/get-kali/#kali-arm та за допомогою Rufus або іншого подібного програмного забезпечення завантажуємо його на MicroSD картку.
Вставляємо MicroSD у відповідний соккет на платі та підрубуємо монітор, клавіатуру та живлення. Якщо ви використовуєте Raspberry Pi Zero, доведеться придбати кілька OTG – {ваш_сокет} – mini-HDMI(X1), {ваш_сокет} – micro-USB(X2), а також кілька пропорційних радіаторів, щоб температура процесора не вивалювалася за допустимі рамки.
Зараз Kali повинна завестися, якщо раптом ви отримуєте помилку
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown- block(179,6), швидше за все справа в поганій microSD картці , не знаю чому так, але я сам деякий час боровся з цією помилкою, купивши картку Kingston з Озона за 400 дерев’яних вічно.
Для того, щоб ми не були пов’язані з малиною однією мережею і могли ходити на неї, де б ми не знаходилися, необхідно дати малині доступ до Інтернету. З цим чудово справляється звичайнісінький 4G-модем .
Для того, щоб не танцювати з бубном під час спроби підключення до модемівської Wi-Fi мережі при буті, зробимо з модему зовнішню мережну карту . Для цього нам при кожному запуску необхідно активувати мережний інтерфейс модему , прописавши в / etc / network / interfaces наступні рядки:

Налаштування OpenVPN починається з генерації ключів. Ключі, що генеруються, діляться на:
Головний CertificateAuthority (CA) сертифікат та ключ , що використовується для підписання кожного сертифіката сервера та клієнта.
Публічний та приватний ключі для сервера та кожного клієнта окремо.
Встановлюємо пакет OpenVPN :
sudo apt install openvpn
За допомогою Easy-RSA створюємо серверні ключі та сертифікати: make-cadir /etc/openvpn/easy-rsa– Копіюємо шаблонну директорію easy-rsa /etc/openvpn/.
Переходимо в скопійовану директорію та виконуємо наступні команди: ./easyrsa init-pki– Ініціалізуємо структуру каталогів та файлів для керування відкритими ключами.

./easyrsa build-ca– Створюємо самопідписаний центр сертифікації (CA), який буде використовуватись для підпису сертифікатів.

./easyrsa gen-dh– Генеруємо файл параметрів обміну ключами Diffie-Hellman (DH) для використання у процесі встановлення безпечного з’єднання.

./easyrsa gen-req ovpn-server nopass– Генеруємо запит створення сертифіката для сервера OpenVPN, використовуючи ім’я “ovpn-server”, без запиту пароля.

./easyrsa sign-req server ovpn-server– Підписуємо запит на сертифікат для сервера OpenVPN за допомогою CA за допомогою попередньо визначених налаштувань.

./easyrsa gen-req pi_zero nopass– Генеруємо запит на створення сертифікату клієнта з ім’ям “pi_zero” без пароля.

./easyrsa sign-req client pi_zero– Підписуємо запит на сертифікат для клієнта з ім’ям pi_zero з використанням CA.

Створюємо конфігураційний файл для сервера OpenVPN (/etc/openvpn/server.conf):
port 1194 proto udp dev tun ca /etc/openvpn/keys/ca.crt cert /etc/openvpn/keys/ovpn-server.crt key /etc/openvpn/keys/ovpn-server.key dh /etc/openvpn/keys/dh.pem server 10.8.0.0 255.255.255.0 ifconfig-pool-persist ipp.txt push "redirect-gateway def1 bypass-dhcp" push "dhcp-option DNS 8.8.8.8" keepalive 10 120 cipher AES-256-CBC comp-lzo user nobody group nogroup persist-key persist-tun status openvpn-status.log verb 3
Запускаємо OpenVPN сервер:
systemctl start openvpn@server– Запускаємо демона;
systemctl enable openvpn@server– Включаємо автозапуск демона при буті системи.
Перевіряємо чи піднявся інтерфейс через ip a:

Встановлюємо OpenVPN:
sudo apt install openvpn
За допомогою csp перекидаємо ключі та сертифікати на малинку:
scp user@your_vps_ip:/path/to/your/files/ca.crt /path/on/your/computer scp user@your_vps_ip:/path/to/your/files/pi_zero.key /path/on/your/computer scp user@your_vps_ip:/path/to/your/files/pi_zero.crt /path/on/your/computer
Створюємо файл конфігурації для клієнта OpenVPN (client.ovpn):
client dev tun proto udp remote your_vps_ip 1194 resolv-retry infinite nobind user nobody group nogroup persist-key persist-tun ca ca.crt cert client.crt key client.key cipher AES-256-CBC comp-lzo verb 3
Пробуємо підняти тунель ручками:
sudo openvpn --config client.ovpn
Якщо все піднялося, і ми можемо з впскі пінганути малинку , можемо рухатися далі. Тепер нам необхідно зробити так, щоб тунель піднімався під час запуску малини , для цього створимо systemd unit файл для клієнтського з’єднання ( /etc/systemd/system/openvpn-client.service ):
[Unit] Description=OpenVPN to VPS After=network.target [Service] Type=simple ExecStart=/usr/sbin/openvpn --config /path/to/client.ovpn [Install] WantedBy=multi-user.target
Про всяк випадок, щоб уникнути появи критичних помилок, ми можемо додати ще дві опції в секцію [Service]:
Опція Restart=alwaysв systemd встановлює правило перезапуску служби завжди, навіть у разі аварійного завершення роботи. А опція RestartSec=3встановлює час затримки перед повторним запуском служби за секунди.
Перезапускаємо systemd:
systemctl daemon-reload
Запускаємо та активуємо написаний демон:
systemctl start openvpn-client systemctl enable openvpn-client
Для того, щоб зробити портфорвардинг з одного інтерфейсу в інший на інший, ми можемо скористатися SSH. Для цього нам буде достатньо однієї команди, виконаної на VPS:
ssh -f -N -L 0.0.0.0:90:raspberry_ip:90 user@raspberry_ip
Про те, чому прокидаємо саме 90 порт, буде написано трохи пізніше. Ми можемо або зробити аналогічний з попереднім демоном, або запускати цю команду, коли нам необхідно, прапор -f підніме тунель у фоновому режимі.
Якщо вам знадобиться реалізувати портфорвардинг через демон, необхідно буде налаштувати автентифікацію з використанням ключів. Для цього спочатку генеруємо на впске ключі, а потім закидаємо їх на малинку:
ssh-keygen ssh-copy-id user@raspberry_ip
Motion – це програма, яка відстежує відеосигнал з однієї або декількох камер, здатна виявити, чи змінилася значна частина зображення.
Завантажити вже зібраний .deb пакет можна за посиланням (нас цікавить версія під архітектору ARM64 – *_motion_4.6.0-1_arm64.deb): https://github.com/Motion-Project/motion/releases/tag/release-4.6.0
Альтернатива – скачати motion через пакетний менеджер apt:

Як зазначалося, для роботи підійде будь-яка UpNP камера. Для того, щоб перевірити працездатність та сумісність камери, ми можемо скористатися інструментом v4l2-ctl, що встановлюється через пакетний менеджер APT – sudo apt _install_ v4l-utils.
Нижче показано два висновки, якщо ви отримуєте помилку “Cannot open device /dev/video0, exiting”, через lsusb перевіряйте чи бачить система вашу камеру.

Основний файл конфігурації motion.conf знаходиться в директорії /etc/motion. Нижче розписані всі прапори, які знадобляться нам при початковому налаштуванні motion, для самостійного вивчення йдемо в документацію ( https://motion-project.github.io/motion_config.html ):
daemon on: Цей параметр включає режим демона, тобто motion буде працювати у фоновому режимі як служба.
stream_port 90: Встановлює порт, на якому буде доступний стрім з відео.
stream_quality 100: Визначає якість відеопотоку (від 1 до 100, де 100 – максимальна якість).
stream_maxrate 20: Обмежує максимальну швидкість потоку відео в кадрах за секунду.
stream_localhost off: Дозволяє віддаленим пристроям переглядати відеопотік.
stream_limit 0: Визначає обмеження кількості підключень до відеопотоку.
width 1280, height 720: Визначають ширину та висоту кадру відеопотоку (Виставляє по максималці, яку підтримує ваша камера).
framerate 20: Встановлює частоту кадрів за секунду.
locate_motion_mode on, locate_motion_style redbox: Показує область руху на відео за допомогою червоного прямокутника.
stream_auth_method 1: Вибирає метод аутентифікації (1 – базова аутентифікація).
stream_authentication user:pass: Встановлює ім’я користувача та пароль для доступу до потоку відео.
Пробуємо запускати motion:
sudo motion -b
Якщо все успішно запустилося, ми можемо спробувати зайти по айпішці vps’ки на stream_port, який ми вказали в конфіг файлі (у мене 90) і перевірити наскільки успішно все завелося:
Для запуску motion при ребуті додаємо в кронтаб наступний рядок:
@reboot motion -b
Тепер залишилося тільки замикати камеру так, щоб об’єкт спостереження нічого не помітив, уявляю варіант, який я використав, щоб затестіти наскільки безпально її можна сховати:
В ідеалі її можна засунути прямо над об’єктом спостереження , це без зайвого клопоту та іншого хардварного капелюха допоможе дізнатися, що і коли вводив на клавіатурі об’єкт спостереження.
Використавши маленький пасивний хаб для підключення камери з модемом, у нас залишилося ще як мінімум два USB порти , куди можна встромити зовнішній Wi-Fi адаптер з режимом монітора:


А для щасливих власників Raspberry Pi Zero 2 W із вбудованим Wi-Fi адаптером, гарною новиною буде той факт, що його вбудований адаптер можна перепрошувати та користуватися ним у режимі монітора. Прошивку можна знайти тут: https://re4son-kernel.com/
До речі, як одне зі спостережень – збірка, що вийшла, чудово працює не тільки на Raspberry Pi Zero, але, навіть якщо просто переставити microSD картку в Raspberry Pi 4B, все буде працювати так само безвідмовно.
Звичайно можна зібрати пристрій за допомогою маленької камери, призначеної спеціально для роботи з малиною, а в якості акумулятора взяти дрібний літій-іонний акумулятор розміром з саму малинку, але у нас була стаття з виготовлення максимально кустарного і панківського пристрою, який виглядає не дуже презентабельно але чудово виконує всі поставлені завдання. За образом і подобою можете експериментувати із залізницею самостійно, пробуючи різні модулі та комплектуючі!