MAC address spoofing (Русский)

From ArchWiki
Состояние перевода: На этой странице представлен перевод статьи MAC address spoofing. Дата последней синхронизации: 10 июля 2021. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

В статье описаны способы подмены адреса Media Access Control (MAC).

Вручную

Существует два способа подменить MAC-адрес "вручную": установить и настроить либо iproute2, либо macchanger. Оба способа изложены ниже.

iproute2

Сперва проверьте ваш текущий MAC-адрес:

# ip link show интерфейс

Здесь интерфейс — имя вашего сетевого интерфейса.

Необходимая нам в данный момент информация расположена в строке, начинающейся со слов "link/ether", за которыми следует 6-байтный номер:

link/ether 00:1d:98:5a:d1:3a

Отключите интерфейс:

# ip link set dev интерфейс down

Переходим к собственно подмене MAC-адреса. В качестве нового адреса подойдет любое шестнадцатеричное число, однако имейте в виду, что некоторые сети могут отказаться присваивать IP-адрес клиенту, чей MAC-адрес не принадлежат ни одному из производителей оборудования. Поэтому, если вы не контролируете сеть(и), к которой подключены, используйте префикс MAC (первые три байта) реального производителя, а для оставшихся трех укажите произвольные значения. Подробнее см. Википедия:Уникальный идентификатор организации.

Чтобы сменить MAC, выполните:

# ip link set dev интерфейс address XX:XX:XX:XX:XX:XX

где вместо XX:XX:XX:XX:XX:XX необходимо указать любое 6-байтное значение.

Последний шаг — включить интерфейс обратно:

# ip link set dev интерфейс up

Чтобы убедиться, что подмена MAC-адреса действительно произошла, снова выполните команду ip link show интерфейс и проверьте значение "link/ether". Если подмена сработала, "link/ether" будет иметь то значение, которое вы ему присвоили.

macchanger

В этом способе используется macchanger (GNU MAC Changer). Он предоставляет набор функций для смены адреса на, например, соответствующий конкретному производителю или полностью случайный.

Установите пакет macchanger.

Подмена осуществляется для конкретного интерфейса: в каждой из следующих команд заменяйте интерфейс на имя вашего сетевого интерфейса.

Вы можете сгенерировать полностью случайный адрес:

# macchanger -r интерфейс

Чтобы изменить только байты, которые являются уникальными для конкретного устройства (благодаря чему при проверке MAC-адрес будет по-прежнему считаться принадлежащим тому же производителю), выполните:

# macchanger -e интерфейс

Для задания конкретного MAC-адреса выполните:

# macchanger --mac=XX:XX:XX:XX:XX:XX интерфейс

где XX:XX:XX:XX:XX:XX — MAC, который вы хотите присвоить.

Наконец, для восстановления исходного значения MAC-адреса:

# macchanger -p интерфейс
Примечание: В процессе смены МАС-адреса вы не сможете использовать устройство вне зависимости от способа подключения и статуса (включён/выключен) интерфейса.

Автоматически

systemd-networkd

systemd-networkd поддерживает подмену MAC-адреса при помощи файлов link (подробнее см. systemd.link(5)).

Для подмены статическим адресом:

/etc/systemd/network/00-default.link
[Match]
MACAddress=оригинальный MAC

[Link]
MACAddress=новый MAC
NamePolicy=kernel database onboard slot path

Для случайной генерации MAC-адреса при каждой загрузке, установите MACAddressPolicy=random вместо MACAddress=новый MAC.

systemd-udevd

udev позволяет подменять MAC-адреса с помощью правил. Атрибут address позволяет udev найти нужное устройство по MAС-адресу производителя, после чего выполняется команда ip для его замены:

/etc/udev/rules.d/81-mac-spoof.rules
ACTION=="add", SUBSYSTEM=="net", ATTR{address}=="XX:XX:XX:XX:XX:XX", RUN+="/usr/bin/ip link set dev %k address YY:YY:YY:YY:YY:YY"

