Проект Документации Freebsd   руководство

Вид материалаРуководство

Содержание


14.4. DES, MD5, и шифрование
14.4.1. Определения механизма шифрования
14.5. Одноразовые пароли
14.5.1. Защищенная установка соединения
14.5.2. Незащищенная установка соединения
Enter. Затем, перед вводом пароля доступа введите те же параметры в вашем защищенном соединении или средстве доступа S/Key: % ke
14.5.3. Создание одного одноразового пароля
14.5.4. Создание нескольких одноразовых паролей
14.5.5. Ограничение использования UNIX® паролей
Подобный материал:
1   ...   30   31   32   33   34   35   36   37   ...   69

14.4. DES, MD5, и шифрование


Частично переписал и обновил Bill Swingle.

У каждого пользователя UNIX системы есть пароль, связанный с его учетной записью. Очевидно, что эти пароли должны быть известны только пользователю и соответствующей операционной системе. Для защиты паролей они шифруются способом, известным как “односторонний хэш”, то есть их можно легко зашифровать, но нельзя расшифровать. Другими словами, то, что мы сказали чуть раньше было очевидно, но не совсем верно: операционной системе сам пароль неизвестен. Ей известен только пароль в зашифрованной форме. Единственный способ получить “обычный” пароль это простой перебор всех возможных паролей.

К сожалению, единственный способ шифрования пароля при появлении UNIX был основан на DES, Data Encryption Standard. Это не было проблемой для пользователей, живущих в США, но поскольку исходный код DES нельзя было экспортировать из США, FreeBSD нашла способ одновременно не нарушать законов США и сохранить совместимость со всеми другими вариантами UNIX, где все еще использовался DES.

Решение было в разделении библиотек шифрования, чтобы пользователи в США могли устанавливать и использовать библиотеки DES, а у остальных пользователей был метод шифрования, разрешенный к экспорту. Так FreeBSD пришла к использованию MD5 в качестве метода шифрования по умолчанию. MD5 считается более безопасным, чем DES, поэтому установка DES рекомендуется в основном из соображений совместимости.

14.4.1. Определения механизма шифрования


До FreeBSD 4.4 libcrypt.a была символической ссылкой на библиотеку, используемую для шифрования. В FreeBSD 4.4 libcrypt.a была изменена для предоставления настраиваемой библиотеки аутентификации по хэшу пароля. На данный момент библиотека поддерживает хэши DES, MD5 и Blowfish. По умолчанию FreeBSD использует для шифрования паролей MD5.

Довольно легко определить какой метод шифрования используется в FreeBSD. Один из способов это проверка файла /etc/master.passwd. Пароли, зашифрованные в хэш MD5 длиннее, чем те, что зашифрованы с помощью DES и начинаются с символов $1$. Пароли, начинающиеся с символов $2a$ зашифрованы с помощью Blowfish. Пароли, зашифрованные DES не содержат каких-то определенных идентифицирующих символов, но они короче, чем пароли MD5 и закодированы в 64-символьном алфавите, не содержащем символа $, поэтому относительно короткая строка, не начинающаяся с этого символа это скорее всего DES пароль.

Формат паролей, используемых для новых паролей, определяется параметром passwd_format в /etc/login.conf, которое может принимать значения des, md5 или blf. Обратитесь к странице справочника login.conf(5) за дополнительной информацией о параметрах login.

14.5. Одноразовые пароли


S/Key это схема с одноразовыми паролями, основанная на одностороннем хэше. FreeBSD использует хэш MD4 для совместимости, но другие системы используют MD5 и DES-MAC. S/Key была частью базовой системы FreeBSD начиная с версии 1.1.5 и используется также во все большем числе операционных систем. S/Key это зарегистрированная торговая марка Bell Communications Research, Inc.

Начиная с FreeBSD версии 5.0, S/Key была замещена на функциональный эквивалент — OPIE (One-time Passwords In Everything). OPIE по умолчанию использует MD5.

