vmagamedov / security-framework

Step-by-step personal cybersecurity guide

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Security Framework

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

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

Содержание:

Нам понадобится

  • Google Authenticator - бесплатный аутентификатор для телефона
  • 1Password - менеджер паролей, $2.99 в месяц
  • YubiKey 5-series - аппаратный ключ безопасности, требуется два таких, от $45 каждый

Что такое YubiKey?

Source https://itsfoss.com/yubikey-5c-nfc/

Source https://itsfoss.com/yubikey-5c-nfc/

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

YubiKey - это не единственный вариант подобных ключей, есть ещё Titan от Google, Thesis и несколько других производителей. Все они реализуют открытые стандарты, поэтому они взаимозаменяемые. Разница в том, какой функционал они предоставляют и какие стандарты поддерживают. Для двухфакторной аутентификации актуальным стандартом является FIDO2. YubiKey дополнительно поддерживает ещё стандарты PIV и OpenPGP. Нам интересен стандарт PIV, работа с ним будет описана далее. Стоит ещё заметить что у YubiKey нет внутри батареек и движущихся частей, их конструкция максимально надёжна и долговечна.

У компании Yubico есть очень много вариантов ключей, можно запутаться. Актуальными являются ключи 5-й серии, можно сказать что они умеют всё. Но, если вам ключ нужен только для двухфакторной аутентификации, то можно сэкономить и приобрести ключи YubiKey Security Key (с поддержкой FIDO2 стандарта).

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

Пример. У меня ноутбук только с USB-C портами и есть переходник на USB-A, а также стационарный компьютер со всеми возможными портами. Я выбрал себе YubiKey 5C NFC как основной и YubiKey 5 NFC как запасной ключ.

Общая картина

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

YubiKey && Authenticator
├─ 1Password
│  ├─ Apple
│  ├─ Google
│  ├─ Bank
│  └─ ...
└─ SSH
   └─ Git

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

Пароли

Не существует одного простого правила по составлению паролей. Правила меняются в зависимости от задачи. Основные критерии:

  • надо ли пароль запомнить
  • есть ли защита от перебора паролей

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

Master пароль к менеджеру паролей

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

На сайте 1Password есть полезная информация на эту тему:

Если коротко, выбирайте для Master пароля значение из нескольких слов, например:

glazing-quetzal-big-bold-pullback

Данный пароль был сгенерирован тут: https://1password.com/password-generator/?type=memorable. Его легко запомнить, легко произносить, легко вводить слепым набором на клавиатуре. И главное он на множество порядков сложнее для перебора чем ваш текущий пароль из букв, цифр и специальных символов.

Секретный ключ

1Password для входа с нового устройства требует не только Master пароль, но и секретный ключ: https://support.1password.com/secret-key-security/. Эта дополнительная степень защиты кардинально усиливает защиту ваших данных, но и создаёт некоторые неудобства. Если Master пароль можно запомнить, то секретный ключ размером в 34 символа требуется где-то хранить. Отключить эту возможность нельзя, даже если вы используете двухфакторную аутентификацию.

Секретный ключ создаётся во время регистрации в 1Password, вам будет предложено скачать 1Password Emergency Kit в виде PDF-файла, в котором будет сам секретный ключ и QR-код для быстрой настройки приложения. 1Password предлагает хранить его в распечатанном виде или на специальной флешке где-то в сейфе. В этом и заключается неудобство.

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

Но т.к. мы будем использовать ключи YubiKey, мы можем использовать их как хранилище данных. Как этим воспользоваться будет описано далее: Секретный ключ к менеджеру паролей.

Пароль к телефону и к компьютеру

Современные телефоны и компьютеры Apple снабжены аппаратным хранилищем персональной информации (Secure Enclave), это хранилище не даст возможности перебирать ваш пароль сколько угодно раз. Но к составлению хорошего пароля всё равно следует отнестись очень серьёзно.

Например, мало кто осознаёт что Apple позволяет совершать некоторые действия связанные с вашим Apple ID не спрашивая при этом пароль от Apple ID, достаточно будет ввести пароль от телефона/компьютера. Таким образом плохой пароль от телефона/компьютера сведёт на нет хороший пароль от Apple ID.

Тут наверное стоит повторить ещё раз: пароли не должны повторяться и не должно быть возможности их подобрать зная что-то о вас, например, вашу дату рождения, ваших родственников и друзей, ваши увлечения.

  • для пароля от устройства можно воспользоваться тем же методом, что и для Master пароля к менеджеру паролей
  • iPhone позволяет установить пароль любой сложности, а не только код из 6 цифр
  • сложность пароля лучше увеличивать за счёт его длины, а не за счёт использования специальных символов:
    • на компьютере руки лучше помнят где расположены буквы на клавиатуре, чем где расположены специальные символы. При слепом наборе ввод буквенного пароля будет быстрее и с меньшим количеством ошибок, это даст возможность увеличить длину пароля
    • на телефоне ввод специальных символов требует нажатия двух кнопок - кнопки 123 и кнопки специального символа, это сильно замедляет ввод пароля

2FA или MFA

Виды второго фактора, отсортированные по уровню защиты:

  • телефон (низкий уровень защиты)
  • пуш-нотификации
  • аутентификатор
  • аппаратный ключ безопасности (высокий уровень защиты)
  • биометрический аппаратный ключ безопасности

Разные сервисы предоставляют разный уровень поддержки двухфакторной аутентификации. Где-то можно использовать только телефонный номер, где-то можно использовать все возможные способы. Далее будет описан идеальный вариант сервиса, который поддерживает и аутентификаторы и аппаратные ключи безопасности (Google, 1Password, GitHub). Для остальных сервисов:

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

Телефонный номер

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

Аутентификатор

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

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

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

Google Authenticator - это как раз максимально простой и безопасный аутентификатор, в котором нет ни одной лишней функции. Бэкапы, например, там отсутствуют by design, так безопаснее.

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

YubiKey FIDO2

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

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

  • вставляете ключ в компьютер
  • регистрируете его в учётной записи сервиса
  • при входе в сервис:
    • на телефоне прикладываете ключ к телефону (NFC)
    • на компьютере требуется прикоснуться пальцем к ключу (ключ в USB разъёме)

Аппаратные ключи безопасности могут работать со следующими интерфейсами:

  • USB (в том числе и через Lightning разъём)
  • NFC
  • BLE (Bluetooth)

Файл-ключ

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

Менеджер паролей 1Password позволяет вам безопасно хранить данные в зашифрованном виде в облачном хранилище. Даже когда файлы будут загружены из облака на ваш компьютер, они всё ещё будут зашифрованы. Файлы на диске будут расшифрованы только на то время, когда ваше хранилище паролей разблокировано Master паролем. Когда хранилище блокируется, расшифрованный файл автоматически удаляется с вашей файловой системы.

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

SSH и Git

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

Минусы:

  • доступ к приватному ключу всё ещё теоретически возможен, его можно легко скопировать, привилегированного доступа к системе (sudo) для этого не нужно
  • пароль к приватному ключу можно подобрать методом перебора
  • шифрование диска не даёт 100% гарантии того, что данные нельзя будет прочитать, есть успешные примеры атак, где получалось получить доступ к данным на компьютере с аппаратным шифрованием данных на диске

YubiKey PIV

Наиболее безопасным способом будет использование аппаратных ключей безопасности. Приватный ключ можно сгенерировать прямо внутри YubiKey средствами самого ключа, откуда его уже будет невозможно физически прочитать. Чтобы воспользоваться этим приватным ключом вам понадобится физический доступ к ключу и ввод PIN кода ключа. Можно ещё настроить так, чтобы ключ требовал дополнительно физическое прикосновение пальцем. В отличие от пароля к SSH ключу, у вас будет всего 3 попытки ввести PIN код, после чего ключ будет заблокирован, т.е. подобрать PIN код методом перебора невозможно, за это отвечает сам аппаратный ключ, а не какая-то программа на вашем компьютере.

YubiKey для SSH доступа поддерживает два стандарта: OpenPGP и PIV. Первый стандарт подразумевает использование GnuPG, что сложно, ещё раз сложно и может привести к ошибкам. PIV стандарт - это стандарт для смарт-карт, разработанный NIST для использования в гос. органах США. Оба эти стандарта позволяют использовать YubiKey и для аутентификации, и для шифрования, и для подписывания данных. Мы будем использовать простой и понятный PIV стандарт.

Настройка PIV

Для работы с ключами нам потребуется консольная программа YubiKey Manager:

$ brew install ykman
$ ykman --version
YubiKey Manager (ykman) version: 3.1.1
Libraries:
    libykpers 1.20.0
    libusb 1.0.23

Вставляем ключ в USB разъём и проверяем:

$ ykman info
Device type: YubiKey 5C NFC
Serial number: XXXXXXXX
Firmware version: 5.2.7
Form factor: Keychain (USB-C)
Enabled USB interfaces: OTP+FIDO+CCID
NFC interface is enabled.

Applications  USB     NFC
OTP           Enabled Enabled
FIDO U2F      Enabled Enabled
OpenPGP       Enabled Enabled
PIV           Enabled Enabled
OATH          Enabled Enabled
FIDO2         Enabled Enabled

