Методы шифрования. Необратимое шифрование. Симметричное шифрование. Подбор пароля. Генерация пароля. Функции подсистемы защиты операционной системы

При необратимом шифровании информация зашифровывается таким образом, что не подлежит обратной расшифровке. На первый взгляд это может показаться странным, но в действительности такой метод шифрования используется очень часто. Функция, с помощью которых реализуется однонаправленное шифрование, называются функциями хэширования. При использовании таких функций создается уникальный "отпечаток" строки. Наиболее часто в качестве алгоритма хэширования используется алгоритм MD5, реализовать который можно с помощью одноименной функции:

String md5($str [, $raw_output])

В качестве обязательного аргумента функция принимает строку $str , которую необходимо зашифровать и возвращает ее уникальный 128-битовый отпечаток (хэш-код). Если необязательный аргумент $raw_output имеет значение true , то возвращается бинарная строка из 16 символов. Вероятность того, что две строки дадут одинаковый хэш-код, стремиться к нулю.

Примечание . Аналогичная функция md5_file() часто используется для создания уникального хэш-кода объемных файлов, которые передаются по сети. Загрузив файл, всегда можно проверит его целостность, вычислив код по алгоритму md5 и сравнив полученный результат с хэш-кодом, представленным распространителем. Это позволяет отследить повреждения файла, вызванные передачей через сеть, а также предотвращает фальсификацию файла. Такой способ часто применяют при распространении объемных дистрибутивов.

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

.

Примечание . Такая схема авторизации не позволяет получить непосредственный доступ к паролям, даже если происходит хищение базы данных. В этом случае злоумышленник вынужден тратить значительное машинное время на перебор паролей по словарю, поэтому пароли вида W3t6,8yt6P практически не поддаются расшифровке, в тоже время необратимое шифрование не сможет защитить от перебора при пароле вида 12345.

При помощи функции md5() можно зашифровать различные данные, к примеру пароли пользователя.

Использование функции md5() :


$maks_password ="dghbcdj27hg" ; //Сохраненный пароль пользователя
$maks_cipher =md5 ($maks_password ) ; //Сохраненный хэш- код пароля
//Пароль пользователя вводимй при посещении странички
$user_password ="dghbcdj27hg" ;
//Хэш- код пароля пользователя, вычисляемый при посещении странички
$user_cipher =md5 ($maks_password ) ;
//Если хэш- коды совпадают то пароль верный
if ($maks_cipher ==$user_cipher )
{
echo "Hello, Maks" ;
}
else
{
echo "Введен не верный пароль" ;
}
?>

Для этих же целей используется функция crypt() , которая имеет следующий синтаксис:

String crypt($str [, $salt])

Аргумент $strпредставляет собой предназначенную для шифрования строку. К примеру, если передавать этой функции строку с паролем " dghbcdj27hg " и аргумент $salt , равный " ttt ", то будет возвращена строка " ttqHdgPBP2/UI ", которая не может быть дешифрована. Однако, поскольку результат работы функции строго определен в том смысле, что при вызове с одинаковыми параметрами $str и $salt функция возвращает один и тот же результат, ее можно использовать для проверки паролей.

Примечание . В UNIX-подобных ситемах и Windows хэш-код, возвращаемый функцией crypt() , не совпадает. В UNIX-подобной операционной системе результат функции crypt() можно использовать для автоматического выполнения файла.htpasswd, используемого совместно с конфигурационным файлом.htaccess для защиты директории паролем.

Использование функции crypt():


$maks_password ="dghbcdj27hg" ;
$maks_crypt =crypt ($maks_password , "ttt" ) ;
echo $maks_crypt ;
$user_password ="dghbcdj27hg" ;
$user_crypt =crypt ($maks_password , "ttt" ) ;
if ($maks_crypt ==$user_crypt )
{
echo "
Пароли совпадают "
;
}
else
{
echo "Введен неверный пароль" ;
}
?>

ТАК .

Для однонаправленного шифрования можно также использовать функцию crc() , вычисляющую 32-битовую контрольную сумму исходной строки:

Int crc($str)

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

Симметричное шифрование

При симметричном шифровнии строки шифруются с помощью ключа, который известен как отправителю так и получателю. В РНР алгоритмы симметричного шифрования реализованы в библиотеке mcrypt; ознакомиться с полным набором функций и алгоритмов этой библиотеки можно на сайте http://www.php.net. Функции mcrypt работают, только если подключена библиотека mcrypt.

Примечание . Как и любое расширение, по умолчанию библиотека mcrypt в РНР5 отключена. Для того, чтобы ее подключить, необходимо убрать комментарий напротив строки extension=php_mcrypt.dll в конфигурационном файле php.ini . Кроме того, необходимо скопировать в системную директорию C:/Windows/system32 библиотеку libmcrypt.dll из дистрибутива РНР. Если данная библиотека не входит в состав дистрибутива РНР, то ее следует загрузить из сети, например по ссылке http://www.softtime.ru/libmcrypt.dll.

Рассмотрим пример, в котором строка зашифровывается и расшифровывается при помощи алгоритма 3DES(Triple-DES).

Использование симметричного шифрования:


//Шифруем пароль
$user_password ="dghbcdj27hg" ;
$key ="Это секретный код" ;
//Шифруем пароль с использованием секретного ключа $key
$user_crypt =mcrypt_ecb (MCRYPT_3DES, $key , $user_password , MCRYPT_ENCRYPT) ;
echo "Зашифрованный пароль - $user_crypt
"
;
//Расшифровываем пароль
$user_crypt =mcrypt_ecb (MCRYPT_3DES, $key , $user_crypt , MCRYPT_DECRYPT) ;
echo "Расшифрованный пароль - $user_crypt " ;
?>

В данном примере, пароль, размещенный в переменной $user_password , сначала шифруется функцией mcrypt_ecb() с применением ключа $key , а затем проводится его обратная дешифрация.

Подбор пароля

Как видно из рассмотренных примеров, для шифрованию паролей зачастую проще прибегать к необратимому шифрованию. Однако это не значит, что пароль, особенно простой, невозможно подобрать. Рассмотрим простейший скрипт подбора пароля методом перебора символов из массива $arr . При этом пароли располагаются в файле password , расположенном в той же директории,что и скрипт. Переменная max_number задает максимальный размер подыскиваемого пароля.

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

Подбор пароля, зашифрованного с помощью MD5:


//Устанавливаем неограниченное время выполнения скрипта
set_time_limit (0) ;
//Читаем пароли из файла password
$pass =file ("password" ) ;
for each ($pass as $password )
{
//Замеряем время, затраченное на подбор пароля
$begin =time () ;
echo decrypt_md5 (trim ($password ) , "" ) ;
$end =time () ;
echo "(На подбор затрачено " .($end - $begin ) ."секунд)
"
;
}
//Функция символического подбора пароля
//$pass - расшифрованный пароль
// $answer - текущий ответ, при первом вызове - пустая строка
function decrypt_md5 ($pass , $answer )
{
$arr =array
"q" , "r" , "s" , "t" , "u" , "v" , "w" , "x" , "y" , "z" ) ;
//Будем считать, что пароль не превышает
//4 символов
$max_number =3;
if (strlen ($answer ) >$max_number ) return;
for ($j =0; $j <count ($arr ) ; $j + + )
{
$temp =$answer .$arr [$j ];
if (md5 ($temp ) ==$pass ) return $temp ;
//Рекурсивно вызываем функцию для увеличения
//длины подбираемого пароля
$result =decrypt_md5 ($pass , $temp ) ;
//Если функция возвращает не пустую строку,
//следовательно, найден ответ и дальше искать не следует
if (strlen ($result ) >0) return $result ;
}
}
?>

Время выполнения скрипта может быть значительным, поэтому в первых строках снимается ограничение на время выполнения скрипта при помощи функции set_time_limit() . Функция принимает единственный целочисленный параметр, через который передается новое значение максимального времени выполнения скрипта. Если в качестве параметра передано значение 0, любые ограничения на время выполнения снимаются.

После этого содержимое файла password разбиваются на строки, помещаемые в массив $pass , элементы которого в цикле передаются рекурсивной функции decrypt_md5() .

Примечание . Следует отметить, что строки массива $pass пропускаются через функцию trim() , для того чтобы избавиться от невидимых символов \r\n , которые могут оставаться в конце строк.

Функция перебирает значения от а через ab, ac и до azzz, и как только временная переменная $аanswer принимает значение аааа, функция переходит к символу b и перебирает пароли до bzzz. Таким образом перебираются все символы из массива $arr. Как только пароль найден, функция возвращает его и выходит из рекурсивного цикла благодаря проверке:

If(strlen($result)>0) return $result;

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

Генерация пароля

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

Генератор паролей:




>
Генератор паролей


<for m action="" method="post" >


for m>

//Параметр $number указывае количество символов в пароле
echo htmlspecialchars (generate_password ($_POST ["number" ]) ) ;
function generate_password ($number )
{
$arr =array
("a" , "b" , "c" , "d" , "e" , "f" ,
"g" , "h" , "i" , "j" , "k" , "l" , "m" , "n" , "o" , "p" ,
"q" , "r" , "s" , "t" , "u" , "v" , "w" , "x" , "y" , "z" ,
"A" , "B" , "C" , "D" , "E" , "F" , "G" , "H" , "I" , "J" ,
"K" , "L" , "M" , "N" , "O" , "P" , "Q" , "R" , "S" , "T" ,
"U" , "V" , "W" , "X" , "Y" , "Z" , "1" , "2" , "3" , "4" ,
"5" , "6" , "7" , "8" , "9" , "0" , ", " , "." , "(" , ") " ,
"[" , "]" , "!" , "?" , "$" , "^" , "%" , "@" , "*" , "$" ,
"<" , ">" , "/" , "|" , "+ " , "- " , "{ " , "} " , "~" , "`" ) ;
//Генерируем пароль
$pass =" " ;
for ($i =0; $i <$number ; $i + + )
{
//Вычисляем случайный индекс массива
$index =rand (0, count ($arr ) - 1) ;
$pass .=$arr [$index ];
}
return $pass ;
}
?>

В окне веб-браузера это будет выглядеть ТАК .

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

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

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

ХРАНЕНИЕ ПАРОЛЕЙ

Пароли могут храниться в самых разных местах в зависимости от того, какой вариант UNIX используется и как сконфигурирована система. В Таблице 1 перечислены самые распространенные системы и указано, где в них могут размещаться пароли. «Теневые», или «скрытые», файлы, т. е. файлы паролей, закрытые для чтения или записи, появились в целях решения проблемы доступности зашифрованных паролей. Поскольку они были доступны для всех пользователей, а алгоритм шифрования широко известен, это открывало возможность написания программ эффективного подбора паролей, получивших название «взломщики паролей». По этой причине зашифрованные пароли стали храниться в скрытых файлах для обеспечения жесткого контроля за тем, какие пользователи и какие системные службы могут их видеть.

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

Каждая запись в файле паролей /etc/passwd имеет формат

Userid:password:UID:GID:Comment:Home directory:shell

и выглядит, к примеру, следующим образом:

Chare:x:500:500:Chris Hare:/home/chare:/bin/bash

Поле «идентификатор пользователя» (chare) содержит реальное название бюджета пользователя. Поле пароль (x) будет содержать либо реальный зашифрованный пароль, либо его обозначение (как в данном примере). Наличие последнего свидетельствует об использовании скрытого файла. Поле «номер пользователя» (500) представляет собой уникальный идентификатор, с помощью которого система различает пользователей. Номер группы (500) позволяет определить, к какой группе принадлежит пользователь и какая ему соответствует запись в файле /etc/group. Комментарии или поле GECOS (Chris Hare) могут содержать любую текстовую информацию, необходимую для идентификации. Как правило, здесь записывается имя пользователя и другие данные, например номер телефона или название отдела. Домашний каталог (/home/chare) указывает, куда помещается пользователь в момент первоначальной регистрации в системе, а исходный командный процессор (/bin/bash) определяет, какой интерпретатор команд применяется.

МЕТОДЫ ШИФРОВАНИЯ ПАРОЛЕЙ

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

При регистрации в системе UNIX программа getty требует ввести имя пользователя и запускает программу входа в систему, а та, в свою очередь, запрашивает пароль, но не декодирует его. Фактически, программа /bin/login шифрует пароль, введенный пользователем, а затем сравнивает полученное значение с тем, которое хранится в /etc/passwd. Если данные совпадают, то пароль был введен правильно.

Самым популярным методом шифрования стало применение улучшенного стандарта на шифрование данных (Data Encryption Standard, DES). Сам стандарт DES представляет собой систему с симметричным ключом, т. е. один и тот же ключ служит и для шифрования, и для дешифровки. Если бы алгоритм не был усовершенствован, то два пользователя с одним и тем же паролем могли получить одно и то же зашифрованное значение. Данная проблема сохраняется и в улучшенной системе, если поле пароля одного из пользователей скопировать в поле пароля другого пользователя. Однако в случае применения расширенного метода DES, даже если выбран одинаковый пароль, зашифрованные значения будут отличаться. Подробнее об этом рассказывается в следующем разделе.

