Как поменять MAC-адрес в Linux, как включить и отключить автоматическую смену (спуфинг) MAC в Linux

Про то, что такое MAC-адрес и как его посмотреть уже говорилось в статье «Как узнать MAC-адрес и Как по MAC-адресу узнать производителя».

В этой статье мы рассмотрим, как поменять (подменить, спуфить) MAC-адрес на своём компьютере с Linux, а также как запретить автоматическую подмену MAC-адреса.

Зачем менять MAC-адрес?

MAC-адрес является (должен быть) уникальным для каждого сетевого интерфейса. Кстати, если у устройства несколько сетевых интерфейсов, то у каждого из них есть свой собственный MAC-адрес. Например, у ноутбуков минимум два сетевых интерфейса: проводной и Wi-Fi – у каждого из них по MAC-адресу. Обычное у настольных компьютеров аналогичная ситуация. Т.е. когда мы говорим о «смене MAC-адреса», то нужно понимать, что этих адресов несколько. Кстати, у роутера или у свитча у каждого порта свой уникальный MAC-адрес, если устройство поддерживает беспроводные сети, то у каждого беспроводного интерфейса (2.4 ГГц и 5 ГГц) также свой MAC-адрес.

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

Для хакера понятно желание скрыть свой MAC-адрес – чтобы не допустить возможность доказать его идентичность с лицом, выполнившим атаку, но зачем обычным пользователям скрывать (спуфить) свой истинный MAC? Лично для меня ответ на этот вопрос не очевиден. Но проблема, судя по всему, важная, поскольку в новых прошивках Android и iOS MAC-адрес постоянно спуфится, т.е. подменяется на поддельный, причём для одного и того же устройства постоянно генерируются новые MAC-адреса.

Т.е. если коротко, подмена MAC-адреса нужна чтобы не было возможности отследить и идентифицировать устройство по MAC-адресу. Это вполне реальная проблема, например, с помощью iSniff-GPS можно отследить предыдущие географические расположения устройств.

Но имеется более важная причина (чем паранойя) узнать о MAC-адресах и о способах из подмены, либо запрета изменения в своей системе. На основе MAC-адресов может выполнятся идентификация пользователя при подключении через Перехватывающий Портал.

Пара слов о Перехватывающем Портале (англ. Captive Portal). Это способ принудить пользователя соблюсти определённые условия для предоставления доступа в Интернет. С примерами Перехватывающих Порталов вы чаще всего можете столкнуться в публичных местах, которые предоставляют услуги Интернет доступа через Wi-Fi неопределённому кругу лиц, но которые хотят идентифицировать пользователя и/или разрешить доступ только лицам, имеющим учётные данные. Например, в аэропорту вам может понадобиться подтвердить свой телефонный номер через СМС для доступа к бесплатной сети Wi-Fi. В гостинице вам предоставят логин и пароль для выхода в Интернет через Wi-Fi – это гарантирует, что услугами Wi-Fi могут воспользоваться только клиенты гостиницы. Сюда же относятся случаи предоставления доступа в глобальную сеть на коммерческой основе.

Из-за особенностей работы Перехватывающего Портала, идентификация пользователей выполняется на основе MAC-адресов. А начиная с версии NetworkManager 1.4.0 (популярная программа для управления сетевыми подключениями в Linux) теперь присутствует автоматический спуфинг MAC-адресов. И в случае неправильной настройки, вы можете столкнуться с проблемой Интернет-доступа, выполняемым через Перехватывающий Портал. Также возможны проблемы при настроенной фильтрации по MAC в роутере.

Ну и для хакеров, конечно, есть свои резоны поменять MAC-адрес: например, чтобы притворится другим пользователем, и воспользоваться его открытым доступом в волшебный мир Интернета, либо для повышения анонимности.

Кто может видеть мой MAC-адрес?

MAC-адрес используется для передачи данных в локальной сети. Т.е. он не передаётся при подключении к веб-сайтам и при выходе в глобальную сеть. Хотя имеются исключения: некоторые уязвимости позволяют лицу, не находящемуся в вашей локальной сети, узнать ваш MAC-адрес (это умеют некоторые скрипты Nmap).

Т.е. если вы подключаетесь к роутеру по локальной сети, то роутер знает ваш MAC-адрес (и может вести журнал подключений, в том числе сохраняя MAC-адрес), но если вы открываете сайт в Интернете, то владелец сайта не может узнать ваш MAC-адрес.

Все устройства, находящиеся в локальной сети, могут видеть MAC-адреса друг друга (имеется много сканеров, которые могут получить эти данные). Пример сканирования локальной сети, выполненное с помощью arp-scan:

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

Спуфинг (подмена) MAC-адреса в NetworkManager

