Настройка LEAP-аутентификации для авторизации WiFi-пользователей с использованием Radius-сервера (radius cisco auth wifi leap linux debian)

Исходная задача

В организации имеется некоторое количество ноутбуков и WiFi-ip-телефонов и пользователи
очень хотят получить доступ в Интернет по WiFi, а также звонить по этим телефонам.

Решение

Организовать централизованную авторизацию пользователей с использованием Radius — сервера
(FreeRadius), уровень аутентификации на точке доступа WPA2-Enterprise, для аутентификации
использовать EAP (протокол расширенной аутентификации), а конкретней метод LEAP, для
шифрования использовать AES (Advanced Encryption Standard) и CCMP (Counter with Cipher
Block Chaining Message Authentication Code Protocol).

На первый взгляд тема кажется банальной поднять сеть с WPA2-Enterprise аутенфикацией и
RADIUS-сервером для авторизации, вроде и статей куча и мнений экспертов хватает, но это
только на первый взгляд. При практической реализации на конкретном оборудовании и
операционной системе обнаруживается масса камней и преимущественно подводных, каждый
камушек описан отдельно в определенной статье, а вот нормального готового решения, что-то у
меня найти не получилось. Одни разрозненные куски, из которых целая картина не получается
никак. Статья призвана заполнить этот пробел. Для тех ожидает неожиданных мистических
откровений в области беспроводных технологий просьба дальше не читать — инсайтов не будет.
Я просто поделюсь собственным практическим опытом, который состоит из переработки этих
кусков в одно работающее целое.

Детализация решения.

Имеется следующее оборудование: точки доступа Cisco AIR-AP1242AG, Ip — телефоны Cisco 7920,
ноутбуки с WiFi контроллером — Intel Wireless WiFi Link 4965AGN.

Зачем стоит использовать RADIUS-сервер? Много WiFi-точек разбросано по зданию и намного
проще администрировать логины и пароли пользователей централизованно из одного места, чем
заводить пользователя на каждой беспроводной точке.

Почему шифрование AES-CCMP, существует же уйма методов шифрования беспроводных сетей WEP,
TKIP? AES-CCMP выбран как наиболее лучший обеспечивающий максимальные возможности
безопасности. Очень бы не хотелось, чтобы юные хакеры из соседнего дома подключились к
сети, использующей шифрование WEP заломали бы ее за 4 часа и выкачали половину трекера
torrents.ru за чужой счет. 🙂

Почему аутентификация LEAP EAP? Протокол EAP сам по себе является лишь каркасом для методов
аутентификации. Вся прелесть протокола в том, что его очень просто реализовать на
аутентификаторе (точке доступа), так как ей не требуется знать никаких специфичных
особенностей различных методов аутентификации. Аутентификатор служит лишь передаточным
звеном между клиентом и сервером аутентификации. Методов же аутентификации, которых
существует довольно много EAP-SIM, EAP-MD5, EAP-MSCHAP V2, EAP-TLS, EAP-SecureID и т. д.

EAP LEAP — пропреоретарный метод аутентификации от Cisco systems, он проигрывает по
безопасности EAP-TLS, но зато хорошо работает в ip — телефонах Cisco 7920. Но хоть этот
протокол проприеоретарный, он поддерживается FreeRADIUS.

Кстати, в округе ноутбук нашел 2 беспроводные сети: одну с Open Autentification (заходи кто
хочет и делай что хочет), а вторую с шифрованием WEP. (Тоже шифрование не фонтан.)

Структура существующей сети следующая

Немного теории

Нет ничего практичней хорошей теории. Рассмотрим аутентификацию EAP с ипользованием
RADIUS-сервера. Кусок теории взят отсюда http://www.ixbt.com/comm/prac-wpa-eap.shtml

Процесс аутентификации. Он состоит из следующих стадий:

1. Клиент может послать запрос на аутентификацию (EAP-start message) в сторону точки
доступа
2. Точка доступа (Аутентификатор) в ответ посылает клиенту запрос на идентификацию клиента
(EAP-request/identity message). Аутентификатор может послать EAP-request
самостоятельно, если увидит, что какой-либо из его портов перешел в активное состояние.
3. Клиент в ответ высылает EAP-response packet с нужными данными, который точка доступа
(аутентификатор) перенаправляет в сторону Radius-сервера (сервера аутентификации).
4. Сервер аутентификации посылает аутентификатору (точке доступа) challenge-пакет (запрос
информации о подлинности клиента). Аутентификатор пересылает его клиенту.
5. Далее происходит процесс взаимной идентификации сервера и клиента. Количество стадий
пересылки пакетов туда-сюда варьируется в зависимости от метода EAP, но для
беспроводных сетей приемлема лишь <<strong>> аутентификация с взаимной аутентификацией
клиента и сервера (EAP-TLS, EAP-TTLS, EAP-PEAP) и предварительным шифрованием канала
связи.
6. На следующий стадии, сервер аутентификации, получив от клиента необходимую информацию,
разрешает (accept) или запрещает (reject) тому доступ, с пересылкой данного сообщения
аутентификатору. Аутентификатор (точка доступа) открывает порт для Supplicant-а, если
со стороны RADIUS-сервера пришел положительный ответ (Accept).
7. Порт открывается, аутентификатор пересылает клиенту сообщение об успешном завершении
процесса, и клиент получает доступ в сеть.
8. После отключения клиента, порт на точке доступа опять переходит в состояние <<закрыт>>

Описанный процесс проиллюстрирован на рис. (там показан один из простейших методов EAP):

Как видно из рисунка, для коммуникации между клиентом (supplicant) и точкой доступа
(authenticator) используются пакеты EAPOL. Протокол RADIUS используется для обмена
информацией между аутентификатором (точкой доступа) и RADIUS-сервером (сервером
аутентификации). При транзитной пересылке информации между клиентом и сервером
аутентификации пакеты EAP переупаковываются из одного формата в другой на аутентификаторе.

Детальное рассмотрение алгоритмов шифрования, а также методы генерации сессионных ключей
шифрования, пожалуй, выходят за рамки данного материала>>

Установка freeradius сервера

Рассмотрим установку и настройка ty-rad-02 нашего Radius-сервера. Вот здесь начинается путь
полный опасностей и приключений. 🙂

В качестве операционной систему будем использовать Ubuntu 8.04.3. Почему же не 9.04, а 9.10
Во-первых, поддержка 8.04 LTS будет проходить до 2011 года, во-вторых, там freeradius
версии 1.1.7, а не 2.1.7. Новое иногда не значит лучшее — разобраться с генерацией ключей в
новой версии — лично я не смог. Каждый автор рекомендует что-то свое для генерации ключей,
но почему-то на практике все дороги ведут в тупик. Поэтому работаю с предыдущей версией
freeradius.

Установили Ubuntu 8.04.3 написали команду

# apt-get update && apt-get upgrade -y && apt-get dist-upgrade -y


обновили систему

Отредактировали /etc/network/interfaces, чтобы задать ip-адрес

auto eth0
iface eth0 inet static
address 192.168.131.232
netmask 255.255.252.0
gateway 192.168.131.254


Поправили DNS /etc/resolv.conf

nameserver 192.168.131.209


перестартуем сеть

# /etc/init.d/networking restart


Эти пакеты устанавливаем по вкусу

поддержка русского языка в консоле

# apt-get install console-cyrillic


устанавливаем более красивый аналог top и файловый менеджер mc

# apt-get install htop mc


Устанавливаем сам freeradius-сервер.

На первый взгляд кажется все банальным установка должна проводится apt-get install
freeradius, а нет — тупик. Программа ставится, настраивается, но работать так как надо не
хочет. Ну не поддерживает устанавливаемый пакет сильную криптографию и всё! А оставлять
свою сеть на растерзание юным недохакерам сильно не хочется.

Пойдем другим путем выкачаем с сайта http://freeradius.org исходники, отредактируем
файлы, чтобы поддерживала сильную криптографию и вновь тупик — не хватает определенных
библиотек — вообщем через полдня борьбы я понял — это не мой путь. 🙂

Пойдем третьим путем. У ubuntu есть репозитарий исходных текстов из которых получаются
deb-пакеты. Вот эти тексты и будем использовать.

