Опубликован: 20.02.2006 | Уровень: специалист | Доступ: платный
Лекция 9:

Криптографические средства

Подписание ключей и управление доверием к ним

В GnuPG вы подписываете ключи и управляете доверием к ним, переходя в режим редактирования ключей с помощью команды

gpg --edit-key доверенный_адрес

Здесь доверенный адрес ассоциируется с подписываемым или управляемым ключом, входящим в ваше открытое кольцо. Команда выдает основную информацию о ключе. В этом режиме наберите fpr, чтобы распечатать идентификационную метку данного ключа. Как и отпечатки пальцев для людей, идентификационная метка служит специфической формой идентификатора ключа. Убедитесь, что это ключ нужного человека, проверяя его либо по телефону, либо каким-то другим способом. Можно также проверить, кто еще подписал этот ключ, вводя check. Будет напечатан список лиц, подписавших этот ключ, что может помочь вам определить его законность.

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

1 = Don't know (Не знаю)
2 = I do NOT trust (Я НЕ доверяю)
3 = I trust marginally (Я доверяю косвенно)
4 = I trust fully (Я доверяю полностью)
s = Please show me more information 
   (Мне требуется дополнительная информация)
m = Back to the main menu (Вернуться в основное меню)

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

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

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

OpenSSH: Свободный инструментарий криптографической защиты сеансов

OpenSSH (сервер)

Автор/основной контакт: Tatu Ylonen (первоначальный автор) и другие

Web-сайт: http://www.openssh.org

Платформы: BSD, Linux и большинство UNIX

Лицензия: BSD

Рассмотренная версия: 2.1.1p4

Списки почтовой рассылки:

Список объявлений

Список только для чтения, который содержит общие объявления о выпуске новых версий, исправлении ошибок и т.д. Подписка по адресу http://www.mindrot.org/mailman/listinfo/openssh-unix-announce.

Общий список пользователей SSH

Вопросы и общая дискуссия о применении SSH. Подпишитесь, послав пустое сообщение по адресу secureshell-subscribe@securityfocus.com.

Чтобы отказаться от подписки, пошлите пустое сообщение по адресу

secureshell-unsubscribe@securityfocus.com.

Имеется также архив данного списка по адресу

http://marc.theaimsgroup.com/?!=secure-shell&r=1&w=2.

Список разработчиков

Обсуждение разработки SSH и программирования. Подписка по адресу

http://www.mindrot.org/mailman/listinfo/openssh-unix-dev.

Большинство файловых и коммуникационных утилит, до сих пор применяемых в Интернете, восходят к тем временам, когда Интернет был небольшим и безопасным. Одним из наиболее употребительных средств, помимо web-навигатора, является Telnet. Эта утилита служит для удаленного терминального доступа ко всевозможным серверам, маршрутизаторам, межсетевым экранам и другим устройствам. Большим минусом Telnet является то, что утилита посылает свои данные в открытую, поэтому, если вы применяете Telnet для входа в системы через Интернет, то кто-нибудь может перехватить ваш трафик, включая ваши пароли. Вы вольны считать, что поиск вашего пароля в потоке данных подобен поиску иголки в стоге сена, но хакеры написали программы, выполняющиеся поверх сетевых анализаторов, для поиска обычных входных атрибутов и записи результатов. Это справедливо и для других средств удаленного доступа, таких как FTP, TFTP и RCP.

SSH (Secure Shell, защищенный командный интерпретатор) решает эту проблему, применяя как асимметричную, так и симметричную криптографию для шифрования сеансов, начиная с первого нажатия клавиши. В этом случае злоумышленник, прослушивающий ваше соединение, получит лишь случайный шум. SSH не только обеспечивает конфиденциальность ваших данных с помощью шифрования, но предоставляет также сильную аутентификацию, препятствующую подделкам и другим маскарадным атакам. Это достигается с помощью цифровых сертификатов для аутентификации пользователей. Не путайте SSH с SSL - стандартом шифрования Web. Хотя они делают одно и то же дело, SSH работает с любым протоколом, в то время как SSL предназначен прежде всего для web-коммуникаций.

