Московский государственный университет имени М.В.Ломоносова
Опубликован: 28.11.2014 | Доступ: свободный | Студентов: 1380 / 124 | Длительность: 23:26:00
ISBN: 978-5-9556-0163-2
Лекция 12:

Аутентификация и хранение учетных записей

Формат пакета аутентификации

В UDP инкапсулируется ровно один RADIUS-пакет. Порт получателя – 1812.

При создании ответа порты отправителя и получателя меняются местами.

Формат RADIUS-пакета аутентификации

Рис. 12.17. Формат RADIUS-пакета аутентификации

Поле Code

Поле Code состоит из одного октета и определяет тип RADIUS-пакета. Если получен пакет с недействительным значением поля Code, то пакет молча (без ответа) отбрасывается. В поле Code могут быть указаны следующие значения:

1	Access-Request
2	Access-Accept
3	Access-Reject
4	Accounting-Request
5	Accounting-Response
11	Access-Challenge
12	Status-Server
13	Status-Client

Поле Identifier

Поле Identifier состоит из одного октета и предназначено для сопоставления пар запросов и ответов. RADIUS-сервер может определить дубликат запроса, если запрос имеет IP-адрес источника, UDP-порт источника и значения поля Identifier, что и у уже полученного запроса.

Поле Length

Поле Length состоит из двух октетов. Оно содержит длину пакета, состоящего из полей Code, Identifier, Length, Authenticator и Attribute.

Поле Authenticator

Поле Authenticator состоит из 16 октетов. Это значение используется для определения повторных ответов от RADIUS-сервера и используется в алгоритме скрытия пароля.

Аутентификатор запроса

В пакете Access-Request значение Authenticator состоит из 16-октетного случайного числа, называемого аутентификатор запроса. Значение должно быть случайным. Хотя протокол RADIUS и не может защитить от встраивания поддельной информации в аутентифицированную сессию с помощью активной атаки man-in-the-middle, создание случайного значения в качестве аутентификатора защищает от большого числа активных атак, связанных с аутентификацией.

NAS и RADIUS-сервер разделяют общий секрет. Выполняется конкатенация этого секрета и аутентификатора запроса, результат подается на вход хэш-функции MD5, которая создает 16-октетное значение дайджеста. Затем выполняется операция XOR полученного значения и пароля, введен-ного пользователем, и результат помещается в атрибут User-Password в пакете Access-Request.

Аутентификатор ответа

Значение поля Authenticator в пакетах Access-Request, Access-Reject и Access-Challenge называется аутентификатором ответа и содержит хэш-значение MD5, вычисленное для RADIUS-пакета, начиная с поля Code и включая поля Identifier, Length, Request Authenticator из пакета Access-Request, Attributes из ответа, за которыми следует разделяемый секрет.

MD5 (Code+ID+Length+RequestAuth+Attributes+Secret)

где "+" означает конкатенацию.

Вопросы администрирования

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

Перенаправляющий прокси может изменить содержимое пакета, а именно он может добавить атрибут Proxy-State. Когда прокси возвращает ответ, он должен удалить свой атрибут Proxy-State, если тот был добавлен. Proxy-State всегда добавляется после других атрибутов Proxy-State, но никаких других предположений относительно его расположения в списке атрибутов не делается. Так как ответы Access-Request и Access-Reject аутентифицированы как часть содержимого всего пакета, удаление атрибута Proxy-State делает недействительным аутентификатор пакета, поэтому прокси заново вычисляет аутентификатор.

Сообщение Access-Request

Пакеты Access-Request посылаются RADIUS-серверу и содержат информацию, используемую для определения разрешен ли пользователю доступ к данному NAS и какие сервисы доступны для данного пользователя.

Пакет Access-Request должен содержать атрибут User-Name. Он также должен содержать атрибуты NAS-IP-Address или NAS-Identifier.

Пакет Access-Request должен содержать либо атрибут User-Password, либо атрибут CHAP-Password, либо атрибут State. Пакет Access-Request не должен содержать одновременно и User-Password, и CHAP-Password. Возможно также добавление других типов аутентификационной информации и атрибутов, которые будут использоваться в пакете Access-Request вместо атрибутов User-Password или CHAP-Password.

Пакет Access-Request может содержать атрибут NAS-Port или NAS-Port-Type, а также дополнительные атрибуты, но при этом не требуется, чтобы сервер их как-то учитывал при создании ответа.

Если присутствует атрибут User-Password, он должен быть скрыт с использованием хэш-функции MD5.

Сообщение Access-Request

Пакеты Access-Request посылаются RADIUS-сервером и содержат информацию, необходимую для предоставления сервиса пользователю. Если все значения атрибута Attribute в Access-Request корректные, то RADIUS-сервер должен передать пакет с полем Code, установленным в 2 (Access-Request).

В пакете Access-Request поле Identifier должно соответствовать отправленному в Access-Request.

Сообщение Access-Reject

Если какое-либо значение Attributes не является допустимым, то RADIUS-сервер передает ответ с полем Code, установленным в 3 (Access-Reject). Он может включить один или несколько атрибутов Reply-Massage с текстовым сообщением, которое NAS может показать пользователю.

Сообщение Access-Challenge

Если RADIUS-сервер считает, что пользователю необходимо послать вызов, требующий ответа, то он отвечает пакетом с полем Code, установленным в 11 (Access-Challenge).

Поле Attribute может содержать один или несколько атрибутов Reply-Message или единственный атрибут State, либо не содержать ничего из перечисленного. Могут также быть включены следующие атрибуты: Vendor-Specific, Idle-Timeout, Session-Timeout и Proxy-State. Никакие другие атрибуты не должны включаться в Access-Challenge.

В полученном пакете Access-Challenge поле Identifier должно соответствовать тому, которое было указано в отправленном NAS Access-Request.

Если NAS не поддерживает обмен сообщениями Вызов/Ответ, он должен считать, что Access-Challenge соответствует Access-Reject.

Если NAS поддерживает обмен сообщениями Вызов/Ответ, то получение корректного ответа Access-Challenge означает, что должен быть послан новый запрос Access-Request. NAS может показать пользователю текстовое сообщение и выдать приглашение для ввода ответа. Затем он посылает исходный Access-Request с новым ID запроса и аутентификатором запроса, с атрибутом User-Password, в котором содержится ответ пользователя (в скрытом виде), а также в него добавляется атрибут State из Access-Challenge, если он там был. В Access-Request может присутствовать не более одного атрибута State.

NAS, поддерживающий РАР, может перенаправить Reply-Message клиенту и получить РАР-ответ, который затем он может использовать в качестве ответа пользователя. Если NAS это не поддерживает, он должен трактовать Access-Challenge как Access-Reject.