где XX:XX:XX:XX:XX:XX — оригинальный MAC-адрес, а YY:YY:YY:YY:YY:YY — новый. Для адреса необходимо использовать буквы в нижнем регистре.

Юнит systemd

Создание юнита

Ниже приведены примеры юнитов systemd для изменения MAC-адреса во время загрузки системы: первый устанавливает MAC утилитой ip, а второй использует macchanger для присвоения случайного адреса. Цель network-pre.target используется для задания очерёдности действий: MAC-адрес должен изменяться до запуска сетевых менеджеров вроде netctl, NetworkManager, systemd-networkd или dhcpcd.

iproute2

Юнит systemd, устанавливающий указанный MAC-адрес:

/etc/systemd/system/macspoof@.service
[Unit]
Description=MAC Address Change %I
Wants=network-pre.target
Before=network-pre.target
BindsTo=sys-subsystem-net-devices-%i.device
After=sys-subsystem-net-devices-%i.device

[Service]
Type=oneshot
ExecStart=/usr/bin/ip link set dev %i address 36:aa:88:c8:75:3a
ExecStart=/usr/bin/ip link set dev %i up

[Install]
WantedBy=multi-user.target
macchanger

Юнит systemd, устанавливающий случайный адрес с сохранением префикса производителя. Удостоверьтесь, пакет macchanger установлен:

/etc/systemd/system/macspoof@.service
[Unit]
Description=macchanger on %I
Wants=network-pre.target
Before=network-pre.target
BindsTo=sys-subsystem-net-devices-%i.device
After=sys-subsystem-net-devices-%i.device

[Service]
ExecStart=/usr/bin/macchanger -e %I
Type=oneshot

[Install]
WantedBy=multi-user.target

Если вы хотите, чтобы адрес изменялся целиком, включая префикс производителя (первые три байта), используйте опцию -r вместо -e (см. #macchanger).

Включение службы

Добавьте имя интерфейса в название службы (например, eth0; в итоге служба будет назваться как-то вроде macspoof@eth0.service) и включите её.

Перезагрузитесь либо перезапустите необходимые службы в правильном порядке. Если вы являетесь администратором сети, в которой находится машина с изменяемым MAC-адресом, то изучите таблицу статических/динамических адресов на маршрутизаторе на предмет того, был ли MAC дествительно изменён.

netctl

Вы можете использовать хуки netctl для выполнения команд при каждом (пере)запуске профиля netctl на определённом сетевом интерфейсе. Замените интерфейс на необходимый:

/etc/netctl/interfaces/интерфейс
#!/usr/bin/env sh
/usr/bin/macchanger -r интерфейс

Сделайте скрипт исполняемым:

chmod +x /etc/netctl/interfaces/интерфейс

Источник: akendo.eu[устаревшая ссылка 2023-05-06 ⓘ]

NetworkManager

См. NetworkManager#Configuring MAC address randomization.

wpa_supplicant

wpa_supplicant может использовать случайный MAC-адрес для каждого ESS-соединения [1].

Добавьте следующие строки в файл настроек:

/etc/wpa_supplicant/wpa_supplicant-wlan0.conf
mac_addr=1
preassoc_mac_addr=1
gas_rand_mac_addr=1

iwd

Со следующими настройками iwd будет генерировать случайный MAC-адрес при каждом запуске (подробнее см. iwd.config(5)):

/etc/iwd/main.conf
[General]
AddressRandomization=once
AddressRandomizationRange=nic

Параметр AddressRandomizationRange определяет, какая часть адреса будет сгенерирована. При значении nic изменяться будут последние три октета, относящиеся непосредственно к сетевому интерфейсу; первые три октета останутся прежними. При значении full сгенерирован будет весь адрес целиком.

Решение проблем

Не удается подключиться к сети DHCPv4

Если вы используете dhcpcd (в NetworkManager используется по умолчанию) и не можете подключиться к сети DHCPv4, необходимо изменить настройки dhcpcd, чтобы арендовать адрес.

Смотрите также