SSH включает также SCP - безопасный эквивалент RCP, средства удаленного копирования, и SFTP - безопасный аналог FTP. SSH можно применять и для туннелирования других протоколов, таких как HTTP и SMTP. Некоторые приложения рассмотрены в конце данного раздела. Использование этого пакета программ вместо старых аналогов гарантирует, что ваши коммуникации с серверами не будут раскрыты. Отказаться от применения в вашей сети Telnet и FTP может быть нелегко, но чем больше вы в этом преуспеете, тем в большей безопасности окажетесь.

Чтобы использовать SSH, необходимо иметь сервер SSH, выполняющийся на машине, к которой вы хотите подключиться, и клиент SSH на машине, с которой вы подключаетесь. Обычные клиенты FTP и Telnet не будут соединяться с сервером SSH. Клиент встроен в большинство современных операционных систем Linux, хотя, быть может, требуется выбрать эту опцию при установке ОС. (cм. в "Средства уровня операционной системы" дополнительную информацию о клиенте SSH). Сервер SSH обычно является необязательным, и его следует выбрать при установке ОС. Чтобы проверить, установлен ли он, наберите

ps -ax | grep sshd

и посмотрите, выполняется ли процесс sshd. Если его нет, то необходимо установить сервер, чтобы обеспечить соединение с вашей машиной через SSH.

Установка и запуск сервера OpenSSH

  1. Первым делом загрузите пакет с Web-сайта или с прилагаемого к книге компакт-диска и распакуйте его.
  2. Выполните обычные команды компиляции в Linux:
    ./configure
    make
    make install

    Произойдет сборка и установка программ SSH. Бинарные файлы и ассоциированные библиотеки будут размещены в каталоге /usr/local/bin (в системе Mandrake Linux, в других дистрибутивах может быть иначе). Системные демоны помещаются в /usr/local/sbin, а конфигурационные файлы - в /usr/local/etc/ssh или /etc/ssh, в зависимости от установки.

    Можно выбрать альтернативный маршрут установки, используя аргумент configure

    ---prefix=маршрут

    где маршрут нужно заменить желательным альтернативным местом.

  3. После установки OpenSSH проверьте конфигурационный файл, находящийся в /etc/ssh, и убедитесь, что он соответствует параметрам вашей системы. Конфигурационный файл для серверной части называется sshd_config. Для внесения изменений можно воспользоваться текстовым редактором, таким как vi или EMACS. Необходимо проверить следующее:
    • Port: Порт, который SSH использует для входящих соединений. Подразумеваемый номер - 22. Если изменить это значение, то люди, пытающиеся с вами соединиться, должны будут вручную изменить номер порта у своих клиентов SSH.
    • Protocols: Набор протоколов, которые SSH должен принимать. По умолчанию принимаются оба типа соединений SSH1 и SSH2. Для повышения безопасности можно разрешить прием только SSH2, но тогда некоторые старые клиенты не смогут соединяться.
    • Hostkey: Задает расположение ключей, применяемых при проведении основанной на ключах аутентификации пользователя во время соединения с другой машиной. Это не то же самое, что ключи сервера, которые генерируются при установке.
  4. Прежде чем пользователь сможет работать с SSH, он должен сгенерировать ключи. Это делается с помощью следующей команды:
    ssh make-host-key

    Вы получите примерно следующий ответ:

    Generating public/private rsa key pair. 
     (Генерация пары RSA-ключей открытый/секретный).
    Enter file in which to save the key (/home/me/.ssh/id_rsa):
     (Введите файл для сохранения ключа).
    Created directory '/home/me/.ssh'. Создан каталог)
    Enter passphrase (empty for no passphrase):
     (Введите парольную фразу (пусто без фразы)).
    Your identification has been saved in /home/me/.ssh/id_rsa.
     (Идентификационные данные сохранены в)
    Your public key has been saved in /home/me/.ssh/id_rsa.pub.
     (Открытый ключ сохранен в)
    The key fingerprint is :f6:41:99:d8:a5:d1:fb:e7:93:86:7e:e6:
      4f:01:d9:5b
     (Идентификационная метка ключа).

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

  5. Теперь можно запустить сервер SSH из командной строки, набрав sshd &. Эта команда в фоновом режиме запускает sshd - серверный демон, постоянно слушающий попытки подключений. Если вы хотите, чтобы sshd запускался автоматически при загрузке системы (что предпочтительно), поместите эту строку в конце файла rc.local, находящегося в каталоге /etc/rc.d/ (в Mandrake Linux, или в соответствующем стартовом файле для вашего дистрибутива).

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