ШИФРОВАНИЕ ПАРОЛЕЙ В UNIX С ПОМОЩЬЮ DES

Обращение к методу шифрования паролей в UNIX выполняется с помощью системного вызова crypt(3). В силу правил контроля экспорта в США, на вашей системе может не быть программ шифрования.

Истинное значение, которое хранится в /etc/passwd, получается путем использования пароля пользователя для шифрования 64-разрядного блока нулей с помощью вызова crypt(3). «Чистый текст» - это пароль пользователя, который является ключом данной операции. Итоговый «закодированный текст» представляет собой зашифрованный пароль. «Чистый текст» (также называемый незакодированным текстом) - исходное незашифрованное сообщение. Закодированный текст - сообщение после шифрования.

Алгоритм crypt(3) базируется на стандарте DES, разработанном в Национальном институте стандартов и технологий (National Institute of Standards and Technology, NIST). В обычном случае для шифрования исходного текста, в DES часто называемого «чистым текстом», применяется 56-разрядный ключ, состоящий, например, из восьми 7-разрядных символов. Этот «чистый текст», как правило, имеет в длину 64 бита. Вот почему UNIX распознает только первые восемь символов пароля, введенного пользователем. Полученный в итоге закодированный текст невозможно расшифровать, не зная значения исходного ключа.

При вызове crypt(3) в UNIX используется модифицированная версия указанного метода, при этом декларируется, что «чистый текст» преобразуется в блок нулей. Новое шифрование закодированного текста с помощью пароля пользователя в качестве ключа еще больше усложняет этот процесс. Так повторяется 25 раз, а затем полученные в итоге 64 разряда разделяются на 11 печатных символов и сохраняются в файле паролей.

Хотя исходные тексты crypt(3) могут предоставить многие производители (их распространение ограничивается территорией Соединенных Штатов), общедоступного метода для преобразования закодированного текста или зашифрованного значения обратно в исходный «чистый текст» не существует.

Роберт Моррис и Кен Томсон, первыми реализовавшие технологию crypt(3) в UNIX, опасались, что с появлением микросхем с поддержкой DES на аппаратном уровне защиту системы UNIX можно будет легко преодолеть. Чтобы ликвидировать эту угрозу, они предложили использовать «крупинку соли» - 12-разрядное число, применяемое для модификации результата работы DES. Это число может принимать значения от 0 до 4095. В итоге каждый возможный пароль можно представить в файле паролей одним из 4096 способов. Разные пользователи на одной и той же машине могут использовать один и тот же пароль, и никто, даже системный администратор, не будет об этом знать.

Когда запускается программа /bin/passwd для создания нового пароля, она выбирает значение «крупинки соли» в зависимости от времени дня, которое затем применяется для модификации пароля пользователя. Чтобы предотвратить маловероятную возможность задания другого значения «крупинки соли» при следующей регистрации пользователя, UNIX хранит эту величину в /etc/passwd. Фактически, данное значение представлено в виде первых двух символов зашифрованного пароля. Такой механизм гарантирует, что пароль может быть зашифрован снова и ему будет найдено соответствие.

Например, значение зашифрованного пароля

W1wEdEKQNtJbA

состоит из «крупинки соли» (W1) и самого 11-символьного зашифрованного пароля (wEdEKQNtJbA). В нашем примере пользователь вводит свой пароль в процессе регистрации, а «крупинка соли», т. е. W1, добавляется в процессе шифрования. После этого пароль сравнивается с зашифрованным значением, которое хранится в соответствующем файле (помните, что этот файл может быть скрытым). Если два значения совпадают, то пользователь получает доступ в систему. При вводе пароля, вопреки распространенному мнению, значение, хранящееся в системе, не декодируется.

ШИФРОВАНИЕ ПАРОЛЕЙ MD5

Linux стала первой операционной системой на базе UNIX, в которой был реализован Message Digest 5 (MD5) - метод шифрования паролей в процессе регистрации. Он основан на использовании системы подключаемых модулей идентификации (Pluggable Authenti-cation Module, PAM) для усовершенствования или замены процесса шифрования DES, который применяется по умолчанию. И это лишь часть возможностей PAM. Прежде чем рассмотреть алгоритм Message Digest 5, поговорим о том, для чего служит PAM.

Цель всех проектов PAM - удалить компоненты аутентификации из программного обеспечения определения привилегий. Такой подход позволяет системным администраторам выбирать предпочтительный для них модуль аутентификации во время исполнения, а не полагаться на выбор производителя ПО. В контексте нашего обсуждения модулями аутентификации могут быть стандартное шифрование UNIX DES, шифрование MD5, Kerberos или любой другой из подобных методов. Обсуждение самой среды PAM выходит за рамки данной статьи.

Файл system.auth в каталоге /etc/pam.d определяет применяемые методы аутентификации. Пример его показан на Рисунке 1. Поле «тип модуля» (Module Type) предназначено для обновления аутентификационных ключей (token), или паролей, связанных с пользователем. Как правило, для каждого вида аутентификации служит свой модуль PAM. Поле «флаг управления» (Control Flag) указывает, как библиотека PAM будет реагировать в случае успешного или неудачного завершения процедуры аутентификации. Флаг управления «достаточно», как в данном случае, означает, что библиотека PAM подтвердила аутентификацию или обновление пароля.

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

Путь доступа к модулю (module path) указывает местонахождение подключаемых модулей. Для каждого из них указываются свои аргументы (arguments), которые определяют, как данный модуль будет действовать. В приведенном примере нас интересуют аргументы md5 и shadow. Именно они сообщают PAM о необходимости применить пароли MD5 и создать скрытый файл паролей.

Алгоритм MD5 подробно описан в документе IETF RFC 1321. Он был разработан Роном Ривестом из RSA Data Security. Данный документ носит исключительно информационный характер, т. е. не имеет статуса стандарта Internet. Алгоритм Message Digest генерирует отпечаток, или дайджест сообщения, для пароля. На самом деле MD5 применяется в самых разных ситуациях, обычно для цифровых подписей, и базируется на алгоритме Message Digest 4 (MD4). Хотя MD4 работает очень быстро, он довольно уязвим. Несмотря на то что MD5 чуть медленнее, он реализует более надежную функцию шифрования и будет очень быстро работать на современных вычислительных платформах. Пользователи не заметят различия в скорости между методами шифрования паролей DES и MD5.