установим компиляторы и библиотеки необходимые для компиляции пакета.

# apt-get install build-essential


установим программу для управления репозитарием исходнков

# apt-get install apt-src


обновим репозитарий

# apt-src update


перейдем в домашний каталог root

# cd /root


создадим папку куда будем закачивать исходники

# mkdir ~/build_freeradius
# cd ~/build_freeradius


скачаем все необходимые исходники и библиотеки, необходимые для компиляции.

# apt-src install freeradius


Правим файл ~/build_freeradius/freeradius-1.1.7/debian/rules
В нем приводим строку configure к следующему виду (включаем сильную криптографию)

./configure \
$(confflags) \
—prefix=/usr \
—exec-prefix=/usr \
—mandir=$(mandir) \
—sysconfdir=/etc \
—libdir=$(libdir) \
—datadir=/usr/share \
—localstatedir=/var \
—with-raddbdir=$(raddbdir) \
—with-logdir=/var/log/$(package) \
—enable-ltdl-install=no —enable-strict-dependencies \
—with-large-files —with-udpfromto —with-edir \
—enable-developer \
—config-cache \
—with-rlm_eap_tls \
—with-rlm_eap_ttls \
—with-rlm_eap_peap \
—without-rlm_otp \
—with-rlm_sql_postgresql_lib_dir=`pg_config —libdir` \
—with-rlm_sql_postgresql_include_dir=`pg_config —includedir` \
—with-openssl \
—with-system-libtool


Комментируем блок

# for pkg in $(shell grep ^Package debian/control | awk ‘{print $$2}’) ; do \
# if dh_shlibdeps -p $$pkg — -O | grep -q libssl; then \
# echo «$$pkg links to openssl» ;\
# exit 1 ;\
# fi ;\
# done


А в файле ~/build_freeradius/freeradius-1.1.7/debian/contol
добавим в раздел Build-Depends строку «, libssl-dev» он примет вид.

Build-Depends: debhelper (>= 5), libltdl3-dev, libpam0g-dev, libmysqlclient15-dev | libmysqlclient-dev,
libgdbm-dev, libldap2-dev, libsasl2-dev, libiodbc2-dev, libkrb5-dev, snmp, autotools-dev, dpatch
(>= 2), libperl-dev, libtool, dpkg-dev (>= 1.13.19), libpq-dev, libsnmp-dev, libssl-dev


доустановим необходимые библиотеки

# apt-get install libssl-dev libpq-dev
# cd ~/build_freeradius


произведем компиляцию

# apt-src build freeradius


Получили уйму deb-пакетов.

root@ty-rad-02:~/build_freeradius# ls -al
total 4504
drwxr-xr-x 3 root root 4096 2009-12-10 14:31 .
drwxr-xr-x 8 root root 4096 2009-12-10 14:46 ..
drwxr-xr-x 15 root root 4096 2009-12-10 14:31 freeradius-1.1.7
-rw-r—r— 1 root root 29420 2009-09-17 01:04 freeradius_1.1.7-1ubuntu0.2.diff.gz
-rw-r—r— 1 root root 1089 2009-09-17 01:04 freeradius_1.1.7-1ubuntu0.2.dsc
-rw-r—r— 1 root root 2092 2009-12-10 14:31 freeradius_1.1.7-1ubuntu0.2_i386.changes
-rw-r—r— 1 root root 801840 2009-12-10 14:31 freeradius_1.1.7-1ubuntu0.2_i386.deb
-rw-r—r— 1 root root 2673548 2007-10-24 02:06 freeradius_1.1.7.orig.tar.gz
-rw-r—r— 1 root root 741064 2009-12-10 14:31 freeradius-dbg_1.1.7-1ubuntu0.2_i386.deb
-rw-r—r— 1 root root 118186 2009-12-10 14:31 freeradius-dialupadmin_1.1.7-1ubuntu0.2_all.deb
-rw-r—r— 1 root root 34580 2009-12-10 14:31 freeradius-iodbc_1.1.7-1ubuntu0.2_i386.deb
-rw-r—r— 1 root root 35256 2009-12-10 14:31 freeradius-krb5_1.1.7-1ubuntu0.2_i386.deb
-rw-r—r— 1 root root 52176 2009-12-10 14:31 freeradius-ldap_1.1.7-1ubuntu0.2_i386.deb
-rw-r—r— 1 root root 34824 2009-12-10 14:31 freeradius-mysql_1.1.7-1ubuntu0.2_i386.deb
-rw-r—r— 1 root root 34958 2009-12-10 14:31 freeradius-postgresql_1.1.7-1ubuntu0.2_i386.deb


