Pentest
March 4

Pineapple with Eyes

В данной статье мы рассмотрим сборку аппаратной закладки, которая не будет требовать прямого доступа к атакуемым системам - Wi-Fi Pineapple. Кроме того, мы изучим, как это устройство может быть задействовано не только при атаках на Wi-Fi сети, но и в качестве IP-камеры для наблюдения за объектами.

Hardware List:

  1. Завалявшаяся на полках камера, работающая на стеке протоколов UPnP(Universal Plug and Play);
  2. Raspberry Pi Zero 2 (W - опционально);
  3. Пассивный USB хаб;
  4. USB-модем;
  5. Источник питания.

Chapters:

  1. OS Installation;
  2. Network;
  3. Motion.

OS Installation

В данном, как и в любом другом проекте, выбор ОС для одноплатников - дело сугубо индивидуальное. Я бы советовал смотреть в сторону DietPi в том случае, если вам нужен максимально легкий и ненагруженный образ, и в сторону Kali-ARM в случае, если вы планируете использовать инструментарий Kali, который поставляется из коробки. Дальнейший гайд будет строиться на Raspberry Pi Zero 2 W с Kali на борту.

  1. Скачиваем готовый образ с https://www.kali.org/get-kali/#kali-arm и с помощью Rufus или другого подобного ПО загружаем его на MicroSD карточку.
  2. Вставляем MicroSD в соответсвующий соккет на плате и подрубаем монитор, клавиатуру и питание. Если вы используете Raspberry Pi Zero, придется приобрести несколько OTG - {ваш_сокет} - mini-HDMI(X1), {ваш_сокет} - micro-USB(X2), а так же несколько соразмерных радиаторов, чтобы температура процессора не вываливалась за допустимые рамки.
  3. Сейчас Kali должна завестись, если вдруг вы получаете ошибку Kernel panic - not syncing: VFS: Unable to mount root fs on unknown- block(179,6), скорее всего дело в плохой microSD карточке, не знаю почему так, но я сам некоторое время боролся с этой ошибкой, купив карточку Kingston с Озона за 400 вечно деревянных.
https://forums.raspberrypi.com/viewtopic.php?t=112409

Network

Setting Up Modem:

Для того чтобы мы не были связаны с малиной одной сетью и могли ходить на нее, где бы мы не находились, необходимо дать малине доступ в Интернет. С этим прекрасно справляется самый обычный 4G-модем.

Для того, чтобы не танцевать с бубном при попытке подключения к модемовской Wi-Fi сети при буте, сделаем из модема внешнюю сетевую карту. Для этого нам при каждом запуске необходимо активировать сетевой интерфейс модема, прописав в /etc/network/interfaces следующие строки:

sudo nano /etc/network/interfaces

VPN Tunnel:

Настройка OpenVPN начинается с генерации ключей. Генерируемые ключи делятся на:

  • Главный CertificateAuthority (CA) сертификат и ключ, используемый для подписания каждого сертификата сервера и клиента.
  • Публичный и приватный ключи для сервера и каждого клиента отдельно.

VPS:

Устанавливаем пакет OpenVPN:
sudo apt install openvpn


С помощью Easy-RSA создаем серверные ключи и сертификаты:

make-cadir /etc/openvpn/easy-rsa - копируем шаблонную директорию easy-rsa в /etc/openvpn/.

Переходим в скопированную директорию и выполняем следующие команды:

./easyrsa init-pki - Инициализируем структуру каталогов и файлов для управления открытыми ключами.

./easyrsa init-pki output

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

./easyrsa build-ca output

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

./easyrsa gen-dh output

./easyrsa gen-req ovpn-server nopass - Генерируем запрос на создание сертификата для сервера OpenVPN, используя имя "ovpn-server", без запроса пароля.

./easyrsa gen-req ovpn-server nopass output

./easyrsa sign-req server ovpn-server - Подписываем запрос на сертификат для сервера OpenVPN с помощью CA, используя предварительно определенные настройки.

./easyrsa sign-req server ovpn-server output

./easyrsa gen-req pi_zero nopass - Генерируем запрос на создание сертификата для клиента с именем "pi_zero" без пароля.

./easyrsa gen-req pi_zero nopass output

./easyrsa sign-req client pi_zero - Подписываем запрос на сертификат для клиента с именем "pi_zero" с использованием CA.

./easyrsa sign-req client pi_zero output

Создаем конфигурационный файл для сервера 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:

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:

sudo apt install motion

Как уже отмечалось, для работы подойдет любая UpNP камера. Для того, чтобы проверить работоспособность и совместимость камеры, мы можем воспользоваться инструментом v4l2-ctl, устанавливается через пакетный менеджер APT - sudo apt _install_ v4l-utils.

Ниже показаны два вывода, если вы получаете ошибку "Cannot open device /dev/video0, exiting", через lsusb проверяйте видит ли система вашу камеру.

Camera Testing

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 адаптер с режимом монитора:

Alfa Network AWUS036AC
Сборка с Raspberry Pi 4B.

А для счастливых обладателей Raspberry Pi Zero 2 W со встроенным Wi-Fi адаптером, хорошей новостью будет тот факт, что его встроенный адаптер можно перепрошить и пользоваться им в режиме монитора. Прошивку можно найти здесь:
https://re4son-kernel.com/

Кстати, как одно из наблюдений - получившаяся сборка прекрасно работает не только на Raspberry Pi Zero, но, даже если просто переставить microSD карточку в Raspberry Pi 4B, все будет работать так же безотказно.

Заключение:

Конечно можно собрать устройство с помощью малюсенькой камеры, предназначенной специально для работы с малиной, а в качестве аккума взять мелкий лити1-ионный аккумулятор размером с саму малинку, НО сегодня у нас был урок по изготовлению максимально кустарного и панковского устройства, которое выглядит не очень презентабельно, но прекрасно выполняет все поставленные задачи. По образу и подобию можете экспериментировать с железкой самостоятельно, пробуя разные модули и комплектующие!

Писал статью и крафтил вместе с вами глазастый ананас – E1tex!

Мой канал про похек:
TRY FCK HARDER!

Увидимся!