NetworkManager может переназначать MAC, установленный другими программами

Начиная с версии NetworkManager 1.4.0 эта программа поддерживает спуфинг MAC, причём имеет много различных опций.

Чтобы мы могли в них разобраться, нам нужно понять некоторые концепции.

Во-первых, сетевые адаптеры бывают:

  • проводные (ethernet);
  • беспроводные (wifi).

Для каждой группы правила MAC настраиваются отдельно.

Во-вторых, беспроводной адаптер может быть в двух состояниях:

  • сканирование (поиск, не подключён к сети) – устанавливается с помощью свойства wifi.scan-rand-mac-address, по умолчанию установлен на yes, что означает, что во время сканирования устанавливает произвольный MAC-адрес. Другим допустимым значением является no;
  • подключён к сети – устанавливается с помощью свойства wifi.cloned-mac-address, значением по умолчанию является preserve.

Для проводного интерфейса (устанавливается свойством ethernet.cloned-mac-address) и беспроводного интерфейса в состоянии подключения (устанавливается свойством wifi.cloned-mac-address) доступны следующие значения (режимы):

  • явно указанный MAC-адрес (т.е. можно записать желаемое значение, которое будет присвоено сетевому интерфейсу)
  • permanent: использовать вшитый в устройство MAC-адрес
  • preserve: не менять MAC-адрес устройства после активации (например, если MAC был изменён другой программой, то будет использоваться текущий адрес)
  • random: генерировать случайную величину для каждого подключения
  • stable: похоже на random – т.е. для каждого подключения генерировать случайную величину, НО при подключениях к одной и той же сети будет сгенерирована одинаковая величина
  • NULL/не установлено: это значение по умолчанию, которое позволяет откатиться к глобальным настройкам по умолчанию. Если глобальные настройки не установлены, то NetworkManager откатывается до значения preserve.

Если вы пытаетесь изменить MAC другими способами и у вас это не получается, вполне возможно, что виноват NetworkManager, который меняет MAC по своим собственным правилам. Поскольку в большинстве дистрибутивов Linux с графическим интерфейсом NetworkManager установлен и запущен по умолчанию, то для решения вашей проблемы необходимо в первую очередь понять, как работает и по каким правилам действует NetworkManager.

Файлы настройки NetworkManager

Настройку NetworkManager, в том числе настройки, связанные с MAC, можно делать в файле /etc/NetworkManager/NetworkManager.conf или добавив дополнительный файл с расширением .conf в директорию /etc/NetworkManager/conf.d (файл .conf может иметь любое имя). Крайне рекомендуется второй вариант, поскольку при обновлении NetworkManager обычно заменяет главный .conf файл и если вы внесли изменения в /etc/NetworkManager/NetworkManager.conf, то сделанные вами настройки будут перезаписаны (утеряны).

Как в Kali Linux отключить изменение MAC-адреса

Если к Kali Linux подключить беспроводную карту и проверить свойства беспроводного интерфейса командой:

iw dev

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

Мы уже знаем, что NetworkManager по умолчанию подменяет аппаратный адрес во время сканирования, но использует установленный MAC (если вы его не меняли, то значить используется истинный адрес, прошитый в устройстве) при подключении. Подключаемся к любой сети и видим свой истинный адрес. Отключаемся от сети и вновь видим, что адрес подменён на случайный:

Это не какая-то особая функция Kali Linux, это поведение NetworkManager по умолчанию со стандартными настройками.

Если вы хотите поменять данное поведение, то есть два способа:

  • настроить NetworkManager
  • отключить NetworkManager и для подключения использовать другие способы

Если остановить NetworkManager:

sudo systemctl stop NetworkManager

То MAC перестаёт подменятся:

Если вы хотите сделать так, чтобы MAC не подменялся при работающем NetworkManager, то создайте файл /etc/NetworkManager/conf.d/mac.conf

sudo gedit /etc/NetworkManager/conf.d/mac.conf

И добавьте туда строки:

[device]
wifi.scan-rand-mac-address=no

Перезапустите службу NetworkManager:

sudo systemctl restart NetworkManager

Теперь даже на не подключённом адаптере MAC не меняется:

Как в Kali Linux сделать так, чтобы MAC подменялся при каждом подключении

Если вы хотите, чтобы при каждом подключении подменялся MAC-адрес, но при этом при соединении с одной и той же сетью использовался одинаковый MAC, то в файл /etc/NetworkManager/conf.d/mac.conf:

sudo gedit /etc/NetworkManager/conf.d/mac.conf

Добавьте строки:

[connection]
ethernet.cloned-mac-address=stable
wifi.cloned-mac-address=stable

Строки с ethernet.cloned-mac-address и wifi.cloned-mac-address можно добавлять по отдельности или вместе.