установим freeradius

# dkpg -i freeradius_1.1.7-1ubuntu0.2_i386.deb


установим openssl

# apt-get install openssl
# echo ‘freeradius hold’ | dpkg —set-selections
# echo ‘libfreeradius2 hold’ | dpkg —set-selections
# echo ‘freeradius-common hold’ | dpkg —set-selections


заморозим пакеты от возможных будущим обновлений.

Поздравляю freeradius-сервер установлен.

Настройка freeradius сервера

# cd /etc/freeradius


Пропишем нашу точку доступа в файле clients.conf

# sed ‘/ *#/d; /^ *$/d’ clients.conf

client 127.0.0.1 { #локальная авторизация
secret = testing123
shortname = localhost
}
client 192.168.131.191/22 { # это ее ip-адрес
secret = testing123 # секретный пароль
shortname = ap1242 # ее короткое имя
nastype = cisco # тип точки доступа Ciscorad_recv: Access-Reject
}


Пропишем имя клиента (его логин/пароль)

# sed ‘/ *#/d; /^ *$/d’ users

testuser Cleartext-Password := «secret149»
grol Cleartext-Password := «testing123»


Настроим параметры аутентификации

# sed ‘/ *#/d; /^ *$/d’ eap.conf

eap {
default_eap_type = leap #настроим аутентификацю по умолчанию leap
timer_expire = 60
ignore_unknown_eap_types = no
cisco_accounting_username_bug = no

md5 {
}

leap {
}

gtc {
auth_type = PAP
}

tls {
# параметры ниже оставим по умолчанию, но лучше перегенерировать корневой сертификат и
# сертификат сервера
private_key_password = whatever
private_key_file = ${raddbdir}/certs/cert-srv.pem
certificate_file = ${raddbdir}/certs/cert-srv.pem
CA_file = ${raddbdir}/certs/demoCA/cacert.pem
dh_file = ${raddbdir}/certs/dh
random_file = ${raddbdir}/certs/random
}

peap {
default_eap_type = mschapv2
}

mschapv2 {
}
}


Настроим основной файл радиус-сервера radiusd.conf

Исправим раздел modules

mschap {
use_mppe = yes
require_encryption = yes
require_strong = yes
}


А так же секции autorize и authenticate

authorize {
preprocess rad_recv: Access-Reject
chap
mschap
suffix
eap
files
pap
}

authenticate {
Auth-Type PAP {
pap
}
Auth-Type CHAP {
chap
}
Auth-Type MS-CHAP {
mschap
}
unix
eap
}


Сгенерируем ключ Дифти-Хелмана

# cd /etc/freeradius/certs
# openssl dhparam -out dh 1024


Перезапустим freeradius сервер

# /etc/init.d/freeradius restart


Проверим все ли корректно мы настроили авторизуемся локально

# radtest grol testing123 localhost 1812 testing123

Sending Access-Request of id 0 to 127.0.0.1 port 1812

User-Name = «grol»
User-Password = «testing123»
NAS-IP-Address = 255.255.255.255
NAS-Port = 1812
rad_recv: Access-Accept packet from host 127.0.0.1:1812, id=0, length=20


Если появилось «rad_recv: Access-Reject» значит что-то настроили не-то.

После этой проверки настройку freeradius-сервера можно считать завершенной.

Настройка точки доступа

Подключимся синим консольным кабелем к нашей точке доступа Cisco Aironet 1242AG. Для
подключения в Ubuntu я предпочитаю программу GtkTerm, а в Windows — putty. Параметры
подключения (9600 бод, четность — нет, стоп-бит — 1, бит данных — 8, контроль потока —
нет).

