Глава 22. Инструмент: аудит учетных записей
279
# базе данных сайта Have I Been Pwned?
#
# Использование: ./checkpass.sh [
]
#
Пароль для проверки
# по умолчанию: читать из stdin
#
if (( "$#" == 0 ))
then
printf 'Enter your password: '
read -s passin
echo
else
passin="$1"
fi
passin=$(echo -n "$passin" | sha1sum)
passin=${passin:0:40}
firstFive=${passin:0:5}
ending=${passin:5}
pwned=$(curl -s "https://api.pwnedpasswords.com/range/$firstFive" | \
tr -d '\r' | grep -i "$ending" )
passwordFound=${pwned##*:}
if [ "$passwordFound" == "" ]
then
exit 1
else
printf 'Password is Pwned %d Times!\n' "$passwordFound"
exit 0
fi
.Здесь.проверяется,.был.ли.пароль.передан.в.качестве.аргумента..Если.нет,.поль-
зователю.будет.предложено.ввести.пароль.
.Чтобы.не.показывать.вводимые.пользователем.данные,.для.команды.
read
.задан.
параметр.
-s
..Это.рекомендуется.делать.при.запросе.паролей.или.другой.конфиден-
циальной.информации..При.использовании.параметра.
-s
.при.нажатии.клавиши.
Enter
.новая.строка.не.появится..Поэтому.после.оператора.
read
.мы.добавляем.пустой.
оператор.
echo
.
.Здесь.введенный.пароль.преобразуется.в.хеш.SHA-1..В.следующей.строке.ис-
пользуется.операция.подстроки.bash.для.извлечения.первых.40.символов,.удаляя.
любые.дополнительные.символы,.которые.
sha1sum
.могла.включить.в.свой.вывод.
.Первые.пять.символов.хеша.хранятся.в.переменной.
firstFive
,.а.символы.с.6-го.
по.40-й.—.в.
ending
.
280
Часть IV • Администрирование систем обеспечения безопасности
.Запрос.сайта.Have.I.Been.Pwned?.производится.с.использованием.URL-адреса.
REST.API.и.первых.пяти.символов.хеша.пароля..Возвращаемый.результат.содер-
жит.как.символы.возврата.каретки.(
\r
),.так.и.символы.новой.строки.(
\n
)..Чтобы.
избежать.путаницы.в.среде.Linux,.мы.удаляем.символ.возврата..Поиск.результата.
ведется.с.помощью.команды.
grep
.и.символов.хеша.пароля,.начиная.с.6-го.и.закан-
чивая.40-м.символом..Параметр.
-i
.используется,.чтобы.
grep
.была.нечувствительна.
к.регистру.
.Чтобы.узнать,.сколько.раз.данный.пароль.был.взломан,.мы.удаляем.ведущий.
хеш,.то.есть.все.символы.до.двоеточия,.включая.сам.символ.двоеточия..Это.
удаление.префикса.оболочки,.где.двойной.хештег.означает.«самое.длинное.
возможное.совпадение»,.а.звездочка.—.шаблон,.который.соответствует.любым.
символам.
Обратите.внимание,.что.сценарий.
checkpass.sh
.завершит.свою.работу.с.кодом.со-
стояния.
0
,.если.пароль.найден,.и.с.кодом.
1
,.если.пароль.не.найден..Это.похоже.на.
поведение.не.только.
grep
,.но.и.некоторых.других.команд.оболочки,.которые.заняты.
поиском.определенных.данных..Если.поиск.не.увенчался.успехом,.результатом.
будет.вывод.с.ошибкой.(ненулевой).(хотя.в.случае.
pwned
.можно.считать,.что.это.
невыявленный.успех).
Чтобы.использовать.сценарий,.просто.введите.пароль.в.командную.строку.или.
при.появлении.запроса:
$ ./checkpass.sh password
Password is Pwned 3533661 Times!
Будьте осторожны при передаче паролей в качестве аргументов командной строки,
так как они видны в полном списке состояния процесса (см. команду ps) и могут быть
сохранены в файле истории bash. Предпочтительным методом будет чтение пароля
из stdin (например, при запросе). Если сценарий является частью более сложного
командного конвейера, сделайте пароль первой строкой для чтения из stdin.
Проверяем, не взломан ли адрес
электронной почты
Проверка.взломанного.адреса.электронной.почты.менее.сложна,.чем.проверка.
пароля..Для.начала.вам.понадобится.URL.API:
https://haveibeenpwned.com/api/v2/breachedaccount/
Do'stlaringiz bilan baham: |