Проверим текущие значения:

ip a

Перезапустим службу:

sudo systemctl restart NetworkManager

Выполним подключения к проводной и беспроводной сетям. Теперь вновь проверим значения MAC:

Как можно увидеть, MAC и для проводного, и для беспроводного интерфейса подменены.

Как уже было сказано, для одних и тех же сетей будут генерироваться одинаковые адреса, если вы хотите каждый раз разные MAC даже для одних и тех же сетей, то строки должны выглядеть так:

[connection]
ethernet.cloned-mac-address=random
wifi.cloned-mac-address=random

Как в Ubuntu и Linux Mint настроить автоматический спуфинг MAC

В Ubuntu и Linux Mint используются версии NetworkManager, которые поддерживают автоматический спуфинг MAC-адресов. Тем не менее, если подключить Wi-Fi карту к Ubuntu или Linux Mint, то вы увидите настоящий MAC. Это происходит из-за того, что в файле /etc/NetworkManager/NetworkManager.conf указано не выполнять спуфинг:

Чтобы это изменить, отройте файл:

sudo gedit /etc/NetworkManager/NetworkManager.conf

И удалите строки:

[device]
wifi.scan-rand-mac-address=no

либо закомментируйте их, чтобы получилось так:

#[device]
#wifi.scan-rand-mac-address=no

либо поменяйте no на yes:

[device]
wifi.scan-rand-mac-address=no

И перезапустите NetworkManager:

sudo systemctl restart NetworkManager

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

[connection]
ethernet.cloned-mac-address=stable
wifi.cloned-mac-address=stable

Как установить определённый MAC

Откройте файл /etc/NetworkManager/conf.d/mac.conf

sudo gedit /etc/NetworkManager/conf.d/mac.conf

Если вы хотите поменять MAC для проводного соединения, то добавьте строки:

[connection]
ethernet.cloned-mac-address=Новый_MAC

Если вы хотите поменять MAC для беспроводного соединения, то добавьте строки:

[connection]
wifi.cloned-mac-address=Новый_MAC

Внимание: замените Новый_MAC на настоящий желаемый MAC.

Если вы хотите поменять MAC и для проводного и для беспроводного соединения, то можно использовать сразу обе записи:

[connection]
ethernet.cloned-mac-address=Новый_MAC
wifi.cloned-mac-address=Новый_MAC2

Обратите внимание, что особенностью данного метода является то, что MAC меняется только после подключения к сети. До подключения к сетям у интерфейсов будут их исходные MAC-адреса. Кроме, возможно, Wi-Fi интерфейса, поскольку, как это уже описано ранее, для него по умолчанию установлен спуфинг MAC. Для отмены спуфинга, как сказано ранее, добавьте в конфигурационный файл строки:

[device]
wifi.scan-rand-mac-address=no

Чтобы изменения вступили в силу перезапустим службу:

sudo systemctl restart NetworkManager

Способы поменять MAC-адрес

Не только NetworkManager умеет менять MAC-адрес – на самом деле, существует довольно много способов сделать это, в том числе с помощью специализированных программ и системных служб. Далее будут рассмотрены некоторые из этих методов. Чтобы мы могли отслеживать сделанные результаты, NetworkManager настроен следующим образом:

[device]
wifi.scan-rand-mac-address=no

Этими строками мы говорим NetworkManager, что не нужно спуфить MAC во время сканирования беспроводных сетей.

Поскольку в настройках NetworkManager отсутствуют параметры ethernet.cloned-mac-address и wifi.cloned-mac-address, то будет использоваться значение по умолчанию preserve, которое устанавливает использование текущего MAC адреса для соединений, даже если он был изменён другими программами.

Последующие примеры я буду выполнять в Kali Linux. Менять настройки я буду для Wi-Fi адаптера.

Особенность последующих способов в том, что изменения теряются после перезагрузки системы, либо после отключения-подключения устройства к компьютеру.

Изменение MAC с помощью iproute2

Мы будем использовать программу ip, которая включена в пакет iproute2.

Начнём с проверки текущего MAC адреса командой:

ip link show имя_интерфейса

Где имя_интерфейса – это имя определённого сетевого интерфейса, который вы хотите посмотреть. Если вы не знаете имени, либо хотите посмотреть все интерфейсы, то команду можно запустить так:

ip link show

В данный момент нас интересует часть, которая следует после «link/ether» и представляет 6-байтовый номер. Он будет выглядеть примерно так:

link/ether 00:c0:ca:96:cf:cb

Первый шаг для спуфинга MAC адреса – это перевести интерфейс в состояние down. Это выполняется командой:

sudo ip link set dev имя_интерфейса down