Реализация механизма паролей MD5 работает так же, как и реализация DES, с добавлением «крупинки соли» для модификации процесса шифрования. Пароль в реализации Linux показан на Рисунке 2.

«Магическая строка», применяемая в реализации MD5, идентифицирует пароль как зашифрованный пароль MD5, поэтому модуль PAM знает, какой процесс шифрования использовать при сравнении хранимого значения и введенного пользователем. «Крупинка соли», как и в случае реализации DES, служит для варьирования процесса шифрования MD5. При таком подходе два пользователя, имеющие один и тот же пароль, будут иметь разные зашифрованные значения.

Однако, в отличие от реализации DES, «крупинка соли» в процессе MD5 может состоять из восьми символов. От самого пароля ее отделяет знак «$», тем самым позволяя менять ее длину. Пароль в MD5 может содержать от 13 до 24 символов.

УПРАВЛЕНИЕ ПАРОЛЯМИ

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

Многие версии UNIX предлагают функции устаревания паролей для контроля за тем, когда пользователи должны менять свои пароли. Управление устареванием паролей ведется с помощью значений, добавляемых в файл паролей вслед за зашифрованным паролем. Эти величины определяют минимальный период времени, с момента последнего изменения, прежде чем пользователь сможет его поменять, и максимальный период - до окончания срока действия пароля. На Рисунке 3 дается графическое представление этой концепции.

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

В UNIX, при традиционном подходе, элементы управления устареванием записываются после пароля и отделяются от него запятой. Эти символы представляют:

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

Программа pwexp.pl имеет дело c механизмом поддержки устаревания пароля, который реализован в версиях UNIX вплоть до System V Release 3.2. На этом уровне для усиления системной защиты прибегают к разным вариантам. В итоге было создано несколько различных методов управления скрытыми файлами. Производные BSD и AT&T System V Release 4 опираются на /etc/shadow, в то время как другие системы, в том числе SCO UNIX, разработанная Santa Cruz Operation, и HP-UX компании Hewlett-Packard реализовали Trusted Computing Base. Следует отметить, что реализация SCO UNIX может использовать /etc/passwd, /etc/shadow или Trusted Computing Base в зависимости от уровня защиты системы. В реализации AIX компании IBM применяется другой механизм для хранения скрытых паролей и информации о возрасте паролей.

Программа, представленная на Листинге 2 - pwexp2.pl, - печатает данные об изменениях и устаревании паролей для систем, где используется файл /etc/shadow. Ее необходимо запускать с привилегиями root, иначе файл /etc/shadow будет недоступен всем остальным пользователям. Результат выполнения команды pwexp2.pl показан на Рисунке 4.

СКРЫТЫЕ ФАЙЛЫ

Как уже отмечалось, существуют три основные версии скрытых файлов. Хотя форматы этих файлов отличаются, они служат одной цели: защитить действующие зашифрованные пароли и обеспечить дополнительный контроль, в том числе поддержку устаревания пароля.

Первый из трех основных форматов, файл /etc/shadow, приведен на Рисунке 4. Для каждого пользователя в этом файле должна присутствовать соответствующая запись /etc/shadow. Сразу выявить зашифрованный пароль невозможно, но пароль, закодированный с помощью DES, состоит, как правило, из 13 символов: 2 символа - это «крупинки соли», а 11 символов - сам пароль. Пример, показанный на Рисунке 5, - пароль, зашифрованный с помощью MD5.

Третье поле указывает, сколько дней прошло с момента отсчета времени (1 января 1970 г.) до последней смены пароля пользователем. Четвертое поле - число дней, которые должны пройти до того момента, когда станет возможно сменить пароль. По умолчанию в большинстве инсталляций оно равно нулю, т. е. пользователь может сменить свой пароль в любое время.

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

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

Структура /tcb/files была взята из пакетов C2 Security, созданных Secure Ware, и реализована в HP-UX компании Hewlett-Packard и SCO UNIX компании Santa Cruz Operation. Это неотъемлемая часть Trusted Computing Base, поэтому и структура каталога начинается с /tcb. В указанном каталоге находится набор файлов, которые необходимы для реализации функций защиты C2. Большинство из них не относятся к теме данной статьи. Однако скрытые файлы создаются в каталоге /tcb/files/auth.

В этом каталоге названия большей части подкаталогов совпадают с буквами алфавита, что крайне важно, поскольку каждый пользователь имеет отдельный файл с информацией о нем. Местонахождение пользовательского файла определяется по первой букве имени пользователя. Например, файл bob хранится в /tcb/files/auth/b/bob, как показано на Рисунке 6.

Как видно из рисунка, между файлом /etc/shadow и данными, находящимися в Trusted Computing Base, очень много схожего. Записи u_name и u_id обеспечивают соответствие между содержимым файла и конкретным пользователем из /etc/passwd. Здесь хранится зашифрованный пароль, хотя, как правило, используется традиционная форма шифрования DES. Как и /etc/shadow, записи TCB содержат информацию о том, когда пользователь последний раз изменил свой пароль, но, в отличие от /etc/shadow, в нем записывается также, когда была сделана последняя неудачная попытка сменить пароль.

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

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

Система AIX компании IBM использует другую реализацию для создания скрытого файла. Скрытые пароли хранятся в /etc/security/passwd. Формат этого файла показан на Рисунке 7.

Файл /etc/security/password содержит такую же пользовательскую информацию, что и скрытый файл, но разделен на блоки, которые в IBM называют строфами (stanza). Каждая из них представляет собой данные, относящиеся к конкретному пользователю. Однако информация об устаревании пароля хранится в другом файле - /etc/security/user, который мы рассмотрим несколько позже. Пример записи /etc/security/passwd, показанный на Рисунке 7, иллюстрирует доступные для каждого пользователя параметры, описание которых приведено в Таблице 3 .

Как уже упоминалось выше, в файле /etc/security/passwd отсутствуют данные об устаревании пароля, дате последнего изменения и другая информация, традиционно размещаемая в файле /etc/shadow. Она находится в /etc/security/user (см. Рисунок 7).

Как и файл /etc/security/password, сведения о пользователе разделены на строфы. В файле содержатся самые разные данные, но для нас наибольший интерес представляют записи, показанные в Таблице 4 , касающиеся устаревания пароля и элементов управления.