Есть три различных вида паролей, о которых мы поговорим ниже. Первый вид это ваш обычный пароль UNIX или пароль Kerberos; мы будем называть его “пароль UNIX”. Второй вид это одноразовый пароль, сгенерированный программой S/Key key или программой OPIE opiekey(1) и принимаемый командами keyinit или opiepasswd(1) и в приглашении login; мы будем называть их “одноразовыми паролями”. Последний вид паролей это защищенные пароли, которые вы передаете программам key/opiekey (и иногда программам keyinit/opiepasswd), и которые эти программы используют для создания одноразовых паролей; мы будем называть его “защищенными паролями” или просто “паролями”.

Защищенный пароль не имеет никакого отношения к вашему паролю UNIX; они могут быть одинаковыми, но это не рекомендуется. Защищенные пароли S/Key и OPIE не ограничены 8-ю символами, как старые UNIX пароли1, они могут быть настолько длинными, насколько вы захотите. Очень часто используются пароли длиной в шесть или семь символов. По большей части система S/Key или OPIE работает полностью независимо от системы паролей UNIX.

Помимо паролей, есть два других вида данных, важных для S/Key и OPIE. Первый, известный как “seed” или “ключ”, состоит из двух букв и пяти цифр. Другой, называемый “счетчиком цикла”, это номер от 1 до 100. S/Key создает одноразовый пароль, соединяя ключ и защищенный пароль, а затем применяя MD4/MD5 столько раз, сколько указано счетчиком цикла и выдает результат в виде шести коротких слов на английском. Эти шесть слов на английском и есть ваш одноразовый пароль. Система аутентификации (как правило PAM) хранит последний использованный одноразовый пароль, и пользователь аутентифицитуется если хэш вводимого пользователем пароля совпадает с предыдущим паролем. Поскольку используется односторонний хэш, невозможно сгенерировать следующий одноразовый пароль если получен предыдущий; счетчик цикла уменьшается после каждого успешного входа для поддержки синхронизации пользователя с программой login. Когда счетчик цикла уменьшается до 1, S/Key и OPIE должны быть переинициализированы.

В каждой из обсуждаемых ниже систем задействованы три программы. Программы key и opiekey получают счетчик цикла, ключ и защищенный пароль и создают одноразовый пароль или последовательный список одноразовых паролей. Программы keyinit и opiepasswd используются для инициализации S/Key и OPIE соответственно, и для смены паролей, счетчиков цикла, или ключей; они принимают защищенный пароль или счетчик цикла, ключ и одноразовый пароль. Программы keyinfo и opieinfo проверяют соответствующие файлы (/etc/skeykeys или /etc/opiekeys) и печатают текущий счетчик цикла и ключ вызывающего пользователя.

Мы рассмотрим четыре вида операций. Первая это использование keyinit или opiepasswd через защищенное соединение для первоначальной настройки системы одноразовых паролей, или для изменения пароля или ключа. Вторая операция это использование в тех же целях keyinit или opiepasswd через незащищенное соединение, в сочетании с key или opiekey через защищенное соединение. Третья это использование key/opiekey для входа через незащищенное соединение. Четвертая это использование key или opiekey для генерации набора ключей, которые могут быть записаны или распечатаны для соединения из места, где защищенное соединение недоступно.

14.5.1. Защищенная установка соединения


Для первоначальной настройки S/Key, измените ваш пароль или ключ при входе через защищенное соединение (например, с консоли компьютера или через ssh), используйте команду keyinit без параметров при входе под своим именем:

% keyinit

Adding unfurl:

Reminder - Only use this method if you are directly connected.

If you are using telnet or rlogin exit with no password and use keyinit -s.

Enter secret password:

Again secret password:


ID unfurl s/key is 99 to17757

DEFY CLUB PRO NASH LACE SOFT

Для OPIE, вместо этого используется opiepasswd:

% opiepasswd -c

[grimreaper] ~ $ opiepasswd -f -c

Adding unfurl:

Only use this method from the console; NEVER from remote. If you are using

telnet, xterm, or a dial-in, type C now or exit with no password.

Then run opiepasswd without the -c parameter.

Using MD5 to compute responses.

Enter new secret pass phrase:

Again new secret pass phrase:

ID unfurl OTP key is 499 to4268

MOS MALL GOAT ARM AVID COED