Где имя_интерфейса замените на настоящее имя. В моём случае это wlan0, тогда реальная команда выглядит так:

sudo ip link set dev wlan0 down

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

Для изменения MAC нам нужно запустить команду:

sudo ip link set dev имя_интерфейса address XX:XX:XX:XX:XX:XX

Где XX:XX:XX:XX:XX:XX – это желаемый новый MAC.

Например, я хочу установить для своего адаптера аппаратный адрес EC:9B:F3:68:68:28, тогда команда выглядит так:

sudo ip link set dev wlan0 address EC:9B:F3:68:68:28

Последним шагом мы возвращаем интерфейс в состояние up. Это можно выполнить командой вида:

sudo ip link set dev имя_интерфейса up

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

sudo ip link set dev wlan0 up

Если вы хотите проверить, действительно ли MAC изменён, просто запустить снова команду:

ip link show имя_интерфейса

Значение после «link/ether» должно быть тем, которое вы установили.

Изменение MAC с помощью macchanger

Другой метод использует macchanger (также известный как the GNU MAC Changer). Эта программа предлагает различные функции, такие как изменение адреса таким образом, чтобы он соответствовал определённому производителю, или полная его рандомизация.

Установите macchanger – он обычно присутствует в официальных репозиториях, а в Kali Linux установлен по умолчанию.

В момент смены MAC устройство не должно использоваться (быть подключённым каким-либо образом, или иметь статус up). Чтобы перевести интерфейс в состояние down:

sudo ip link set dev имя_интерфейса down

Для спуфинга нужно указать имя интерфейса, в каждой следующей команде замените wlan0 на имя того интерфейса, MAC которого вы хотите поменять.

Чтобы узнать значения MAC выполните команду с опцией -s:

sudo macchanger -s wlan0

Будет выведено что-то вроде:

Current MAC:   00:c0:ca:96:cf:cb (ALFA, INC.)
Permanent MAC: 00:c0:ca:96:cf:cb (ALFA, INC.)

Строка «Current MAC» означает адрес в данный момент, а «Permanent MAC» означает постоянный (настоящий) адрес.

Для спуфинга MAC-адреса на совершенно произвольный адрес (опция -r):

sudo macchanger -r wlan0

Будет выведено примерно следующее:

Current MAC:   00:c0:ca:96:cf:cb (ALFA, INC.)
Permanent MAC: 00:c0:ca:96:cf:cb (ALFA, INC.)
New MAC:       be:f7:5a:e7:12:c2 (unknown)

Первые две строки уже объяснены, строка «New MAC» означает новый адрес.

Для рандомизации только байтов, определяющих уникальность устройства, текущего MAC-адреса (т.е. если проверить MAC-адрес, то он будет регистрироваться как от того же вендора) запустите команду (опция -e):

sudo macchanger -e wlan0

Для установки MAC-адреса на определённое значение выполните (опция -m):

sudo macchanger -m XX:XX:XX:XX:XX:XX wlan0

Здесь XX:XX:XX:XX:XX:XX - это MAC, на который вы хотите сменить.

Наконец для возврата MAC-адреса к исходному, постоянной прописанной в железе величине (опция -p):

sudo macchanger -p wlan0

Заключение

Ещё раз заострю внимание на том, что поскольку NetworkManager по умолчанию присутствует и работает в большинстве дистрибутивов с графическим интерфейсом, то если у вас не получается сменить адрес, либо наоборот выполняется неожиданная смена адреса, то обратитесь в первую очередь к настройкам NetworkManager, поскольку на большинстве дистрибутивов эта служба запущена по умолчанию.

В настоящее время NetworkManager предоставляет довольно много возможностей спуфинга MAC, в том числе смены на случайный адрес, либо на определённый. Особенностью NetworkManager является разделение на режимы «сканирование» и «подключён», т.е. вы можете не видеть, что сделанные настройки уже вступили в силу, пока не подключитесь к какой-либо сети. NetworkManager поддерживает генерацию MAC-адресов по маскам (в этой статье не рассмотрено).

Если после смены MAC у вас появились проблемы с подключением (вы не можете подключиться к сетям – проводной или беспроводной), то это означает, что в сети присутствует запрет для подключения с MAC от неизвестного вендора (производителя). В этом случае нужно использовать первые три октета (байта) любого реального вендора, оставшиеся три октета могут быть произвольными.

Для Windows смотрите статью «Зачем и как поменять MAC-адрес в Windows. Настройка автоматической рандомизации в Windows».

Для пользователей Arch Linux дополнительная информация в статье «Автоматические методы смены MAC-адреса в Arch Linux / BlackArch».

Рекомендуемые статьи:

Добавить комментарий

Ваш e-mail не будет опубликован.