APG - удаленный генератор паролей по telnet.В данной статье я продемонстрирую приложение из коллекции портов, которое может помочь пользователям при выборе сложных, но запоминающихся, паролей.
APG (Automated Password Generator - автоматический генератор паролей) – инструмент для генерирования случайных паролей. Он заинтриговал меня, поскольку поддерживает протокол pwdgen, определенный RFC 972. Интересно то, что хотя этот протокол доступен с 1986, большинство людей никогда не слышали о нём и не имели возможности использовать его в сети.
Давайте установим apg и увидим какую пользу оно может принести:
# cd /usr/ports/security/apg && make install clean
Установка произошла очень быстро, а вывод занял только три четверти экрана монитора.
Но за это время порт установил три утилиты: клиент apg, сервер apgd, и менеджер Bloom-фильтра, apgbfm. Каждая утилита имеет соответствующий manpage, битком набитый примерами и полезными URL-ами для дополнительного чтения. Стоит отметить то, что один из URL ссылается на NIST, Национальный Институт Стандартов и Технологии (NIST известен своими наилучшим методами безопасности), другой на - FIPS (Федеральная Стандарт по Обработке Информации).
В самом простом своем использовании, apg сгенерирует шесть произвольных паролей, в надежде, что Вы выберете один из них как пароль. Пароли будут сложными, что означает их стойкость к атаке по словарю. Для того, чтобы сделать пароли запоминающимися, включите ключ t, который покажет Вам как лучше произносить сгенерированные пароли.
Вот пример использования:
# apg -t
RicDeOs9 (Ric-De-Os-NINE)
geuwocDon3 (geu-woc-Don-THREE)
omfotCibta (om-fot-Cib-ta)
TamJukEd8 (Tam-Juk-Ed-EIGHT)
yelkibhos (yelk-ib-hos)
Dridoin3 (Drid-oin-THREE)
По умолчанию apg создает пароли длиной от восьми до десяти символов, использующих как верхний, так и нижний регистр. Тем не менее, Вы можете использовать дополнительные ключи, чтобы соответствовать любой парольной политике. Например, чтобы принудительно включить спецсимволы:
# apg -MS -t
dabafjos/ (dab-af-jos-SLASH)
geshk*swu (geshk-ASTERISK-swu)
hutyeiz' (hut-yeiz-APOSTROPHE)
wakvob)odi (wak-vob-RIGHT_PARENTHESIS-od-i)
&ovyigrikl (AMPERSAND-ov-yi-gri-kl)
lerdeljid[ (lerd-elj-id-LEFT_BRACKET)
Для уверенности в том, что каждый пароль будет длиной 12 символов, определите 12 минимумом (-m) и максимумом (-x) длины пароля:
# apg -MS -m12 -x12 -t
megrihyghep] (me-gri-hy-ghep-RIGHT_BRACKET)
emcujlabcat! (em-cuj-lab-cat-EXCLAMATION_POINT)
uctoldil'swy (uct-old-il-APOSTROPHE-swy)
tygopocparj: (tyg-op-oc-parj-COLON)
yedreumtutt} (ye-dreumt-utt-RIGHT_BRACE)
bagcu!gedany (bag-cu-EXCLAMATION_POINT-ged-an-y)
Если ваша политика паролей настаивает на действительно произвольных паролях, которые могут быть непроизносимыми, используйте -a1 вместо -МС:
# apg -a1 -m12 -x12
:L<@6TP@"Z^[
*pIsI_o!690C
:f>SH)xj#/vO
ykwL|L=2KwDp
l)Lb?q*4b}0T
?h3wR>`:jPhZ
Хм-м-м. Наверное я остановлюсь на произносимых паролях .
apg также поддерживает способность проверять произвольно сгенерированные пароли атакой по словарю как с помощью словарного файла, так и с помощью Bloom-фильтра. Если при создании произвольного пароля, найдётся совпадение в любом из файлов, apg отбросит это и сгенерирует другой пароль.
Ваша система FreeBSD поставляется со словарным файлом, который находится в /usr/share/dicts/words. Если этого файла нет в Вашей конкретной системе, Вы можете установить его, используя /stand/sysinstall, выбрав configure, затемdistributions и выбирая dict. Этот файл отсортирован по алфавиту и хранится в кодировке ASCII, что означает, что Вы можете добавить ваши собственные слова. В общем, слова добавляются так:
R00t
r00t
r00T
и так далее, поскольку слова чувствительны к регистру. Рекомендовано, чтобы Вы потратили некоторое время, добавляя слова, которых Вы не хотите в качестве паролей в вашей сети. Как только Вы закончите, заключите apg в двойные кавычки и сверьте с вашим словарным файлом используя ключ -r и определяя имя файла:
# apg -MS -m12 -x12 -t -r /usr/share/dict/words
plecvumpyul: (plec-vump-yul-COLON)
nenyacyisej# (nen-yac-yis-ej-CROSSHATCH)
hocs;quadepa (hocs-SEMICOLON-quad-ep-a)
dabejyegawf' (dab-ej-yeg-awf-APOSTROPHE)
neirinajaun` (neir-in-aj-aun-GRAVE)
bempusaflov` (bemp-us-a-flov-GRAVE)
Ещё лучше, найдите время, чтобы создавать Bloom файл. Утилита потребует от Вас определить как имя словаря, так и желаемое имя Bloom-файла:
# apgbfm -d /usr/share/dict/words -f ~/bloomfile
Counting words in dictionary. Please wait...
Эта команда может быть запущена обычным пользователем. В данном случае, я решил создать Bloom файл в своем домашнем каталоге. Как только файл будет сгенерирован, используйте ключ -b, чтобы сообщить apg где расположен Bloom файл:
# apg -MS -m12 -x12 -t -b ~/bloomfile
pitmurresir. (pit-murr-es-ir-PERIOD)
ryudkuavbuj= (ryud-ku-av-buj-EQUAL_SIGN)
rinlelt{abap (rin-lelt-LEFT_BRACE-ab-ap)
tykawegcerg* (tyk-aw-eg-cerg-ASTERISK)
woabfifawoc? (woab-fif-aw-oc-QUESTION_MARK)
/drujatwajsi (SLASH-dru-ja-twaj-si)
Если Вы попробуете оба ключа -r и -b с apg, Вы обнаружите, что Bloom файл - значительно быстрее, так как он использует алгоритм, чтобы определять может ли быть пароль обнаруженным в словарном файле.
Последний ключ, который я упомяну, будет -s, (seed) ключ. Этот ключ рекомендован, так как он дает генератору случайных чисел начальное значение:
# apg -MS -m12 -x12 -t -b ~/bloomfile -s
Please enter some random data (only first 16 are significant)
(eg. your old password):>
slebek%onton (sleb-ek-PERCENT_SIGN-ont-on)
clemvesyert$ (clem-ves-yert-DOLLAR_SIGN)
zeocneamrig- (ze-oc-neam-rig-HYPHEN)
ne*quenrynra (ne-ASTERISK-quen-ryn-ra)
rushkuncuit# (rushk-un-cu-it-CROSSHATCH)
winriwehorv/ (win-ri-we-horv-SLASH)
Обратите внимание на то, что эти пароли окончательно усложнены, но все еще довольно произносимы.
Вы можете создать сценарий оболочки так, чтобы не забывать заносить все ключи. Здесь я модифицировал предложение из man apg, чтобы включать свои желаемые ключи:
# cat /home/muff/genpasswd.sh
#!/bin/sh
apg -MS -m10 -x10 -t -b /home/muff/bloomfile -s
Не забываем сделать файл исполняемым:
# chmod +x /home/muff/genpasswd.sh
Теперь, чтобы сгенерировать пароли, можно просто набрать /home/muff/genpasswd.sh.
Другая альтернатива - создать псевдоним для команды apg. Поскольку я планирую использование apg на одной машине и я всегда работаю в C-shell (tcsh), я добавил такую строку в ~/.tcshrc:
alias apg apg -MS -m12 -x12 -t -b ~/bloomfile -s
Теперь, когда я набираю apg, он автомагически использует все мои желаемые ключи.
Вплоть до этого момента, мы концентрировались на apg клиенте, что означает, что мы пока не использовали протокол pwdgen. Подобно любому TCP/IP протоколу, pwdgen требует как компонент клиента, так и компонент сервера. Работа компонента сервера - слушать запросы клиента на своем порту.
Cервис запустим с помощью демона inetd, для чего Вам понадобится добавить следуюющие данные в файл /etc/inetd.conf:
# echo 'pwdgen stream tcp nowait root /usr/local/sbin/apgd apgd' >> /etc/inetd.conf
Добавим запуск супердемона inetd в rc.conf:
# INETd-service
inetd_enable="YES"
Делее просто просто набираем inetd, чтобы запустить сервис.
# inetd
Преимущество использования apgd - то, что Вам не нужно установить порт apg на каждом пользовательском компьютере. Когда пользователям нужно генерировать произвольные пароли, они просто соединяются с портом 129 на сервере apgd. В этом примере apgd работает на сервере ix-ua.net:
# telnet ix-ua.net 129
Trying 10.10.1.1...
Connected to ix-ua.net.
Escape character is '^]'.
chroyskIts
Vuvtibewci
rudidemUn
cliukmibva
Cavgarsorc
dyWyocks
Connection closed by foreign host.
Давайте посмотрим поближе на сгенерированные пароли. Помните, когда я добавлял строку к /etc/inetd.conf, я не включал никаких ключей на apgd. Это означает, что я получил по умолчанию от восьми до десяти букв без символов. Также отметьте отсутствие правил произношения, поскольку я не включал -t в своем inetd.
Наверное, лучше изменить эти умолчания, чтобы включить ключи, соответствующие моим сетевым парольным политикам. В моем случае строка в inetd.conf принимает следующий вид:
pwdgen stream tcp nowait root /usr/local/sbin/apgd apgd -MCN -m10 -x10
Обратите внимание также на отсутствие ключа -s; к несчастью, этот выбор невозможен с apgd.
Теперь необходимо сообщить inetd о изменениях. Для этого перезапустим демон:
# killall -1 inetd
Проверим, что у нас получилось:
# telnet ix-ua.net 129
Trying 10.10.1.1...
Connected to ix-ua.net.
Escape character is '^]'.
yijLikMek3
SpazezOac2
eirdOlibr3
kaQuabBet5
LoHygjiel6
yorj1Kneir
Connection closed by foreign host.
Если Вы решите использовать сервер apgd, советую также изменить /etc/syslog.conf чтобы следить когда пользователи используют возможность генерирования паролей. Создаем лог-файл и добавляем следующие строки в /etc/syslog.conf (во второй строке не опечатка, так и должно быть):
# touch /var/log/apgd.log
# echo '\!apgd' >> /etc/syslog.conf
# echo '*.info /var/log/apgd.log' >> /etc/syslog.conf
Перезапускаем syslog, чтобы он "ознакомился" с изменениями:
# killall -1 syslogd
Далее подключаюсь к серверу apgd и после этого ищу записи в лог-файле:
# less /var/log/apgd.log
Jan 28 04:10:01 server apgd[2053]: password generation request from 127.0.0.1.49762
Вот и все... Подключения логгируются. Надеюсь, что мне удалось уговорить Вас начать использовать генерацию случайных паролей. Если Вы планируете попробовать это на вашей системе или в небольшой сети, можете предпочесть устанавливать порт apg на каждом компьютере. Для большой сети установите и сконфигурируйте apgd на одном из ваших серверов и расскажите пользователям как, подключаться к серверу apgd.
Оригинал статьи находится по адресу - You are not allowed to view links.
Register or
Login