В приглашениях Enter new secret pass phrase: или Enter secret password:, введите пароль или фразу. Запомните, это не тот пароль, с которым вы будете входить, он используется для генерации одноразовых паролей. Строка “ID” содержит информацию для вашего конкретного случая: имя пользователя, счетчик цикла и ключ. При входе система запомнит эти параметры и отправит их вам, поэтому их не надо запоминать. В последней строке находится одноразовый пароль, соответствующий этим параметрам и секретному паролю; если вы войдете в систему сразу, используйте этот одноразовый пароль.

14.5.2. Незащищенная установка соединения


Для инициализации или изменения защищенного пароля через незащищенное соединение, вам потребуется существующее защищенное соединение куда-то, где вы сможете запустить key или opiekey; это может быть средство доступа Macintosh или shell на компьютере, которому вы доверяете. Вам потребуется также установить значение счетчика цикла (100 возможно подойдет), и задать ключ или использовать сгенерированный. Через незащищенное соединение (к компьютеру, на котором производится настройка), используйте команду keyinit -s:

% keyinit -s

Updating unfurl:

Old key: to17758

Reminder you need the 6 English words from the key command.

Enter sequence count from 1 to 9999: 100

Enter new key [default to17759]:

s/key 100 to 17759

s/key access password:

s/key access password:CURE MIKE BANE HIM RACY GORE

Для OPIE, используйте opiepasswd:

% opiepasswd


Updating unfurl:

You need the response from an OTP generator.

Old secret pass phrase:

otp-md5 498 to4268 ext

Response: GAME GAG WELT OUT DOWN CHAT

New secret pass phrase:

otp-md5 499 to4269

Response: LINE PAP MILK NELL BUOY TROY


ID mark OTP key is 499 gr4269

LINE PAP MILK NELL BUOY TROY

Чтобы принять ключ по умолчанию нажмите Enter. Затем, перед вводом пароля доступа введите те же параметры в вашем защищенном соединении или средстве доступа S/Key:

% key 100 to17759

Reminder - Do not use this program while logged in via telnet or rlogin.

Enter secret password:

CURE MIKE BANE HIM RACY GORE

Или для OPIE:

% opiekey 498 to4268

Using the MD5 algorithm to compute response.

Reminder: Don't use opiekey from telnet or dial-in sessions.

Enter secret pass phrase:

GAME GAG WELT OUT DOWN CHAT

Теперь переключитесь на незащищенное соединение и скопируйте одноразовый пароль, сгенерированный соответствующей программой.

14.5.3. Создание одного одноразового пароля


Как только вы настроите S/Key или OPIE, во время входа появится приглашение вроде этого:

% telnet example.com

Trying 10.0.0.1...

Connected to example.com

Escape character is ']'.


FreeBSD/i386 (example.com) (ttypa)


login:

s/key 97 fw13894

Password:

Или для OPIE:

% telnet example.com

Trying 10.0.0.1...

Connected to example.com

Escape character is ']'.


FreeBSD/i386 (example.com) (ttypa)


login:

otp-md5 498 gr4269 ext

Password:

Кроме того, у S/Key и OPIE есть полезная особенность (не показанная здесь): если вы нажмете Enter в приглашении на ввод пароля, включится эхо, и вы сможете увидеть то, что вводите. Это может быть очень полезно, если вы пытаетесь ввести пароль вручную, например с распечатки.

В этот момент вам потребуется сгенерировать одноразовый пароль, чтобы ввести его в приглашение. Это должно быть выполнено на защищенной системе, в которой вы можете запустить key или opiekey (есть версии для DOS, Windows и Mac OS). Им требуются значения счетчика цикла и ключ в качестве параметров командной строки. Вы можете скопировать и вставить их прямо из приглашения login компьютера, на который входите.

В защищенной системе:

% key 97 fw13894

Reminder - Do not use this program while logged in via telnet or rlogin.

Enter secret password:

WELD LIP ACTS ENDS ME HAAG

Для OPIE:

% opiekey 498 to4268

Using the MD5 algorithm to compute response.

Reminder: Don't use opiekey from telnet or dial-in sessions.

Enter secret pass phrase:

GAME GAG WELT OUT DOWN CHAT

Теперь, когда у вас есть одноразовый пароль, можете продолжить вход в систему:

login:

s/key 97 fw13894

Password:

s/key 97 fw13894

