Актуальная версия инструкции здесь: Простой способ увеличить 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.