Файл /etc/security/user предлагает самые широкие возможности управления - как устареванием пароля, так и его качеством. Руководители компании и аудиторы должны стремиться обеспечить самый серьезный контроль качества пароля, чтобы не спровоцировать несанкционированный доступ в систему. При этом высокое качество достигается не за счет реализации произвольным образом сгенерированных паролей, а благодаря обучению пользователей и использованию соответствующих системных проверок для их контроля.

КАЧЕСТВО ПАРОЛЯ

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

  • ваше имя;
  • имя вашей супруги/супруга;
  • имя вашего ребенка;
  • имя вашего домашнего животного;
  • имена друзей, членов семьи или коллег;
  • имена персонажей мультфильмов или фантастических героев;
  • все указанные выше имена с циклически переставленными в них буквами;
  • название операционной системы, которую вы используете;
  • названия предметов, видимых с вашего рабочего места;
  • название улицы, на которой вы живете;
  • номер паспорта или водительских прав;
  • датa рождения;
  • популярные слова, такие, как wizard, gandalf, guru и т. п.;
  • имя любого пользователя;
  • любое слово, которое можно найти в словаре;
  • географическое название;
  • любое имя собственное;
  • простые шаблоны, вроде qwerty или abcdefg;
  • слова и фразы из телепередач или фильмов наподобие NCC-1701;
  • слова, состоящие из одинаковых букв.

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

Причинами реализации правил для пароля во время задания последнего могут быть следующие:

  • пароли можно взломать с помощью грубой силы;
  • пароли можно взломать путем поиска в словаре;
  • пароли могут передаваться в явном виде по незащищенной сети;
  • пароли часто совместно используются членами одной группы;
  • пользователи выбирают легко угадываемые пароли.

Поскольку перечисленные ситуации вполне реальны, роль проверки при создании паролей возрастает. Однако не все системы предлагают правила проверки. А в тех системах, где такая возможность присутствует, нужно использовать все варианты проверки, в том числе соответствие шаблонов и подстановку символов. В среде, где это сделать невозможно, применяются три дополнительных метода: замена самой программы обслуживания паролей, «детективное расследование» и определение политики.

Предпочтительнее всего заменить программу /bin/passwd на одну из тех, которые поддерживают улучшенные правила проверки, поскольку приобретенные преимущества со временем оправдают первоначальные затраты на реализацию. Кроме того, несколько таких программ размещены в Internet, поэтому организации не нужно самой заниматься разработкой.

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

Осталось только ответить на вопрос: «Что такое пароль хорошего качества?»

Пароль должен удовлетворять следующим критериям:

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

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

ПРОВЕРКА С ПОМОЩЬЮ ВЗЛОМЩИКА ПАРОЛЯ

Взломщик пароля - это программа, которая пытается «подобрать» зашифрованные пароли, хранящиеся в файле /etc/passwd, сравнивая их со словами из словаря. Насколько успешным будет результат работы такой программы - зависит от ресурсов центрального процессора, качества словаря и того, сделал ли пользователь копию /etc/passwd.

С развитием программного обеспечения интерактивного взлома паролей UNIX и роста вычислительной мощности, которую может использовать такое усовершенствованное программное обеспечение взлома, качество пароля становится все важнее. К примеру, средний настольный компьютер (с процессором Pentium младшего класса и операционной системой Windows 95) способен выполнять поиск со скоростью 50 тыс. паролей в секунду.

Рассмотрим следующие примеры.

  • Пароль из шести символов с прописными и строчными буквами и цифрами можно взломать за 62 6 , или 56 800 235 584, попыток, т. е. на это потребуется 15,78 ч.
  • Пароль из семи символов с прописными и строчными буквами и цифрами можно взломать за 62 7 , или 3521614606208, попыток, что эквивалентно 41 дню.
  • Пароль из восьми символов с прописными и строчными буквами и цифрами можно взломать за 62 8 , или 2 183 401 055 849e+14, попыток. Процесс займет приблизительно 7 лет.
  • Пароль из восьми символов, в котором используются только прописные или только строчные символы, можно взломать за 26 8 , или 208 827 064 576, попыток - около 24 дней.
  • Пароль из восьми символов (или PIN), в котором использованы только цифры, можно взломать за 10 8 , или 100 млн попыток, т. е. на это уйдет всего 100 с.

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

Если оценить время, которое на это требуется, становится очевидным, почему злоумышленники сначала пытаются заполучить системный файл паролей, а затем обработать его в поисках «простых» паролей. Программу для взлома написать достаточно легко: примерно 60 строк на языке Си или 40 строк на Perl. Если, стремясь гарантировать, что в вашей системе используются высококачественные пароли, вы решите написать подобную программу, имейте в виду, что тем самым можно навлечь на себя беду. Поскольку она может быть украдена и впоследствии использована для получения доступа к другим машинам, то, при должной ее эффективности, вы можете еще больше ослабить защиту своего компьютера.

Одна из наиболее популярных программ взлома паролей UNIX - crack - написана Алексом Моффеттом, в основу которой заложен поиск в словарях слов и выражений на английском (или другом) языке. Эти средства пробуют различные перестановки слов и фраз (в обратном порядке, добавляя в начале и в конце цифру, объединяя вместе два коротких слова, подставляя противоположное по значению и т. д.) параллельно с более простыми эвристиками, такими, как даты, перестановка букв регистрационного имени, почтовые индексы и определенные распространенные фразы. Некоторые инструментальные средства работают очень быстро и выполняют поиск словарных слов, например ferreted, в считанные минуты.

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

РЕЗЮМЕ

Хотя механизм паролей в UNIX порождает массу споров и страдает от повторяющихся атак, он обеспечивает надежный контроль для предотвращения несанкционированного доступа к системе. Это утверждение верно, если элементы управления регистрацией корректно настроены с целью обеспечения высококачественных паролей и они оцениваются при создании, задаются ограничения на число неудачных попыток доступа, условия блокирования бюджетов и сроки устаревания пароля. Крайне важно гарантировать, чтобы реальные зашифрованные пароли не были видны пользователям, не имеющим прав администраторов, а для ftp необходимо установить соответствующие ограничения, которые не позволяют загружать их всем подряд. Наконец, прежде чем использовать любое программное обеспечение оценки паролей, например решения Oracle, получите разрешение у руководства на его применение.

Автор выражает свою благодарность специалистам, прочитавшим данную статью и высказавшим свои замечания перед ее публикацией. Особая признательность автора - Мигноне Коут за постоянную поддержку в его исследованиях и писательской деятельности.

