При проведении пентестов непосредственно на площадке заказчика не лишним будет проверить, насколько уязвимы мобильные гаджеты к атакам типа “поддельная точка доступа”.
Андрей А. Бирюков, 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) и с его помощью реализовать множество интересных атак.
Использованная литература:
И мы тоже не спим, чтобы держать вас в курсе всех угроз