OpenWRT устройства на службе пентестера

OpenWRT устройства на службе пентестера

При проведении пентестов непосредственно на площадке заказчика не лишним будет проверить, насколько уязвимы мобильные гаджеты к атакам типа “поддельная точка доступа”.

Андрей А. Бирюков, CISSP

Вся приведенная в статье информация представлена исключительно в ознакомительных целях!

Беспроводные сети получают все большее распространение, при этом существует множество различных открытых сетей в транспорте, кафе, гостиницах и т.д. Многие пользователи уже настолько привыкли к ним, что не выключают WiFi на своих гаджетах и указывают в настройках автоматическое подключение к сохраненным сетям. Помимо того, что это приводит к дополнительному расходу заряда, автоматические подключения к WiFi позволяют злоумышленникам реализовать ряд атак от достаточно банальных Man In The Middle, до сложных APT с использованием устройства в качестве плацдарма для проникновения к примеру в корпоративную сеть.

Поэтому, при проведении пентестов непосредственно на площадке заказчика не лишним будет проверить, насколько уязвимы мобильные гаджеты (личные или корпоративные в данном случае значения не имеет) к атакам типа “поддельная точка доступа”.

Типовой сценарий будет следующий: поднимаем поддельную точку доступа с распространенным ESSID, например, “что-то_там_Free” и перемещаемся по территории (у нас же вроде как пентест, аудит, обследование или что-то еще).

Что мы хотим получить в результате?

В результате мы получаем имена и МАС-адреса подключившихся устройств пользователей. Не лишним будет просканировать эти устройства, постараться узнать версии ОС и прикладного ПО, открытые порты. Возможно, вы захотите сделать что-то большее, однако в рамках данной статьи более глубокое тестирование мы рассматривать не будем.

Теперь перейдем к технической части. Поднять поддельную точку доступа можно и на телефоне и на ноутбуке, но лучше чтобы она могла работать незаметно. Тогда наше перемещение по территории не будет выглядеть подозрительно.

На просторах Интернета имеется множество примеров создания точек доступа на базе микрокомпьютеров Raspberry Pi и аналогов. Можно поднять Nethunter на смартфоне. Однако, лучше воспользоваться уже готовой аппаратной платформой, просто заменив прошивку на нужную.

В качестве такой платформы мы воспользуемся мобильным роутером TP-Link TL-MR3040. Это достаточно маленькая точка доступа, имеющая Wi-Fi и Ethernet порт. Устройство недорого стоит и имеет разъем на плате для перепрошивки с помощью кабеля. В Интернете можно найти подробные видеоинструкции по восстановлению прошивки в случае сбоя. Так что с ним можно смело экспериментировать, не боясь испортить.

Общие технические характеристики TP-Link TL-MR3040:

Тип Wi-Fi роутер
Стандарт беспроводной связи 802.11n, частота 2.4 ГГц
Макс. скорость беспроводного соединения 150 Мбит/с
Разъем USB 2.0 Type A
Время работы в автономном режиме 4 ч
Размеры (Ш×В×Г): 100×16×62 мм
Батарея встроенная 2000 мА·ч

Замена прошивки

В качестве альтернативной прошивки мы воспользуемся OpenWRT Barrier Breaker. По моему опыту данная прошивка стабильно работает на различных моделях TP-LINK и включает в себя основные средства разработки, которые нам потребуются в дальнейшем.

Качаем по ссылке

https://downloads.openwrt.org/barrier_breaker/14.07/ar71xx/generic/openwrt-ar71xx-generic-tl-mr3040-v1-squashfs-factory.bin.

Для записи образа прошивки нужна флешка на 16 ГБ.


Внешний вид готового устройства

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

Ее необходимо разметить в любой ОС Линукс с помощью fdisk или GParted следующим образом.

Partition 1 = 500 MB SWAP
Partition 2 = 15.5GB ext4

В качестве примера я приведу последовательность действий для fdisk. Для начала устанавливаем накопитель в USB-порт и смотрим как флешка определилась системой:

fdisk -l

USB-Flash диск может определится как sdb. Теперь создаем на USB-Flash разделы:

fdisk /dev/sdb

Сначала удалим все существующие разделы с помощью следующих команд:

Command (m for help): d
Partition number (1-4): 1
Command (m for help): d
Partition number (1-4): 2
Command (m for help): d
Partition number (1-4): 3
Command (m for help): d
No partition is defined yet!

Если появилось сообщение No partition is defined yet! тогда идем дальше. Создаем сначала раздел для Swap. Замечу, что в нашем случае, в отличии от многих других примеров, первый раздел будет Swap, а второй ext4:

Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
[B] Partition number (1-4): 1
First cylinder (xx-xxx, default xx):
Using default value xx
Last cylinder or +size or +sizeM or +sizeK (xx-xxx, default xxx): +500M

Мы создали раздел для Swap размером 500 Мб.

