Технологии туннелирования

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

Разбить на страницы
Показывать лекцию целиком

Топология сети

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

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

Как правило, при большом числе пользователей идентификационные и аутентификационные данные хранятся на отдельном сервере. Это позволяет освободить межсетевой экран от необходимости хранить большие объемы идентификационных и аутентификационных данных. Доступ к серверу, на котором хранятся идентификационные и аутентификационные данные, как правило, осуществляется либо по протоколу RADIUS, либо по прото-колу LDAP (рис. 12.1).

Будем предполагать, что сеть имеет следующую топологию.

  • Пользователю, который вошел на удаленный хост, требуется доступ к серверу, который расположен либо в LAN, либо в DMZ.
  • Между двумя межсетевыми экранами выполняется один из протоколов VPN, для которого необходима аутентификация пользователя, получающего доступ в локальную сеть или DMZ. В нашем случае аутентификационная информация ука-зывается на МЭ1.
  • Вся аутентификационная и авторизационная информация хра-нится либо на сервере RADIUS, либо на сервере LDAP.
  • (рис 12.1) Топология сети при использовании сервера идентификации

    Протокол RADIUS

    Основные понятия

    Конечная цель – предоставить аутентифицированный и авторизованный доступ пользователю с удаленного хоста к серверу, расположенному в LAN или DMZ. Между МЭ1 и МЭ2 выполняется один из протоколов VPN. Учетные записи пользователей хранятся на сервере RADIUS. Идентифика-ционная и аутентификационная информация указывается на удаленной точке туннеля. Запрос аутентификации и используемый сервер, на котором хранятся идентификационные и аутентификационные данные, указываются на локальной стороне туннеля. При успешной аутентификации пользователю с удаленного хоста предоставляется доступ к серверу, расположенному в LAN или DMZ.

    Взаимодействующими сторонами в протоколе RADIUS (Remote Au-thentication Dial In User Service) являются:

    Сервер RADIUS– сервер, выполняющий аутентификацию, авторизацию и хранение учетных записей (аккаунтинг). В английском варианте Authentication, Authorization и Accounting – ААА. RADIUS предоставляет сервисы ААА для NAS.

    Сервер Сетевого Доступа (Network Access Server – NAS)– устройство, которое предоставляет удаленным пользователям доступ в сеть и является клиентом для сервера RADIUS.

    Аутентификация, авторизация и аккаунтинг выполняются для удаленной стороны туннеля, в нашем случае для учетной записи, указанной в конфигурации МЭ1.

    Основные принципы функционирования RADIUS:

  • Клиент-серверная модель функционирования. NAS функционирует как клиент RADIUS. Он пересылает пользовательскую аутентификационную информацию серверу RADIUS и затем выполняет действия в соответствии с полученным ответом.

    Сервер RADIUS получает запрос от NAS, аутентифицирует пользователя и затем возвращает NAS всю необходимую для предоставления сервиса информацию.

    Сервер RADIUS может функционировать как прокси-клиент для других серверов RADIUS или аутентификационных серверов других типов.

  • Обеспечение сетевой безопасности. Транзакции между NAS и сервером RADIUS аутентифицированы с помощью общего секрета, который никогда не посылается по сети. Кроме того, все пользовательские пароли посылаются между NAS и серве-ром RADIUS в защищенном виде, что исключает возможность просмотра. (рис 12.2) Задание секрета между NAS и сервером RADIUS на стороне NAS (рис 12.3) Задание секрета между NAS и сервером RADIUS на стороне сервера RADIUS (рис 12.4) Защищенность пользовательского пароля при пересылке между NAS и сервером RADIUS
  • Гибкие аутентификационные механизмы. RADIUS сервер может поддерживать различные способы аутентификации пользователей. Если используются имя пользователя и пароль, то поддерживаются такие способы аутентификации, как РРР РАР, СНАР и MS-CHAP. (рис 12.5) Параметры РРР-аутентификации на стороне NAS (рис 12.6) Параметры РРР-аутентификации на стороне сервера RADIUS
  • Расширяемый протокол. Все транзакции состоят из троек значений переменной длины (Атрибут – Длина – Значение). Могут быть добавлены новые атрибуты без изменения существующих реализаций протокола.
  • В протоколе RADIUS все данные передаются в элементах, которые называются атрибутами.

    Атрибуты RADIUS используются для передачи:

  • Аутентификационных данных пользователей.
  • Авторизационных данных пользователей.
  • Данных, необходимых для учета пользовательской деятельно-сти, например, создание логов активных сессий.
  • Атрибут может быть определен в спецификации протокола RADIUS, и в этом случае говорят, что он является стандартным и принадлежит стандартному пространству имен, либо может быть определен производителем, в этом случае говорят, что он принадлежит пространству имен производи-теля и являются Vendor-Specific Attributes (VSA).

    Такие атрибуты определяются производителем и указываются в поле String.

    Значение каждого атрибута принадлежит определенному типу данных. В отличие от протокола SNMP в RADIUS нет формального языка определения данных.

    Типы данных могут быть "базовые" и "комплексные". Базовые типы данных используют один из существующих типов данных RADIUS, которые могут содержаться в стандартном атрибуте или VSA-атрибуте.

    (рис 12.7) Пример атрибутов RADIUS

    Типы данных

    В RADIUS определены следующие базовые типы данных:

  • 32-битное беззнаковое целое в сетевом порядке байтов.
  • Перечислимые типы данных, представленные как 32-битные беззнаковые целые со списком отображений имени на значение (например, Service-Type).
  • IPv4-адрес в сетевом порядке байтов.
  • Время как 32-битное беззнаковое целое в сетевом порядке байтов и секунды, начиная с 00:00:00 UTC, Январь, 1, 1970.
  • IPv6-адрес в сетевом порядке байтов.
  • Interface-Id – 8-ми байтовая строка в сетевом порядке байтов.
  • Префикс IPv6.
  • Строка длиной не более 253 байтов (октетов). Данная строка может содержать произвольные структуры данных.
  • Текст UTF-8 длиной не более 253 байтов (октетов).
  • Следующие типы данных определены как "комплексные":

  • Атрибуты, сгруппированные в логический контейнер, используя механизм тегирования.
  • Атрибуты, которым для пересылки требуется более 253 октетов текстовых или строковых данных. Это могут быть структуры данных, определенных вне протокола RADIUS, например, EAP-Message.
  • Пространство имен производителя

    Пространство имен производителя обозначается как VSA. При этом Vendor-Id определяет конкретного производителя, а поле String определяет уникальный тип атрибута для данного производителя.

    Принципы функционирования RADIUS

    Функционирование RADIUS основано на следующих принципах:

  • Протокол RADIUS является протоколом типа Запрос / Ответ.
  • Протокол RADIUS не поддерживает состояния.
  • NAS не должен предоставлять сервисы при получении ответа от сервера Access-Reject и Disconnect-Request.
  • Хотя производители серверов RADIUS и могут поддерживать состояние, в самом протоколе RADIUS понятие состояния не определено. Однако определенная информация может передаваться от одной транзакции к другой с помощью атрибута State.

    В спецификации RADIUS определены атрибуты, содержащие конфиденциальную информацию (например, пароли). Такие атрибуты не пересылаются в запросе и не возвращаются в ответе в открытом виде. Кроме того, аутентификационный механизм связывает вместе последовательность пакетов Access-Request / Access-Challenge в одной аутентификационной сессии с помощью атрибута State.

    Протокол RADIUS является протоколом типа запрос-ответ, выполняющимся между клиентом и сервером RADIUS. Один пакет запроса требует в ответ по крайней мере один пакет, который посылается на IP-адрес и порт клиента.

    Длина пакета RADIUS не может быть больше 4096 байтов (октетов).

    Даже если длина пакета меньше, чем 4096 байтов, она может быть больше, чем Path MTU (PMTU). Любой пакет, длина которого больше, чем PMTU, будет фрагментирован, что может привести к сложности прохожде-ния межсетевых экранов, которые отбрасывают фрагментированные пакеты. Если приходится использовать фрагментированные пакеты, то необхо-димо тщательное тестирование корректного прохождения всех межсетевых экранов и устройств, которые могут отбрасывать фрагментированные пакеты. Некоторые устройства не могут передавать фрагментированные UDP-пакеты, затрудняя развертывание RADIUS в сети с такими устройствами. Рекомендуется следить за тем, чтобы сообщения RADIUS были как можно более маленькими.

    Если необходимо передавать пакеты большей длины, чем 4096 байтов, то используется один из следующих подходов:

  • Использование последовательности пакетов. При аутентификации и авторизации может быть использована последовательность Access-Request / Access-Response пакетов.
  • Использование имен, а не значений. Если в атрибуте указана политика, которая заранее известна NAS, то может быть передано имя политики, а не сама политика.
  • Использование технологий пакетизации и технологий определения максимального PMTU (RFC 4821).
  • Аутентификация RADIUS

    Последовательность пакетов

    (рис 12.8) Последовательность пакетов при выполнении аутентификации

    Пользователь предоставляет NAS аутентификационную информацию, после этого NAS использует протокол RADIUS для аутентификации данного пользователя. Эта аутентификационная информация может предоставляться в виде настраиваемого приглашения для входа, когда от пользователя требуется ввести имя и пароль. Либо может использовать такой протокол, как РРР, в котором существуют аутентификационные пакеты для пересылки данной информации.

    (рис 12.9) Задание аутентификационных данных пользователя на противоположной NAS стороне туннеля

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

    (рис 12.10) Пересылка аутентификационных данных пользователя по туннелю между NAS и противоположной стороной туннеля

    Атрибуты RADIUS используются для передачи аутентификационной и авторизационной информации и деталей конфигурирования.

    Некоторые атрибуты могут быть включены в сообщение несколько раз. Результат такого включения зависит от атрибута.

    Если есть несколько атрибутов одного и того же типа, то прокси-серверы не должны изменять их упорядоченность. Порядок атрибутов разных типов прокси-серверами может быть изменен. Поведение RADIUS-сервера и клиента никак не зависит от упорядоченности атрибутов разных типов. Не требуется, чтобы атрибуты одного и того же типа были расположены рядом друг с другом.

    (рис 12.11) Пересылка аутентификационных данных между NAS и сервером RADIUS

    Access-Request передается по сети серверу RADIUS. Если в течение определенного времени ответ не получен, то запрос повторяется. Клиент может также направить запросы к альтернативному серверу или нескольким серверам в случае, если первичный сервер выключен или не доступен. Альтернативный сервер может использоваться либо после определенного числа неудачных попыток обращения к первичному серверу, либо по круговому алгоритму.

    После получения запроса сервер RADIUS выполняет аутентификацию NAS. Запрос от NAS, с которым сервер RADIUS не имеет разделяемого секрета, молча, т.е. без уведомления противоположной стороны, отбрасывается.

    Если NAS аутентифицирован, RADIUS-сервер ищет в базе данных пользователей имя, указанное в запросе. Запись пользователя в базе данных содержит список требований, которые должны быть выполнены, чтобы пользователю можно было разрешить доступ. Это всегда включает проверку пароля, но можно также определить дополнительные параметры, которые проверяются перед тем, как пользователю будет разрешен доступ.

    (рис 12.12) Указание параметров аутентификации на стороне сервера RADIUS

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

    Если в запросе Access-Request есть какие-либо атрибуты Proxy-State, они должны быть скопированы без каких-либо изменений и в том же порядке в пакет ответа. Остальные атрибуты могут быть расположены до, после и даже между Proxy-State атрибутами.

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

    (рис 12.13) Пример сообщения Access-Reject при отсутствии у пользователя или NAS требуемых аутентификационных данных

    Если все условия выполнены, и RADIUS-серверу требуется получить дополнительные ответы от пользователя, RADIUS-сервер посылает Access-Challenge ответ. Он может включить текстовое сообщение, которое будет показано пользователю, и может включать атрибут State.

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

    В ответе не может быть больше одного экземпляра атрибута State. На это сообщение сервер может ответить новым Access-Request, указав в нем либо Access-Request, либо Access-Reject, либо другой Access-Challenge.

    Если все условия выполнены, в ответ Access-Request помещается список конфигурационных значений. Эти значения включают тип сервиса (например, SLIP, PPP, Login User) и все необходимые значения для получения требуемого сервиса. Для SLIP и РРР это может включать такие значения, как IP-адрес, маска подсети, MTU, алгоритм сжатия и идентификаторы требуемых фильтров пакетов. Могут быть также указаны требуемый протокол и хост.

    (рис 12.14) Пример сообщения Access-Request при выполнении аутентификации

    Вызов / Ответ

    При аутентификации Вызов/Ответ (Challenge/Response) пользователь получает заранее неизвестное число запросов, на которые он должен дать ответ. Для создания корректного ответа пользователь должен иметь либо специальные устройства, такие как смарт-карты, либо ПО, которое создает ответ. Если у пользователя нет соответствующего устройства или в ПО не установлено корректное значение секрета, пользователь считается неавторизованным.

    Пакет Access-Challenge обычно содержит Reply-Message, которое показывается пользователю, например, числовое значение, которое никогда не повторяется.

    Затем пользователь вводит это случайное число в смарт-карту или программу, которая вычисляет ответ. Пользователь вводит этот ответ, и NAS пересылает его на сервер RADIUS во втором Access-Request. Если ответ правильный, сервер RADIUS возвращает Access-Request, в противном случае возвращает Access-Reject.

    Пример:

    (рис 12.15) Пример последовательности пакетов при Challenge/Response

    NAS посылает пакет Access-Request к серверу RADIUS с атрибутами NAS-Identifier, NAS-Port, User-Name, User-Password (который может быть фиксированной строкой типа "challenge" и игнорироваться). Сервер посылает обратно пакет Access-Challenge с атрибутами State, Reply-Message и строкой "Challenge 12345678, введите ваш ответ", которую NAS показывает пользователю. NAS выдает приглашение пользователю для ответа и посылает полученный ответ в новом пакете Access-Request к серверу (с новым ID), содержащий атрибуты NAS-Identifier, NAS-Port, User-Name, User-Password. В этом случае ответ, который только что ввел пользователь, защищен. Этот ответ содержит тот же самый атрибут State, который был указан в Access-Challenge. После этого сервер присылает обратно либо пакет Access-Request, либо пакет Access-Reject.

    Интероперабельность с РАР и СНАР

    При использовании РАР NAS получает РАР ID и пароль и посылает их в пакете Access-Request в качестве атрибутов User-Name и User-Password. NAS может включить атрибуты Service-Type = Framed-User и Framed-Protocol=PPP в качестве подсказки серверу RADIUS, что используется РРР-сервис.

    При использовании СНАР NAS создает случайный вызов (желательно 16 октетов) и посылает его пользователю, который возвращает СНАР-ответ вместе с атрибутами CHAP ID и СНАР Username. Затем NAS посылает пакет Access-Request к серверу RADIUS со значением СНАР Username в атрибуте User-Name и со значением СНАР ID и СНАР-ответом в атрибуте CHAP-Password. Случайный вызов либо может быть включен в атрибут CHAP-Challenge, либо, если его длина больше 16 октетов, он может быть помещен в поле Request Authenticator в пакете Access-Request. NAS может включить атрибуты Service-Type = Framed-User и Framed-Protocol = PPP в качестве подсказки серверу RADIUS, что используется РРР-сервис.

    Если сервер RADIUS не может выполнить необходимую проверку, он возвращает Access-Reject. Например, при использовании СНАР требуется, чтобы пароль пользователя был доступен серверу в незашифрованном виде для того, чтобы он мог хэшировать его вместе с вызовом и сравнить с тем, что получил в качестве СНАР-ответа. Если пароль не доступен серверу RADIUS в незашифрованном виде, то он посылает клиенту Access-Reject.

    Использование прокси-сервера

    (рис 12.16) Топология сети при использовании прокси-сервера RADIUS

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

    NAS посылает свой запрос на доступ к перенаправляющему серверу, который перенаправляет этот запрос на удаленный сервер. Удаленный сервер присылает ответ (Access-Request, Access-Reject или Access-Challenge) обратно перенаправляющему серверу, который посылает его к NAS. Атрибут User-Name может содержать идентификатор сетевого доступа (например, userID, переданный клиентом при РРР-аутентификации). Выбор сервера, которому следует перенаправить запрос, основывается на аутентификационной области (realm). Аутентификационная область может быть частью области идентификатора сетевого доступа ("области имени"). Выбор сервера, которому пересылается запрос, может быть основан и на каком-то другом критерии.

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

    Следующий сценарий иллюстрирует взаимодействие между RADIUS-прокси, NAS и удаленным RADIUS-сервером:

  • NAS посылает запрос на доступ перенаправляющему серверу.
  • Перенаправляющий сервер отправляет запрос на доступ к удаленному серверу.
  • Удаленный сервер присылает сообщения Access-Request, Access-Reject или Access-Challenge обратно перенаправляющему серверу. В нашем случае предположим, что посылается Access-Request.
  • Перенаправляющий сервер посылает сообщение Access-Request к NAS.
  • Перенаправляющий сервер должен рассматривать все атрибуты Proxy-State в пакете как неструктурированные данные. Его действия не должны зависеть от содержимого Proxy-State атрибутов, которые были добавлены предыдущими серверами.

    Если в запросе, полученном от клиента, существуют какие-либо атрибуты Proxy-State , перенаправляющий сервер должен включить эти атрибуты Proxy-State в ответ клиенту. Перенаправляющий сервер может как включать, так и не включать Proxy-State атрибуты в запрос доступа при перенаправлении запроса. Если перенаправляющий сервер не включил Proxy-State атрибуты в перенаправленный запрос доступа, он должен присоединить их к ответу перед тем, как посылать ответ обратно клиенту.

    Рассмотрим каждый шаг более детально.

  • NAS посылает свой запрос на доступ перенаправляющему серверу. Перенаправляющий сервер проверяет User-Password, если он есть, используя общий секрет с NAS. Если в пакете присутствует атрибут CHAP-Password и нет атрибута CHAP-Challenge, перенаправляющий сервер не должен изменять атрибут Request-Authenticator или должен копировать его в атрибут CHAP-Challenge. Перенаправляющий сервер может добавить в пакет не более одного атрибута Proxy-State. Если он добавляет атрибут Proxy-State, то он должен быть добавлен после всех остальных атрибутов Proxy-State, которые уже есть в пакете. Перенаправляющий сервер не изменяет последовательность атрибутов одного и того же типа, включая атрибуты Proxy-State.
  • Перенаправляющий сервер обеспечивает конфиденциальность User-Password, если он присутствует. Для защиты от replay-атак используется секрет, который он разделяет с удаленным сервером. Перенаправляющий сервер может добавить значение Identifier, после чего перенаправляет запрос на доступ к удаленному серверу.
  • Удаленный сервер (если он является конечным получателем) проверяет пользователя, используя User-Password, CHAP-Password или какой-либо другой метод, и возвращает обрат-но перенаправляющему серверу ответ Access-Request, Access-Reject или Access-Challenge. Предположим, что посылается Access-Request. Удаленный сервер должен копировать, не модифицируя, все атрибуты Proxy-State (и только их) из запроса на доступ в пакет ответа.
  • Перенаправляющий сервер проверяет аутентификатор в ответе, используя секрет, который он разделяет с удаленным сервером, и молча отбрасывает пакет, если он не проходит проверку. Если пакет успешно проходит проверку, то перенаправ-ляющий сервер удаляет последний атрибут Proxy-State (если он был присоединен), обеспечивает целостность аутентификатора ответа, используя секрет, который он разделяет с NAS, и посылает Access-Request к NAS.
  • Перенаправляющему серверу может понадобиться изменить атрибуты для реализации локальной политики. Но при этом перенаправляющий сервер не должен изменять имеющиеся в пакете атрибуты Proxy-State, State или Class.

    Производители перенаправляющих серверов определяют значения, которые они готовы принимать в качестве значения атрибута Service-Type. Это может повлиять на передачу значения Service-Type от NAS в проксируемом пакете Access-Request. Могут также существовать механизмы, которые блокируют определенные типы сервисов.

    Причина использования UDP

    Часто возникает вопрос, почему в качестве транспорта сообщений RADIUS используется UDP, а не ТСР. UDP был выбран исключительно по техническим причинам.

    Существуют определенные проблемы, в результате которых UDP становится более предпочтительным транспортным протоколом. RADIUS является протоколом, основанным на транзакциях, который обладает следующими характеристиками:

  • Если запрос к первичному аутентификационному серверу выполняется со сбоем, должен быть сделан запрос к вторичному серверу. Для выполнения этого требования копия запроса должна храниться в стеке протоколов выше транспортного уровня, чтобы иметь возможность выполнить альтернативную передачу. Это также означает, что требуется таймер повторной передачи.
  • Требования к задержкам по времени для данного протокола существенно отличаются от тех, которые обеспечиваются в протоколе ТСР.

    С одной стороны RADIUS не требует сверх точного определения потерянных данных. Пользователь может подождать несколько секунд для завершения аутентификации, поэтому по-стоянные повторные передачи, которые имеют место в ТСР, не требуются.

    С другой стороны пользователя нельзя заставлять ждать завершения аутентификации несколько минут. Следовательно, надежная доставка ТСР-данных в течение двух минут не нужна. Быстрее использовать альтернативный сервер, который может предоставить доступ.

  • Протокол не поддерживает состояния, поэтому естественнее использовать UDP.

    И клиент, и сервер могут завершить соединение, любая из сторон может выполнить перезапуск всей системы. При этом обычно не возникает проблем, связанных с необходимостью определения потерянного соединения, которые имеют место в протоколе ТСР. Код может быть просто написан с учетом обработки аномальных событий. В самом протоколе UDP полностью отсутствует какая-либо специальная обработка при потере соединения. И клиент, и сервер могут использовать данное UDP-соединение только один раз.

  • Использование UDP упрощает реализацию сервера.
  • В ранних реализациях RADIUS сервер состоял из единственной нити. Это означало, что одновременно мог получаться, обрабатываться и возвращаться единственный запрос. Это за-медляло обработку в тех случаях, когда используемым механизмам безопасности требовалось много времени. Также могла переполниться очередь запросов на сервер, если сотням людей ежеминутно требовалась аутентификация. Очевидным решением этой проблемы является реализация сервера с использованием нескольких нитей. Сделать это значительно проще, используя UDP. Каждый процесс обрабатывал отдельный запрос и отвечал клиенту NAS простым UDP-пакетом.

    Это не является панацеей от всех бед. При использовании UDP на прикладном уровне требуется помнить о проблемах, которые автоматически решаются в ТСР, например управлением таймерами повторных передач.

    Использование повторных передач

    Если RADIUS-сервер и альтернативный RADIUS-сервер разделяют общий секрет, то можно переслать пакет альтернативному RADIUS-серверу с тем же самым ID и аутентификатором запроса, так как содержимое атрибутов не изменилось. Если необходимо использовать новый аутентификатор запроса при отправке запроса альтернативному серверу, это можно сделать.

    Если сервер изменил содержимое атрибута User-Password (или любого другого атрибута), то он должен создать новый аутентификатор запроса и, следовательно, новый ID.

    Если NAS повторяет запрос к тому же самому серверу, и атрибуты не изменились, следует использовать тот же самый аутентификатор запроса, ID и порт источника. Если какой-либо атрибут изменился, необходимо использовать новые аутентификатор запроса и ID.

    NAS может использовать один и тот же ID для всех серверов или может для каждого сервера использовать отдельный ID.

    Проверка жизнеспособности сервера

    Некоторые производителя посылают тестовые запросы для проверки жизнеспособности сервера. Это не самая лучшая практика, так как увели-чивается трафик и уменьшается масштабируемость, без предоставления при этом никакой дополнительной информации. Так как запрос RADIUS содержится в единственной дейтаграмме, можно вместо этого просто выполнить команду ping.

    Для мониторинга RADIUS-сервера следует использовать протокол SNMP.

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

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

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

    (рис 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.

    Атрибуты аутентификации

    Атрибуты имеют следующий формат:

    (рис 12.18) Формат атрибутов RADIUS

    Поле Type

    Поле Type имеет длину один октет. Возможные типы стандартизованы и перечислены в соответствующих RFC. Как RADIUS-сервер, так и клиент могут игнорировать атрибуты, тип которых они не знают.

    Основные типы атрибутов следующие:

    
    1	User-Name
    2	User-Password
    3	CHAP-Password
    4	NAS-IP-Address
    5	NAS-Port
    6	Service-Type
    7	Framed-Protocol
    8	Framed-IP-Address
    9	Framed-IP-Netmask
    10	
    11	
    12	Framed-MTU
    13	Framed-Compression
    14	Logon-IP-Host
    15	Login-Service
    16	Login-TCP-Port
    17	
    18	Reply-Message
    19	Callback-Number
    20	Callback-Id
    21	
    22	Framed-Route
    23	Framed-IPX-Network
    24	State
    25	Class
    26	Vendor-Specific
    27	Session-Timeout
    28	Idle-Timeout
    29	Termination-Action
    30	Called-Station-Id
    31	Calling-Station-Id
    32	NAS-Identifier
    33	Proxy-State
    34	-59  
    60	CHAP-Challenge
    61	NAS-Port-Type
    62	Port-Limit
    63	Login-LAT-Port
    

    Атрибут User-Name

    Атрибут содержит имя аутентифицируемого пользователя. Он обязательно указывается в пакетах Access-Request.

    Он может быть послан в пакете Access-Request, в этом случае клиент должен использовать это имя во всех пакетах Accounting-Request данной сессии. Если в Access-Request включен ServiceType=Rlogin и атрибут User-Name, NAS может использовать возвращаемое значение User-Name при выполнении сервиса Rlogin в UNIX-системах. Значением атрибута может быть текст, идентификатор сетевого доступа или DN прото-кола LDAP.

    Атрибут User-Password

    В данном атрибуте указывается пароль аутентифицируемого пользователя или введенная пользователем информация при получении пакета Access-Challenge. Атрибут используется только в пакетах Access-Request.

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

    Если пароль длиннее 16 символов, второй раз используется хэш-функция MD5, на вход которой подается разделяемый секрет, за которым следует результат первого XOR. После этого выполняется XOR результата второго использования MD5 и вторых 16 октетов пароля. При необходимости данная операция повторяется нужное число раз.

    Обозначим разделяемый секрет – S, псевдослучайный 128-битный аутентификатор запроса – RA. 16-октетные части пароля – р1, р2 и т.д.

    b1 = MD5 (S + RA)		c(1) = p1 xor b1
    b2 = MD5 (S + c(1))		c(2) = p2 xor b2
    String содержит с(1) + с(2) +  ….., 
    где + обозначает конкатенацию.
    

    Атрибут СНАР-Password

    В данном атрибуте указывается ответ на запрос, предоставленный протоколом СНАР, в ответ на Вызов (Challenge). Атрибут используется только в пакетах Access-Request.

    Значение Вызова СНАР берется из атрибута CHAP-Challenge, если он присутствует в пакете, в противном случае используется поле Аутентификатора запроса.

    Атрибут NAS-IP-Address

    Данный атрибут определяет IP-адрес NAS, который запросил аутентификацию пользователя. Этот IP-адрес должен быть уникальным у данного RADIUS-сервера. NAS-IP-Address используется только в пакетах Access-Request. В пакете Access-Request должен присутствовать либо NAS-IP-Address, либо NAS-Identifier.

    Заметим, что NAS-IP-Address не должен использоваться для выбора разделяемого секрета, который используется для аутентификации запроса. Для выбора разделяемого секрета должен использоваться IP-адрес источника пакета Access-Request.

    Атрибут NAS-Port

    Атрибут определяет номер физического порта NAS, который аутентифицирует пользователя. Атрибут используется только в пакетах Access-Request. Заметим, что это порт физического соединения NAS, а не ТСР или UDP номер порта. В пакете Access-Request должен присутствовать либо NAS-Port, либо NAS-Port-Type.

    Атрибут Service-Type

    Данный атрибут определяет тип сервиса, который запросил пользователь, или тип сервиса, который будет предоставлен. Он может использоваться в пакетах Access-Request и Access-Accept. Не требуется, чтобы NAS мог реализовывать все типы сервисов, неизвестные или не поддерживаемые сервисы игнорируются и должны рассматриваться как Access-Reject.

    Следующие типы сервисов могут использоваться в Access-Request. При использовании в Access-Request они могут рассматриваться как подсказка RADIUS-серверу какой тип сервиса требуется пользователю. Но при этом не требуется, чтобы сервер следовал этой подсказке.

    Login Пользователь должен войти на хост.
    Framed Для соединения с пользователем должен использоваться такой протокол, как РРР или SLIP.
    Callback Login Пользователь должен быть отсоединен, затем должен быть сделан обратный вызов, после чего пользователь должен быть снова подсоединен к хосту.
    Callback Framed Пользователь должен быть отсоединен, затем должен быть сделан обратный вызов, после чего должен начать выполняться такой протокол, как РРР или SLIP.
    Outbound Пользователю должен быть предоставлен доступ к внешним устройствам.
    Administrative Пользователю должен быть предоставлен доступ к административному интерфейсу NAS, с которого могут выполняться привилегированные команды.
    NAS prompt Пользователю должно быть выдано приглашение для ввода непривилегированных команд NAS.
    Authenticate Only Требуется только аутентификация, в Access-Request не должно возвращаться никакой авторизационной информации (обычно используется прокси-серверами, а не самим NAS).
    Callback NAS Prompt Пользователь отсоединяется, осуществляется обратный вызов и пользователю выдается приглашение для выполнения непривилегированных команд NAS.
    Call Check Используется NAS в пакете Access-Request для указания того, что вызов был получен, и что в ответ на вызов RADIUS-сервер должен послать сообщение Access-Accept или Access-Reject, обычно основываясь на атрибутах Called-Station-Id или Calling-Station-Id. Рекомендуется, чтобы Access-Request использовал Calling-Station-Id в качестве значения User-Name.
    Callback Administrative Пользователь должен быть отсоединен, выполнен обратный вызов, затем предоставлен доступ к административному интерфейсу NAS, с которого могут выполняться привилегированные команды.

    Атрибут Framed-Protocol

    Атрибут указывает внешний протокол, который используется для получения доступа. Может использоваться в пакетах Access-Request и Access-Accept.

    Атрибут Framed-IP-Address

    Данный атрибут определяет IP-адрес, который должен быть выдан пользователю. Атрибут может быть указан в пакетах Access-Accept. Он также может быть указан в пакете Access-Request в качестве предпочтительного IP-адреса, но сервер не обязан следовать этому указанию.

    Атрибут Framed-IP-Netmask

    Данный атрибут определяет IP-маску, которая будет сконфигурирована для пользователя при доступе в сеть. Атрибут может использоваться в пакетах Access-Accept. Он может также использоваться в пакете Access-Request для указания предпочтений NAS серверу, но сервер не обязан следовать этому.

    Атрибут Framed-MTU

    Данный атрибут определяет MTU, который будет сконфигурирован для пользователя, если об этом значении не ведутся переговоры каким-либо другим способом, например в РРР. Атрибут может использоваться в Access-Accept пакетах. Он может быть указан в пакете Access-Request для указания серверу предпочтений, но сервер не обязан этому следовать.

    Атрибут Framed-Compression

    Данный атрибут определяет протокол сжатия. Атрибут может использоваться в пакетах Access-Accept. Он может быть указан в пакете Access-Request для указания серверу предпочтений, но сервер не обязан этому следовать.

    Может быть послано несколько атрибутов, определяющих протокол сжатия. За использование корректного протокола сжатия отвечает NAS.

    Атрибут Login-IP-Host

    Данный атрибут определяет систему, к которой должен подсоединиться пользователь, если используется атрибут Login-Service. Атрибут может использоваться в пакетах Access-Accept. Он может быть указан в пакете Access-Request для указания серверу предпочтений, но сервер не обязан этому следовать.

    Атрибут Login-Service

    Данный атрибут указывает сервис, который будет использоваться при соединении пользователя с хостом. Он может использоваться только в пакетах Acces-Accept.

    Атрибут Login-TCP-Port

    Данный атрибут определяет ТСР-порт, с которым будет устанавливать соединение пользователь, если присутствует атрибут Login-Service. Используется только в пакетах Access-Request.

    Атрибут Reply-Message

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

    Если используется в пакете Access-Challenge, может содержать диалоговое сообщение, которое выдается пользователю для ввода ответа.

    Если в сообщении содержится несколько Reply-Message, то они показываются в том же порядке, в каком расположены в пакете.

    Атрибут Callback-Number

    Атрибут определяет строку, которая будет использоваться при обратном вызове. Атрибут может использоваться в пакетах Access-Accept. Он может быть указан в пакете Access-Request для указания серверу предпочтений, но сервер не обязан этому следовать.

    Атрибут Callback-Id

    Данный атрибут определяет имя, которое будет использовано при обратном вызове и которое должно будет интерпретироваться NAS. Атрибут может использоваться в Access-Accept пакетах.

    Атрибут Framed-Route

    Данный атрибут предоставляет информацию маршрутизации, которая будет сконфигурирована для пользователя NAS. Атрибут используется в пакете Access-Accept, и может появиться там несколько раз.

    Атрибут State

    Атрибут посылается сервером клиенту в сообщении Access-Challenge и должен быть отправлен без изменения обратно клиентом серверу в новом Access-Request, который является ответом на запрос.

    Данный атрибут может быть послан сервером клиенту в сообщении Access-Accept, в котором должен быть также атрибут Termination-Action со значением RADIUS-Request. Если NAS выполняет Termination-Action, посылая новый Access-Request при завершении текущей сессии, он должен включить без изменения атрибут State в этот Access-Request.

    В любом случае клиент не должен интерпретировать данный атрибут локально. В пакете не может быть больше одного атрибута State. Использование данного атрибута во многом зависит от реализации.

    Атрибут Class

    Данный атрибут посылается сервером клиенту в Access-Accept, и должен отправляется без изменения клиентом серверу, хранящему учетные записи (аккаунтинг) как часть Accounting-Request пакета, если используется аккаунтинг. Клиент не должен интерпретировать данный атрибут локально.

    Атрибут Vendor-Specific

    Данный атрибут позволяет производителям поддерживать свои собственные атрибуты. Данный атрибут не должен влиять на операции протокола RADIUS.

    Сервер, который не знает, как интерпретировать относящуюся к производителю информацию, должен игнорировать данный атрибут.

    Атрибут Session-Timeout

    Данный атрибут устанавливает максимальное время (в секундах) перед тем, как завершить сессию или ожидание ответа. Атрибут может быть послан сервером клиенту в Access-Accept или Access-Challenge.

    Атрибут Idle-Timeout

    Данный атрибут устанавливает максимально допустимое число секунд простоя соединения перед тем, как завершить сессию или ожидание ответа. Атрибут может быть послан сервером клиенту в Access-Accept или Access-Challenge.

    Атрибут Termination-Action

    Данный атрибут определяет действие, которое должен выполнить NAS при завершении определенного сервиса. Используется только в пакетах Access-Accept.

    Атрибут Called-Station-Id

    Данный атрибут позволяет NAS послать в пакете Access-Request номер телефона, который использовал пользователь. Заметим, что это может отличаться от номера телефона, с которого пришел вызов. Данный атрибут используется только в пакетах Access-Request.

    Атрибут Calling-Station-Id

    Данный атрибут позволяет NAS послать в пакете Access-Request номер телефона, с которого пришел вызов. Атрибут используется только в пакетах Access-Request.

    Атрибут NAS-Identifier

    Данный атрибут содержит строку, идентифицирующую NAS, который создал исходный Access-Request. Атрибут используется только в пакетах Access-Request. Либо NAS-IP-Address, либо NAS-Identifier должен присутствовать в пакете Access-Request.

    Заметим, что NAS-Identifier не должен использоваться для выбора разделяемого секрета, аутентифицирующего запрос. Для выбора разделяемого секрета должен использоваться IP-адрес источника пакета Access-Request.

    Атрибут Proxy-State

    Данный атрибут может быть послан прокси-сервером другому серверу при перенаправлении Access-Request. Атрибут должен быть возвращен без изменения в Access-Accept, Access-Reject или Access-Challenge. Когда прокси-сервер получает ответ на свой запрос, он должен удалить свой собственный Proxy-State (последний Proxy-State в пакете) перед тем, как перенаправить ответ к NAS.

    Если атрибут Proxy-State добавляется в пакет, то он должен быть добавлен после всех имеющихся атрибутов Proxy-State.

    Содержимое всех других атрибутов Proxy-State, отличных от добавляемого, должно рассматриваться как неформатированные данные и не должно влиять на операции протокола.

    Использование атрибута Proxy-State зависит от протокола.

    Атрибут CHAP-Challenge

    Данный атрибут содержит CHAP Challenge, посылаемый NAS. Он используется только в Access-Request пакетах.

    Если значение вызова СНАР имеет длину в 16 октетов, то оно может быть размещено в поле аутентификатора запроса, а не в данном атрибуте.

    Атрибут NAS-Port-Type

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

    Атрибут Port-Limit

    Данный атрибут устанавливает максимальное количество портов, которое может предоставить NAS своим пользователям. Атрибут может быть послан сервером клиенту в пакете Access-Accept. Предполагается, что он будет использоваться вместе с многоканальным РРР или в аналогичной технологии. Он также может быть послан NAS к серверу в качестве предпочтения, какое количество портов может использоваться, но сервер может игнорировать это.

    Атрибуты RADIUS, специфичные для ПО Microsoft

    Рассмотрим атрибуты, которые могут быть переданы в одном или более атрибутах RADIUS, тип которых есть Vendor-Specific. В одном Vendor-Specific атрибуте могут быть переданы несколько атрибутов; в этом случае эти атрибуты пакетируются в виде последовательности троек Vendor-Type/Vendor-Length/Value, которые следуют за начальными полями Type, Length и Vendor-Id. Поле Vendor-ID должно быть установлено в десятичное значение 311 (Microsoft).

    Атрибуты для поддержки MS-CHAP V1

    Microsoft разработала протокол MS-CHAP для аутентификации удаленных рабочих станций Windows, обеспечивая функциональность, аналогичную той, к которой привыкли пользователи сети. Где это возможно, MS-CHAP аналогичен стандартному СНАР. Основная разница в следующем:

  • MS-CHAP предоставляет возможность вести переговоры об алгоритме (параметр Algorithm) в аутентификационном протоколе.
  • Пакет Response протокола MS-CHAP имеет формат, совместимый с Microsoft Windows и сетевым ПО Microsoft. Формат MS-CHAP не требует, чтобы аутентифицирующая сторона хранила пароли в явном виде или в обратимом зашифрованном виде.
  • Протокол MS-CHAP предоставляет механизм повторной аутентификации, которым управляет аутентифицирующая сторона.
  • Протокол MS-CHAP предоставляет механизм изменения пароля, которым управляет аутентифицирующая сторона.
  • Протокол MS-CHAP определяет расширенное множество кодов ошибок, которые возвращаются в поле Message пакета Failure.
  • Атрибуты RADIUS отражают эти отличия.

    Атрибут MS-CHAP-Challenge

    Данный атрибут содержит вызов, посылаемый NAS к пользователю MS-CHAP. Он может использоваться в пакетах Access-Request и Access-Challenge.

    Атрибут MS-CHAP-Response

    Данный атрибут содержит ответ, передаваемый пользователем в ответ на вызов. Атрибут используется только в пакетах Access-Request.

    Атрибут MS-CHAP-Domain

    Атрибут MS-CHAP-Domain определяет Window-домен, в котором пользователь был аутентифицирован. Данный атрибут может быть включен в пакеты Access-Accept и Accounting-Request.

    Атрибут MS-CHAP-Error

    Атрибут MS-CHAP-Error содержит информацию об ошибке, относящуюся к предыдущему MS-CHAP-обмену. Данный атрибут может использоваться в обменах как MS-CHAP-V1, так и MS-CHAP-V2. Данный атрибут используется только в пакетах Access-Reject.

    Атрибут MS-CHAP-CPW-1

    Данный атрибут позволяет пользователю изменить свой пароль, если он истек. Данный атрибут может использоваться только в пакетах Access-Request и должен включаться только в том случае, если атрибут MS-CHAP-Error был включен в непосредственно предшествующий пакет Access-Reject, поле String атрибута MS-CHAP-Error указывает, что пароль пользователя истек, и версия MS-CHAP не меньше 2.

    Атрибут MS-CHAP-CPW-2

    Данный атрибут позволяет пользователю изменить свой пароль, если он истек. Данный атрибут используется только в пакетах Access-Request, и включается только в том случае, если атрибут MS-CHAP-Error был включен в непосредственно предшествующий пакет Access-Reject, поле String атрибута MS-CHAP-Error указывает, что пароль истек, и версия MS-CHAP равна 2.

    Атрибут MS-CHAP-LM-Enc-PW

    Данный атрибут содержит новый пароль Windows, скрытый с помощью хэша старого пароля. Скрытый пароль Windows имеет длину 516 октетов; так как это длиннее, чем максимальная длина RADIUS-атрибута, пароль разделяется на несколько частей и передается в нескольких атрибутах. В атрибут включается последовательный номер (2 октета), чтобы обеспечить возможность правильной сборки фрагментов пароля.

    Атрибут используется только в пакетах Access-Request совместно с атрибутом MS-CHAP-CPW-2. Атрибут должен включаться только в том случае, если атрибут MS-CHAP-Error был включен в непосредственно предшествующий пакет Access-Reject, поле String атрибута MS-CHAP-Error указывает, что пароль пользователя истек, и версия MS-CHAP равна 2 или более.

    Атрибут MS-CHAP-NT-Enc-PW

    Данный атрибут содержит новый пароль Windows, скрытый с помощью хэша старого пароля Windows. Скрытый пароль Windows имеет длину 516 октетов; так как это длиннее, чем максимальная длина RADIUS-атрибута, то пароль разделяется на несколько частей и передается в нескольких атрибутах. Последовательный номер включается в атрибут, чтобы обеспечить сборку фрагментов пароля.

    Данный атрибут используется только в пакете Access-Request совместно с атрибутами MS-CHAP-CPW-2 и MS-CHAP-CPW. Он включает только в том случае, если атрибут MS-CHAP-Error был включен в непосредственно предшествующий пакет Access-Reject, поле String атрибута MS-CHAP-Error указывает, что пароль пользователя истек, и версия протокола MS-СНАР равна 2 или более.

    Атрибуты для поддержки MS-CHAP V2

    Рассмотрим RADIUS-атрибуты, необходимые для поддержки второй версии протокола MS-CHAP. Протокол MS-CHAP-V2 аналогичен, но не совместим с протоколом MS-CHAP-V1. Некоторые поля удалены или используются по-другому. Протокол MS-CHAP-V2 максимально согласован как с протоколом MS-CHAP-V1, так и со стандартным протоколом СНАР.

    Кратко различия между протоколами MS-CHAP-V2 и MS-CHAP-V1 следующие:

  • Протокол MS-CHAP-V2 дает возможность вести переговоры об алгоритме.
  • Протокол MS-CHAP-V2 предоставляет возможность взаимной аутентификации участников, посылая вызов противоположной стороне в пакете Response и аутентифицируя ответ в пакете Success.
  • Вычисление поля "Windows NT compatible challenge response" в пакете Response изменено на вызов и имя пользователя противоположной стороны.
  • В протоколе MS-CHAP-V1 поле "LAN Manager compatible challenge response" всегда посылается в пакете Response. В протоколе MS-CHAP-V2 данное поле заменено на поле Peer-Challenge.
  • Формат поля Message в пакете Failure изменен.
  • Пакеты Change Password (версии 1) и Change Password (версии 2) больше не поддерживаются. Они заменены на единственный пакет Change-Password.
  • Соответствующие атрибуты отражают эти различия.

    Атрибут MS-CHAP2-Response

    Данный атрибут содержит ответ, предоставленный противоположной стороной. Атрибут используется только в пакетах Access-Accept.

    Атрибут MS-CHAP2-Success

    Данный атрибут содержит ответ длиной 42 октета. Данная строка содержит поле Message из пакета Success, который посылался от NAS к противоположной стороне. Данный атрибут используется только в пакетах Access-Accept.

    Атрибут MS-CHAP2-CPW

    Данный атрибут позволяет пользователю изменить свой пароль, если он истек. Данный атрибут используется только совместно с атрибутом MS-CHAP-NT-Enc-PW2в пакетах Access-Request и включен только если в непосредственно предшествующий пакет Access-Reject был включен атрибут MS-CHAP-Error, указывающий, что пароль пользователя истек, и версия MS-CHAP равна 3.

    Атрибуты для поддержки МРРЕ

    Рассмотрим атрибуты, разработанные для поддержки протокола Microsoft Point-to-Point Encryption (MPPE). Протокол МРРЕ обеспечивает способ передачи РРР-пакетов в зашифрованном виде. В протоколе МРРЕ для шифрования используется алгоритм RC4. Могут вестись переговоры о длине ключа сессии для инициализации таблиц шифрования.

    Атрибут MS-CHAP-MPPE-Keys

    Атрибут MS-CHAP-MPPE-Keys содержит два ключа сессии, которые будут использоваться в протоколе МРРЕ. Данный атрибут включается только в пакеты Access-Accept.

    Атрибут MS-MPPE-Send-Key

    Атрибут MS-MPPE-Send-Key содержит ключ сессии, который будет использоваться в протоколе МРРЕ. Считается, что этот ключ используется для шифрования пакетов, посылаемых от NAS к удаленному хосту. Данный атрибут включается только в пакеты Access-Accept.

    Атрибут MS-MPPE-Recv-Key

    Атрибут MS-MPPE-Recv-Key содержит ключ сессии, который будет использоваться в протоколе МРРЕ. Считается, что данный ключ используется для шифрования пакетов, получаемых NAS от противоположной стороны. Данный атрибут включается только в пакеты Access-Accept.

    Атрибут MS-MPPE-Encryption-Policy

    Атрибут MS-MPPE-Encryption-Policy используется для указания того, что шифрование требуется или нет. Если поле Policy равно 1 (Encryption-Allowed), то может использоваться любой из типов шифрования, указанный в атрибуте MS-MPPE-Encryption-Types, или не использоваться ни один. Если поле Policy равно 2 (Encrypted-Required), то любой из типов шифрования, указанный в атрибуте MS-MPPE-Encrypted-Types, может использоваться, но по крайней мере один должен использоваться.

    Атрибут MS-MPPE-Encryption-Types

    Атрибут MS-MPPE-Encryption-Types используется для указания типов шифрования, которые могут использоваться в протоколе МРРЕ. Атрибут является 4-х октетным целым, которое интерпретируется как строка битов.

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

    RequestAccept Reject Challenge Атрибут
    0-10-1 0 0 User-Name
    0-1 0 0 0 User-Password
    0-1 0 0 0 CHAP-Password
    0-1 0 0 0 NAS-IP-Address
    0-1 0 0 0 NAS-Port
    0-1 0-1 0 0 Service-Type
    0-1 0-1 0 0 Framed-Protocol
    0-1 0-1 0 0 Framed-IP-Address
    0-1 0-1 0 0 Framed-IP-Netmask
    0 0-1 0 0 Framed-Routing
    0 0+ 0 0 Filter-Id
    0-1 0-1 0 0 Framed-MTU
    0+ 0+ 0 0 Framed-Compression
    0+ 0+ 0 0 Login-IP-Host
    0 0-1 0 0 Login-Service
    0 0-1 0 0 Login-TCP-Port
    0 0+ 0+ 0+ Reply-Message
    0-1 0-1 0 0 Callback-Number
    0 0-1 0 0 Callback-Id
    0 0+ 0 0 Framed-Route
    0-1 0-1 0 0-1 State
    0 0+ 0 0 Class
    0+ 0+ 0 0+ Vendor-Specific
    0 0-1 0 0-1 Session-Timeout
    0 0-1 0 0-1 Idle-Timeout
    0 0-1 0 0 Termination-Action
    0-1 0 0 0 Called-Station-Id
    0-1 0 0 0 Calling-Station-Id
    0-1 0 0 0 NAS-Identifier
    0+ 0+ 0+ 0+ Proxy-State
    0-1 0 0 0 CHAP-Challenge
    0-1 0 0 0 NAS-Port-Type
    0-1 0-1 0 0 Port-Limit

    Access-Request должен содержать либо User-Password, либо CHAP-Password, либо State. Access-Request не может одновременно содержать как User-Password, так и CHAP-Password.

    Access-Request должен содержать либо NAS-IP-Address, либо NAS-Identifier, либо и то, и другое.

    Обсуждение безопасности

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

    К паролям и другим секретам доступ должен быть максимально ограничен.

    Аккаунтинг RADIUS

    Рассмотрим использование протокола RADIUS для доставки информации об учетных записях от NAS к серверу учетных записей RADIUS.

    Последовательность пакетов

    (рис 12.19) Последовательность пакетов при выполнении аккаунтинга

    Если клиент сконфигурирован для использования RADIUS-аккаунтинга, то перед началом получения сервиса создается пакет Accounting Start, описывающий тип сервиса и пользователя, которому необходим этот сервис. Эта информация посылается к серверу аккаунтинга RADIUS.

    (рис 12.20) Пример первого пакета Accounting Start RADIUS

    Затем этот сервер присылает подтверждение, что пакет был получен.

    После завершения получения сервиса NAS создает пакет Accounting Stop, в котором описан тип полученного сервиса и возможно различная статистическая информация, такая как затраченное время, количество входящего и исходящего трафика. Этот пакет посылается к серверу аккаунтинга RADIUS, который присылает подтверждение, что пакет был получен.

    Клиент посылает пакеты Accounting-Request до тех пор, пока не получит тем или иным способом подтверждения. После того, как клиент не получил подтверждения в течение определенного времени, он может перенаправить запрос альтернативному серверу.

    Сервер аккаунтинга RADIUS может делать запросы другим серверам, в этом случае он действует как клиент.

    Использование прокси-сервера

    Аккаунтинг прокси функционирует аналогично аутентификационному прокси.

    (рис 12.21) Топология сети при использовании прокси-сервера RADIUS
  • NAS посылает запрос на аккаунтинг к перенаправляющему серверу.
  • Перенаправляющий сервер записывает в лог запрос на аккаунтинг (если требуется), добавляет свой атрибут Proxy-State (если требуется) после всех остальных атрибутов Proxy-State, изменяет Аутентификатор запроса и перенаправляет запрос удаленному серверу.
  • Удаленный сервер записывает в лог (если требуется) все атрибуты Proxy-State, а также помещает их в пакет ответа и посылает перенаправляющему серверу.
  • Перенаправляющий сервер вырезает последний атрибут (если он был добавлен на шаге 2), изменяет аутентификатор запроса и посылает ответ аккаунтинга к NAS.
  • Перенаправляющий сервер не должен модифицировать существующие в пакете атрибуты Proxy-State и Class.

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

    Формат пакета аккаунтинга аналогичен формату пакета аутентификации, значения полей другие. В UDP инкапсулируется ровно один RADIUS-пакет. Порт получателя – 1813.

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

    (рис 12.22) Формат RADIUS-пакета аккаунтинга

    Поле Code

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

    4 Accounting-Request
    5 Accounting-Response
    

    Поле Identifier

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

    Поле Length

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

    Поле Authenticator

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

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

    В пакетах Accounting-Request значение Authenticator является 16-октетным значением MD5, называемым аутентификатором запроса.

    NAS и аккаунтинг сервер RADIUS разделяют секрет. Поле аутентификатора запроса содержит результат вычисления MD5 над следующими значениями: Code + Identifier + Length + 16 октетов нулей + атрибуты запроса + разделяемый секрет.

    Заметим, что аутентификатор запроса в Accounting-Request может вычисляться другим способом, чем аутентификатор запроса в Access-Request, потому что в Accounting-Request нет атрибута User-Password.

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

    Поле Authenticator в пакете Accounting-Response называется аутентификатором ответа и содержит результат вычисления MD5 над следующими значениями:

    Code + Identifier + Length + аутентификатор запроса из пакета Accounting-Request + атрибуты ответа, если есть, + разделяемый секрет. 
    Полученные 16 октетов записываются в поле Authenticator пакета Accounting-Response.
    

    Поле Attributes

    В поле Attributes могут быть включена атрибуты разных типов. Атрибуты некоторых типов могут быть включены несколько раз. В этом случае порядок атрибутов одного и того же типа фиксирован.

    Типы пакетов

    Тип пакета RADIUS определяется полем Code.

    Пакет Accounting-Request

    Пакеты Accounting-Request посылаются от клиента (обычно NAS или прокси) к аккаунтинг-серверу RADIUS и содержат информацию, используемую для авторизации доступа к сервису, предоставляемого пользователю. Клиент передает RADIUS-пакет с полем Code, установленным в 4 (Accounting-Request).

    При получении Accounting-Request сервер должен передать ответ Accounting-Response, если он успешно записал пакет аккаунтинга, и не должен передавать никакого ответа, если произошел сбой при записи пакета аккаунтинга.

    Любой атрибут, который используется в пакетах Access-Request и Access-Accept, может использоваться и в пакете Accounting-Request, за исключением следующих атрибутов, которые не должны присутствовать в пакетах Accounting-Request: User-Password, CHAP-Password, Reply-Message, State. В пакете Accounting-Request должен присутствовать атрибуты либо NAS-IP-Address, либо NAS-Identifier. Пакет должен содержать NAS-Port, или NAS-Port-Type, или оба атрибута, если только в сервисе не определен порт, или NAS не различает свои порты.

    Если пакет Accounting-Request содержит Framed-IP-Address, то атрибут должен содержать IP-адрес пользователя. Если Access-Request использует специальные значения для Framed-IP-Address, которые означают, что NAS должен назначить IP-адрес пользователю или вести о нем переговоры, то Framed-IP-Address (если есть) в Accounting-Request должен содержать реальный IP-адрес, который назначен или о котором договорились.

    Пакет Accounting-Response

    Пакеты Accounting-Response посылаются сервером RADIUS клиенту как подтверждение того, что Accounting-Request был получен и успешно записан. Если Accounting-Request был успешно записан, то аккаунинг сервер должен передать пакет с полем Code, установленным в 5 (Accounting-Response). При получении Accounting-Response клиент проверяет, что поле Identifier соответствует отправленному в запросе. Аутентификатор ответа должен содержать корректное значение. Недействительный пакет молча отбрасывается.

    Атрибуты аккаунтинга

    Атрибуты отражают детали аутентификации, авторизации и аккаунтинга в запросе и ответе.

    Некоторые атрибуты могут быть включены несколько раз. Результат такого включения зависит от атрибута.

    Атрибуты имеют следующий формат.

    (рис 12.23) Формат RADIUS-атрибутов

    Поле Type

    Поле Type имеет длину один октет. Основные типы атрибутов следующие:

    40	Acct-Status-Type
    41	Acct-Delay-Time
    42	Acct-Input-Octets
    43	Acct-Output-Octets
    44	Acct-Session-Id
    45	Acct-Authentic
    46	Acct-Session-Time
    47	Acct-Input-Packets
    48	Acct-Output-Packets
    49	Acct-Terminate-Cause
    50	Acct-Multi-Session-Id
    51	Acct-Link-Count
    

    Поле Length

    Поле Length имеет длину один октет и определяет длину данного атрибута, включая поля Type, Length и Value. Если в Accounting-Request получен атрибут с неправильным значением поля Length, то весь пакет отбрасывается.

    Поле Value

    Поле Value состоит из нуля или более октетов и содержит информацию, зависящую от атрибута. Формат и длина поля Value зависят от типа и длины данного атрибута.

    Атрибут Acct-Status-Type

    Атрибут указывает, маркирует ли данный пакет Accounting-Request начало пользовательского сервиса (Start) или конец (Stop).

    Он может использоваться клиентом для маркировки начала аккаунтинга (например, после перезагрузки), указав специальное значение атрибута Accounting-On и пометив конец аккаунтинга (например, перед плановым перезапуском) специальным значением атрибута Accounting-Off.

    Атрибут Acct-Delay-Time

    Атрибут указывает сколько секунд клиент пытается послать данную запись, и может вычитаться из времени получения сервером пакета Accounting-Request, т.е. время передачи по сети будет игнорироваться.

    Атрибут Acct-Input-Octets

    Атрибут определяет, сколько октетов было получено с порта, на котором был предоставлен сервис, и может присутствовать только в пакетах Accounting-Request, в которых Acct-Status-Type установлен в Stop.

    Атрибут Acct-Output-Octets

    Атрибут определяет, сколько октетов было послано на порт, на котором выполняется данный сервис, и может присутствовать только в пакетах Accounting-Request, в которых атрибут Acct-Status-Type установлен в Stop.

    Атрибут Acct-Session-Id

    Атрибут содержит уникальный идентификатор, который используется для нахождения соответствующих пар старт- и стоп-записей в лог-файле. Старт- и стоп-записи для данной сессии должны иметь один и тот же Acct-Session-Id. Пакет Access-Request может содержать атрибут Acct-Session-Id. Если он содержит этот атрибут, то NAS должен использовать тот же самый Acct-Session-Id во всех пакетах Accounting-Request, относящихся к данной сессии.

    Атрибут Acct-Authentic

    Атрибут может быть включен в пакет Accounting-Request для указания того, был ли пользователь аутентифицирован самим NAS или использовался протокол RADIUS или другой протокол удаленной аутентификации. Для пользователей, которые получили сервис без выполнения аутентификации, не должны создаваться записи аккаунтинга.

    Атрибут Acct-Session-Time

    Атрибут указывает, сколько секунд пользователь получал сервис, и может присутствовать только в пакетах Accounting-Request, в которых атрибут Acct-Status-Type установлен в Stop.

    Атрибут Acct-Input-Packets

    Атрибут указывает, сколько пакетов было получено с порта в течение использования данного сервиса пользователем, и может присутствовать только в пакетах Accounting-Request, в которых атрибут Acct-Status-Type установлен в Stop.

    Атрибут Acct-Output-Packets

    Атрибут указывает, сколько пакетов было послано на порт в течение использования данного сервиса пользователем, и может присутствовать только в пакетах Accounting-Request, в которых атрибут Acct-Status-Type установлен в Stop.

    Атрибут Acct-Terminate-Cause

    Атрибут указывает, как сессия была завершена, и может присутствовать только в пакетах Accounting-Request, в которых атрибут Acct-Status-Type установлен в Stop.

    Атрибут Acct-Multi-Session-Id

    Данный атрибут является уникальным Accounting ID, что позволяет легко объединить в лог-файле несколько взаимосвязанных сессий. Каждая сессия имеет уникальный атрибут Acct-Session-Id, но взаимосвязанные сессии имеют один и тот же атрибут Acct-Link-Count.

    Атрибут Acct-Link-Count

    Атрибут содержит количество взаимосвязанных (с помощью атрибута Acct-Link-Count) сессий. NAS может включить атрибут Acct-Link-Count в любой пакет Accounting-Request, который связан с несколькими сессиями.

    Это дает возможность аккаунтинг-серверу объединить все записи в логах, относящиеся к взаимосвязанным сессиям.

    Страницы:

    Топология сети

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

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

    Как правило, при большом числе пользователей идентификационные и аутентификационные данные хранятся на отдельном сервере. Это позволяет освободить межсетевой экран от необходимости хранить большие объемы идентификационных и аутентификационных данных. Доступ к серверу, на котором хранятся идентификационные и аутентификационные данные, как правило, осуществляется либо по протоколу RADIUS, либо по прото-колу LDAP (рис. 12.1).

    Будем предполагать, что сеть имеет следующую топологию.

  • Пользователю, который вошел на удаленный хост, требуется доступ к серверу, который расположен либо в LAN, либо в DMZ.
  • Между двумя межсетевыми экранами выполняется один из протоколов VPN, для которого необходима аутентификация пользователя, получающего доступ в локальную сеть или DMZ. В нашем случае аутентификационная информация ука-зывается на МЭ1.
  • Вся аутентификационная и авторизационная информация хра-нится либо на сервере RADIUS, либо на сервере LDAP.
  • (рис 12.1) Топология сети при использовании сервера идентификации

    Протокол RADIUS

    Основные понятия

    Конечная цель – предоставить аутентифицированный и авторизованный доступ пользователю с удаленного хоста к серверу, расположенному в LAN или DMZ. Между МЭ1 и МЭ2 выполняется один из протоколов VPN. Учетные записи пользователей хранятся на сервере RADIUS. Идентифика-ционная и аутентификационная информация указывается на удаленной точке туннеля. Запрос аутентификации и используемый сервер, на котором хранятся идентификационные и аутентификационные данные, указываются на локальной стороне туннеля. При успешной аутентификации пользователю с удаленного хоста предоставляется доступ к серверу, расположенному в LAN или DMZ.

    Взаимодействующими сторонами в протоколе RADIUS (Remote Au-thentication Dial In User Service) являются:

    Сервер RADIUS– сервер, выполняющий аутентификацию, авторизацию и хранение учетных записей (аккаунтинг). В английском варианте Authentication, Authorization и Accounting – ААА. RADIUS предоставляет сервисы ААА для NAS.

    Сервер Сетевого Доступа (Network Access Server – NAS)– устройство, которое предоставляет удаленным пользователям доступ в сеть и является клиентом для сервера RADIUS.

    Аутентификация, авторизация и аккаунтинг выполняются для удаленной стороны туннеля, в нашем случае для учетной записи, указанной в конфигурации МЭ1.

    Основные принципы функционирования RADIUS:

  • Клиент-серверная модель функционирования. NAS функционирует как клиент RADIUS. Он пересылает пользовательскую аутентификационную информацию серверу RADIUS и затем выполняет действия в соответствии с полученным ответом.

    Сервер RADIUS получает запрос от NAS, аутентифицирует пользователя и затем возвращает NAS всю необходимую для предоставления сервиса информацию.

    Сервер RADIUS может функционировать как прокси-клиент для других серверов RADIUS или аутентификационных серверов других типов.

  • Обеспечение сетевой безопасности. Транзакции между NAS и сервером RADIUS аутентифицированы с помощью общего секрета, который никогда не посылается по сети. Кроме того, все пользовательские пароли посылаются между NAS и серве-ром RADIUS в защищенном виде, что исключает возможность просмотра. (рис 12.2) Задание секрета между NAS и сервером RADIUS на стороне NAS (рис 12.3) Задание секрета между NAS и сервером RADIUS на стороне сервера RADIUS (рис 12.4) Защищенность пользовательского пароля при пересылке между NAS и сервером RADIUS
  • Гибкие аутентификационные механизмы. RADIUS сервер может поддерживать различные способы аутентификации пользователей. Если используются имя пользователя и пароль, то поддерживаются такие способы аутентификации, как РРР РАР, СНАР и MS-CHAP. (рис 12.5) Параметры РРР-аутентификации на стороне NAS (рис 12.6) Параметры РРР-аутентификации на стороне сервера RADIUS
  • Расширяемый протокол. Все транзакции состоят из троек значений переменной длины (Атрибут – Длина – Значение). Могут быть добавлены новые атрибуты без изменения существующих реализаций протокола.
  • В протоколе RADIUS все данные передаются в элементах, которые называются атрибутами.

    Атрибуты RADIUS используются для передачи:

  • Аутентификационных данных пользователей.
  • Авторизационных данных пользователей.
  • Данных, необходимых для учета пользовательской деятельно-сти, например, создание логов активных сессий.
  • Атрибут может быть определен в спецификации протокола RADIUS, и в этом случае говорят, что он является стандартным и принадлежит стандартному пространству имен, либо может быть определен производителем, в этом случае говорят, что он принадлежит пространству имен производи-теля и являются Vendor-Specific Attributes (VSA).

    Такие атрибуты определяются производителем и указываются в поле String.

    Значение каждого атрибута принадлежит определенному типу данных. В отличие от протокола SNMP в RADIUS нет формального языка определения данных.

    Типы данных могут быть "базовые" и "комплексные". Базовые типы данных используют один из существующих типов данных RADIUS, которые могут содержаться в стандартном атрибуте или VSA-атрибуте.

    (рис 12.7) Пример атрибутов RADIUS

    Типы данных

    В RADIUS определены следующие базовые типы данных:

  • 32-битное беззнаковое целое в сетевом порядке байтов.
  • Перечислимые типы данных, представленные как 32-битные беззнаковые целые со списком отображений имени на значение (например, Service-Type).
  • IPv4-адрес в сетевом порядке байтов.
  • Время как 32-битное беззнаковое целое в сетевом порядке байтов и секунды, начиная с 00:00:00 UTC, Январь, 1, 1970.
  • IPv6-адрес в сетевом порядке байтов.
  • Interface-Id – 8-ми байтовая строка в сетевом порядке байтов.
  • Префикс IPv6.
  • Строка длиной не более 253 байтов (октетов). Данная строка может содержать произвольные структуры данных.
  • Текст UTF-8 длиной не более 253 байтов (октетов).
  • Следующие типы данных определены как "комплексные":

  • Атрибуты, сгруппированные в логический контейнер, используя механизм тегирования.
  • Атрибуты, которым для пересылки требуется более 253 октетов текстовых или строковых данных. Это могут быть структуры данных, определенных вне протокола RADIUS, например, EAP-Message.
  • Пространство имен производителя

    Пространство имен производителя обозначается как VSA. При этом Vendor-Id определяет конкретного производителя, а поле String определяет уникальный тип атрибута для данного производителя.

    Принципы функционирования RADIUS

    Функционирование RADIUS основано на следующих принципах:

  • Протокол RADIUS является протоколом типа Запрос / Ответ.
  • Протокол RADIUS не поддерживает состояния.
  • NAS не должен предоставлять сервисы при получении ответа от сервера Access-Reject и Disconnect-Request.
  • Хотя производители серверов RADIUS и могут поддерживать состояние, в самом протоколе RADIUS понятие состояния не определено. Однако определенная информация может передаваться от одной транзакции к другой с помощью атрибута State.

    В спецификации RADIUS определены атрибуты, содержащие конфиденциальную информацию (например, пароли). Такие атрибуты не пересылаются в запросе и не возвращаются в ответе в открытом виде. Кроме того, аутентификационный механизм связывает вместе последовательность пакетов Access-Request / Access-Challenge в одной аутентификационной сессии с помощью атрибута State.

    Протокол RADIUS является протоколом типа запрос-ответ, выполняющимся между клиентом и сервером RADIUS. Один пакет запроса требует в ответ по крайней мере один пакет, который посылается на IP-адрес и порт клиента.

    Длина пакета RADIUS не может быть больше 4096 байтов (октетов).

    Даже если длина пакета меньше, чем 4096 байтов, она может быть больше, чем Path MTU (PMTU). Любой пакет, длина которого больше, чем PMTU, будет фрагментирован, что может привести к сложности прохожде-ния межсетевых экранов, которые отбрасывают фрагментированные пакеты. Если приходится использовать фрагментированные пакеты, то необхо-димо тщательное тестирование корректного прохождения всех межсетевых экранов и устройств, которые могут отбрасывать фрагментированные пакеты. Некоторые устройства не могут передавать фрагментированные UDP-пакеты, затрудняя развертывание RADIUS в сети с такими устройствами. Рекомендуется следить за тем, чтобы сообщения RADIUS были как можно более маленькими.

    Если необходимо передавать пакеты большей длины, чем 4096 байтов, то используется один из следующих подходов:

  • Использование последовательности пакетов. При аутентификации и авторизации может быть использована последовательность Access-Request / Access-Response пакетов.
  • Использование имен, а не значений. Если в атрибуте указана политика, которая заранее известна NAS, то может быть передано имя политики, а не сама политика.
  • Использование технологий пакетизации и технологий определения максимального PMTU (RFC 4821).
  • Аутентификация RADIUS

    Последовательность пакетов

    (рис 12.8) Последовательность пакетов при выполнении аутентификации

    Пользователь предоставляет NAS аутентификационную информацию, после этого NAS использует протокол RADIUS для аутентификации данного пользователя. Эта аутентификационная информация может предоставляться в виде настраиваемого приглашения для входа, когда от пользователя требуется ввести имя и пароль. Либо может использовать такой протокол, как РРР, в котором существуют аутентификационные пакеты для пересылки данной информации.

    (рис 12.9) Задание аутентификационных данных пользователя на противоположной NAS стороне туннеля

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

    (рис 12.10) Пересылка аутентификационных данных пользователя по туннелю между NAS и противоположной стороной туннеля

    Атрибуты RADIUS используются для передачи аутентификационной и авторизационной информации и деталей конфигурирования.

    Некоторые атрибуты могут быть включены в сообщение несколько раз. Результат такого включения зависит от атрибута.

    Если есть несколько атрибутов одного и того же типа, то прокси-серверы не должны изменять их упорядоченность. Порядок атрибутов разных типов прокси-серверами может быть изменен. Поведение RADIUS-сервера и клиента никак не зависит от упорядоченности атрибутов разных типов. Не требуется, чтобы атрибуты одного и того же типа были расположены рядом друг с другом.

    (рис 12.11) Пересылка аутентификационных данных между NAS и сервером RADIUS

    Access-Request передается по сети серверу RADIUS. Если в течение определенного времени ответ не получен, то запрос повторяется. Клиент может также направить запросы к альтернативному серверу или нескольким серверам в случае, если первичный сервер выключен или не доступен. Альтернативный сервер может использоваться либо после определенного числа неудачных попыток обращения к первичному серверу, либо по круговому алгоритму.

    После получения запроса сервер RADIUS выполняет аутентификацию NAS. Запрос от NAS, с которым сервер RADIUS не имеет разделяемого секрета, молча, т.е. без уведомления противоположной стороны, отбрасывается.

    Если NAS аутентифицирован, RADIUS-сервер ищет в базе данных пользователей имя, указанное в запросе. Запись пользователя в базе данных содержит список требований, которые должны быть выполнены, чтобы пользователю можно было разрешить доступ. Это всегда включает проверку пароля, но можно также определить дополнительные параметры, которые проверяются перед тем, как пользователю будет разрешен доступ.

    (рис 12.12) Указание параметров аутентификации на стороне сервера RADIUS

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

    Если в запросе Access-Request есть какие-либо атрибуты Proxy-State, они должны быть скопированы без каких-либо изменений и в том же порядке в пакет ответа. Остальные атрибуты могут быть расположены до, после и даже между Proxy-State атрибутами.

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

    (рис 12.13) Пример сообщения Access-Reject при отсутствии у пользователя или NAS требуемых аутентификационных данных

    Если все условия выполнены, и RADIUS-серверу требуется получить дополнительные ответы от пользователя, RADIUS-сервер посылает Access-Challenge ответ. Он может включить текстовое сообщение, которое будет показано пользователю, и может включать атрибут State.

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

    В ответе не может быть больше одного экземпляра атрибута State. На это сообщение сервер может ответить новым Access-Request, указав в нем либо Access-Request, либо Access-Reject, либо другой Access-Challenge.

    Если все условия выполнены, в ответ Access-Request помещается список конфигурационных значений. Эти значения включают тип сервиса (например, SLIP, PPP, Login User) и все необходимые значения для получения требуемого сервиса. Для SLIP и РРР это может включать такие значения, как IP-адрес, маска подсети, MTU, алгоритм сжатия и идентификаторы требуемых фильтров пакетов. Могут быть также указаны требуемый протокол и хост.

    (рис 12.14) Пример сообщения Access-Request при выполнении аутентификации

    Вызов / Ответ

    При аутентификации Вызов/Ответ (Challenge/Response) пользователь получает заранее неизвестное число запросов, на которые он должен дать ответ. Для создания корректного ответа пользователь должен иметь либо специальные устройства, такие как смарт-карты, либо ПО, которое создает ответ. Если у пользователя нет соответствующего устройства или в ПО не установлено корректное значение секрета, пользователь считается неавторизованным.

    Пакет Access-Challenge обычно содержит Reply-Message, которое показывается пользователю, например, числовое значение, которое никогда не повторяется.

    Затем пользователь вводит это случайное число в смарт-карту или программу, которая вычисляет ответ. Пользователь вводит этот ответ, и NAS пересылает его на сервер RADIUS во втором Access-Request. Если ответ правильный, сервер RADIUS возвращает Access-Request, в противном случае возвращает Access-Reject.

    Пример:

    (рис 12.15) Пример последовательности пакетов при Challenge/Response

    NAS посылает пакет Access-Request к серверу RADIUS с атрибутами NAS-Identifier, NAS-Port, User-Name, User-Password (который может быть фиксированной строкой типа "challenge" и игнорироваться). Сервер посылает обратно пакет Access-Challenge с атрибутами State, Reply-Message и строкой "Challenge 12345678, введите ваш ответ", которую NAS показывает пользователю. NAS выдает приглашение пользователю для ответа и посылает полученный ответ в новом пакете Access-Request к серверу (с новым ID), содержащий атрибуты NAS-Identifier, NAS-Port, User-Name, User-Password. В этом случае ответ, который только что ввел пользователь, защищен. Этот ответ содержит тот же самый атрибут State, который был указан в Access-Challenge. После этого сервер присылает обратно либо пакет Access-Request, либо пакет Access-Reject.

    Интероперабельность с РАР и СНАР

    При использовании РАР NAS получает РАР ID и пароль и посылает их в пакете Access-Request в качестве атрибутов User-Name и User-Password. NAS может включить атрибуты Service-Type = Framed-User и Framed-Protocol=PPP в качестве подсказки серверу RADIUS, что используется РРР-сервис.

    При использовании СНАР NAS создает случайный вызов (желательно 16 октетов) и посылает его пользователю, который возвращает СНАР-ответ вместе с атрибутами CHAP ID и СНАР Username. Затем NAS посылает пакет Access-Request к серверу RADIUS со значением СНАР Username в атрибуте User-Name и со значением СНАР ID и СНАР-ответом в атрибуте CHAP-Password. Случайный вызов либо может быть включен в атрибут CHAP-Challenge, либо, если его длина больше 16 октетов, он может быть помещен в поле Request Authenticator в пакете Access-Request. NAS может включить атрибуты Service-Type = Framed-User и Framed-Protocol = PPP в качестве подсказки серверу RADIUS, что используется РРР-сервис.

    Если сервер RADIUS не может выполнить необходимую проверку, он возвращает Access-Reject. Например, при использовании СНАР требуется, чтобы пароль пользователя был доступен серверу в незашифрованном виде для того, чтобы он мог хэшировать его вместе с вызовом и сравнить с тем, что получил в качестве СНАР-ответа. Если пароль не доступен серверу RADIUS в незашифрованном виде, то он посылает клиенту Access-Reject.

    Использование прокси-сервера

    (рис 12.16) Топология сети при использовании прокси-сервера RADIUS

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

    NAS посылает свой запрос на доступ к перенаправляющему серверу, который перенаправляет этот запрос на удаленный сервер. Удаленный сервер присылает ответ (Access-Request, Access-Reject или Access-Challenge) обратно перенаправляющему серверу, который посылает его к NAS. Атрибут User-Name может содержать идентификатор сетевого доступа (например, userID, переданный клиентом при РРР-аутентификации). Выбор сервера, которому следует перенаправить запрос, основывается на аутентификационной области (realm). Аутентификационная область может быть частью области идентификатора сетевого доступа ("области имени"). Выбор сервера, которому пересылается запрос, может быть основан и на каком-то другом критерии.

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

    Следующий сценарий иллюстрирует взаимодействие между RADIUS-прокси, NAS и удаленным RADIUS-сервером:

  • NAS посылает запрос на доступ перенаправляющему серверу.
  • Перенаправляющий сервер отправляет запрос на доступ к удаленному серверу.
  • Удаленный сервер присылает сообщения Access-Request, Access-Reject или Access-Challenge обратно перенаправляющему серверу. В нашем случае предположим, что посылается Access-Request.
  • Перенаправляющий сервер посылает сообщение Access-Request к NAS.
  • Перенаправляющий сервер должен рассматривать все атрибуты Proxy-State в пакете как неструктурированные данные. Его действия не должны зависеть от содержимого Proxy-State атрибутов, которые были добавлены предыдущими серверами.

    Если в запросе, полученном от клиента, существуют какие-либо атрибуты Proxy-State , перенаправляющий сервер должен включить эти атрибуты Proxy-State в ответ клиенту. Перенаправляющий сервер может как включать, так и не включать Proxy-State атрибуты в запрос доступа при перенаправлении запроса. Если перенаправляющий сервер не включил Proxy-State атрибуты в перенаправленный запрос доступа, он должен присоединить их к ответу перед тем, как посылать ответ обратно клиенту.

    Рассмотрим каждый шаг более детально.

  • NAS посылает свой запрос на доступ перенаправляющему серверу. Перенаправляющий сервер проверяет User-Password, если он есть, используя общий секрет с NAS. Если в пакете присутствует атрибут CHAP-Password и нет атрибута CHAP-Challenge, перенаправляющий сервер не должен изменять атрибут Request-Authenticator или должен копировать его в атрибут CHAP-Challenge. Перенаправляющий сервер может добавить в пакет не более одного атрибута Proxy-State. Если он добавляет атрибут Proxy-State, то он должен быть добавлен после всех остальных атрибутов Proxy-State, которые уже есть в пакете. Перенаправляющий сервер не изменяет последовательность атрибутов одного и того же типа, включая атрибуты Proxy-State.
  • Перенаправляющий сервер обеспечивает конфиденциальность User-Password, если он присутствует. Для защиты от replay-атак используется секрет, который он разделяет с удаленным сервером. Перенаправляющий сервер может добавить значение Identifier, после чего перенаправляет запрос на доступ к удаленному серверу.
  • Удаленный сервер (если он является конечным получателем) проверяет пользователя, используя User-Password, CHAP-Password или какой-либо другой метод, и возвращает обрат-но перенаправляющему серверу ответ Access-Request, Access-Reject или Access-Challenge. Предположим, что посылается Access-Request. Удаленный сервер должен копировать, не модифицируя, все атрибуты Proxy-State (и только их) из запроса на доступ в пакет ответа.
  • Перенаправляющий сервер проверяет аутентификатор в ответе, используя секрет, который он разделяет с удаленным сервером, и молча отбрасывает пакет, если он не проходит проверку. Если пакет успешно проходит проверку, то перенаправ-ляющий сервер удаляет последний атрибут Proxy-State (если он был присоединен), обеспечивает целостность аутентификатора ответа, используя секрет, который он разделяет с NAS, и посылает Access-Request к NAS.
  • Перенаправляющему серверу может понадобиться изменить атрибуты для реализации локальной политики. Но при этом перенаправляющий сервер не должен изменять имеющиеся в пакете атрибуты Proxy-State, State или Class.

    Производители перенаправляющих серверов определяют значения, которые они готовы принимать в качестве значения атрибута Service-Type. Это может повлиять на передачу значения Service-Type от NAS в проксируемом пакете Access-Request. Могут также существовать механизмы, которые блокируют определенные типы сервисов.

    Причина использования UDP

    Часто возникает вопрос, почему в качестве транспорта сообщений RADIUS используется UDP, а не ТСР. UDP был выбран исключительно по техническим причинам.

    Существуют определенные проблемы, в результате которых UDP становится более предпочтительным транспортным протоколом. RADIUS является протоколом, основанным на транзакциях, который обладает следующими характеристиками:

  • Если запрос к первичному аутентификационному серверу выполняется со сбоем, должен быть сделан запрос к вторичному серверу. Для выполнения этого требования копия запроса должна храниться в стеке протоколов выше транспортного уровня, чтобы иметь возможность выполнить альтернативную передачу. Это также означает, что требуется таймер повторной передачи.
  • Требования к задержкам по времени для данного протокола существенно отличаются от тех, которые обеспечиваются в протоколе ТСР.

    С одной стороны RADIUS не требует сверх точного определения потерянных данных. Пользователь может подождать несколько секунд для завершения аутентификации, поэтому по-стоянные повторные передачи, которые имеют место в ТСР, не требуются.

    С другой стороны пользователя нельзя заставлять ждать завершения аутентификации несколько минут. Следовательно, надежная доставка ТСР-данных в течение двух минут не нужна. Быстрее использовать альтернативный сервер, который может предоставить доступ.

  • Протокол не поддерживает состояния, поэтому естественнее использовать UDP.

    И клиент, и сервер могут завершить соединение, любая из сторон может выполнить перезапуск всей системы. При этом обычно не возникает проблем, связанных с необходимостью определения потерянного соединения, которые имеют место в протоколе ТСР. Код может быть просто написан с учетом обработки аномальных событий. В самом протоколе UDP полностью отсутствует какая-либо специальная обработка при потере соединения. И клиент, и сервер могут использовать данное UDP-соединение только один раз.

  • Использование UDP упрощает реализацию сервера.
  • В ранних реализациях RADIUS сервер состоял из единственной нити. Это означало, что одновременно мог получаться, обрабатываться и возвращаться единственный запрос. Это за-медляло обработку в тех случаях, когда используемым механизмам безопасности требовалось много времени. Также могла переполниться очередь запросов на сервер, если сотням людей ежеминутно требовалась аутентификация. Очевидным решением этой проблемы является реализация сервера с использованием нескольких нитей. Сделать это значительно проще, используя UDP. Каждый процесс обрабатывал отдельный запрос и отвечал клиенту NAS простым UDP-пакетом.

    Это не является панацеей от всех бед. При использовании UDP на прикладном уровне требуется помнить о проблемах, которые автоматически решаются в ТСР, например управлением таймерами повторных передач.

    Использование повторных передач

    Если RADIUS-сервер и альтернативный RADIUS-сервер разделяют общий секрет, то можно переслать пакет альтернативному RADIUS-серверу с тем же самым ID и аутентификатором запроса, так как содержимое атрибутов не изменилось. Если необходимо использовать новый аутентификатор запроса при отправке запроса альтернативному серверу, это можно сделать.

    Если сервер изменил содержимое атрибута User-Password (или любого другого атрибута), то он должен создать новый аутентификатор запроса и, следовательно, новый ID.

    Если NAS повторяет запрос к тому же самому серверу, и атрибуты не изменились, следует использовать тот же самый аутентификатор запроса, ID и порт источника. Если какой-либо атрибут изменился, необходимо использовать новые аутентификатор запроса и ID.

    NAS может использовать один и тот же ID для всех серверов или может для каждого сервера использовать отдельный ID.

    Проверка жизнеспособности сервера

    Некоторые производителя посылают тестовые запросы для проверки жизнеспособности сервера. Это не самая лучшая практика, так как увели-чивается трафик и уменьшается масштабируемость, без предоставления при этом никакой дополнительной информации. Так как запрос RADIUS содержится в единственной дейтаграмме, можно вместо этого просто выполнить команду ping.

    Для мониторинга RADIUS-сервера следует использовать протокол SNMP.

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

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

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

    (рис 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.

    Атрибуты аутентификации

    Атрибуты имеют следующий формат:

    (рис 12.18) Формат атрибутов RADIUS

    Поле Type

    Поле Type имеет длину один октет. Возможные типы стандартизованы и перечислены в соответствующих RFC. Как RADIUS-сервер, так и клиент могут игнорировать атрибуты, тип которых они не знают.

    Основные типы атрибутов следующие:

    
    1	User-Name
    2	User-Password
    3	CHAP-Password
    4	NAS-IP-Address
    5	NAS-Port
    6	Service-Type
    7	Framed-Protocol
    8	Framed-IP-Address
    9	Framed-IP-Netmask
    10	
    11	
    12	Framed-MTU
    13	Framed-Compression
    14	Logon-IP-Host
    15	Login-Service
    16	Login-TCP-Port
    17	
    18	Reply-Message
    19	Callback-Number
    20	Callback-Id
    21	
    22	Framed-Route
    23	Framed-IPX-Network
    24	State
    25	Class
    26	Vendor-Specific
    27	Session-Timeout
    28	Idle-Timeout
    29	Termination-Action
    30	Called-Station-Id
    31	Calling-Station-Id
    32	NAS-Identifier
    33	Proxy-State
    34	-59  
    60	CHAP-Challenge
    61	NAS-Port-Type
    62	Port-Limit
    63	Login-LAT-Port
    

    Атрибут User-Name

    Атрибут содержит имя аутентифицируемого пользователя. Он обязательно указывается в пакетах Access-Request.

    Он может быть послан в пакете Access-Request, в этом случае клиент должен использовать это имя во всех пакетах Accounting-Request данной сессии. Если в Access-Request включен ServiceType=Rlogin и атрибут User-Name, NAS может использовать возвращаемое значение User-Name при выполнении сервиса Rlogin в UNIX-системах. Значением атрибута может быть текст, идентификатор сетевого доступа или DN прото-кола LDAP.

    Атрибут User-Password

    В данном атрибуте указывается пароль аутентифицируемого пользователя или введенная пользователем информация при получении пакета Access-Challenge. Атрибут используется только в пакетах Access-Request.

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

    Если пароль длиннее 16 символов, второй раз используется хэш-функция MD5, на вход которой подается разделяемый секрет, за которым следует результат первого XOR. После этого выполняется XOR результата второго использования MD5 и вторых 16 октетов пароля. При необходимости данная операция повторяется нужное число раз.

    Обозначим разделяемый секрет – S, псевдослучайный 128-битный аутентификатор запроса – RA. 16-октетные части пароля – р1, р2 и т.д.

    b1 = MD5 (S + RA)		c(1) = p1 xor b1
    b2 = MD5 (S + c(1))		c(2) = p2 xor b2
    String содержит с(1) + с(2) +  ….., 
    где + обозначает конкатенацию.
    

    Атрибут СНАР-Password

    В данном атрибуте указывается ответ на запрос, предоставленный протоколом СНАР, в ответ на Вызов (Challenge). Атрибут используется только в пакетах Access-Request.

    Значение Вызова СНАР берется из атрибута CHAP-Challenge, если он присутствует в пакете, в противном случае используется поле Аутентификатора запроса.

    Атрибут NAS-IP-Address

    Данный атрибут определяет IP-адрес NAS, который запросил аутентификацию пользователя. Этот IP-адрес должен быть уникальным у данного RADIUS-сервера. NAS-IP-Address используется только в пакетах Access-Request. В пакете Access-Request должен присутствовать либо NAS-IP-Address, либо NAS-Identifier.

    Заметим, что NAS-IP-Address не должен использоваться для выбора разделяемого секрета, который используется для аутентификации запроса. Для выбора разделяемого секрета должен использоваться IP-адрес источника пакета Access-Request.

    Атрибут NAS-Port

    Атрибут определяет номер физического порта NAS, который аутентифицирует пользователя. Атрибут используется только в пакетах Access-Request. Заметим, что это порт физического соединения NAS, а не ТСР или UDP номер порта. В пакете Access-Request должен присутствовать либо NAS-Port, либо NAS-Port-Type.

    Атрибут Service-Type

    Данный атрибут определяет тип сервиса, который запросил пользователь, или тип сервиса, который будет предоставлен. Он может использоваться в пакетах Access-Request и Access-Accept. Не требуется, чтобы NAS мог реализовывать все типы сервисов, неизвестные или не поддерживаемые сервисы игнорируются и должны рассматриваться как Access-Reject.

    Следующие типы сервисов могут использоваться в Access-Request. При использовании в Access-Request они могут рассматриваться как подсказка RADIUS-серверу какой тип сервиса требуется пользователю. Но при этом не требуется, чтобы сервер следовал этой подсказке.

    Login Пользователь должен войти на хост.
    Framed Для соединения с пользователем должен использоваться такой протокол, как РРР или SLIP.
    Callback Login Пользователь должен быть отсоединен, затем должен быть сделан обратный вызов, после чего пользователь должен быть снова подсоединен к хосту.
    Callback Framed Пользователь должен быть отсоединен, затем должен быть сделан обратный вызов, после чего должен начать выполняться такой протокол, как РРР или SLIP.
    Outbound Пользователю должен быть предоставлен доступ к внешним устройствам.
    Administrative Пользователю должен быть предоставлен доступ к административному интерфейсу NAS, с которого могут выполняться привилегированные команды.
    NAS prompt Пользователю должно быть выдано приглашение для ввода непривилегированных команд NAS.
    Authenticate Only Требуется только аутентификация, в Access-Request не должно возвращаться никакой авторизационной информации (обычно используется прокси-серверами, а не самим NAS).
    Callback NAS Prompt Пользователь отсоединяется, осуществляется обратный вызов и пользователю выдается приглашение для выполнения непривилегированных команд NAS.
    Call Check Используется NAS в пакете Access-Request для указания того, что вызов был получен, и что в ответ на вызов RADIUS-сервер должен послать сообщение Access-Accept или Access-Reject, обычно основываясь на атрибутах Called-Station-Id или Calling-Station-Id. Рекомендуется, чтобы Access-Request использовал Calling-Station-Id в качестве значения User-Name.
    Callback Administrative Пользователь должен быть отсоединен, выполнен обратный вызов, затем предоставлен доступ к административному интерфейсу NAS, с которого могут выполняться привилегированные команды.

    Атрибут Framed-Protocol

    Атрибут указывает внешний протокол, который используется для получения доступа. Может использоваться в пакетах Access-Request и Access-Accept.

    Атрибут Framed-IP-Address

    Данный атрибут определяет IP-адрес, который должен быть выдан пользователю. Атрибут может быть указан в пакетах Access-Accept. Он также может быть указан в пакете Access-Request в качестве предпочтительного IP-адреса, но сервер не обязан следовать этому указанию.

    Атрибут Framed-IP-Netmask

    Данный атрибут определяет IP-маску, которая будет сконфигурирована для пользователя при доступе в сеть. Атрибут может использоваться в пакетах Access-Accept. Он может также использоваться в пакете Access-Request для указания предпочтений NAS серверу, но сервер не обязан следовать этому.

    Атрибут Framed-MTU

    Данный атрибут определяет MTU, который будет сконфигурирован для пользователя, если об этом значении не ведутся переговоры каким-либо другим способом, например в РРР. Атрибут может использоваться в Access-Accept пакетах. Он может быть указан в пакете Access-Request для указания серверу предпочтений, но сервер не обязан этому следовать.

    Атрибут Framed-Compression

    Данный атрибут определяет протокол сжатия. Атрибут может использоваться в пакетах Access-Accept. Он может быть указан в пакете Access-Request для указания серверу предпочтений, но сервер не обязан этому следовать.

    Может быть послано несколько атрибутов, определяющих протокол сжатия. За использование корректного протокола сжатия отвечает NAS.

    Атрибут Login-IP-Host

    Данный атрибут определяет систему, к которой должен подсоединиться пользователь, если используется атрибут Login-Service. Атрибут может использоваться в пакетах Access-Accept. Он может быть указан в пакете Access-Request для указания серверу предпочтений, но сервер не обязан этому следовать.

    Атрибут Login-Service

    Данный атрибут указывает сервис, который будет использоваться при соединении пользователя с хостом. Он может использоваться только в пакетах Acces-Accept.

    Атрибут Login-TCP-Port

    Данный атрибут определяет ТСР-порт, с которым будет устанавливать соединение пользователь, если присутствует атрибут Login-Service. Используется только в пакетах Access-Request.

    Атрибут Reply-Message

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

    Если используется в пакете Access-Challenge, может содержать диалоговое сообщение, которое выдается пользователю для ввода ответа.

    Если в сообщении содержится несколько Reply-Message, то они показываются в том же порядке, в каком расположены в пакете.

    Атрибут Callback-Number

    Атрибут определяет строку, которая будет использоваться при обратном вызове. Атрибут может использоваться в пакетах Access-Accept. Он может быть указан в пакете Access-Request для указания серверу предпочтений, но сервер не обязан этому следовать.

    Атрибут Callback-Id

    Данный атрибут определяет имя, которое будет использовано при обратном вызове и которое должно будет интерпретироваться NAS. Атрибут может использоваться в Access-Accept пакетах.

    Атрибут Framed-Route

    Данный атрибут предоставляет информацию маршрутизации, которая будет сконфигурирована для пользователя NAS. Атрибут используется в пакете Access-Accept, и может появиться там несколько раз.

    Атрибут State

    Атрибут посылается сервером клиенту в сообщении Access-Challenge и должен быть отправлен без изменения обратно клиентом серверу в новом Access-Request, который является ответом на запрос.

    Данный атрибут может быть послан сервером клиенту в сообщении Access-Accept, в котором должен быть также атрибут Termination-Action со значением RADIUS-Request. Если NAS выполняет Termination-Action, посылая новый Access-Request при завершении текущей сессии, он должен включить без изменения атрибут State в этот Access-Request.

    В любом случае клиент не должен интерпретировать данный атрибут локально. В пакете не может быть больше одного атрибута State. Использование данного атрибута во многом зависит от реализации.

    Атрибут Class

    Данный атрибут посылается сервером клиенту в Access-Accept, и должен отправляется без изменения клиентом серверу, хранящему учетные записи (аккаунтинг) как часть Accounting-Request пакета, если используется аккаунтинг. Клиент не должен интерпретировать данный атрибут локально.

    Атрибут Vendor-Specific

    Данный атрибут позволяет производителям поддерживать свои собственные атрибуты. Данный атрибут не должен влиять на операции протокола RADIUS.

    Сервер, который не знает, как интерпретировать относящуюся к производителю информацию, должен игнорировать данный атрибут.

    Атрибут Session-Timeout

    Данный атрибут устанавливает максимальное время (в секундах) перед тем, как завершить сессию или ожидание ответа. Атрибут может быть послан сервером клиенту в Access-Accept или Access-Challenge.

    Атрибут Idle-Timeout

    Данный атрибут устанавливает максимально допустимое число секунд простоя соединения перед тем, как завершить сессию или ожидание ответа. Атрибут может быть послан сервером клиенту в Access-Accept или Access-Challenge.

    Атрибут Termination-Action

    Данный атрибут определяет действие, которое должен выполнить NAS при завершении определенного сервиса. Используется только в пакетах Access-Accept.

    Атрибут Called-Station-Id

    Данный атрибут позволяет NAS послать в пакете Access-Request номер телефона, который использовал пользователь. Заметим, что это может отличаться от номера телефона, с которого пришел вызов. Данный атрибут используется только в пакетах Access-Request.

    Атрибут Calling-Station-Id

    Данный атрибут позволяет NAS послать в пакете Access-Request номер телефона, с которого пришел вызов. Атрибут используется только в пакетах Access-Request.

    Атрибут NAS-Identifier

    Данный атрибут содержит строку, идентифицирующую NAS, который создал исходный Access-Request. Атрибут используется только в пакетах Access-Request. Либо NAS-IP-Address, либо NAS-Identifier должен присутствовать в пакете Access-Request.

    Заметим, что NAS-Identifier не должен использоваться для выбора разделяемого секрета, аутентифицирующего запрос. Для выбора разделяемого секрета должен использоваться IP-адрес источника пакета Access-Request.

    Атрибут Proxy-State

    Данный атрибут может быть послан прокси-сервером другому серверу при перенаправлении Access-Request. Атрибут должен быть возвращен без изменения в Access-Accept, Access-Reject или Access-Challenge. Когда прокси-сервер получает ответ на свой запрос, он должен удалить свой собственный Proxy-State (последний Proxy-State в пакете) перед тем, как перенаправить ответ к NAS.

    Если атрибут Proxy-State добавляется в пакет, то он должен быть добавлен после всех имеющихся атрибутов Proxy-State.

    Содержимое всех других атрибутов Proxy-State, отличных от добавляемого, должно рассматриваться как неформатированные данные и не должно влиять на операции протокола.

    Использование атрибута Proxy-State зависит от протокола.

    Атрибут CHAP-Challenge

    Данный атрибут содержит CHAP Challenge, посылаемый NAS. Он используется только в Access-Request пакетах.

    Если значение вызова СНАР имеет длину в 16 октетов, то оно может быть размещено в поле аутентификатора запроса, а не в данном атрибуте.

    Атрибут NAS-Port-Type

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

    Атрибут Port-Limit

    Данный атрибут устанавливает максимальное количество портов, которое может предоставить NAS своим пользователям. Атрибут может быть послан сервером клиенту в пакете Access-Accept. Предполагается, что он будет использоваться вместе с многоканальным РРР или в аналогичной технологии. Он также может быть послан NAS к серверу в качестве предпочтения, какое количество портов может использоваться, но сервер может игнорировать это.

    Атрибуты RADIUS, специфичные для ПО Microsoft

    Рассмотрим атрибуты, которые могут быть переданы в одном или более атрибутах RADIUS, тип которых есть Vendor-Specific. В одном Vendor-Specific атрибуте могут быть переданы несколько атрибутов; в этом случае эти атрибуты пакетируются в виде последовательности троек Vendor-Type/Vendor-Length/Value, которые следуют за начальными полями Type, Length и Vendor-Id. Поле Vendor-ID должно быть установлено в десятичное значение 311 (Microsoft).

    Атрибуты для поддержки MS-CHAP V1

    Microsoft разработала протокол MS-CHAP для аутентификации удаленных рабочих станций Windows, обеспечивая функциональность, аналогичную той, к которой привыкли пользователи сети. Где это возможно, MS-CHAP аналогичен стандартному СНАР. Основная разница в следующем:

  • MS-CHAP предоставляет возможность вести переговоры об алгоритме (параметр Algorithm) в аутентификационном протоколе.
  • Пакет Response протокола MS-CHAP имеет формат, совместимый с Microsoft Windows и сетевым ПО Microsoft. Формат MS-CHAP не требует, чтобы аутентифицирующая сторона хранила пароли в явном виде или в обратимом зашифрованном виде.
  • Протокол MS-CHAP предоставляет механизм повторной аутентификации, которым управляет аутентифицирующая сторона.
  • Протокол MS-CHAP предоставляет механизм изменения пароля, которым управляет аутентифицирующая сторона.
  • Протокол MS-CHAP определяет расширенное множество кодов ошибок, которые возвращаются в поле Message пакета Failure.
  • Атрибуты RADIUS отражают эти отличия.

    Атрибут MS-CHAP-Challenge

    Данный атрибут содержит вызов, посылаемый NAS к пользователю MS-CHAP. Он может использоваться в пакетах Access-Request и Access-Challenge.

    Атрибут MS-CHAP-Response

    Данный атрибут содержит ответ, передаваемый пользователем в ответ на вызов. Атрибут используется только в пакетах Access-Request.

    Атрибут MS-CHAP-Domain

    Атрибут MS-CHAP-Domain определяет Window-домен, в котором пользователь был аутентифицирован. Данный атрибут может быть включен в пакеты Access-Accept и Accounting-Request.

    Атрибут MS-CHAP-Error

    Атрибут MS-CHAP-Error содержит информацию об ошибке, относящуюся к предыдущему MS-CHAP-обмену. Данный атрибут может использоваться в обменах как MS-CHAP-V1, так и MS-CHAP-V2. Данный атрибут используется только в пакетах Access-Reject.

    Атрибут MS-CHAP-CPW-1

    Данный атрибут позволяет пользователю изменить свой пароль, если он истек. Данный атрибут может использоваться только в пакетах Access-Request и должен включаться только в том случае, если атрибут MS-CHAP-Error был включен в непосредственно предшествующий пакет Access-Reject, поле String атрибута MS-CHAP-Error указывает, что пароль пользователя истек, и версия MS-CHAP не меньше 2.

    Атрибут MS-CHAP-CPW-2

    Данный атрибут позволяет пользователю изменить свой пароль, если он истек. Данный атрибут используется только в пакетах Access-Request, и включается только в том случае, если атрибут MS-CHAP-Error был включен в непосредственно предшествующий пакет Access-Reject, поле String атрибута MS-CHAP-Error указывает, что пароль истек, и версия MS-CHAP равна 2.

    Атрибут MS-CHAP-LM-Enc-PW

    Данный атрибут содержит новый пароль Windows, скрытый с помощью хэша старого пароля. Скрытый пароль Windows имеет длину 516 октетов; так как это длиннее, чем максимальная длина RADIUS-атрибута, пароль разделяется на несколько частей и передается в нескольких атрибутах. В атрибут включается последовательный номер (2 октета), чтобы обеспечить возможность правильной сборки фрагментов пароля.

    Атрибут используется только в пакетах Access-Request совместно с атрибутом MS-CHAP-CPW-2. Атрибут должен включаться только в том случае, если атрибут MS-CHAP-Error был включен в непосредственно предшествующий пакет Access-Reject, поле String атрибута MS-CHAP-Error указывает, что пароль пользователя истек, и версия MS-CHAP равна 2 или более.

    Атрибут MS-CHAP-NT-Enc-PW

    Данный атрибут содержит новый пароль Windows, скрытый с помощью хэша старого пароля Windows. Скрытый пароль Windows имеет длину 516 октетов; так как это длиннее, чем максимальная длина RADIUS-атрибута, то пароль разделяется на несколько частей и передается в нескольких атрибутах. Последовательный номер включается в атрибут, чтобы обеспечить сборку фрагментов пароля.

    Данный атрибут используется только в пакете Access-Request совместно с атрибутами MS-CHAP-CPW-2 и MS-CHAP-CPW. Он включает только в том случае, если атрибут MS-CHAP-Error был включен в непосредственно предшествующий пакет Access-Reject, поле String атрибута MS-CHAP-Error указывает, что пароль пользователя истек, и версия протокола MS-СНАР равна 2 или более.

    Атрибуты для поддержки MS-CHAP V2

    Рассмотрим RADIUS-атрибуты, необходимые для поддержки второй версии протокола MS-CHAP. Протокол MS-CHAP-V2 аналогичен, но не совместим с протоколом MS-CHAP-V1. Некоторые поля удалены или используются по-другому. Протокол MS-CHAP-V2 максимально согласован как с протоколом MS-CHAP-V1, так и со стандартным протоколом СНАР.

    Кратко различия между протоколами MS-CHAP-V2 и MS-CHAP-V1 следующие:

  • Протокол MS-CHAP-V2 дает возможность вести переговоры об алгоритме.
  • Протокол MS-CHAP-V2 предоставляет возможность взаимной аутентификации участников, посылая вызов противоположной стороне в пакете Response и аутентифицируя ответ в пакете Success.
  • Вычисление поля "Windows NT compatible challenge response" в пакете Response изменено на вызов и имя пользователя противоположной стороны.
  • В протоколе MS-CHAP-V1 поле "LAN Manager compatible challenge response" всегда посылается в пакете Response. В протоколе MS-CHAP-V2 данное поле заменено на поле Peer-Challenge.
  • Формат поля Message в пакете Failure изменен.
  • Пакеты Change Password (версии 1) и Change Password (версии 2) больше не поддерживаются. Они заменены на единственный пакет Change-Password.
  • Соответствующие атрибуты отражают эти различия.

    Атрибут MS-CHAP2-Response

    Данный атрибут содержит ответ, предоставленный противоположной стороной. Атрибут используется только в пакетах Access-Accept.

    Атрибут MS-CHAP2-Success

    Данный атрибут содержит ответ длиной 42 октета. Данная строка содержит поле Message из пакета Success, который посылался от NAS к противоположной стороне. Данный атрибут используется только в пакетах Access-Accept.

    Атрибут MS-CHAP2-CPW

    Данный атрибут позволяет пользователю изменить свой пароль, если он истек. Данный атрибут используется только совместно с атрибутом MS-CHAP-NT-Enc-PW2в пакетах Access-Request и включен только если в непосредственно предшествующий пакет Access-Reject был включен атрибут MS-CHAP-Error, указывающий, что пароль пользователя истек, и версия MS-CHAP равна 3.

    Атрибуты для поддержки МРРЕ

    Рассмотрим атрибуты, разработанные для поддержки протокола Microsoft Point-to-Point Encryption (MPPE). Протокол МРРЕ обеспечивает способ передачи РРР-пакетов в зашифрованном виде. В протоколе МРРЕ для шифрования используется алгоритм RC4. Могут вестись переговоры о длине ключа сессии для инициализации таблиц шифрования.

    Атрибут MS-CHAP-MPPE-Keys

    Атрибут MS-CHAP-MPPE-Keys содержит два ключа сессии, которые будут использоваться в протоколе МРРЕ. Данный атрибут включается только в пакеты Access-Accept.

    Атрибут MS-MPPE-Send-Key

    Атрибут MS-MPPE-Send-Key содержит ключ сессии, который будет использоваться в протоколе МРРЕ. Считается, что этот ключ используется для шифрования пакетов, посылаемых от NAS к удаленному хосту. Данный атрибут включается только в пакеты Access-Accept.

    Атрибут MS-MPPE-Recv-Key

    Атрибут MS-MPPE-Recv-Key содержит ключ сессии, который будет использоваться в протоколе МРРЕ. Считается, что данный ключ используется для шифрования пакетов, получаемых NAS от противоположной стороны. Данный атрибут включается только в пакеты Access-Accept.

    Атрибут MS-MPPE-Encryption-Policy

    Атрибут MS-MPPE-Encryption-Policy используется для указания того, что шифрование требуется или нет. Если поле Policy равно 1 (Encryption-Allowed), то может использоваться любой из типов шифрования, указанный в атрибуте MS-MPPE-Encryption-Types, или не использоваться ни один. Если поле Policy равно 2 (Encrypted-Required), то любой из типов шифрования, указанный в атрибуте MS-MPPE-Encrypted-Types, может использоваться, но по крайней мере один должен использоваться.

    Атрибут MS-MPPE-Encryption-Types

    Атрибут MS-MPPE-Encryption-Types используется для указания типов шифрования, которые могут использоваться в протоколе МРРЕ. Атрибут является 4-х октетным целым, которое интерпретируется как строка битов.

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

    RequestAccept Reject Challenge Атрибут
    0-10-1 0 0 User-Name
    0-1 0 0 0 User-Password
    0-1 0 0 0 CHAP-Password
    0-1 0 0 0 NAS-IP-Address
    0-1 0 0 0 NAS-Port
    0-1 0-1 0 0 Service-Type
    0-1 0-1 0 0 Framed-Protocol
    0-1 0-1 0 0 Framed-IP-Address
    0-1 0-1 0 0 Framed-IP-Netmask
    0 0-1 0 0 Framed-Routing
    0 0+ 0 0 Filter-Id
    0-1 0-1 0 0 Framed-MTU
    0+ 0+ 0 0 Framed-Compression
    0+ 0+ 0 0 Login-IP-Host
    0 0-1 0 0 Login-Service
    0 0-1 0 0 Login-TCP-Port
    0 0+ 0+ 0+ Reply-Message
    0-1 0-1 0 0 Callback-Number
    0 0-1 0 0 Callback-Id
    0 0+ 0 0 Framed-Route
    0-1 0-1 0 0-1 State
    0 0+ 0 0 Class
    0+ 0+ 0 0+ Vendor-Specific
    0 0-1 0 0-1 Session-Timeout
    0 0-1 0 0-1 Idle-Timeout
    0 0-1 0 0 Termination-Action
    0-1 0 0 0 Called-Station-Id
    0-1 0 0 0 Calling-Station-Id
    0-1 0 0 0 NAS-Identifier
    0+ 0+ 0+ 0+ Proxy-State
    0-1 0 0 0 CHAP-Challenge
    0-1 0 0 0 NAS-Port-Type
    0-1 0-1 0 0 Port-Limit

    Access-Request должен содержать либо User-Password, либо CHAP-Password, либо State. Access-Request не может одновременно содержать как User-Password, так и CHAP-Password.

    Access-Request должен содержать либо NAS-IP-Address, либо NAS-Identifier, либо и то, и другое.

    Обсуждение безопасности

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

    К паролям и другим секретам доступ должен быть максимально ограничен.

    Аккаунтинг RADIUS

    Рассмотрим использование протокола RADIUS для доставки информации об учетных записях от NAS к серверу учетных записей RADIUS.

    Последовательность пакетов

    (рис 12.19) Последовательность пакетов при выполнении аккаунтинга

    Если клиент сконфигурирован для использования RADIUS-аккаунтинга, то перед началом получения сервиса создается пакет Accounting Start, описывающий тип сервиса и пользователя, которому необходим этот сервис. Эта информация посылается к серверу аккаунтинга RADIUS.

    (рис 12.20) Пример первого пакета Accounting Start RADIUS

    Затем этот сервер присылает подтверждение, что пакет был получен.

    После завершения получения сервиса NAS создает пакет Accounting Stop, в котором описан тип полученного сервиса и возможно различная статистическая информация, такая как затраченное время, количество входящего и исходящего трафика. Этот пакет посылается к серверу аккаунтинга RADIUS, который присылает подтверждение, что пакет был получен.

    Клиент посылает пакеты Accounting-Request до тех пор, пока не получит тем или иным способом подтверждения. После того, как клиент не получил подтверждения в течение определенного времени, он может перенаправить запрос альтернативному серверу.

    Сервер аккаунтинга RADIUS может делать запросы другим серверам, в этом случае он действует как клиент.

    Использование прокси-сервера

    Аккаунтинг прокси функционирует аналогично аутентификационному прокси.

    (рис 12.21) Топология сети при использовании прокси-сервера RADIUS
  • NAS посылает запрос на аккаунтинг к перенаправляющему серверу.
  • Перенаправляющий сервер записывает в лог запрос на аккаунтинг (если требуется), добавляет свой атрибут Proxy-State (если требуется) после всех остальных атрибутов Proxy-State, изменяет Аутентификатор запроса и перенаправляет запрос удаленному серверу.
  • Удаленный сервер записывает в лог (если требуется) все атрибуты Proxy-State, а также помещает их в пакет ответа и посылает перенаправляющему серверу.
  • Перенаправляющий сервер вырезает последний атрибут (если он был добавлен на шаге 2), изменяет аутентификатор запроса и посылает ответ аккаунтинга к NAS.
  • Перенаправляющий сервер не должен модифицировать существующие в пакете атрибуты Proxy-State и Class.

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

    Формат пакета аккаунтинга аналогичен формату пакета аутентификации, значения полей другие. В UDP инкапсулируется ровно один RADIUS-пакет. Порт получателя – 1813.

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

    (рис 12.22) Формат RADIUS-пакета аккаунтинга

    Поле Code

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

    4 Accounting-Request
    5 Accounting-Response
    

    Поле Identifier

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

    Поле Length

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

    Поле Authenticator

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

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

    В пакетах Accounting-Request значение Authenticator является 16-октетным значением MD5, называемым аутентификатором запроса.

    NAS и аккаунтинг сервер RADIUS разделяют секрет. Поле аутентификатора запроса содержит результат вычисления MD5 над следующими значениями: Code + Identifier + Length + 16 октетов нулей + атрибуты запроса + разделяемый секрет.

    Заметим, что аутентификатор запроса в Accounting-Request может вычисляться другим способом, чем аутентификатор запроса в Access-Request, потому что в Accounting-Request нет атрибута User-Password.

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

    Поле Authenticator в пакете Accounting-Response называется аутентификатором ответа и содержит результат вычисления MD5 над следующими значениями:

    Code + Identifier + Length + аутентификатор запроса из пакета Accounting-Request + атрибуты ответа, если есть, + разделяемый секрет. 
    Полученные 16 октетов записываются в поле Authenticator пакета Accounting-Response.
    

    Поле Attributes

    В поле Attributes могут быть включена атрибуты разных типов. Атрибуты некоторых типов могут быть включены несколько раз. В этом случае порядок атрибутов одного и того же типа фиксирован.

    Типы пакетов

    Тип пакета RADIUS определяется полем Code.

    Пакет Accounting-Request

    Пакеты Accounting-Request посылаются от клиента (обычно NAS или прокси) к аккаунтинг-серверу RADIUS и содержат информацию, используемую для авторизации доступа к сервису, предоставляемого пользователю. Клиент передает RADIUS-пакет с полем Code, установленным в 4 (Accounting-Request).

    При получении Accounting-Request сервер должен передать ответ Accounting-Response, если он успешно записал пакет аккаунтинга, и не должен передавать никакого ответа, если произошел сбой при записи пакета аккаунтинга.

    Любой атрибут, который используется в пакетах Access-Request и Access-Accept, может использоваться и в пакете Accounting-Request, за исключением следующих атрибутов, которые не должны присутствовать в пакетах Accounting-Request: User-Password, CHAP-Password, Reply-Message, State. В пакете Accounting-Request должен присутствовать атрибуты либо NAS-IP-Address, либо NAS-Identifier. Пакет должен содержать NAS-Port, или NAS-Port-Type, или оба атрибута, если только в сервисе не определен порт, или NAS не различает свои порты.

    Если пакет Accounting-Request содержит Framed-IP-Address, то атрибут должен содержать IP-адрес пользователя. Если Access-Request использует специальные значения для Framed-IP-Address, которые означают, что NAS должен назначить IP-адрес пользователю или вести о нем переговоры, то Framed-IP-Address (если есть) в Accounting-Request должен содержать реальный IP-адрес, который назначен или о котором договорились.

    Пакет Accounting-Response

    Пакеты Accounting-Response посылаются сервером RADIUS клиенту как подтверждение того, что Accounting-Request был получен и успешно записан. Если Accounting-Request был успешно записан, то аккаунинг сервер должен передать пакет с полем Code, установленным в 5 (Accounting-Response). При получении Accounting-Response клиент проверяет, что поле Identifier соответствует отправленному в запросе. Аутентификатор ответа должен содержать корректное значение. Недействительный пакет молча отбрасывается.

    Атрибуты аккаунтинга

    Атрибуты отражают детали аутентификации, авторизации и аккаунтинга в запросе и ответе.

    Некоторые атрибуты могут быть включены несколько раз. Результат такого включения зависит от атрибута.

    Атрибуты имеют следующий формат.

    (рис 12.23) Формат RADIUS-атрибутов

    Поле Type

    Поле Type имеет длину один октет. Основные типы атрибутов следующие:

    40	Acct-Status-Type
    41	Acct-Delay-Time
    42	Acct-Input-Octets
    43	Acct-Output-Octets
    44	Acct-Session-Id
    45	Acct-Authentic
    46	Acct-Session-Time
    47	Acct-Input-Packets
    48	Acct-Output-Packets
    49	Acct-Terminate-Cause
    50	Acct-Multi-Session-Id
    51	Acct-Link-Count
    

    Поле Length

    Поле Length имеет длину один октет и определяет длину данного атрибута, включая поля Type, Length и Value. Если в Accounting-Request получен атрибут с неправильным значением поля Length, то весь пакет отбрасывается.

    Поле Value

    Поле Value состоит из нуля или более октетов и содержит информацию, зависящую от атрибута. Формат и длина поля Value зависят от типа и длины данного атрибута.

    Атрибут Acct-Status-Type

    Атрибут указывает, маркирует ли данный пакет Accounting-Request начало пользовательского сервиса (Start) или конец (Stop).

    Он может использоваться клиентом для маркировки начала аккаунтинга (например, после перезагрузки), указав специальное значение атрибута Accounting-On и пометив конец аккаунтинга (например, перед плановым перезапуском) специальным значением атрибута Accounting-Off.

    Атрибут Acct-Delay-Time

    Атрибут указывает сколько секунд клиент пытается послать данную запись, и может вычитаться из времени получения сервером пакета Accounting-Request, т.е. время передачи по сети будет игнорироваться.

    Атрибут Acct-Input-Octets

    Атрибут определяет, сколько октетов было получено с порта, на котором был предоставлен сервис, и может присутствовать только в пакетах Accounting-Request, в которых Acct-Status-Type установлен в Stop.

    Атрибут Acct-Output-Octets

    Атрибут определяет, сколько октетов было послано на порт, на котором выполняется данный сервис, и может присутствовать только в пакетах Accounting-Request, в которых атрибут Acct-Status-Type установлен в Stop.

    Атрибут Acct-Session-Id

    Атрибут содержит уникальный идентификатор, который используется для нахождения соответствующих пар старт- и стоп-записей в лог-файле. Старт- и стоп-записи для данной сессии должны иметь один и тот же Acct-Session-Id. Пакет Access-Request может содержать атрибут Acct-Session-Id. Если он содержит этот атрибут, то NAS должен использовать тот же самый Acct-Session-Id во всех пакетах Accounting-Request, относящихся к данной сессии.

    Атрибут Acct-Authentic

    Атрибут может быть включен в пакет Accounting-Request для указания того, был ли пользователь аутентифицирован самим NAS или использовался протокол RADIUS или другой протокол удаленной аутентификации. Для пользователей, которые получили сервис без выполнения аутентификации, не должны создаваться записи аккаунтинга.

    Атрибут Acct-Session-Time

    Атрибут указывает, сколько секунд пользователь получал сервис, и может присутствовать только в пакетах Accounting-Request, в которых атрибут Acct-Status-Type установлен в Stop.

    Атрибут Acct-Input-Packets

    Атрибут указывает, сколько пакетов было получено с порта в течение использования данного сервиса пользователем, и может присутствовать только в пакетах Accounting-Request, в которых атрибут Acct-Status-Type установлен в Stop.

    Атрибут Acct-Output-Packets

    Атрибут указывает, сколько пакетов было послано на порт в течение использования данного сервиса пользователем, и может присутствовать только в пакетах Accounting-Request, в которых атрибут Acct-Status-Type установлен в Stop.

    Атрибут Acct-Terminate-Cause

    Атрибут указывает, как сессия была завершена, и может присутствовать только в пакетах Accounting-Request, в которых атрибут Acct-Status-Type установлен в Stop.

    Атрибут Acct-Multi-Session-Id

    Данный атрибут является уникальным Accounting ID, что позволяет легко объединить в лог-файле несколько взаимосвязанных сессий. Каждая сессия имеет уникальный атрибут Acct-Session-Id, но взаимосвязанные сессии имеют один и тот же атрибут Acct-Link-Count.

    Атрибут Acct-Link-Count

    Атрибут содержит количество взаимосвязанных (с помощью атрибута Acct-Link-Count) сессий. NAS может включить атрибут Acct-Link-Count в любой пакет Accounting-Request, который связан с несколькими сессиями.

    Это дает возможность аккаунтинг-серверу объединить все записи в логах, относящиеся к взаимосвязанным сессиям.

    Вернуться к учебному плану