Для чистоты эксперимента — настройки точки доступа можно сбросить. Для этого надо
выключить питание, нажать и держать кнопку MODE, включить питание, подождать 1-2 секунды,
отпустить кнопку MODE. Пароль на режим enable по-умолчанию будет Cisco.

Перейдем в режим enable и conf t

Зададим имя

# hostname zkp-ap-01
# ip domain name zkprosned.ru


Настроим ssh, telnet — доступ

# crypto key generate rsa generals-keys modulus 1024
# ip ssh time-out 60
# ip ssh authentication-retries 3
# line vty 0 4
# transport input ssh telnet


Настроим пароль на enable

# enable secret testing123


Заведем пару пользователей — админа и обычного.

# username Admin privilege 15 secret testing123
# username grol secret testing123


Настроим ip-адрес точки доступа.

#interface BVI1
#ip address 192.168.131.191 255.255.252.0


Заходим последовательно в свойства радиоинтерфейса Dot11Radio0 и Dot11Radio1 — и пишем
команду no shutdown. По умолчанию оба радиоинтерфейса отключены.

#ip default-gateway 192.168.131.254 — Настраиваем шлюз по умолчанию.


Сохраним конфигурацию #wr

Заходим через веб-интерфейс (логин/пароль Admin/testing123)

Переходим на вкладку Security — SSID Manager

Заполняем поле SSID и ставим галочку «Network EAP»

и устанавливаем Set Single Guest Mode SSID на FGUZKP72,
т. е. разрешаем гостевой режим. «Все флаги — гости будут к нам» (с) Шекспир 😉

Вкладка «Encryption Manager» Шифрование ставим Cipher —
AES-CCMP

Во вкладке Server Manager — Server 192.168.131.232 Shared Secret testing123 Указываем
ip-адрес нашего freeradius-сервера и с каким паролем наша точка доступа будет
авторизоваться.

В EAP Authentication выбираем наш radius-сервер.

В принципе настройки все.

Сохраняемся и перезагружаем точку, я заметил, что изменение настроек шифрования вступает в
силу только после перезагрузки точки доступа.

Полный конфиг точки доступа приводится ниже.

!
version 12.3
no service pad
service timestamps debug datetime msec
service timestamps log datetime msec
service password-encryption
!
hostname zkp-ap-01
!
enable secret 5 $1$XXXXXXXXXXXXXXXXXXXXXX.
!
ip subnet-zero
ip domain name zkprosned.ru
ip name-server 192.168.131.209
!
!
ip ssh time-out 60
aaa new-model
!
!
aaa group server radius rad_eap
server 192.168.131.232 auth-port 1812 acct-port 1813
!
aaa group server radius rad_mac
!
aaa group server radius rad_acct
!
aaa group server radius rad_admin
!
aaa group server tacacs+ tac_admin
!
aaa group server radius rad_pmip
!
aaa group server radius dummy Снимок-Cisco IOS Series AP — Security — SSID Manager — Mozilla Firefox
!
aaa authentication login eap_methods group rad_eap
aaa authentication login mac_methods local
aaa authorization exec default local
aaa accounting network acct_methods start-stop group rad_acct
aaa session-id common
!
dot11 ssid FGUZKP72
authentication network-eap eap_methods
authentication key-management wpa
guest-mode
!
power inline negotiation prestandard source
!
!
username Admin privilege 15 secret 5 $1XXXXXXXXXXXXXXXXXX.
username grol secret 5 $XXXXXXXXXXXXXXXXXXXXX
!
bridge irb
!
!
interface Dot11Radio0
no ip address
no ip route-cache
!
encryption mode ciphers aes-ccm
!
ssid FGUZKP72
!
speed basic-1.0 basic-2.0 basic-5.5 6.0 9.0 basic-11.0 12.0 18.0 24.0 36.0 48.0 54.0
station-role root
bridge-group 1
bridge-group 1 subscriber-loop-control
bridge-group 1 block-unknown-source
no bridge-group 1 source-learning
no bridge-group 1 unicast-flooding
bridge-group 1 spanning-disabled
!
interface Dot11Radio1
no ip address
no ip route-cache
!
encryption mode ciphers aes-ccm
!
ssid FGUZKP72
!
dfs band 3 block
speed basic-6.0 9.0 basic-12.0 18.0 basic-24.0 36.0 48.0 54.0
channel dfs
station-role root
bridge-group 1
bridge-group 1 subscriber-loop-control
bridge-group 1 block-unknown-source
no bridge-group 1 source-learning
no bridge-group 1 unicast-flooding
bridge-group 1 spanning-disabled
!
interface FastEthernet0
no ip address
no ip route-cache
duplex auto
speed auto
bridge-group 1
no bridge-group 1 source-learning
bridge-group 1 spanning-disabled
!
interface BVI1
ip address 192.168.131.191 255.255.252.0
no ip route-cache
!
ip default-gateway 192.168.131.254
ip http server
no ip http secure-server
ip http help-path http://www.cisco.com/warp/public/779/smbiz/prodconfig/help/eag
ip radius source-interface BVI1
radius-server local
no authentication eapfast
!
radius-server attribute 32 include-in-access-req format %h
radius-server host 192.168.131.232 auth-port 1812 acct-port 1813 key 7 XXXXXXXXXXX
radius-server vsa send accounting
!
control-plane
!
bridge 1 route ip
!
!
!
line con 0
line vty 0 4
transport input telnet ssh
!
end


