Пожалуй, начнём, итак:

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

Начнем, как обычно, с азов, а именно с пароля на вход. Казалось бы, здесь все просто: любая графическая среда имеет встроенный блокировщик экрана, который требует ввести пароль после нескольких минут простоя машины. Но что делать, если ты не используешь графическую среду и твой выбор — легковесный оконный менеджер вроде 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

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

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

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

Итак, диск защищен, пароль установлен, но удобно ли это? Ввести пароль при загрузке, которая в современных ноутбуках происходит не так уж и часто, нетрудно, ввести пароль для расшифровки данных при загрузке тоже, но вводить его каждый раз при разблокировке экрана не особо интересно. Тем более пароль могут подсмотреть твои соседи в самолете. Нужен другой метод, а еще лучше комбинация методов.
Флешка
Думаю, все слышали про штуку под названием 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 не позиционирует свою разработку как нечто, чему можно доверить защиту государственной тайны и уж тем более семейного рецепта лукового супа. С флешки можно снять дамп, записать его на другую флешку и использовать ее для аутентификации.

3.1. Смартфон
Вместо флешки (или в дополнение к ней) можно взять смартфон. Уверен, что хотя бы раз в жизни ты пользовался приложением 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

4. Противоугонка
С помощью паролей, одноразовых кодов и шифрования мы можем защитить лишь информацию на ноутбуке. Чтобы защитить сам ноутбук, нужны совсем другие средства, а именно некая система отслеживания, подобная функции 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-сетям только после разрешения пользователя. Другими словами, шансы найти ноутбук куда меньше, чем шансы найти телефон.

5. Фотка при выходе из сна
Еще один метод борьбы с непрошеными гостями — фоткать их. Допустим, ты оставил ноутбук в номере, заходит незнакомый человек, пробуждает ноутбук ото сна и пытается залогиниться (точнее, пытается понять, что происходит, ведь мы используем 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-модуля, защиту по отпечатку пальца и имеют возможность отслеживания по всем типам сетей. Но, применив нехитрые приемы, описанные в статье, ты хотя бы сможешь сказать, что сделал все возможное.

Ребят, труды по написанию достойны + в карму :3

Отредактировано Lucious (2018-06-26 10:36:47)