Крис Хеа - консультант по защите и управлению информацией в компании Nortel Networks. Он работает в компьютерной отрасли свыше 14 лет, занимаясь проектированием приложений, вопросами гарантии качества, системным администрированием, сетевым анализом, а также консультируя по вопросам защиты, работы системы и архитектуры.

Многие из Вас прекрасно понимают, что хранить пароли в открытом виде в базе данных - крайне глупо . Если злоумышленник каким-то образом получит доступ к таблице с пользователями, то у него будет полная база паролей. А учитывая, что большинство пользователей имеют 1 пароль для всех сайтов, последствия могут быть печальными, а всё по Вашей вине. Есть, конечно, MD5-хэширование , но оно не даёт 100% гарантии , что пароли не будут расшифрованы. Почему это так и как правильно шифровать пароли пользователей на сайте , Вы узнаете из этой статьи.

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

Но Вы должны понимать, что десятки миллионов паролей - это капля в море , подобно размерам небольшого города и Вселенной. Но проблема в том, что в этом "городе" хранятся самые популярные пароли. Таким образом, несмотря на MD5-хэширование паролей у пользователей, всё-таки многие пароли всплывут. Однако, из этого есть выход.

Простеший способ, который защитит Вас от кражи паролей на 99.99% - это хэширование не просто пароля, но и некого секретного слова :

$secret = "Xdgd99DFd9Z"; // Секретное слово
$password = "123"; // Пароль
echo md5($password.$secret); // Результат хэширования
?>

Теперь, несмотря на тривиальность пароля, по хэшу его будет невозможно угадать. Ваша же задача, как Администратора, подобрать такое секретное слово, чтобы его гарантированно не было в этих базах. Для этого достаточно произвольным образом нажимать клавиши на клавиатуре. И данное слово надо сохранить в конфигурационном файле сайта, чтобы всегда к нему был доступ. Также можно не бояться, что злоумышленник узнает это слово, оно ему всё равно не поможет. Само слово запоминать Вам не нужно.

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

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

Например, в ряде версий Unix в качестве односторонней функции используется модифицированный вариант алгоритма DES. Введенный пароль длиной до 8 знаков преобразуется в 56-битовое значение, которое служит входным параметром для процедуры crypt(), основанной на этом алгоритме. Результат шифрования зависит не только от введенного пароля, но и от случайной последовательности битов, называемой привязкой (переменная salt). Это сделано для того, чтобы решить проблему совпадающих паролей. Очевидно, что саму привязку после шифрования необходимо сохранять, иначе процесс не удастся повторить. Модифицированный алгоритм DES выполняется, имея входное значение в виде 64-битового блока нулей, с использованием пароля в качестве ключа, а на каждой следующей итерации входным параметром служит результат предыдущей итерации. Всего процедура повторяется 25 раз. Полученное 64-битовое значение преобразуется в 11 символов и хранится рядом с открытой переменной salt.

В ОС Windows NT преобразование исходного пароля также осуществляется многократным применением алгоритма DES и алгоритма MD4.

Хранятся только кодированные пароли. В процессе аутентификации представленный пользователем пароль кодируется и сравнивается с хранящимися на диске. Таким образом, файл паролей нет необходимости держать в секрете.

При удаленном доступе к ОС нежелательна передача пароля по сети в открытом виде. Одним из типовых решений является использование криптографических протоколов. В качестве примера можно рассмотреть протокол опознавания с подтверждением установления связи путем вызова - CHAP (Challenge Handshake Authentication Protocol).

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

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



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

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

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

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

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

Желательно добиться того, чтобы процесс осуществлял авторизованный доступ только к тем ресурсам, которые ему нужны для выполнения его задачи. Это требование минимума привилегий, уже упомянутое в предыдущей лекции, полезно с точки зрения ограничения количества повреждений, которые процесс может нанести системе. Например, когда процесс P вызывает процедуру А, ей должен быть разрешен доступ только к переменным и формальным параметрам, переданным ей, она не должна иметь возможность влиять на другие переменные процесса. Аналогично компилятор не должен оказывать влияния на произвольные файлы, а только на их хорошо определенное подмножество (исходные файлы, листинги и др.), имеющее отношение к компиляции. С другой стороны, компилятор может иметь личные файлы, используемые для оптимизационных целей, к которым процесс Р не имеет доступа.

Различают дискреционный (избирательный) способ управления доступом и полномочный (мандатный).

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

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

· Простое свойство секретности. Субъект может читать информацию только из объекта, уровень секретности которого не выше уровня секретности субъекта. Генерал читает документы лейтенанта, но не наоборот.

· *-свойство. Субъект может записывать информацию в объекты только своего уровня или более высоких уровней секретности. Генерал не может случайно разгласить нижним чинам секретную информацию.

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

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

Большинство операционных систем реализуют именно дискреционное управление доступом. Главное его достоинство - гибкость, основные недостатки - рассредоточенность управления и сложность централизованного контроля.

Одними из наиболее важных свойств безопасности, используемых сегодня, являются пароли. Важно как вам так и вашим пользователям иметь безопасные, не очевидные пароли. Большинство из наиболее последних дистрибутивов Linux включают программу "passwd", которая не позволит вам установить легко угадываемый пароль. Убедитесь, что ваша программа "passwd" современна и имеет это свойство.

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

Большинство Unix (и Linux не исключение) в основном используют односторонний алгоритм шифрования, называемый DES (стандарт шифрования данных /Data Encription Standard/), для шифрования ваших паролей. Эти зашифрованные пароли затем сохраняются (обычно) в файле /etc/passwd или (реже) в /etc/shadow. Когда вы пытаетесь зарегистрироваться, все, что вы набираете, снова шифруется и сравнивается с содержимым файла, в котором хранятся ваши пароли. Если они совпадают, должно быть это одинаковые пароли, и вам разрешают доступ. Хотя DES является двухсторонним (вы можете закодировать, а затем раскодировать сообщение, давая верный ключ), большинство Unix используют односторонний вариант. Это значит, что невозможно на основании содержания файла /etc/passwd (или /etc/shadow) провести расшифровку для получения паролей.

Атаки "методом грубой силы", такие как "Взлом" или "John the Ripper" (см. ниже), могут часто угадать ваш пароль, если он не достаточно случает (рандомизирован). PAM модули (см. ниже) позволяют вам использовать различные программы шифрования для ваших паролей (такие как MD5 или подобные).