Переправка портов посредством OpenSSH

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

ssh -L локальный_порт:удаленный_хост:удаленный_порт 
  -N удаленный_хост

где надо заменить:

  • локальный_порт - случайно выбранным большим номером порта для создания нового криптографически защищенного соединения;
  • удаленный_хост - IP-адресом или именем серверного хоста на другой стороне соединения;
  • удаленный_порт - портом сервиса, который вы желаете туннелировать на удаленную сторону;

Опция -L предписывает SSH слушать локальный порт на локальном хосте и переправлять любые соединения на удаленный порт удаленного хоста. Опция -N освобождает SSH от попыток входа; требуется просто поддерживать соединение открытым для переправляемого трафика.

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

Ниже представлены два примера, которые показывают, как это работает.

Пример 1: Создание криптографически защищенного соединения для электронной почты с помощью OpenSSH

Обычно сообщения электронной почты пересылаются в открытом виде через порт 25. Предположим, вы желаете зашифровать это соединение. Один из способов добиться этого - создать при помощи SSH криптографически защищенный туннель для любого трафика, предназначенного для порта 25 почтового сервера. Используя вышеприведенный формат и считая, что почтовый сервер имеет IP-адрес 192.168.1.2, получим следующую команду:

ssh -L 5000:192.168.1.2:25 192.168.1.2 -N &

Эта команда задает порт 5000 на локальной машине для туннелирования почты (порт 25) на удаленный почтовый сервер. Поэтому, если вы настроите свой почтовый клиент для соединения с localhost:5000 вместо подразумеваемого почтового порта, SSH будет автоматически шифровать и переправлять трафик на порт 25 вашего почтового сервера. Теперь вы можете получать и посылать почту на эту машину, не опасаясь, что ее кто-то перехватит.

Пример 2: Создание безопасного web-соединения

Допустим, вы желаете соединиться со своим web-сервером для выполнения защищенной транзакции. Если сервер не настроен для поддержки SSL, вы все равно сможете при помощи SSH организовать безопасное туннелирование своего web-трафика на сервер. Если ваш web-сервер расположен по адресу 192.168.1.3, то командная строка будет выглядеть примерно так:

ssh -L 5000:192.168.1.3:80 192.168.1.3 -N &

Теперь вы можете соединиться, вводя localhost:5000 в web-навигаторе, и по безопасному туннелю ваш трафик будет переправляться в порт 80 удаленной машины. Можно переправлять несколько портов на одной машине. Например, команда

ssh -L 5000:192.168.1.2:25 -L 5001:192.168.1.2:80 -N 192.168.1.2 -N &

будет переправлять весь трафик с локального порта 5000 на почтовый порт и с порта 5001 - на порт 80 удаленной машины с адресом 192.168.1.2. Конечно, предполагается, что вы имеете почтовый счет на удаленном сервере.

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

Роман Попов
Роман Попов

После прохождения курса Стандарты инфрмационной безопасности мне предложено получение Удостоверения о повышении квалификации от НИУ ВШЭ по программе Менеджмент информационной безопасности. Программа включает в себя ряд курсов которые я уже ранее проходил. Какой порядок действий в данном случае? Как прозводится перезачет результатов? И какие экщамены мне надо еще доздать чтобы получить удостоверение?

Александр Путятинский
Александр Путятинский

Добрый день по окончании данного курса выдается сертификат?

Елена Гогонова
Елена Гогонова
Россия, Магнитогорск
Алина Архипова
Алина Архипова
Россия, г белорецк