Система Kerberos
Kerberos - сетевой протокол аутентификации, позволяющий передавать данные через незащищённые сети для безопасной идентификации. Ориентирован, в первую очередь, на клиент-серверную модель и обеспечивает взаимную аутентификацию — оба пользователя через сервер подтверждают личности друг друга. Данная модель является одним из вариантов Нидхем-Шрёдер-протокола аутентификации на основе доверенной третьей стороны и его модификациях, предложенных Denning и Sacco.
Развитие протокола
Ранние версии
Ранние версии Kerberos (c 1 по 3) были созданы внутри МIT и использовались в целях тестирования. Эти реализации содержали существенные ограничения и были полезны только для изучения новых идей и выявления проблем, которые могли возникнуть во время разработки.
Kerberos 4
Kerberos 4 впервые была опубликована 24 января 1989 года. Она стала первой версией, распространяемой за пределами MIT, подготовленной для нескольких производителей, которые включили её в свои операционные системы. Кроме того, другие крупные проекты по распределенным системам (например AFS) использовали идеи Kerberos 4 для своих систем аутентификации. Основными разработчиками данной версии были Стив Миллер (Steve Miller) и Клиффорд Ньюман (Clifford Neuman).
Основы того, что должно было стать Kerberos 4, были описаны в техническом плане Афина, а окончательный вариант был закреплен в исходном коде эталонной реализации, опубликованной MIT.
Однако, из-за ограничений на экспорт программного обеспечения использующего шифрование, наложенное американским правительством, Kerberos 4 не мог быть распространен за пределами Соединенных Штатов. Так как Kerberos 4 использовал DES шифрование, организации за пределами США не могли по закону использовать данное программное обеспечение. В ответ на это команда разработчиков из MIT создала специальную версию Kerberos 4, исключив из нее весь код касающийся шифрования. Данные меры позволили обойти ограничение на экспорт.
Позже, Эррол Янг(Errol Young) в университете Связи Австралии(Bond University of Australia), добавил в эту версию собственную реализацию DES. Она называлась"E-Bones" (сокращение от Encrypted Bones) и могла свободно распространяться за пределами США.
В 2006 году было объявлено о прекращении поддержки Kerberos 4.
Принцип работы
Kerberos 4
Kerberos 4 в значительной степени основан на протоколе Нидхема-Шрёдера, но с двумя существенными изменениями:
• Первое изменение протокола уменьшало количество сообщений пересылаемых между клиентом и сервером аутентификации.
• Второе, более существенное изменение базового протокола, заключается в ведении TGT (Ticket Granting Ticket — билет для получения билета) концепции, позволяющей пользователям аутентифицироваться на несколько сервисов используя свои верительные данные только один раз.
Этап аутентификации клиента
Как результат, протокол Kerberos 4 содержит два логических компонента: Сервер аутентификации (СА) исервер выдачи билетов (TGS — Ticket Granting Server). Обычно эти компоненты поставляются как единая программа, которая запускается на центре распределения ключей (ЦРК — содержит базу данных логинов/паролей для пользователей и сервисов использующих Kerberos).
Сервер аутентификации выполняет одну функцию: получает запрос содержащий имя клиента, запрашивающего аутентификацию, и возвращает ему зашифрованный TGT. Затем пользователь может использовать этот TGT для запроса дальнейших билетов на другие сервисы. В большинстве реализаций Kerberos время жизни TGT 8-10 часов. После этого клиент снова должен запросить его у СА.
Первое сообщение, отправляемое центру распределения ключей — запрос к СА, так же известен как AS_REQ. Это сообщение отправляется открытым текстом и содержит идентификационные данные клиента, метку времени клиента и идентификатор сервера предоставляющего билет (TGS).
Когда ЦРК получает AS_REQ сообщение, он проверяет, что клиент, от которого пришел запрос, существует, и его метка времени близка к локальному времени ЦРК (обычно ± 5 минут). Данная проверка производится не для защиты от повторов (сообщение посылается открытым текстом), а для проверки соответствия времени. Если хотя бы одна из проверок не проходит, то клиенту отправляется сообщение об ошибке, и он не аутентифицируется.
В случае удачной проверки СА генерирует случайный сеансовый ключ, который будет совместно использоваться клиентом и TGS (данный ключ защищает дальнейшие запросы билетов у TGS на другие сервисы). ЦРК создает 2 копии сессионного ключа: одну для клиента и одну для TGS.
Затем ЦРК отвечает клиенту сообщением сервера аутентификации (AS_REP) зашифрованным долгосрочным ключом клиента. Которое включает TGT зашифрованный TGS ключом (TGT содержит: копию сессионного ключа для TGS, идентификатор клиента, время жизни билета, метку времени ЦРК, IP адрес клиента), копию сессионного ключа для клиента, время жизни билета и идентификатор TGS.
Этап авторизации клиента на TGS
Когда пользователь захочет получить доступ к сервису, он подготовит сообщение для TGS (TGS_REQ) содержащее 3 части: идентификатор сервиса, копию TGT полученную ранее и аутентификатор (Аутентификатор состоит из метки времени зашифрованной сессионным ключом полученным от СА и служит для защиты от повторов).
При получении запроса билета от клиента, ЦРК формирует новый сессионный ключ для взаимодействия клиент/сервис. Затем отправляет ответное сообщение (TGS_REP) зашифрованное сессионным ключом полученным от СА. Это сообщение содержит новый сеансовый ключ, билет сервиса (Service ticket содержит: копию нового сессионного ключа, идентификатор клиента, время жизни билета, локальное время ЦРК, IP клиента) зашифрованный долговременным ключом сервиса, идентификатор сервиса и время жизни билета.
Детали последнего шага — отправки билета службы серверу приложений не стандартизировались Kerberos 4, поэтому его реализация полностью зависит от приложения.
Kerberos 5
Kerberos 5 является развитием четвертой версии, включает всю предыдущую функциональность и содержит множество расширений. Однако, с точки зрения реализации, Kerberos 5 является абсолютно новым протоколом.
Основной причиной появления пятой версии являлась невозможность расширения. Со временем, атака полным перебором на DES используемом в Kerberos 4 стала актуальна, но используемые поля в сообщениях имели фиксированный размер и использовать более стойкий алгоритм шифрования не представлялось возможным.
Для решения данной проблемы было решено создать расширяемый протокол с возможностью использования на различных платформах на основе технологии ASN.1. Это позволило использовать в транзакциях различные типы шифрования. Благодаря этому была реализована совместимость с предыдущей версией. Кроме того у ЦРК появляется возможность выбирать наиболее безопасный протокол шифрования поддерживаемый участвующими сторонами.
Кроме того оригинальный протокол Kerberos 4 подвержен перебору по словарю. Данная уязвимость связана с тем, что ЦРК выдает по требованию зашифрованный TGT любому клиенту. Важность данной проблемы так же подчеркивает то, что пользователи обычно выбирают простые пароли.
Чтобы усложнить проведение данной атаки, в Kerberos 5 было введено предварительное установление подлинности. На данном этапе ЦРК требует, чтобы пользователь удостоверил свою личность прежде, чем ему будет выдан билет.
За предварительную аутентификацию отвечает политика ЦРК, если она требуется, то пользователь при первом запросе к СА получит сообщение KRB_ERROR. Это сообщение скажет клиенту, что необходимо отправлять AS_REQ запрос со своими данными для установления подлинности. Если ЦРК не опознает их, то пользователь получит другое сообщение KRB_ERROR, сообщающее об ошибке и TGT не будет выдан.
