HackWare.ru

Как увеличить мощность (TX Power) Wi-Fi карты в Kali Linux и BlackArch

Актуальная версия инструкции здесь: Простой способ увеличить TX Power для Wi-Fi в Kali Linux и BlackArch

В разных странах разное законодательство и технические нормативы, в том числе в отношении Wi-Fi. В некоторых странах не разрешено использовать частоты некоторых Wi-Fi каналов (например, в США нельзя использовать каналы 12, 13 и 14). В большинстве стран установлено ограничение на мощность Wi-Fi сигнала в 20.0 dBm. Но есть страны в которых стоит ограничение в 30.0 dBm. Можно воспользоваться этой лазейкой (заставить думать Wi-Fi карту, что она в стране где разрешено 30.0 dBm) и поднять её мощность (TX Power) до значения в 30.0 dBm.

Для Wi-Fi устройств есть такое понятие как управляющий домен (regulatory domain или "regdomain") – именно в этом параметре указана страна, в котором, как предполагается, работает данное устройство. Также имеется сопутствующая база данных, в которой для каждой страны прописаны разрешённые частоты и разрешённая для них мощность.

Алгоритм следующий:

  • мы устанавливаем общесистемную настройку управляющего домена на значение той страны, где разрешена мощность в 30.0 dBm;
  • устанавливаем повышенную мощность для беспроводного адаптера.

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

  • физическая неспособность карт работать на мощностях более 20.0 dBm (например, беспроводной интерфейс изначально показывает мощность 15.0 dBm при разрешённых 20.0 dBm – в таком случае никаким способом не удастся поднять мощность выше 15.0 dBm, хотя бы даже до тех же самых 20.0 dBm);
  • особенности драйверов, например, некоторые драйверы игнорируют системные настройки. Это не является неразрешимой проблемой – но для каждой модели нужен свой подход (обычно, требуется небольшой патч для драйвера) или (что намного проще), патч базы данных управляющего домена.

Посмотреть, что вам разрешено прямо сейчас и на что способен ваш беспроводной адаптер можно командой:

sudo iw list

Например, для России разрешены следующие частоты и мощность:

Оказывается, каналы с 100 по 128 не разрешается использовать, а для каналов с 132 по 165 разрешена повышенная мощность.

Полную актуальную базу в текстовом виде можно посмотреть здесь.

Странами, в которых разрешены каналы с 1 по 13 на мощности 30.0 dBm являются (к примеру):

  • BZ
  • GY
  • NZ
  • VE

Обратите внимание, что для каналов на 5 ГГц у них разные значения (разный список разрешённых частот и мощностей).

Далее я покажу поднятие мощности на примере Alfa AWUS052NH в Kali Linux. В старых инструкциях указывается на необходимость установить дополнительные пакеты – в настоящее время это не нужно. Всё необходимое в Kali Linux уже имеется! Подробности для BlackArch/Arch Linux ниже.

Останавливаем службы, которые могут нам помещать (это необязательно, должно работать и с ними):

sudo systemctl stop NetworkManager
sudo airmon-ng check kill

Чтобы узнать, настройки какого региона действуют в данный момент выполните команду:

sudo iw reg get

Строка country 00 говорит о том, что у меня не установлено какое-либо значение и применяются стандартные настройки.

Теперь устанавливаем управляющий домен на значение BZ:

sudo iw reg set BZ

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

sudo iw reg get

Заодно на новые возможности можно посмотреть командой:

sudo iw list

Если на данном этапе настройки управляющего замена не применились (не установились) на системном уровне, то не получится повысить мощность Wi-Fi адаптера, пока вы не разберётесь с причиной этого.

Посмотреть имя беспроводного интерфейса и его текущее состояние можно командой:

sudo iw dev

Далее увеличиваем мощность (замените wlan0 на имя вашего беспроводного интерфейса):

sudo ip link set wlan0 down
sudo iw dev wlan0 set txpower fixed 30mBm
# sudo iw wlan0 set monitor control # если нужно, переводим в режим монитора
sudo ip link set wlan0 up

Проверяем:

sudo iw dev