Настройка клиенткой машины

Настройку DHCP, кеширующего DNS-сервера AD-01 — я пропущу из-за банальности настроек. Но
для корректной работы — он должен быть настроен.

По умолчанию Windows XP SP3 не поддерживает аутентификацию LEAP. Скачиваем с сайта ноутбука
с раздела WiFi драйвера программу Intel PROSet/Wireless.

Ищем беспроводные сети и подключаемся найденной сети.




Вводим Аутентификация LEAP — логин/пароль — grol/testing123


Подключаемся к сети и работаем в интернете.

Настройка беспроводного телефона Cisco 7920

Изначально телефон по MAC-адресу надо зарегистрировать на Cisco CallManager 4.2

Для настройки проверки подлинности пользователя беспроводного телефона Cisco 7920 через
RADIUS-сервер, нужно последовательно выбрать:

Menu — Profiles — Network Profile — Profile2 …
… DHCP — установить Enable.
… TFTP Option — установить Use DHCP.
… 802.11b Configuration — SSID — Specify — установить SSID такой же, какой установлен в беспроводной сети.
… 802.11b Configuration — Authentication — установить LEAP.
… 802.11b Configuration — LEAP — Username — ввести имя пользователя, зарегистрированное на RADIUS-сервере.
… 802.11b Configuration — LEAP — Password — ввести пароль.
… 802.11b Configuration — LEAP — Prompt Mode — Off
… Apply Change


Безопасность

Предложенная модель защиты: аутентификация EAP-LEAP, WPA2 (AES-CCMP), авторизация на
Radius-сервере. Достаточно безопасна. Если впадать в полную паранойю идеальный вариант
EAP-TLS, но его реализация тема отдельной статьи.

Основные недостатки использованных методов.

Взлом Cisco EAP-LEAP. Принцип атаки: вычисляется спиксок MD5-свёрток паролей,
перехватываются фреймы с запросом и ответом, из них извлекается имя пользователя, используя
слабые места протокола — вычисляются два последних бита MD5-свёртки, проводится улучшенный
брут имея уже два известных бита.

Атака на сервер RADIUS. Как и у всего ПО у Радиуса есть некоторые уязвимости. Во-первых
протокол UDP, который использует этот сервер, ни как не мешает нам подсовывать ложные
пакеты. Так же возможен полный перебор для получения доступа, атака «повтор ответа» и
бессмертный DOS.

У всего есть свои недостатки, абсолютную защиту еще не придумали, как и абсолютное
нападение.

Таким образом, в статье рассмотрена настройка EAP-LEAP-аутентификации для авторизации
WiFi-пользователей с использованием FreeRadius-сервера с шифрованием AES-CCMP. Детально
рассмотрены настройки FreeRadius — сервера, точки доступа, клиентского компьютера и
ip-телефона.
 

Источник: https://www.opennet.ru/base/modem/radius_st.txt.html