Як налаштувати двофакторну аутентифікацію на Raspberry Pi

Мінікомп’ютери Raspberry Pi набули величезної популярності, що, на жаль, не залишилося непоміченим з боку зловмисників. Сьогодні ми розглянемо, як підвищити безпеку вашого Raspberry Pi за допомогою двофакторної аутентифікації.

Дивовижні можливості Raspberry Pi

Raspberry Pi є одноплатним комп’ютером, розробленим у Великобританії у 2012 році з метою заохочення дітей до програмування та вивчення комп’ютерних технологій. Початкова версія мала розмір кредитної картки та працювала від звичайного зарядного пристрою для смартфона.

Цей міні-комп’ютер оснащений HDMI виходом, USB-портами, мережевим підключенням та працює на базі Linux. Пізніше з’явилися ще компактніші моделі, призначені для інтеграції у різні пристрої або для використання в якості безголових систем. Ціни варіюються від 5 доларів за мінімалістичний
Pi Zero до 75 доларів за потужний
Pi 4 B/8 ГБ.

Успіх Raspberry Pi вражає – понад 30 мільйонів цих крихітних комп’ютерів продано по всьому світу. Ентузіасти створюють на їх основі дивовижні проєкти, включно з відправленням
одного з них у ближній космос на повітряній кулі.

На жаль, популярність будь-якої обчислювальної платформи рано чи пізно привертає увагу кіберзлочинців. Небезпечно уявити, скільки Raspberry Pi досі використовують стандартні ім’я користувача та пароль. Якщо ваш Pi доступний через Інтернет за допомогою
безпечного протоколу SSH, його захист є критично важливим.

Навіть якщо на вашому Pi немає цінних даних, його потрібно захистити, оскільки зловмисники можуть використовувати його як точку входу до вашої мережі. Отримавши доступ до мережі, вони можуть атакувати інші, більш цікаві для них пристрої.

Що таке двофакторна аутентифікація?

Аутентифікація – це процес отримання доступу до системи, що вимагає використання одного або декількох факторів, які поділяються на категорії:

  • Щось, що ви знаєте: пароль або кодова фраза.
  • Щось, що у вас є: мобільний телефон, фізичний токен або ключ.
  • Те, що ви є: біометричні дані, як-от відбиток пальця або сканування сітківки ока.

Багатофакторна аутентифікація (MFA) використовує пароль і один або кілька елементів з інших категорій. У нашому випадку ми використовуватимемо пароль і мобільний телефон. Мобільний телефон використовуватиме програму Google Authenticator, а Pi – відповідний модуль аутентифікації.

Програма для мобільного телефону зв’язується з вашим Pi шляхом сканування QR-коду. Це передає початкову інформацію з Pi на ваш телефон, гарантуючи, що їхні алгоритми генерування чисел одночасно виробляють однакові коди. Ці коди називаються
одноразовими паролями на основі часу (TOTP).

При спробі підключення ваш Pi генерує код. Ви використовуєте програму аутентифікації на своєму телефоні, щоб побачити поточний код, а потім ваш Pi попросить у вас пароль і код аутентифікації. Доступ буде надано лише за умови правильності обох елементів.

Налаштування Pi для двофакторної аутентифікації

Якщо ви зазвичай використовуєте SSH на своєму Pi, ймовірно, це безголова система, тому ми налаштуємо її через SSH-з’єднання.

Найкраще створити два SSH-з’єднання: одне для налаштування та тестування, а інше для забезпечення безпеки. Це дозволить вам увійти, навіть якщо ви випадково заблокуєте Pi під час налаштування. Зміна налаштувань SSH не вплине на поточне з’єднання, що дозволить вам скасувати будь-які зміни у разі потреби.

У крайньому випадку, якщо вас повністю заблоковано через SSH, ви зможете під’єднати Pi до монітора, клавіатури та миші, а потім увійти у звичайний сеанс. Однак, надійніше мати відкрите резервне з’єднання SSH, доки ви не переконаєтеся, що двофакторна аутентифікація працює правильно.

Звичайно, останнім варіантом є перепрошивка операційної системи на карті micro SD, але краще цього уникати.

Спершу потрібно встановити два з’єднання з Pi. Обидві команди виглядають так:

ssh [email protected]

Ім’я цього Pi “watchdog”, але вам потрібно буде ввести ім’я вашого пристрою. Якщо ви змінили стандартне ім’я користувача, використовуйте також його; в нашому випадку це “pi”.

Для безпеки введіть цю команду двічі у різних вікнах терміналу, щоб мати два з’єднання з вашим Pi. Згорніть одне з вікон, щоб випадково його не закрити.

Після підключення ви побачите вітальне повідомлення. У підказці буде показано ім’я користувача (в даному випадку “pi”) і ім’я Pi (в даному випадку “watchdog”).

Тепер потрібно відредагувати файл “sshd_config” у текстовому редакторі nano:

sudo nano /etc/ssh/sshd_config

Прокрутіть файл до рядка:

ChallengeResponseAuthentication no