Строка txpower 30.00 dBm говорит о том, что у нас всё получилось.

Усиление мощности для Alfa AWUS036NHA

Для AWUS036NHA эти же команды не имеют эффекта.

Объяснение можно найти здесь:

«За назначение свойств каналам отвечает regulatory domain, который зависит от страны. Данные берутся из базы данных в юзерспейсе при помощи утилиты crda. По идее сменить страну можно командой «iw reg set $КОД_СТРАНЫ», но в случае с устройствами от atheros из коробки этот метод не работает, так как у атеросов regulatory domain зашит в EEPROM и линуксовый драйвер читает именно его, игнорируя настойки системы. К счастью, у нас тут opensource и мы можем наложить несложный патч:»

Т.е. это тот самый случай, когда драйвер игнорирует системные настройки и использует значение, зашитое производителем на аппаратном уровне. Проблема, в принципе, решаема, причём несколькими различными методами.

Если у вас Alfa AWUS036NHA или любая другая, которая игнорирует системные настройки regulatory domain, то это не повод впадать в отчаянье.

Вы обратили внимание, что база данных, из которых берутся данные, представляет собой обычный текстовый файл? По идее, сразу должна возникнуть мысль, можно ли подправить его под нужную страну? Можно!

Начнём с того, что проверим, для какой страны произведена ваша беспроводная карта:

sudo iw reg get

В моём случае строка country GB говорит о том, что карта произведена для страны, которая в базе данных названа GB.

Мой метод отличается от других инструкций, где вручную устанавливаются пакеты wireless-regdb и crda. Эти пакеты уже должны быть установлены в вашей системе (в Kali Linux есть по умолчанию). Единственное что мы сделаем – заменим файл базы данных.

В последних версиях Kali Linux не установлен пакет crda, установим его:

sudo apt install crda

Установим зависимости, необходимые для компиляции базы данных:

sudo apt install python3-m2crypto

Клонируем исходные файлы:

git clone git://git.kernel.org/pub/scm/linux/kernel/git/sforshee/wireless-regdb.git
cd wireless-regdb/

Теперь нам нужно отредактировать текстовый файл базы данных:

gedit db.txt

В нём найдите строку country 00 и пропишите для неё что-то вроде (можете подправить под свой вкус):

	(2402 - 2482 @ 40), (30)
	(5170 - 5835 @ 80), (30)
	(57000 - 66000 @ 2160), (40)

Эти же строки впишите для country GB (у вас может быть другая страна — зависит от вашей карты, вы можете посмотреть это значение командой sudo iw reg get):

Сохраните и закройте файл.

Пропатчим файлы для использования Python3

sed -i 's/#!\/usr\/bin\/env python/#!\/usr\/bin\/env python3/' *.py

Выполните команду:

make

В результате из текстового файла был создан бинарный файл БД (regulatory.bin) которым мы подменим одноимённый файл в системе.

Удаляем исходный файл базы данных:

sudo rm /lib/crda/regulatory.bin

Копируем нашу модифицированную БД:

sudo cp regulatory.bin /lib/crda/regulatory.bin

Ещё раз для нового формата, который также используется:

sudo rm /usr/lib/firmware/regulatory.db
sudo cp regulatory.db /usr/lib/firmware/regulatory.db

Копируем необходимый публичный ключ (файл БД подписан сгенерированным специально для нашего пользователя ключом):

sudo cp $USER.key.pub.pem /lib/crda/pubkeys/
sudo cp $USER.x509.pem /usr/lib/crda/pubkeys/

Перезагрузите компьютер.

Теперь НЕ нужно использовать sudo iw reg set BZ.

Убедимся в этом:

sudo iw reg get

Строки

country GB: DFS-ETSI
	(2402 - 2482 @ 40), (N/A, 30), (N/A)

говорят о возможности увеличить мощность до 30 dBm.

Пробуем:

sudo ip link set wlan0 down
sudo iw dev wlan0 set txpower fixed 30mBm
# sudo iw wlan0 set monitor control # если нужно, переводим в режим монитора
sudo ip link set wlan0 up

Результат:

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

