Pineapple with Eyes
В данной статье мы рассмотрим сборку аппаратной закладки, которая не будет требовать прямого доступа к атакуемым системам - Wi-Fi Pineapple. Кроме того, мы изучим, как это устройство может быть задействовано не только при атаках на Wi-Fi сети, но и в качестве IP-камеры для наблюдения за объектами.
Hardware List:
- Завалявшаяся на полках камера, работающая на стеке протоколов UPnP(Universal Plug and Play);
- Raspberry Pi Zero 2 (W - опционально);
- Пассивный USB хаб;
- USB-модем;
- Источник питания.
Chapters:
OS Installation
В данном, как и в любом другом проекте, выбор ОС для одноплатников - дело сугубо индивидуальное. Я бы советовал смотреть в сторону 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 вечно деревянных.
Network
Setting Up Modem:
Для того чтобы мы не были связаны с малиной одной сетью и могли ходить на нее, где бы мы не находились, необходимо дать малине доступ в Интернет. С этим прекрасно справляется самый обычный 4G-модем.
Для того, чтобы не танцевать с бубном при попытке подключения к модемовской Wi-Fi сети при буте, сделаем из модема внешнюю сетевую карту. Для этого нам при каждом запуске необходимо активировать сетевой интерфейс модема, прописав в /etc/network/interfaces следующие строки:
VPN Tunnel:
Настройка 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
systemctl start openvpn@server
- Запускаем демона;systemctl enable openvpn@server
- Включаем автозапуск демона при буте системы.
Проверяем поднялся ли интерфейс через ip a:
Raspberry Pi:
Устанавливаем 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 Port Forwarding:
Для того, чтобы сделать портфорвардинг с одного интерфейса впски на другой, мы можем воспользоваться 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
Installation:
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 проверяйте видит ли система вашу камеру.
Config File:
Основной конфигурационный файл 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
: Устанавливает имя пользователя и пароль для доступа к видеопотоку.
Testing Motion:
Пробуем запускать motion:sudo motion -b
Если все успешно запустилось, мы можем попробовать зайти по айпишке vps'ки на stream_port, кооторый мы указали в конфиг файле(у меня 90) и проверить насколько успешно все завелось:
Для запуска motion при ребуте добавляем в кронтаб следующую строку:@reboot motion -b
Теперь осталось только заныкать камеру так, чтобы объект наблюдения ничего не заметил, представляю вариант, который использовал я, дабы затестить насколько беспалевно ее можно спрятать:
В идеале ее можно засунуть прям над объектом наблюдения, это без лишних хлопот и прочей хардварной шляпы поможет узнать, что и когда вводил на клавиатуре объект наблюдения.
Bonus Pineapple Part:
Не ради кликбейтов была названа эта статья! Так как я использовал маленький пасивный хаб для подключения камеры с модемом, у нас осталось еще как минимум два USB порта, куда можно воткнуть внешний Wi-Fi адаптер с режимом монитора:
А для счастливых обладателей Raspberry Pi Zero 2 W со встроенным Wi-Fi адаптером, хорошей новостью будет тот факт, что его встроенный адаптер можно перепрошить и пользоваться им в режиме монитора. Прошивку можно найти здесь:
https://re4son-kernel.com/
Кстати, как одно из наблюдений - получившаяся сборка прекрасно работает не только на Raspberry Pi Zero, но, даже если просто переставить microSD карточку в Raspberry Pi 4B, все будет работать так же безотказно.
Заключение:
Конечно можно собрать устройство с помощью малюсенькой камеры, предназначенной специально для работы с малиной, а в качестве аккума взять мелкий лити1-ионный аккумулятор размером с саму малинку, НО сегодня у нас был урок по изготовлению максимально кустарного и панковского устройства, которое выглядит не очень презентабельно, но прекрасно выполняет все поставленные задачи. По образу и подобию можете экспериментировать с железкой самостоятельно, пробуя разные модули и комплектующие!
Писал статью и крафтил вместе с вами глазастый ананас – E1tex!
Мой канал про похек:TRY FCK HARDER!