Больше информации по криптографии можно найти в RSA cryptography FAQ, доступном на http://www.rsa.com/rsalabs/newfaq/ . Здесь вы найдете информацию по таким терминам как "Diffie-Hellman", "public-key cryptography", "Digital Certificates", и др.

6.2 SSL, S-HTTP, HTTPS и S/MIME

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

  • SSL: - SSL, или Secure Sockets Layer, является методом шифрования разработанным Netscape для обеспечения безопасности в Сети. Он поддерживает несколько различных протоколов шифрования, и обеспечивает идентификацию (authentication) как на уровне клиента так и на уровне сервера. SSL работает на транспортном уровне, создает безопасный шифрованный канал данных, и, таким образом, может бесшовно шифровать данные многих типов. Наиболее часто это случается, когда вы посещаете защищенный узел для просмотра в режиме online секретного документа с помощью Communicator, который обеспечивает вас базовыми услугами безопасности связи, а также многими другими видами шифрования данных. Больше информации можно найти на http://www.consensus.com/security/ssl-talk-faq.html . Информация о других реализациях безопасности в Netscape, а также хорошая отправная точка по этим протоколам доступа по http://home.netscape.com/info/security-doc.html .
  • S-HTTP: - S-HTTP является еще одним протоколом, который реализует в Интернете сервис безопасности. Он был разработан для предоставления конфиденциальности, опознавания, сохранности, а также non-repudiability [ не спутайте с чем-либо еще ], в то же время имея механизмы управления многими ключами и криптографические алгоритмы путем выборочного согласования между участниками в каждой транзакции. S-HTTP ограничен специфическим программным обеспечением, которое реализует его, и шифрует каждое сообщение индивидуально. [ Из RSA Cryptography FAQ, стр. 138]
  • S/MIME: - S/MIME, или Secure Multipurpose Internet Mail Extension, является стандартом шифрования, используемым в электронной почте, или других типах сообщений в Интернете. Это открытый стандарт, который разработан RSA, и поэтому очень вероятно, что мы скоро увидим его в Linux. Больше информации по S/MIME можно найти по адресу http://home.netscape.com/assist/security/smime/overview.html .

6.3 Реализация IPSEC в x-ядре Linux

Наряду с CIPE и другими формами шифрования данных, существует также реализация IPSEC для Linux. IPSEC создан усилиями IETF для обеспечения криптографически безопасных соединений на уровне IP сети, который также предоставляет опознавание, сохранность, контроль доступа и конфиденциальность. Информацию по IPSEC и черновикам Интернета можно найти в http://www.ietf.org/html.charters/ipsec-charter.html . Там вы также можете найти ссылки на другие протоколы использующие управление ключами, на список рассылки и архивы IPSEC.

Реализация для Linux, которая была разработана в Университете Аризоны, использует объектно-ориентированную структуру для реализации сетевого протокола называемую х-ядро. Детальнее на http://www.cs.arizona.edu/xkernel/hpcc-blue/linux.html . В двух словах, х-ядро является методом передачи сообщений на уровне ядра, что позволяет более простую реализацию.

Как и с другими формами криптографии этот метод не распространяется с ядром из-за ограничений на экспорт.

6.4 SSH (Secure Shell), stelnet

SSH и stelnet - это программы, которые позволяют вам зарегистрироваться на удаленном сервере и иметь шифрованное соединение.

SSH является набором программ используемым как более безопасный заменитель для rlogin, rsh и rcp. Он использует криптографию открытого ключа для шифрования соединения между двумя машинами, а также для опознавания пользователей. Его можно использовать для безопасной регистрации на удаленном сервере или копировании данных между двумя машинами, в то же время предотвращая атаки путем присоединения посредине (session hijacking) и обманом сервера имен (DNS spoffing). Он предоставляет компрессию данных в вашем соединение и безопасное X11 соединение между двумя машинами. Домашнюю Web страницу SSH можно найти по адресу http://www.cs.hut.fi/ssh/

Вы также можете использовать SSH с вашей рабочей станции под Windows обращаясь к вашему Linux SSH серверу. Существует несколько бесплатных реализаций Windows клиентов, включая http://guardian.htu.tuwien.ac.at/therapy/ssh/ , а также коммерческую реализацию от DataFellows, на http://www.datafellows.com .

SSLeay является бесплатной реализацией протокола Secure Sockets Layer от Netscape и состоит из нескольких приложений, таких как Secure telnet, модуль для Apache, нескольких баз данных, а также нескольких алгоритмов, включая DES, IDEA и Blowfish.

Используя эту библиотеку был создан secure telnet, который выполняет шифрование через telnet соединение. В противовес SSH, stelnet использует SSL, Secure Sockets Layer протокол разработанный Netscape. Вы можете найти Secure telnet и Secure FTP начав с SSLeay FAQ, доступного на http://www.psy.uq.oz.au/~ftp/Crypto/

6.5 PAM - Pluggable Authentication Modules

Новые версии дистрибутива Red Hat распространяются с унифицированной схемой идентификации, называемой "PAM". PAM позволяет вам налету изменять ваши методы идентификации, требования, инкапсулировать все ваши локальные методы идентификации без перекомпиляции ваших программ. Описание настройки PAM выходит за рамки этого документа, поэтому за более детальной информацией сходите на web узел PAM. http://www.kernel.org/pub/linux/libs/pam/index.html

Вот несколько вещей, которые вы можете делать с PAM:

  • Использовать не-DES шифрование для ваших паролей. (делая их более устойчивыми к взлому методом "грубой силы")
  • Устанавливать лимиты на ресурсы для ваших пользователей, чтобы они не могли выполнить сервисную атаку (количество процессов, количество памяти, и т.п.)
  • На лету активизировать теневые пароли (shadow password) (см. ниже)
  • Разрешать определенным пользователям регистрироваться только в определенное время и/или с определенного места

За несколько часов установки и настройки вашей системы вы можете предотвратить много атак еще до их возниконовения. Например, используйте PAM для запрещения широкого использования в системе файлов.rhosts в домашних каталогах пользователей добавлением этих строк к /etc/pam.d/login:

# # Запретить для пользователей rsh/rlogin/rexec # login auth required pam_rhosts_auth.so no_rhosts

6.6 Криптографическая IP инкапсуляция (CIPE)

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

CIPE шифрует данные на сетевом уровне. Шифруются пакеты, которые передаются между компьютерами в сети. Шифрующий код помещается недалеко от драйвера, который посылает и принимает пакеты.

Это не схоже с SSH, который шифрует данные по соединениям - на гнездовом уровне. В этом случае шифруется логическое соединение между программами, запущенными на разных машинах.