Создаем основной раздел, используем для него все оставшееся пространство на флешке:

Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 2
First cylinder (xx-xxx, default xx): жмем Enter
Using default value xx
Last cylinder or +size or +sizeM or +sizeK (xx-xxx, default xxx): жмем Enter

Поменяем тип для первого раздела:

Command (m for help): t
Partition number (1-4): 1
Hex code (type L to list codes): 82
Changed system type of partition 1 to 82 (Linux swap / Solaris)
Command (m for help): a
Partition number (1-4): 2

Посмотрим, что получилось в итоге (рис. 2.67):

Command (m for help): p

Сохраним изменения:

Command (m for help): w

Разделы созданы, теперь надо переподключить флешку и отформатировать разделы:

mkswap /dev/sdb1
mkfs.ext4 /dev/sdb2

Флешка готова, перейдем к перепрошивке самого устройства.


Рисунок Настройки разделов

Далее загрузите точку доступа и зайдите по адресу http://192.168.0.1 (учетные данные admin/admin). Затем выберите System Tools и затем Firmware Upgrade и укажите файл образа. После этого устройство обновится и перезагрузится, после чего его адрес будет 192.168.1.1. OpenWRT Barrier Breaker установлен.

Теперь нам необходимо расширить файловые разделы, так как на самом устройстве свободного места практически нет. Для этого, вносим в файл /etc/config/fstab следующие изменения:


Рисунок Содержимое fstab

Далее выполним следующие команды:

mkdir –p /tmp/cproot
mount –bind / /tmp/cproot
mkdir /mnt/sda2
mount /dev/sda2 /mnt/sda2
tar –C /tmp/cproot –cvf - . | tar –C /mnt/sda2 –xf –
umount /tmp/cproot

Теперь снова вносим изменения в /etc/config/fstab:


Рисунок Содержимое fstab

Перегружаем устройство. Если все было выполнено корректно, мы увидим следующую картину


Рисунок Итоговое разбиение

Как видно, теперь у нас есть 13 Гб свободного места, где мы можем устанавливать софт и сохранять собранные данные.

Для работы с устройством вы можете воспользоваться веб-интерфейсом или Telnet. По умолчанию используются учетные данные root без пароля.


Рисунок Веб-интерфейс OpenWRT

Далее читателю предлагается самостоятельно провести харденинг устройства, выбрав соответствующие пункты в веб интерфейсе. Для дальнейшей работы нам потребуется только SSH.

Логинимся по SSH. Нам необходимо во-первых сохранять имена и МАС адреса всех, кто к нам подключился и затем сканировать эти узлы с помощью nmap.

Собираем имена

Первую задачу будем решать с помощью файла логов DHCP, который находится в /tmp/dhcp.leases. Самый простой путь, это периодически копировать его содержимое на нашу флешку (раздел /opt). Да, результирующий файл будет содержать повторы и можно заморочиться и написать скрипт для их удаления, но если вы также ленивы, как и я, то для фильтрации уникальных записей проще будет воспользоваться функционалом Excel.

Выполним следующие действия:

mount /dev/sda2 /mnt/sda2

Далее пропишем выполнение по расписанию следующее команды

cat /tmp/dhcp.leases >> /mnt/sda2/all_leases

Файл all_leases будет иметь следующий формат:


Собранные данные

Узнаем больше

Теперь перейдем ко второй задаче. Алгоритм довольно простой. Файл логов помимо прочего содержит IP адреса, полученные клиентами. Будем в цикле обходить /tmp/dhcp.leases и сканировать все узлы, которые добавились с момента последнего сканирования.

#!/usr/bin/python
import os
import time

Command = "cat /tmp/dhcp.leases"
os.system(Command)

time.sleep(120)

j=0
while True:
f = open('/tmp/dhcp.leases')
i=0
print j
for line in f:
i=i+1
if i>j:
txt = line.split(' ')
print txt[2]
Command = "echo "+txt[2]+" >> /opt/result"
print Command
os.system(Command)
Command = "nmap -sV -T4 -PN "+txt[2]+" >> result"
print Command
os.system(Command)
j=i

Файл result будет содержать отчет о сканировании.


Результаты сканирования

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

Не забываем прописать выполнение скриптов в запуск.

Заключение

Предложенное устройство позволяет автоматизировать атаки на пользовательские устройства. Пример с открытыми сетями можно модифицировать, например, если пентестеру известен WPA/WPA2 пароль от корпоративной сети и в ней не используются сертификаты, то можно поднять AP для корпоративной сети. Возможно там будет еще больше интересного.

Также можно развернуть MiniPwner: (https://github.com/nicholasadamou/minipwner) и с его помощью реализовать множество интересных атак.

Использованная литература:

  1. Бирюков А. А, “Собираем устройства для тестов на проникновение”, ДМК Пресс, 2018

Если вам нравится играть в опасную игру, присоединитесь к нам - мы научим вас правилам!

Подписаться