
Wi-Fi Framework для создания прототипов, автоматизированных экспериментов, тестовых наборов, фаззеров и многого другого.
Мы представляем фреймворк для более простого выполнения Wi-Fi экспериментов. Его можно использовать для создания фаззеров, реализации новых атак, создания доказательств концепции для тестирования уязвимостей, автоматизации экспериментов, реализации тестовых наборов и так далее.
Основное преимущество фреймворка в том, что он позволяет повторно использовать функциональность Wi-Fi в Linux для более простой реализации атак и/или тестов. Например, фреймворк может подключаться к (защищенным) Wi-Fi сетям за вас и может транслировать маяки за вас при тестировании клиентов. В целом, любую функциональность Wi-Fi в Linux можно повторно использовать для более быстрой реализации атак/тестов. Фреймворк достигает этого путем выполнения тестовых случаев поверх пользовательского пространства демона hostap.
Обзор компонентов Wi-Fi демона и фреймворка.
Если вы новичок в выполнении Wi-Fi экспериментов на Linux, настоятельно рекомендуется сначала прочитать Учебник по libwifi в Linux. Когда вы реализуете базовые Wi-Fi атаки без необходимости повторного использования функциональности Linux, фреймворк предоставляет ограниченные преимущества, и вы можете вместо этого рассмотреть прямую реализацию атак в Scapy и по желанию использовать библиотеку libwifi.
Чтобы использовать фреймворк:
Установите его, выполнив ./setup.sh. См. setup, чтобы узнать, что делает этот скрипт.
Прочитайте учебник по использованию.
Допустим, вы хотите проверить, шифрует ли клиент когда-либо кадры, используя нулевой ключ. Это может произойти во время атаки переустановки ключа. Используя фреймворк, вам не нужно перереализовывать всю функциональность точки доступа, нужно только написать следующий тестовый случай:
class ExampleKrackZerokey(Test):
name = "example-krack-zero-key"
kind = Test.Authenticator
def __init__(self):
super().__init__([
# Replay 4-Way Handshake Message 3/4.
Action( trigger=Trigger.Connected, action=Action.Function ),
# Receive all frames and search for one encrypted with an all-zero key.
Action( trigger=Trigger.NoTrigger, action=Action.Receive ),
# When we receive such a frame, we can terminate the test.
Action( trigger=Trigger.Received, action=Action.Terminate )
])
def resend(self, station):
# Resend 4-Way Handshake Message 3/4.
station.wpaspy_command("RESEND_M3 " + station.clientmac )
def receive(self, station, frame):
if frame[Dot11].addr2 != station.clientmac or not frame.haslayer(Dot11CCMP):
return False
# Check if CCMP-encrypted frame can be decrypted using an all-zero key
plaintext = decrypt_ccmp(frame.getlayer(Dot11), tk=b"\x00"*16)
if plaintext is None: return False
# We received a valid plaintext frame!
log(STATUS,'Client encrypted a frame with an all-zero key!', color="green")
return True
Приведенный выше тестовый случай создаст точку доступа, к которой клиенты могут подключаться. После подключения клиента ему будет отправлено новое 3-е сообщение четырехстороннего рукопожатия. Уязвимый клиент затем начнет использовать нулевой ключ шифрования, что тестовый случай автоматически обнаружит.
Вы можете запустить приведенный выше тестовый случай, используя симулированные Wi-Fi радиостанции следующим образом:
./setup/setup-hwsim.sh 4
source setup/venv/bin/activate
./run.py wlan1 example-krack-zero-key
Вы можете подключиться к созданной точке доступа для ее тестирования (сеть testnetwork с паролем passphrase):
./hostap.py wlan2
Изменив конфигурацию сети, эту ТД можно легко настроить на использование WPA2 или WPA3 и/или можно настроить на использование корпоративной аутентификации, без внесения каких-либо изменений в написанный нами тестовый случай! Дополнительные преимущества использования фреймворка в этом примере:
Смотрите подробное описание всех наших примеров для дополнительных примеров.
Эта работа была опубликована на конференции ACM по безопасности и конфиденциальности в беспроводных и мобильных сетях (WiSec '21):
Работы, которые использовали этот фреймворк или аналогичный: