Использование OTPW для создания одноразовых паролей SSH в Ubuntu 14.04

SSH «из коробки» поставляется с довольно слабой защитой. Исходные функции защиты позволяют только обезопасить соединения и пройти аутентификацию на удалённом хосте. Ключи SSH – это безопасный способ подключения без передачи пароля через Интернет.

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

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

Система OTPW (или one time password authentication) создана для подобных ситуаций. Система OTPW была внедрена в другие механизмы аутентификации (например, в двухфакторную аутентификацию и технологии единственной подписи).

Данное руководство поможет настроить OTPW в Ubuntu 14.04, после чего в системе можно будет использовать двухкомпонентные одноразовые пароли.

Базовые понятия

OTPW работает путём выхода на систему аутентификации PAM.

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

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

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

Установка компонентов

Для начала нужно установить несколько компонентов.

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

Обновите список пакетов и установите все необходимое из репозитория:

sudo apt-get update
sudo apt-get install otpw-bin libpam-otpw

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

Настройка PAM для поддержки OTPW

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

Примечание: Предполагается, что SSH-ключи уже созданы.

Приведённая здесь конфигурация использует SSH-ключи, если таковые есть в наличии; в противном случае будет использоваться механизм OTPW.

Для этого нужно просто отредактировать файл, включающий аутентификацию SSH.

Откройте конфигурационный файл SSH PAM:

sudo nano /etc/pam.d/sshd

В верхней части файла находится директива, импортирующая файл common-auth. Эта директива отвечает за аутентификацию на основе простого пароля без использования OTPW. Закомментируйте её:

#@include common-auth

Ниже нужно добавить следующие настройки, позволяющие OTPW обрабатывать запросы паролей.

auth    required    pam_otpw.so
session optional    pam_otpw.so

Сохраните и закройте файл.

Настройка SSHD

Теперь модуль PAM поддерживает OTPW. Посел этого моно приступить к настройке самого демона.

Откройте файл с правами root:

sudo nano /etc/ssh/sshd_config

В нём нужно найти несколько отдельных значений.

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

UsePrivilegeSeparation yes
PubkeyAuthentication yes
ChallengeResponseAuthentication yes
PasswordAuthentication no
UsePAM yes

После этого перезапустите SSH, чтобы обновить настройки.

sudo service ssh restart

Создание файла паролей OTPW

Теперь нужно создать файла паролей для OTPW.

Первый файл будет храниться в ~/.otpw; он предназначен для хранения хэшированных сегментов паролей (по одному в каждой строке). Второй файл хранит одноразовые сегменты паролей в формате, понятном человеку, которые нужно скопировать на безопасное устройство, распечатать или защитить каким-либо другим надёжным способом.

Для создания этого списка используется команда otpw-gen. Она, как правило, выдаёт читаемый человеком текст как стандартный вывод, но его можно перенаправить в файл для безопасного хранения.

cd ~
otpw-gen > nothingtosee.txt

Это сгенерирует random seed и запросит префикс. При выборе префикса нужно использовать те же самые правила, что и при создании любого обычного пароля. Запомните этот пароль.

Теперь файл ~/.otpw будет хранить хэшированные суффиксы паролей:

OTPW1
280 3 12 8
253tFMngG2PNYhn
132Kua%SZ+esb6t
237yH7D2FMbQsyW
125rrXfBRwnF+A%
106gJxhJE4jkknj
04135:5:knWIB4:
232/d4kI:n57IcD
244RASe8ka63b8Z
057GmqfFe=pXQqu
. . .

Кроме того, нехешированные суффиксы и их идентификаторы были направлены в файл ~/nothingtosee.txt.

OTPW list generated 2014-04-03 18:06 on sshd
000 /rGF h5Hq  056 /zi5 %yTJ  112 J7BT HdM=  168 fdBm X%Tn  224 69bi =9mE
001 GoOG jxYQ  057 E=o3 kuEF  113 zwit p27J  169 nHK9 CXRx  225 IihF =o8g
002 Xm=E PuXc  058 Ok27 ZJ++  114 On=5 pNYH  170 ZRDa mB5e  226 yYsb CAfn
003 deL+ iHs7  059 /WGS :J4M  115 ZZd/ 8zyU  171 acDd dESV  227 ddjg ipcR
004 KhDn NdfS  060 =tEz ACye  116 FkQ9 8kSu  172 iRSR nZWT  228 9hHd veZ9
005 rGFG K5=7  061 MvUW LRxc  117 2YwY axJJ  173 kEV5 T/Vz  229 wx%n Le6P
006 GWi2 fHjf  062 qOR: WN2x  118 FvD4 oNjT  174 99OT 8KPy  230 /I=Y hicP
007 XPom pEYp  063 8Xvm vZGa  119 UNjF :Kys  175 b95i SU3R  231 keLn aDcK
008 fJI% 3Qs2  064 3I7Q I2xc  120 5Tm9 REQK  176 AVg: 4ijE  232 :aIF op6V
009 P/Sn dSxA  065 A+J6 =4zo  121 LAyj 3m2+  177 TMuN 9rJZ  233 SWvB %+cL
. . .

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

По умолчанию генератор производит такое количество суффиксов, которое поместится на стандартном листе бумаги для печати.

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

Тестирование

Протестировать настройку можно при помощи компьютера, на котором не настроена поддержка SSH-ключей (также можно втременно переместить ключи в ~/.ssh).

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

ssh demouser@server1.com
Password 253:

Как видите, OTPW предоставляет суффикс пароля.

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

К примеру, если префикс «crazyburr!to», а список суффиксов выглядит так:

249 N4HY RsbH
250 +vAz fawn
251 O4/R ZrhM
252 c6kP jgUT
253 I=aA OKSz
254 aYzA :F64
255 3ezp ZpIq
256 ggIi TD2v

То можно ввести пароль «crazyburr!toI=aA OKSz» или «crazyburr!toI=aAOKSz», чтобы пройти аутентификацию.

После этого откройте ~/.otpw. Обратите внимание: одна из хешированных строк заменена символами тире:

. . .
091icM5kSPVOdcU
274Uf3q/=kTYcu8
229fHfmIsCj7mjQ
---------------
115EzDO6=jM/sOT
143iWCdteSk3kg7
265S+QTGcg+MAZO
174UgXchxsI2g:G
. . .

Это значит, что использованный суффикс более не доступен.

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

Запрос пароля будет выглядеть так:

Password 161/208/252:

В таком случае создаётся файл ~/.otpw.lock. После удачной аутентификации он должен быть удалён, но иногда по причине бага этого не происходит. В таком случае его можно удалить вручную:

rm ~/.otpw.lock

Предостережения и ошибки

Как уже говорилось, иногда lock-файл не удаляется автоматически. Это особенно часто происходит, когда пользователь прерывает соединение, набрав CTRL-C.

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

Для этого был создан простой bash-скрипт (автор – Wolfgang Kroener). Его можно использовать разными способами, но проще всего добавить его в конец ~/.bashrc.

nano ~/.bashrc

Добавьте в конец файла:

if [ "$SSH_TTY" -a -f $HOME/.otpw ]; then
PW_LINES=$(wc -l <$HOME/.otpw)
PW_USED=$(grep -- ---- $HOME/.otpw | wc -l)
echo "OTPW $PW_USED/`echo $PW_LINES-2 | bc` used"
fi

Также нужно добавить его в централизованное место. Тогда он будет запускаться в зависимости от того, существует ли файл ~ /.otpw для каждого пользователя.

Теперь после входа на экране будет появляться сведения о действительных паролях:

OTPW 6/280 used

OTPW рекомендует обновлять список паролей, использованный на 50%. Для этого используйте команду:

otpw-gen > anotherfile.txt

Эта команда перепишет предыдущие суффиксы паролей.

Заключение

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

Tags: , , , ,

Добавить комментарий