Password [echo on]: WELD LIP ACTS ENDS ME HAAG

Last login: Tue Mar 21 11:56:41 from 10.0.0.2 ...

14.5.4. Создание нескольких одноразовых паролей


Иногда вы отправляетесь туда, где нет доступа к защищенному компьютеру или защищенному соединению. В этом случае, можно использовать команды key и opiekey для создания нескольких одноразовых паролей, которые вы сможете распечатать и забрать с собой. Например:

% key -n 5 30 zz99999

Reminder - Do not use this program while logged in via telnet or rlogin.

Enter secret password:

26: SODA RUDE LEA LIND BUDD SILT

27: JILT SPY DUTY GLOW COWL ROT

28: THEM OW COLA RUNT BONG SCOT

29: COT MASH BARR BRIM NAN FLAG

30: CAN KNEE CAST NAME FOLK BILK

Или для OPIE:

% opiekey -n 5 30 zz99999

Using the MD5 algorithm to compute response.

Reminder: Don't use opiekey from telnet or dial-in sessions.

Enter secret pass phrase:

26: JOAN BORE FOSS DES NAY QUIT

27: LATE BIAS SLAY FOLK MUCH TRIG

28: SALT TIN ANTI LOON NEAL USE

29: RIO ODIN GO BYE FURY TIC

30: GREW JIVE SAN GIRD BOIL PHI

Параметр -n 5 запрашивает пять паролей, 30 указывает значение последнего счетчика цикла. Обратите внимание, что пароли печатаются в обратном по сравнению с обычным использованием порядке. Если вы действительно параноик, перепишите результат вручную; иначе скопируйте и передайте его lpr. Обратите внимание, что каждая линия содержит как счетчик цикла, так и одноразовый пароль; вам может показаться удобным отрывать пароль после использования.

14.5.5. Ограничение использования UNIX® паролей


S/Key может наложить ограничения на использование UNIX паролей на основе имени хоста, имени пользователя, порта терминала или IP адреса сессии. Эти ограничения можно найти в файле настройки /etc/skey.access. Страница справочника skey.access(5) содержит дополнительную информацию о полном формате файла а также детали о некоторых предосторожностях, которые должны быть предприняты перед тем, как положиться в вопросах безопасности на этот файл.

Если файла /etc/skey.access нет (это ситуация по умолчанию в системах FreeBSD 4.X), всем пользователям будет разрешено входить с паролями UNIX. Если файл существует, использование S/Key станет обязательно для всех, если только параметры настройки в файле skey.access не указывают иначе. В любом случае, пароли UNIX разрешены при входе с консоли.

Вот пример файла настройки skey.access, иллюстрирующий три наиболее распространенных вида параметров настройки:

permit internet 192.168.0.0 255.255.0.0

permit user fnord

permit port ttyd0

Первая строка (permit internet) разрешает пользователям, чей IP адрес (который подвержен подделке) соответствует заданному значению и маске, входить с использованием паролей UNIX. Это должно рассматриваться не как механизм безопасности, а как напоминание пользователям, что они работают через небезопасное соединение и должны использовать для аутентификации S/Key.

Вторая строка (permit user) позволяет определенным пользователям, в данном случае fnord, всегда использовать пароли UNIX. Вообще говоря, это должно использоваться только для тех, кто не может использовать программу key, например если они работают с простых терминалов или необучаемы.

Третья строка (permit port) позволяет всем пользователям, вошедшим с определенного терминала использовать пароли UNIX; этот параметр должен использоваться для подключений по dial-up.

OPIE может ограничивать использование паролей UNIX на основе IP адреса как и S/Key. Соответствующий файл называется /etc/opieaccess, он существует по умолчанию в FreeBSD 5.0 и более современных системах. Обратитесь к opieaccess(5) за более подробной информацией об этом файле и о предосторожностях, которые вы должны предпринять при использовании этого файла.

Вот пример файла opieaccess:

permit 192.168.0.0 255.255.0.0

Эта строка позволяет пользователям, чей IP адрес (который подвержен подделке) соответствует указанному значению и маске, входить с паролем UNIX.

Если ни одно из правил в opieaccess не сработало, поведением по умолчанию является запрет всех не-OPIE входов.