Для начала нам понадобится сменить заводские коды ключа: PIN, PUK и Management Key. Все коды мы будем генерировать случайным образом и хранить в менеджере паролей, это нормально так как:

  • доступ к менеджеру паролей возможен и в офлайне
  • для доступа к менеджеру паролей на новом устройстве мы можем воспользоваться всё тем же YubiKey ключом как вторым фактором аутентификации и PIN код для этого не требуется, PIN код нужен только для PIV функционала

Так что хранить коды в менеджере паролей - это довольно практично и безопасно, всё остаётся под контролем. Со временем PIN код мы будем знать наизусть, остальными кодами мы будем пользоваться сильно реже.

После 3-х неудачных попыток ввести неправильный PIN код PIV функционал будет заблокирован, потребуется PUK код для сброса PIN кода.

После 3-х неудачных попыток ввести неправильный PUK код PIV функционал будет окончательно заблокирован и потребуется сделать сброс всего PIV функционал до заводских настроек. Все данные в PIV функционале будут потеряны, надо будет заново произвести данную настройку ключа. Остальная часть ключа никак не пострадает.

Подробности:

PIN код

YubiKey поддерживает от 6 до 8 цифро-буквенных символов, но для совместимости с другими системами рекомендуется использовать только цифры. Генерируем случайные 6 цифр в менеджере паролей и меняем PIN код:

$ ykman piv change-pin --pin 123456
                             ^^^^^^- текущий заводской PIN код
Enter your new PIN:
Repeat for confirmation:
New PIN set.

Данный код нам стоит запомнить, но на первое время его можно также сохранить и в менеджере паролей.

PUK код

Те же условия что и для PIN кода. Генерируем случайные 8 цифр в менеджере паролей и меняем PUK код:

$ ykman piv change-puk --puk 12345678
                             ^^^^^^^^- текущий заводской PUK код
Enter your new PUK:
Repeat for confirmation:
New PUK set.

Сохраняем сгенерированный PUK код в менеджере паролей.

Management Key

Этот код имеет размер 24 байта, в отличие от PIN и PUK кодов, этот код не защищен от перебора ключей, поэтому тут особо важно сгенерировать код случайным образом, YubiKey Manager умеет сам это делать:

$ ykman piv change-management-key --generate
Enter PIN:
Generated management key: 010203040506070801020304050607080102030405060708
                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Сохраняем сгенерированный ключ управления в менеджере паролей.

Генерация SSH ключа

$ ykman piv info
PIV version: 5.2.7
PIN tries remaining: 3
CHUID:  **********
CCC:    **********

YubiKey имеет множество слотов для хранения ключей, вот тут их полный список: https://developers.yubico.com/PIV/Introduction/Certificate_slots.html

Для аутентификации предназначен слот 9a:

$ ykman piv generate-key --algorithm ECCP384 9a public.pem
Enter a management key [blank to use default key]:

PIV стандарт пока не поддерживает ключи RSA размером более 2048, вместо этого есть ECCP256 и ECCP384 - аналоги по сложности RSA 3072 и RSA 7680 соответственно, по мнению NSA.

Генерируем сертификат и импортируем его обратно в ключ:

$ ykman piv generate-certificate -s "/CN=SSH key/" 9a public.pem
Enter PIN:
Enter a management key [blank to use default key]:

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

Проверяем:

$ ykman piv info
PIV version: 5.2.7
PIN tries remaining: 3
CHUID:  **********
CCC:    **********
Slot 9a:
        Algorithm:      ECCP384
        Subject DN:     CN=/CN=SSH key/
        Issuer DN:      CN=/CN=SSH key/
        Serial:         **********
        Fingerprint:    **********
        Not before:     2020-01-01 23:59:59
        Not after:      2021-01-01 23:59:59

Время действия сертификата на SSH доступ не влияет.

Настройка SSH клиента

Взаимодействие сторонних систем с аппаратными ключами происходит по специальному API, описанному в стандарте PKCS#11. Есть две актуальные реализации этого API: проект OpenSC и разработанная компанией Yubico библиотека ykcs11, мы будем использовать второй вариант, который идёт в комплекте с Yubico PIV-Tool:

$ brew install yubico-piv-tool
$ yubico-piv-tool --version
yubico-piv-tool 2.1.1
$ ls -l /usr/local/lib/libykcs11.dylib
lrwxr-xr-x  1 user  admin  51 Oct 14 14:27 /usr/local/lib/libykcs11.dylib -> ../Cellar/yubico-piv-tool/2.1.1/lib/libykcs11.dylib

Проверяем видит ли SSH наши ключи:

$ ssh -V
OpenSSH_8.4p1, OpenSSL 1.1.1h  22 Sep 2020
$ ssh-keygen -D /usr/local/lib/libykcs11.dylib -e
ecdsa-sha2-nistp384 ********** Public key for PIV Authentication
ssh-rsa ********** Public key for PIV Attestation

В списке должно быть два ключа:

  • ecdsa-sha2-nistp384 - это сгенерированный нами ключ в слоте 9a
  • ssh-rsa - это ключ слота f9, который предназначен для аттестации, он там находится с завода, с его помощью можно убедиться в том, что ключи во всех остальных слотах были сгенерированы безопасно внутри аппаратного ключа, а не были импортированы в аппаратный ключ извне

Если вы тут видите только ключ аттестации, то скорее всего ваша версия OpenSSH не поддерживает ключи ECCP384. Тут либо прийдётся использовать RSA2048 ключи, либо обновить версию OpenSSH:

$ brew install openssh

Если SSH корректно считывает наш ключ, то можно скопировать строчку ecdsa-sha2-nistp384 ********** в настройки GitHub и в настройки SSH сервера - файл ~/.ssh/authorized_keys.

Для того чтобы ssh работал с нашим аппаратным ключом, минимальный конфиг SSH клиента должен выглядеть так:

$ cat ~/.ssh/config
Host *
  PKCS11Provider /usr/local/lib/libykcs11.dylib

Проверяем:

$ ssh -T git@github.com
Enter PIN for 'YubiKey PIV #XXXXXXXX':
Hi vmagamedov! You've successfully authenticated, but GitHub does not provide shell access.

SSH агент

TL;DR: Пользоваться SSH агентом совместно с аппаратными ключами безопасности не рекомендуется.

Возможно вы ранее уже пользовались SSH агентом, чтобы каждый раз не вводить слово-пароль к приватному ключу. SSH агент также умеет работать с провайдером PKCS#11:

$ eval "$(ssh-agent -P '/usr/lib/*,/usr/local/lib/*,/usr/local/Cellar/yubico-piv-tool/*')"
Agent pid 78254
$ ssh-add -s /usr/local/Cellar/yubico-piv-tool/2.1.1/lib/libykcs11.dylib
Enter passphrase for PKCS#11:
Card added: /usr/local/Cellar/yubico-piv-tool/2.1.1/lib/libykcs11.dylib
$ ssh-add -L
ecdsa-sha2-nistp384 ********** Public key for PIV Authentication
ssh-rsa ********** Public key for PIV Attestation

В Linux всё должно быть немного проще, если libykcs11 будет установлена в /usr/lib или /usr/local/lib - по-умолчанию SSH агент разрешает подгружать библиотеки только из этих мест.

Но опять же пользоваться SSH агентом не рекомендуется:

  • недопонимание того как работает SSH агент может само по себе создать уязвимость
  • SSH агент наиболее актуален когда у вас SSH ключи со сложными паролями; но когда у вас аппаратный ключ с простым для запоминания и ввода PIN кодом, который защищён от перебора, то необходимость в агенте практически отпадает

Когда надо создать SSH соединение через bastion/jumpbox сервер, то ForwardAgent считается плохой практикой, существует более безопасная альтернатива - ProxyJump. Так что от SSH агента пользы мало, а рисков много.

Секретный ключ к менеджеру паролей

PIV стандарт (см. YubiKey PIV) позволяет хранить дополнительные данные на самом ключе, например, отпечатки пальцев и снимок сетчатки глаза. Данные хранятся в специальных слотах в определённом формате данных - BER-TLV. Тут описаны все поддерживаемые слоты: https://developers.yubico.com/yubico-piv-tool/Actions/read_write_objects.html. YubiKey Manager позволяет читать и записывать в эти слоты данные в виде последовательности байт. Придерживаться BER-TLV формата нас пока никто не обязывает и мы можем хранить в слотах любые данные. Главное выбирать для этого подходящие по размеру и применению слоты.

Для хранения секретного ключа я выбрал пустующий слот подходящего размера 0x5fc109 - Printed Information. Данный слот предназначен для хранения данных, которые печатаются на пропуске (имя, фамилия и т.д.), чтобы их потом можно было сверить и выявить несоответствие.

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

Скопируйте значение секретного ключа в буфер обмена и запишите его в выбранный слот:

$ pbpaste | ykman piv write-object 0x5fc109 -
Enter a management key [blank to use default key]:
$ ykman piv read-object 0x5fc109
Enter PIN:
A3-XXXXXX-XXXXXX-XXXXX-XXXXX-XXXXX-XXXXX

Данные на диске

Если у вас Mac с чипом T2, то ваш диск шифруется автоматически, даже если выключен FileVault. Ключ шифрования хранится внутри чипа T2 и без именно этого чипа расшифровать диск невозможно. Но всё равно следует включить FileVault, никого влияния на скорость работы вашего компьютера это не создаст.

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

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

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

Подробности: https://www.apple.com/euro/mac/shared/docs/Apple_T2_Security_Chip_Overview.pdf

Дополнительные материалы

About

Step-by-step personal cybersecurity guide