CIPE можно также использовать при тунелировании (tunnelling) для создания Виртуальных Частных Сетей (Virtual Private Networks). Преимущество низкоуровневого шифрования состоит в том, что оно позволяет прозрачную работу между двумя сетями, соединенными в VPN, без каких-либо изменений в программном обеспечении.

Выдержка из документации по CIPE:

IPSEC стандарты определяют набор протоколов, которые можно использовать (среди прочих) для построения шифрованных VPN. Однако, IPSEC является скорее тяжеловесным и сложным с большим количеством опций, реализация полного набора протоколов все еще редко используется и некоторые вещи (такие как управление ключами) еще не до конца решены. CIPE использует более простой подход, в котором многие вещи, которые можно параметризовать (такие как выбор текущего алгоритма шифрования), устанавливаются единожды во время инсталляции. Это ограничивает гибкость, но позволяет более простую (и поэтому эффективную, простую в отладке) реализацию.

Дальнейшую информацию можно найти на http://www.inka.de/~bigred/devel/cipe.html

Также как и с другими формами криптографии, он не распространяется с ядром по умолчанию ввиду экспортных ограничений.

6.7 Kerberos

Kerberos является идентификационной системой, разработанной по проекту Athena в MIT. Во время регистрации пользователя, Kerberos идентифицирует его (используя пароль) и предоставляет пользователю способ доказать его идентичность другим серверам и компьютерам разбросанным в сети.

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

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

Вы можете найти больше информацию по Kerberos на http://www.veritas.com/common/f/97042301.htm а сам пакет на http://nii.isi.edu/info/kerberos/

6.8 Теневые пароли (Shadow passwords)

Теневые пароли означают сокрытие секретной информации о ваших шифрованных паролях от обыкновенных пользователей. Обычно эти шифрованные пароли находятся у вас в /etc/passwd и открыты всем для чтения. Таким образом на этот файл можно напустить программу-расшифровщик, чтобы попытаться определить значения паролей. Пакет shadow записывает информацию о паролях в файл /etc/shadow, который могут читать только привилегированные пользователи. Для того, чтобы активизировать теневые пароли вам необходимо убедиться, что все ваши утилиты, которым необходим доступ к паролям, скомпилированы с поддержкой теневых паролей. PAM (см. выше), кстати, позволяет вам просто подключить shadow модуль и не требует перекомпиляции программ. Вы можете также почитать Shadow-Password HOWTO для получения более детальной информации, если это вам конечно нужно. Он доступен на http://sunsite.unc.edu/LDP/HOWTO/Shadow-Password-HOWTO.html Сейчас он скорее условный и не требуется в дистрибутивах, поддерживающих PAM.

6.9 "Crack" и "John the Ripper"

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

Взламывающие пароли программы основаны на простой идее. Они перебирают каждое слово и его вариации из словаря. Они зашифровывают это слово и сравнивают его с вашим зашифрованным паролем. Если они совпадают, значит задача выполнена.

Существует целый ряд таких программ... наиболее заметные из них это "Crack" and "John the Ripper" http://www.false.com/security/john/index.html . Конечно, они заберут много вашего процессорного времени, но вы сможете с уверенностью сказать, сможет ли взломщик с помощью них получить ваши пароли, - сначала себе, а затем и пользователям указать слабые пароли. Заметьте, что взломщик для получения passwd должен был бы сначала использовать другие дыры в системе, но это уже более широкий вопрос, чем вы можете подумать.

6.10 CFS - криптографическая файловая система и TCFS - прозрачная криптографическая файловая система

CFS - это метод шифрования всей файловой системы, который позволяет пользователям сохранять в ней зашифрованные файлы. Он использует NFS сервер, запущенный на локальной машине. RPMS доступен на http://www.replay.com/redhat/ и больше информации о том как это работает на: ftp://ftp.research.att.com/dist/mab/

TCFS является улучшенным вариантом CFS, поскольку более интегрирован с файловой системой, и, таким образом, прозрачен для всех пользователей, использующих зашифрованную файловую систему. Более детально на: http://edu-gw.dia.unisa.it/tcfs/

6.11 X11, SVGA и экранная безопасность

X11

Очень важно для вас защитить ваш графический экран, чтобы предотвратить взломщика от действий подобных: воровству вашего пароля во время набора без вашего ведома, чтению документов или информации, оставленной вами на экране, или даже использованию дыр для получения прав суперпользователя. Запуск удаленных Х приложений через сеть также может быть чреват опасностями, давая возможность взломщику (зд. sniffer) перехватить ваше взаимодействие с удаленным компьютером.

Х имеет целый ряд механизмов контроля доступа. Наиболее простой из них - машинозависимый (host based). Вы можете использовать xhost для определения тех машин, с которых разрешен доступ к вашему экрану. Но в общем это не очень безопасный метод. Если кто-то имеет доступ к вашей машине, он может выполнить xhost + его машина и, таким образом, легко войти. Также, если вам нужно разрешить доступ с ненадежной машины, любой может подвергнуть риску ваш дисплей.

Вы можете также использовать ssh (см. ssh выше) для разрешения безопасных Х соединений. Это имеет также преимущество, поскольку прозрачно конечному пользователю, и означает то, что не зашифрованные данные не передаются по сети.

Загляните также в Xsecurity страничку man для более детального описания безопасности в Х. Безопасным будет использовать xdm для регистрации на вашей консоли, а затем использовать ssh для перехода на удаленную машину, с которой вы хотите запустить X программу.

SVGA

Программы, основанные на SVGAlib, обычно являются SUID-root, для того чтобы иметь доступ ко всем видео-ресурсам вашего компьютера. Это делает их очень опасными. Если они дают сбой, то обычно вам нужно перезагрузить компьютер, чтобы опять получить доступ к консоли. Убедитесь, что все SVGA программы, которые вы запускаете, подлинны, и как минимум такие, которым вы доверяете. А лучше - не запускайте их вообще.

GGI (проект Общего Графического Интерфейса)

Проект GGI для Linux является попыткой решить несколько проблем с видео интерфейсом в Linux. GGI будет передавать небольшие куски видео-кода в ядро Linux, и таким образом контролировать доступ к видео системе. Это значит, что GGI будет способен восстановить вашу консоль в любое время к известному рабочему состоянию. Он также позволит использовать ключ безопасности (secure attention key), так что вы сможете быть уверены, что на вашей консоли нет ни одного запущенного "Троянского коня", пытающегося зарегистрироваться.



Статьи по теме: