Защита ноутбука с Linux. Шифрование, аутентификация по флешке и возврат украденного

Защита ноутбука с Linux. Шифрование, аутентификация по флешке и возврат украденного

Форсайт

Уверен, многие читатели уже давно избавились от стационарных компов и используют ноутбук как основной инструмент для работы, учебы и всего остального. Мир сдвинулся с места и стал мобильным. Но там, где есть мобильная техника, есть и риск ее потерять, забыть или быть обокраденным. Как при этом не лишиться данных, уберечь их от посторонних глаз и отыскать-таки украденную технику? Попробуем разобраться.

 

Физический доступ

Начнем, как обычно, с азов, а именно с пароля на вход. Казалось бы, здесь все просто: любая графическая среда имеет встроенный блокировщик экрана, который требует ввести пароль после нескольких минут простоя машины. Но что делать, если ты не используешь графическую среду и твой выбор — легковесный оконный менеджер вроде Fluxbox или i3?

Существует масса самых разнообразных блокировщиков экрана, но я бы рекомендовал остановиться на slock. Это крайне простой блокировщик, не имеющий никаких графических элементов управления, окон ввода и переключателей сессий. Все, что он делает, — это заливает экран черным цветом. При вводе пароля экран становится синим, а при нажатии Enter в случае неправильного пароля — красным. Увидев такое, большинство «взломщиков» впадут в ступор и решат, что комп просто завис.


Запускать slock можно как напрямую (тогда экран заблокируется сразу), так и автоматически после пробуждения ноутбука. Во втором случае тебе понадобится systemd-юнит следующего содержания:

[Unit]
Description=Lock X session using slock for user %i
Before=sleep.target

[Service]
User=%i
Environment=DISPLAY=:0
ExecStartPre=/usr/bin/xset dpms force suspend
ExecStart=/usr/bin/slock

[Install]
WantedBy=sleep.target

Сохрани его в файл /etc/systemd/system/slock@.service и активируй юнит (USER — твое имя в системе):

$ sudo systemctl enable slock@USER.service

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

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

 

Шифрование диска

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

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

Но и из этой ситуации есть выход. Системы EncFS и CryFS используют механизм FUSE, чтобы создать зашифрованную виртуальную ФС поверх основной. С их помощью ты можешь зашифровать любой отдельно взятый каталог, без необходимости выделять специальный контейнер заранее определенного размера и с возможностью синхронизации каталога с Dropbox и другими подобными сервисами.

Обе файловые системы используют алгоритм AES-256 в режиме GCM, но отличаются в реализации. EncFS шифрует каждый файл по отдельности и поэтому скрывает лишь содержимое файлов и их названия, но никак не препятствует получению информации о структуре каталогов и размере файлов. Другими словами: если кому-то потребуется доказать, что ты хранишь архив детского порно, скачанный из даркнета, — он сможет это сделать.

CryFS защищает от подобных рисков. Зашифрованный с ее помощью каталог выглядит как плоское файловое дерево с кучей каталогов и файлов одинакового размера. Однако CryFS никогда не подвергалась независимому аудиту, который был произведен в отношении EncFS. Если тебя это останавливает — используй EncFS, если же ты не веришь ни тому, ни другому — можешь вооружиться VeraCrypt или другим «классическим» инструментом шифрования, использующим контейнер заранее заданного размера, который нельзя выложить в Dropbox без синхронизации всех зашифрованных данных при малейшем изменении.

Использовать EncFS и CryFS крайне просто. Достаточно установить пакет, а затем выполнить операцию монтирования:

$ cryfs ~/Dropbox/box ~/crypto

В данном случае мы подключаем зашифрованный каталог ~/Dropbox/box как ~/crypto. Все файлы, записанные в последний, появятся в первом в зашифрованном виде.

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

$ fusermount -u ~/crypto
Содержимое каталога, зашифрованного с помощью CryFS

 

Аутентификация без пароля

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

 

Флешка

Думаю, все слышали про штуку под названием YubiKey. Это USB-ключ, выступающий в роли второго фактора при аутентификации на сайтах и в системе. Стоит такой ключ 50 долларов, но на самом деле вместо него можно использовать обычную флешку.

Модуль pam_usb позволяет настроить аутентификацию с помощью любой USB-флешки. Принцип работы здесь следующий: утилита записывает на флешку 2 Кбайт случайных данных, которые выступают в роли уникального ключа. Во время аутентификации pam_usb прочитает блок данных с флешки, сравнит их с сохраненными в компе и пустит тебя в систему, если они совпадают.

Чтобы все это заработало, необходимо выполнить следующие шаги. Установить pam_usb:

$ git clone https://github.com/aluzzardi/pam_usb.git
$ cd pam_usb
$ make
$ sudo make install

В Arch Linux pam_usb доступен в AUR:

$ yaourt -S pam_usb

Добавить те самые случайные данные на флешку (здесь AuthKey — произвольное имя):

$ sudo pamusb-conf --add-device AuthKey

Указать пользователя, который будет проходить аутентификацию с помощью флешки:

$ sudo pamusb-conf --add-user username

Проверить, что все настроено так, как надо:

$ sudo pamusb-check username

Наконец, добавить pam_usb в список PAM-модулей. Для этого открываем файл /etc/pam.d/common-auth (или /etc/pam.d/system-auth в Arch Linux и Fedora) и добавляем в начало файла такую строку:

auth sufficient pam_usb.so

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

auth required pam_usb.so

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

Настраиваем pam_usb


Смартфон