Повышение можности Wi-Fi адаптера в BlackArch / Arch Linux

В BlackArch/Arch Linux рекомендуется установить пакет wireless-regdb-pentest. Подробности в статье «Как увеличить мощность (TX-Power) Wi-Fi карты в BlackArch». Если по каким-либо причинам вы не хотите использовать wireless-regdb-pentest, то ниже описано, как это сделать другим путём (по аналогии с Kali Linux).

Все вышеприведённые команды работают и в BlackArch / Arch Linux. Но необходимо установить пару дополнительных пакетов:

sudo pacman -S crda wireless-regdb

В файле /etc/conf.d/wireless-regdom можно разкомментировать строку с соответствующей страной, чтобы значение устанавливалось при загрузке системы.

Также в BlackArch / Arch Linux другое имя беспроводных интерфейсов – замените их в командах на правильные.

В BlackArch / Arch Linux при генерации бинарного файла БД возникнет ошибка

openssl rsa -in ~/.wireless-regdb-mial.key.priv.pem -out mial.key.pub.pem -pubout -outform PEM
writing RSA key
Generating regulatory.bin digitally signed by mial...
./db2bin.py regulatory.bin db.txt ~/.wireless-regdb-mial.key.priv.pem
  File "./db2bin.py", line 13
    print 'Usage: %s output-file input-file [key-file]' % sys.argv[0]
                                                      ^
SyntaxError: Missing parentheses in call to 'print'
make: *** [Makefile:58: regulatory.bin] Ошибка 1

Она связана с тем, что по умолчанию Arch Linux использует Python 3, а не Python 2. Для решения проблемы откройте файл Makefile:

gedit Makefile

И замените в нём строку

./db2bin.py regulatory.bin db.txt $(REGDB_PRIVKEY)

на

python2 ./db2bin.py regulatory.bin db.txt $(REGDB_PRIVKEY)

Заключение

Увеличение мощности Wi-Fi адаптера бесспорно полезно только при глушении Wi-Fi, а также в атаках деаутентификации. Во всех остальных атаках увеличение мощности совсем не обязательно что-то изменит, поскольку мощность влияет на то, как громко «кричит» ваш Wi-Fi адаптер, но не увеличивает его чувствительность (как хорошо он «слышит» других).

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

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

sudo apt purge wireless-regdb crda
sudo apt install wireless-regdb

================================================

Обращение к тем, кто разбирается

В этой инструкции мы меняем базу данных, генерируем свою пару ключ-сертификат и подписываем ей БД. Раньше проверка подписи выполнялась пакетом crda и нам достаточно было просто скопировать свой сертификат, чтобы crda делала по нему проверку.

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

Но теперь это уже можно назвать костылём и не факт, что пакет crda вовсе не уберут из репозитория.

В связи с этим вопрос, кто знает, как добавить свой сертификат, чтобы он использовался для проверки подписи файла regulatory.db на уровне ядра, то есть без crda? Если кто-то знает, то пишите в комментариях.

В данный момент всё примерно так:

sudo journalctl -b | grep -i regulatory

Но в выводе получаем, что загруженная БД regulatory.db неправильно сделана или подпись отсутствует/недействительна:

дек 11 07:43:35 HackWare-Kali kernel: cfg80211: Loading compiled-in X.509 certificates for regulatory database
дек 11 07:43:35 HackWare-Kali kernel: platform regulatory.0: firmware: direct-loading firmware regulatory.db
дек 11 07:43:35 HackWare-Kali kernel: platform regulatory.0: firmware: direct-loading firmware regulatory.db.p7s
дек 11 07:43:35 HackWare-Kali kernel: cfg80211: loaded regulatory.db is malformed or signature is missing/invalid

Пока пакет crda решает эту проблему.

P.S.

Небольшой анонс, на Arch Linux пакет wireless-regdb-pentest теперь делает так:

То есть устанавливает TX power на 36.00 dBm. Тестирую, уже обнаружились нюансы, но всё вроде решаемо. Если всё получится, то адаптирую это для Kali Linux.

История обновлений

No update history yet.

Рекомендуется:
↑