Случайные аппаратные адреса в Windows
- Что такое случайные аппаратные адреса?
- Нужно ли включать или отключать генерацию случайных MAC-адресов
- Как включить случайные аппаратные адреса через графический интерфейс
- Как запретить изменение случайных аппаратных адресов через реестр Windows
- Как отключить опцию случайных аппаратных адресов через групповые политики
- Как обратно включить случайные аппаратные адреса?
Добрый день! Уважаемые читатели и гости блога. В современном мире, где портативность и мобильность — это стиль жизни, очень остро встает вопрос информационной безопасности. WiFI дает вам не только удобный беспроводной доступ в сеть, но и становится точкой входа и компрометации вашего устройства. Компания Microsoft старается идти в ногу со временем и принимать на себя актуальные вызовы. В результате в Windows появился функционал случайных аппаратных адресов, которые можно использовать при подключении через WiFi, позволяя дополнительно защитить вашу систему, но в корпоративном сегменте, это может вызывать дополнительные проблемы. Сегодня я вам покажу, как активировать или отключить данную функциональность.
Что такое случайные аппаратные адреса?
Случайные аппаратные адреса (Random Hardware Addresses, RHA) - решают вопрос безопасности при подключении к WiFI сети, с помощью алгоритма генерирования временного MAC-адреса для WiFi адаптера. Это повышает конфиденциальность и существенно затрудняет отслеживание данного устройства, особенно в публичных сетях. Например, если вы живете в Москве, то катаясь на метро, всегда можно подключиться там к бесплатному WiFi. В рамках данной локальной сети, может быть что угодно, поэтому если есть возможность усилить безопасность, лучше это сделать. Ранее пользователей спасала функция смены MAC-адреса в ручном режиме (Она доступна и сейчас), но это неудобно, так как у вас например дома или в компании, для каких-то точек, доступ может фильтроваться по MAC-адресам, и если вы его поменяете, то доступ пропадет.
Читайте так же - Алгоритм генерации MAC адресов для виртуальных машин ESXI
Еще очень интересно, что вам доступны случайные MAC-адреса как для всех сетей WiFi. так и для отдельной
Нужно ли включать или отключать генерацию случайных MAC-адресов
Тут однозначного решения нет, все зависит от вашей ситуации и задач, и конечно окружения. Если техника не доменная. и вы часто сидите в общественных местах с использование WiFi, то включать я рекомендую, если техника корпоративная, то я советую это отключать системным администраторам
Как включить случайные аппаратные адреса через графический интерфейс
Я буду показывать все на своей рабочей Windows 11 со всеми обновлениями на июнь 2025 года. Для активации функции RHA вам необходимо открыть параметры системы, с помощью сочетания клавиш WIN + I. Далее перейти в раздел "Сеть и Интернет", найти там пункт "Случайные аппаратные адреса (Random Hardware Addresses)". и активируйте его. Я это сделаю, но вначале я посмотрю текущий MAC-адрес, чтобы видеть как работает технология.
Для просмотра текущего MAC-адреса на WiFi-адаптере я воспользуюсь PowerShell.
Выполните команду:
Get-NetAdapter
Или более избирательно - Get-NetAdapter | Where-Object {$_.MediaType -match 'Native 802.11'}| select Name, MacAddress,InstanceID
RHA я активировал, это делает на лету, теперь попробуем посмотреть ее в действии.
Подключаемся к WiFi сети. После успешного подключения, у меня появился новый MAC-адрес 62-28-77-12-AA-7E.
При повторном подключении к данной известной сети, MAC-адрес не поменяется. Но это можно изменить
В разделе WiFi перейдите в пункт "Управление известными сетями"
Выберите интересующую вас сеть, в моем примере это сеть Pyatilistnik. Провалитесь в ее свойства.
Найдите раздел "Случайные аппаратные адреса", у вас будет три опции:
- Вкл — Генерация MAC-адресов активна
- Выкл — Генерация случайных MAC-адресов выключена
- Изменять ежедневно — Если данного пункта нет. то либо ваш адаптер его не поддерживает. либо устаревшие драйвера.
Теперь вы должны уловить, что вы можете не включать RHA опцию верхнеуровнево для всех WiFi сетей, а можете включить ее для известных сетей. точечно.
После переподключения. я вижу, что у меня успешно поменялся MAC-адрес для WiFi-адаптера.
Как запретить изменение случайных аппаратных адресов через реестр Windows
Выше мы с вами научились получать InstanceID у WiFi адаптера. В моем примере это {A8CDAB34-8729-488E-8CE2-5F36392D82A9}.
В реестре Windows есть куст по пути:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002BE10318}
Там может быть много разделов, в одном из которых будет наш InstanceID полученный ранее. Чтобы долго не блуждать, а попасть сразу куда нам нужно, я советую вам взять мой небольшой скрипт и запустить его в ISE.
$regPath = "HKLM:\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002BE10318}"
$searchValue = "{A8CDAB34-8729-488E-8CE2-5F36392D82A9}"
$subKeys = Get-ChildItem -Path $regPath -ErrorAction SilentlyContinue
foreach ($key in $subKeys) {
$properties = Get-ItemProperty -Path $key.PSPathforeach ($prop in $properties.PSObject.Properties) {
if ($prop.Name -notlike "PS*") {
if ($prop.Value -like "*$searchValue*") {
Write-Host "Найдено в разделе: $($key.PSPath)"
Write-Host "Параметр: $($prop.Name)"
Write-Host "Значение: $($prop.Value)`n"
}
}
}
}Write-Host "Поиск завершен."
В результате вы получите полный путь, в моем примере это:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002BE10318}\0005
Проверяем на всякий случай, что там есть ключ реестра NetCfgInstanceId с нужным нам InstanceID (У меня это {A8CDAB34-8729-488E-8CE2-5F36392D82A9})
В данном разделе реестра вам нужно создать ключ с типом REG_SZ (Строковый) и именем NetworkAddress. В качестве значения нужно указать реальный MAC-адрес вашего WiFI-адаптера. В моем случае это 94-E2-3C-8E-89-EC, единственное вам нужно убрать из него тире, должно получиться вот в таком формате 94E23C8E89EC.
Теперь, чтобы у вас применились настройки, вам необходимо перезагрузить систему. После перезагрузки опция "Случайные аппаратные адреса" стала неактивной.
Как отключить опцию случайных аппаратных адресов через групповые политики
К сожалению, Microsoft не позаботилась, о том, чтобы данная настройка была бы в рамках ADMX шаблонов. Поэтому я буду выкручиваться с помощью PowerShell и моего скрипта. Для начала давайте я приведу скрипт и что он делает:
Находит первый Wi-Fi адаптер (с MediaType 'Native 802.11')
Извлекает его InstanceID и MAC-адрес (удаляя дефисы)
Ищет в реестре раздел, где NetCfgInstanceId соответствует найденному InstanceID
Создает или обновляет параметр NetworkAddress с очищенным MAC-адресом
Выводит информацию о выполненных действиях
Для начала я вам его советую проверить на ноутбуке, запустив там PowerShell ISE в режиме администратора.
# Шаг 1: Получаем информацию о Wi-Fi адаптере
$wifiAdapter = Get-NetAdapter | Where-Object {$_.MediaType -match 'Native 802.11'} | select Name, MacAddress, InstanceID -First 1if ($wifiAdapter -eq $null) {
Write-Host "Wi-Fi адаптер не найден!"
exit
}$instanceID = $wifiAdapter.InstanceID
$macAddress = $wifiAdapter.MacAddress -replace '-','' # Удаляем дефисы из MAC-адресаWrite-Host "Найден Wi-Fi адаптер:"
Write-Host "Имя: $($wifiAdapter.Name)"
Write-Host "MAC-адрес: $macAddress"
Write-Host "InstanceID: $instanceID`n"# Шаг 2: Ищем в реестре соответствующий InstanceID
$regPath = "HKLM:\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002BE10318}"
$foundKey = $null# Шаг 3: Получаем все подразделы
$subKeys = Get-ChildItem -Path $regPath -ErrorAction SilentlyContinueforeach ($key in $subKeys) {
$netCfgInstanceId = Get-ItemProperty -Path $key.PSPath -Name "NetCfgInstanceId" -ErrorAction SilentlyContinue
if ($netCfgInstanceId -ne $null -and $netCfgInstanceId.NetCfgInstanceId -eq $instanceID) {
$foundKey = $key
break
}
}if ($foundKey -eq $null) {
Write-Host "Не найдена ветка реестра для InstanceID: $instanceID"
exit
}Write-Host "Найдена ветка реестра: $($foundKey.PSPath)`n"
# Шаг 4-5: Создаем параметр NetworkAddress с MAC-адресом
$fullPath = $foundKey.PSPath
Write-Host "Создаю параметр NetworkAddress в ветке: $fullPath"
Write-Host "Значение: $macAddress"# Создаем или обновляем параметр
Set-ItemProperty -Path $fullPath -Name "NetworkAddress" -Value $macAddress -Type StringWrite-Host "`nГотово! Не забудьте перезагрузить компьютер или отключить/включить адаптер для применения изменений."
Далее вам нужно сохранить этот скрипт себе локально, потом создать групповую политику в которой он будет запускаться при запуске системы. Второй вариант это использование SCCM. Оба варианта я подробно описывал в отдельных статьях.
- Запуск скриптов PowerShell с помощью GPO
- Запуск скрипта PowerShell на удаленном компьютере через SCCM
Как обратно включить случайные аппаратные адреса?
Самый быстрый вариант повторной активации опции случайных аппаратных адресов. это удаление из нужной ветки реестра ключа NetworkAddress. Этот вариант подойдет как локально, так и для корпоративного сегмента, где нужно произвести массовый откат.
# Шаг 1: Получаем информацию о Wi-Fi адаптере
$wifiAdapter = Get-NetAdapter | Where-Object {$_.MediaType -match 'Native 802.11'} | Select-Object Name, MacAddress, InstanceID -First 1if ($null -eq $wifiAdapter) {
Write-Host "Wi-Fi адаптер не найден!" -ForegroundColor Red
exit
}$instanceID = $wifiAdapter.InstanceID
$macAddress = $wifiAdapter.MacAddressWrite-Host "Найден Wi-Fi адаптер:"
Write-Host "Имя: $($wifiAdapter.Name)"
Write-Host "MAC-адрес: $macAddress"
Write-Host "InstanceID: $instanceID`n"# Шаг 2: Ищем в реестре соответствующий InstanceID
$regBasePath = "HKLM:\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002BE10318}"
$foundKeyPath = $null# Получаем все подразделы
$subKeys = Get-ChildItem -Path $regBasePath -ErrorAction SilentlyContinue | Where-Object {
$_.Name -notmatch 'Properties' -and $_.PSChildName -ne 'Configuration'
}foreach ($key in $subKeys) {
$netCfgInstanceId = Get-ItemProperty -Path $key.PSPath -Name "NetCfgInstanceId" -ErrorAction SilentlyContinue
if ($netCfgInstanceId -ne $null -and $netCfgInstanceId.NetCfgInstanceId -eq $instanceID) {
$foundKeyPath = $key.PSPath
break
}
}if ($null -eq $foundKeyPath) {
Write-Host "Не найдена ветка реестра для InstanceID: $instanceID" -ForegroundColor Red
exit
}Write-Host "Найдена ветка реестра: $foundKeyPath`n"
# Шаг 3-4: Проверяем и удаляем ключ NetworkAddress
$property = Get-ItemProperty -Path $foundKeyPath -Name "NetworkAddress" -ErrorAction SilentlyContinueif ($null -ne $property) {
Write-Host "Найден ключ NetworkAddress, текущее значение: $($property.NetworkAddress)"
Write-Host "Удаляю ключ NetworkAddress..."# Удаляем параметр
Remove-ItemProperty -Path $foundKeyPath -Name "NetworkAddress" -ErrorAction StopWrite-Host "Ключ NetworkAddress успешно удален!" -ForegroundColor Green
Write-Host "Для применения изменений перезагрузить компьютер или переподключить адаптер."
} else {
Write-Host "Ключ NetworkAddress не найден в указанной ветке." -ForegroundColor Yellow
}