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

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

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

image

Андрей А. Бирюков, 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

Один хакер может причинить столько же вреда, сколько 10 000 солдат! Подпишись на наш Телеграм канал, чтобы узнать первым, как выжить в цифровом кошмаре!