Linux Security HOWTO: Безопасность паролей & Шифрование

Next Previous Contents

## 6. Безопасность паролей & Шифрование

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

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

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

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

Вы можете посетить http://consult.cern.ch/writeup/security/security_3.html для получения информации о том, как лучше выбрать пароль.

## 6.1 PGP и криптование открытым ключом (Public Key Cryptography)

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

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

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

PGP (Pretty Good Privacy) довольно хорошо поддерживается в Linux. Известно, что хорошо работают версии 2.6.2 и 5.0. Чтобы увидеть хороший пример PGP и как его использовать, почитайте PGP FAQ. http://www.pgp.com/service/export/faq/55faq.cgi Убедитесь, что вы используете версию применимую в вашей стране, поскольку существуют ограничения правительства США на экспорт - сильное шифрование рассматривается как военное оружие и запрещено к распространению в электронной форме за пределами страны. /Прим. перев. - Вроде как есть сдвиги в этом направлении. Недавно читал, что кто-то там выиграл процесс и получил разрешение на это дело - упор делался на свободу слова/.

Существует также пошаговое руководство по настройке PGP в Linux, находится по адресу http://mercury.chem.pitt.edu/~angel/LinuxFocus/English/November1997/article7.html Оно написано для международной версии PGP, но оно легко адаптируемо для версии США. Вам также может понадобиться заплатка (patch) для некоторых из последних версий Linux, которая находится на ftp://sunsite.unc.edu/pub/Linux/apps/crypto.

Больше информации по криптографии можно найти в 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/

[From: Stein, Jennifer G., Clifford Neuman, and Jeffrey L. Schiller. "Kerberos: An Authentication Service for Open Network Systems." USENIX Conference Proceedings, Dallas, Texas, Winter 1998.]

## 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 + его машина и, таким образом, легко войти. Также, если вам нужно разрешить доступ с ненадежной машины, любой может подвергнуть риску ваш дисплей.

Если для регистрации используется xdm (x display manager), вы получаете намного лучший метод доступа: MIT-MAGIC-COOKIE-1. Генерируется 128-битный cookie и сохраняется в вашем файле .Xauthorty. Если вы хотите удаленной машине разрешить доступ к вашему дисплею, то для предоставления доступа именно этому соединению вы можете использовать команду xauth и информацию из вашего файла .Xauthority. Посмотрите также Remote-X-Apps mini-howto, доступном на http://sunsite.unc.edu/LDP/HOWTO/mini/Remote-X-Apps.html.

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

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

### SVGA

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

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

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

Next Previous Contents