Замініть “no” на “yes”.

Натисніть Ctrl+O, щоб зберегти зміни у nano, а потім Ctrl+X, щоб закрити файл. Скористайтеся наступною командою, щоб перезапустити SSH демон:

sudo systemctl restart ssh

Потрібно встановити Google Authenticator, який є
модулем аутентифікації (PAM). Програма (SSH) звернеться до інтерфейсу Linux PAM, а інтерфейс знайде відповідний модуль PAM для обробки запиту на аутентифікацію.

Введіть наступну команду:

sudo apt-get install libpam-google-authenticator

Встановлення програми на смартфон

Програма Google Authenticator доступна для
iPhone і
Android, тому просто встановіть відповідну версію на свій смартфон. Також можна використовувати Authy та інші програми, які підтримують цей тип аутентифікації.

Налаштування двофакторної аутентифікації

У обліковому записі, який ви використовуватимете для підключення до Pi через SSH, виконайте таку команду (без префікса sudo):

google-authenticator

Система запитає, чи потрібно генерувати маркери аутентифікації на основі часу; натисніть Y, а потім Enter.

Згенерується
QR-код, але він може бути обрізаний, оскільки він ширший за 80 стовпців терміналу. Розтягніть вікно терміналу, щоб побачити весь код.

Під QR-кодом також будуть коди безпеки. Вони записуються у файл “.google_authenticator”, але ви можете зробити їхню копію одразу. Якщо ви втратите доступ до TOTP (наприклад, через втрату мобільного телефону), ці коди дозволять вам пройти аутентифікацію.

Вам потрібно відповісти на чотири запитання, перше з яких:

Do you want me to update your "/home/pi/.google_authenticator" file? (y/n)

Натисніть Y, а потім Enter.

Друге запитання стосується запобігання багаторазовому використанню одного і того ж коду протягом 30-секундного інтервалу.

Натисніть Y, а потім Enter.

Третє питання – чи потрібно розширити вікно прийняття маркерів TOTP.

Натисніть N, а потім Enter.

Останнє запитання: “Чи потрібно включити обмеження швидкості?”.

Введіть Y, а потім Enter.

Ви знову опинитеся у командному рядку. Розтягніть вікно терміналу та/або прокрутіть його вгору, щоб побачити весь QR-код.

Відкрийте програму аутентифікації на своєму смартфоні та натисніть знак плюс (+) у нижньому правому куті екрана. Виберіть “Сканувати QR-код” та відскануйте QR-код у вікні терміналу.

У програмі аутентифікації з’явиться новий запис із назвою хоста Pi та шестизначним кодом TOTP під ним. Він відображається як дві групи по три цифри, для зручності читання, але потрібно вводити його як одне шестизначне число.

Анімаційне коло поряд із кодом показує, скільки ще часу код буде дійсним: повне коло – 30 секунд, півколо – 15 секунд і так далі.

Об’єднуємо все разом

Потрібно відредагувати ще один файл. Треба вказати SSH, який модуль аутентифікації PAM використовувати:

sudo nano /etc/pam.d/sshd

Введіть ці рядки на початку файлу:

#2FA

auth required pam_google_authenticator.so

Ви також можете налаштувати, коли потрібно вводити TOTP:

  • Після введення пароля: введіть попередні рядки після “@include common-auth”, як показано на зображенні вище.
  • Перш ніж вводити пароль: введіть попередні рядки перед “@include common-auth”.

Зверніть увагу на символи підкреслення (_) у “pam_google_authenticator.so”, а не на дефіси (-), які ми використовували з командою apt-get для встановлення модуля.

Натисніть Ctrl+O, щоб зберегти зміни у файлі, а потім Ctrl+X, щоб закрити редактор. Залишилося перезапустити SSH:

sudo systemctl restart ssh

Закрийте це з’єднання SSH, але залиште резервне з’єднання SSH відкритим, доки не перевірите наступний крок.

Переконайтеся, що програма аутентифікатора відкрита і готова на вашому смартфоні, потім відкрийте нове SSH-з’єднання з Pi:

ssh [email protected]

Спочатку потрібно буде ввести пароль, а потім код. Введіть код зі свого смартфона без пробілів між цифрами. Як і ваш пароль, він не відображатиметься на екрані.

Якщо все зроблено правильно, вам дозволять підключитися до Pi; інакше скористайтеся резервним з’єднанням SSH, щоб переглянути попередні кроки.

Краще перестрахуватися

Чи помітили ви помилку у слові “перестрахуватися” вище?

Справді, тепер ви набагато краще захищені при підключенні до Raspberry Pi, але ніщо ніколи не є на 100% безпечним. Є способи обійти двофакторну аутентифікацію. Вони залежать від соціальної інженерії, атак “людина посередині” та “людина на кінцевій точці”, заміни SIM-карток та інших складних методів, які ми тут описувати не будемо.

То для чого все це, якщо воно не ідеальне? Ну, з тієї ж причини ви закриваєте вхідні двері, коли йдете, хоча є люди, які вміють відкривати замки, а більшість – ні.