Вместо флешки (или в дополнение к ней) можно взять смартфон. Уверен, что хотя бы раз в жизни ты пользовался приложением Google Authenticator. Оно реализует алгоритм TOTP (Time-based One-Time Password, RFC 6238), позволяющий выполнять аутентификацию в одном приложении с помощью одноразового пароля, сгенерированного другим приложением (о том, как это работает, хорошо написано здесь).

Google позволяет приспособить Authenticator в том числе для аутентификации в своих сервисах. Однако в реальности оно никак не завязано на Google и не использует его серверы (передача ключа, нужного для генерации одноразовых паролей, происходит напрямую, с помощью QR-кода, после чего приложение действует независимо), что позволяет нам пользоваться им для аутентификации в системе без страха утечек паролей.

Для этого необходимо установить PAM-модуль pam-google-authenticator:

$ ./bootstrap.sh
$ ./configure
$ make
$ sudo make install

В Arch Linux установка делается так:

$ yaourt -S google-authenticator-libpam-git

Далее запускаем приложение google-authenticator:

$ google-authenticator

Оно сгенерирует QR-код (или покажет ссылку на него), который необходимо отсканировать с помощью приложения Google Authenticator на смартфоне, а также задаст несколько вопросов. На все вопросы, кроме четвертого (увеличение временного расхождения между клиентом и сервером), отвечай отрицательно.

Далее, как и в случае с флешкой, добавляем в /etc/pam.d/common-auth следующую строку:

auth required pam_google_authenticator.so no_increment_hotp

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

QR-код pam-google-authenticator


Противоугонка

С помощью паролей, одноразовых кодов и шифрования мы можем защитить лишь информацию на ноутбуке. Чтобы защитить сам ноутбук, нужны совсем другие средства, а именно некая система отслеживания, подобная функции Find my iPhone. То есть система, которая позволила бы нам удаленно связаться с ноутбуком, определить его координаты, сделать снимок экрана и снимок фронтальной камерой.

Одно из лучших решений в этой сфере называется Prey. Он доступен для телефонов и компов на базе Windows, macOS и Linux. Нас интересует последний вариант, поэтому идем на страницу загрузок, качаем deb-пакет и устанавливаем его:

$ sudo dpkg -i prey_1.7.3_amd64.deb

В Arch Linux Prey есть в AUR:

$ yaourt -S prey-node-client

Только следует иметь в виду, что установится в систему он под именем prey_project.

Когда установка будет завершена, запускаем конфигуратор:

$ sudo prey config account setup

Он спросит тебя о email-адресе, попросит ввести пароль, и на этом установка будет завершена. Чтобы проверить, что все работает, переходим в веб-панель управления и наслаждаемся возможностью отслеживать устройство в режиме реального времени.

Бесплатная версия Prey позволяет узнать местоположение устройства, информацию об ОС и железе, включить сигнализацию, заблокировать устройство, сделать снимки камерой или скриншоты. Чтобы получить возможность удалять данные и скачивать файлы, придется платить пять долларов в месяц.

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

Инфа о ноутбуке в панели управления Prey

 

Фотка при выходе из сна

Еще один метод борьбы с непрошеными гостями — фоткать их. Допустим, ты оставил ноутбук в номере, заходит незнакомый человек, пробуждает ноутбук ото сна и пытается залогиниться (точнее, пытается понять, что происходит, ведь мы используем slock). Самое время его сфотографировать.

Для начала напишем скрипт, который будет делать фотку с помощью камеры ноутбука. Он будет крайне простым:

#!/bin/sh
ffmpeg -y -t 1 -f video4linux2 -s 640x480 -r 30 -i /dev/video0 -f image2 $HOME/webcam.png 

Назови его take_photo, положи в каталог ~/bin и дай права на исполнение:

$ chmod +x ~/bin/take_photo

Теперь нам надо написать скрипт, который будет запускать наш скрипт после пробуждения компа. Вот он:

#!/bin/sh
if [ $1 = post ] && [ $2 = suspend ]; then
    sudo -u ТВОЕ_ИМЯ_В_СИСТЕМЕ /home/ТВОЕ_ИМЯ_В_СИСТЕМЕ/bin/take_photo
fi

Назови его 00take_photo, положи в каталог /lib/systemd/system-sleep/ и точно так же дай права на исполнение:

$ chmod +x /lib/systemd/system-sleep/00take_photo

Теперь при каждом пробуждении ноутбук будет делать фото и сохранять его в файл ~/webcam.png. Но мы можем пойти еще дальше и отправить фото себе в телеграм. Для этого устанавливаем telegram-cli. Проще всего это сделать в Arch Linux:

$ yaourt -S telegram-cli-git

Запускаем утилиту командой telegram-cli, она запросит номер телефона (phone number:) в формате +71234567890, а затем код безопасности из СМС и пароль, если он используется.

Затем немного поправим наш скрипт ~/bin/take_photo:

#!/bin/bash
ffmpeg -y -t 1 -f video4linux2 -s 640x480 -r 30 -i /dev/video0 -f image2 $HOME/webcam-`date`.png 
sleep 60
telegram-cli -W -D -e "send_photo @ТВОЕ_ИМЯ_В_ТЕЛЕГРАМЕ $HOME/webcam.png `date`"

Теперь он не только будет делать фото, но и отправит его в наш телеграм. Команда sleep 60нужна для минутной задержки перед отправкой, чтобы ноутбук успел подключиться к Wi-Fi.

 

Выводы

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



Report Page