Skip to content

Использование строгой двухфакторной аутентификации

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

Терминология

Идентификация, аутентификация и авторизация

Многие путают термины «идентификация», «аутентификация» и «авторизация» или не понимают между ними разницы.

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

  • Аутентификация — это процесс подтверждения подлинности, то есть процесс предъявления и рассмотрения доказательства. Пользователь может предъявить что-то, что система считает достаточным доказательством подлинности пользователя. В обычном случае это пароль. Хеш пароля хранится в системном файле как эталон и сравнивается системой с тем вводом от пользователя. Если значения совпадают, то системе этого обычно достаточно. Если вводимое значение пароля не совпадает с эталонным, то процесс предъявления доказательств будет перезапущен;

  • Авторизация — это процесс принятия решения о наделении пользователя набором определённых прав в системе. Предположим, что пользователь верно ввёл имя и пароль. Система просмотрит конфигурационные файлы, которые содержат описание этого пользователя (например, членство в группах, числовой идентификатор пользователя, ассоциированный с его именем) и примет решение о том, каким именно набором полномочий снабдить этого пользователя. Это может означать, что если пользователь ввёл имя root и его пароль, система наделит его административными правами. А если пользователь правильно введёт любое другое имя и ассоциированный с этим именем пароль, то он не получит права администратора, а его роль с системе будет какой-то другой.

Двухфакторная/мультифакторная аутентификация, двухшаговая проверка

Возможно, что пользователи уже слышали термины «многофакторная аутентификация», «двухфакторная аутентификация» или «двухшаговая проверка».

Что такое факторы аутентификации:

  • Фактор знания: пользователь знает что-то, что не знает никто, кроме него и системы. Это тайное слово, пароль;
  • Фактор имения: у пользователя есть что-то (он что-то имеет), что есть только у него, и система про это знает. Для простоты, предположим, что у пользователя есть браслет-змейка, червлёный и с одним изумрудным глазком. И системе известно, что именно такой браслет должен быть у пользователя. Она должна как следует рассмотреть этот браслет, предъявляемый пользователем при входе. Но современные компьютеры пока не в состоянии рассматривать такого рода доказательства. Вместо этого роль браслета играет специальный аппаратный токен (обычно с интерфейсом USB, но это не строго обязательно), который надо вставить в USB-порт компьютера при входе, или это может быть электронный ключ, вроде iButton или смарт-карт, которые нужно приложить к считывателю и т.п.;
  • Фактор обладания: пользователь, как уникальный человек и субъект материального мира, неотъемлемо обладает какими-то уникальными и только ему присущими признаками. Это может быть рост, вес, цвет глаз, длина волос, отпечаток пальца и т.п. И система про это знает — это биометрия. Типовой случай применения биометрических доказательств это отпечатки пальцев. Сейчас такой способ входа в систему работает почти в любом смартфоне.

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

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

Зачем нужно использовать двухфакторную аутентификацию?

Дисклеймер

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

Пользователи довольно часто вводят пароли: при входе в систему, при разблокировке системы, при повышении или изменении своих привилегий. Пароль при вводе могут подсмотреть (например, стоя за спиной пользователя в кафе, применив зеркало или другими способами) или перехватить с помощью специализированных программ. В конце концов пользователю можно подсунуть специально модифицированную клавиатуру или другое устройство перехвата — способов много. Даже существуют сайты, продающие подобное оборудование (например, https://hak5.org/), где его может заказать себе любой желающий.

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

Для этого рекомендуется применять специальные токены вроде YubiKey, Google Titan или отечественные аналоги, такие как Рутокен MFA, которые можно приобрести и настроить на работу с системой.

Настройка ключа

Информация

В примере использовался ключ YubiKey 5 Nano, последовательность действий для других ключей может отличаться.

В примере файл для хранения публичных токенов имеет путь /etc/U2F/keys. При желании он может быть другим.

  1. Установите зависимости: sudo apt-get install pam_u2f;
  2. Вставить ключ в порт и убедиться, что светодиод моргнул при подключении;
  3. Сформируйте общий список публичных токенов:
sh
su -
mkdir /etc/U2F
touch /etc/U2F/keys

# Добавление токена пользователя root
pamu2fcfg >> /etc/U2F/keys
echo -e >> /etc/U2F/keys

# Добавление токена другого пользователя (USER — имя пользователя)
pamu2fcfg -u USER >> /etc/U2F/keys
echo -e >> /etc/U2F/keys

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

Информация

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

sh
pamu2fcfg -u USER > /path/to/key
cat /path/to/key >> /etc/U2F/keys
echo -e >> /etc/U2F/keys
  1. Для уверенности можно ограничить доступ к данным файлам, изменив права на их чтение и запись (не обязательно):
sh
su -
chmod 755 /etc/U2F
chmod 644 /etc/U2F/u2f_keys
chown -R root:root /etc/U2F

Внимание!

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

Если повышение привилегий стало недоступно, то смотрите раздел «Решение проблем с невозможность авторизации»

  1. Модифицируйте модуль авторизации для запроса ключа при аутентификации:
sh
su -
sed -i '0,/^[^#]/ s/^[^#]/auth required pam_u2f.so authfile=\/etc\/U2F\/keys cue [cue_prompt=Текст]\n\0/' /etc/pam.d/system-auth-common

Или вручную отредактируйте файл /etc/pam.d/system-auth-common, добавив после комментариев строку:

text
auth required pam_u2f.so authfile=/etc/U2F/keys cue [cue_prompt=Текст]

Где вместо Текст может быть указано сообщение при авторизации. Данный аргумент не обязателен и по умолчанию имеет значение Please touch the device.

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

Ввод символом при прикосновении

По умолчанию функция OTP включена, из-за чего при прикосновении к ключу вводится буквенная последовательность, что может помешать повседневной жизни. Для отключения можно использовать как GUI-, так и CLI-инструменты:

sh
su -
apt-get update
apt-get install ykman
ykman config usb --disable OTP

Решение проблем с невозможность авторизации

  1. При загрузке системы в меню GRUB, нажмите E, чтобы отредактировать параметры загрузки;
  2. В конце строки, начинающейся с linux, напишите systemd.unit=rescue.target;
  3. Нажмите F10, чтобы загрузиться в режиме восстановления;
  4. Введите имя суперпользователя root и его пароль;
  5. Через терминальный текстовый редактор (vim, nano) в файле /etc/pam.d/system-auth-common перед строкой, добавленной в пункте 5 раздела «Настройка ключа», введите символ #, чтобы закомментировать строку;
  6. Сохраните файл и нажмите Ctrl + Alt + Del, чтобы перезагрузиться;

После описанных выше действий можно будет авторизоваться в обычном режиме.

Перейдите к выполнению пункта 3 раздела «Настройка ключа», чтобы добавить ключ текущего пользователя и суперпользователя root, а затем снова отредактируйте файл /etc/pam.d/system-auth-common, удалив выше добавленный символ #.

Авторы

История изменений