MAC address spoofing (Русский)
В статье описаны способы подмены адреса 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
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, чтобы арендовать адрес.
Смотрите также
- Википедия:MAC-спуфинг
- Macchanger на GitHub
- Статья на debianadmin.com с большим количеством опций для macchanger