В этой статье я постараюсь подробно описать как настроен мой смартфон чтобы его нельзя было разблокировать без моего желания, и как мое решение ShakeLock (https://github.com/4ekist42/shakelock) существенно меняет уровень безопасности.
Сам смартфон – Google Pixel с установленной GrapheneOS. Не буду долго описывать почему именно так, почитайте на сайте (https://grapheneos.org/features) про отличия от других ОС и смартфонов. Утекшая документация Cellebrite также подсказывает что нельзя достать данные с последних версий этой операционной системы.
Настройки самой операционной системы:
- Отключенный USB-C (зарядка только в выключенном состоянии)
- Автоперезагрузка каждые 8 часов
- Длинный основной пароль
- Настроенный MFA (об этом чуть позднее)
- Настроенный duress pin + password.
MFA (multi-factor authentication) – обычно в смартфонах можно использовать отпечаток пальца или Face ID вместо основного пароля, GrapheneOS позволяет использовать pin вместе с отпечатком (то есть недостаточно просто отпечатка, нужно еще ввести pin код отдельно от основного пароля).
Duress pin/password – коды вынуждения, введя их ключи шифрования немедленно сотрутся и устройство станет невозможно разблокировать. Можно настроить как для основного пароля так и для MFA, у меня так и настроено.
Иметь такую схему достаточно если на вас не смогут оказывать физическое давление и вы будете находиться в безопасности. Вы можете не давать пароль, и навряд-ли такое устройство взломают, но моя статья учитывает чуть больше рисков. Сейчас я напишу что делал после базовой настройки.
Первым делом я решил защититься от риска, что мой смартфон выхватят из рук в уже разблокированом состоянии, поэтому установил и настроил PrivateLock (https://github.com/wesaphzt/privatelock), это такое приложение которое заблокирует смартфон если его резко тряхунть (причем эта сила удобно настраивается в приложении). Теперь бесполезно пытаться выхватить смартфон, он тут же заблокируется.
Далее я решил не хранить основной пароль у себя в голове, схема работает таким образом что даже при желании я свой основной пароль не вспомню, можно рассмотреть множество вариантов, таких как хранение пароля у друга и так далее, не буду заострять на этом внимание, несколько схем описывал в посте https://t.me/chekist42/130.
Теперь, если устройство перезагрузится или резко дернуть мой смартфон в разблокированном состоянии, я не смогу его разблокировать самостоятельно, я попросту не знаю пароль. Очень важные факторы риска, которые были устранены.
И наконец причина по которой я решился на написание этой статьи – ShakeLock. Теперь можно не просто тряхнуть смартфон и он запросит длинный пароль, можно сделать это еще и на включенном экране блокировки. Это убирает необходимость ввода пароля или пина для уничтожения данных, может быть полезно когда такое действие приведет к тяжелым последствиям, или не гарантировано. Например вас могут попросить сказать пароль, вы скажете ложный, и узнав что у вас GrapheneOS вас будут вынуждать сказать настоящий. С ShakeLock такой риск учтен.
После всех этих мер все еще остается поверхность для атаки, например:
- Ваше устройство можно осторожно достать
- Воспроизвести отпечаток пальца
- Вынудить вас сказать реальный пин код.
- Либо извлечь часть данных через BFU эксплоит который может появится позже. Не уверен что это возможно с выключенным USB-C портом, но такой риск стоит учитывать.
- Недоброжелатели также могут оказывать воздействие на людей у которых части вашего пароля.
Возможно я придумаю что-то еще, и обязательно напишу об этом.
Также отмечу, что бэкапов чувствительной информации у меня нет. Возможно у вас хватит ресурсов для хранения частей пароля в разных юрисдикциях и долгосрочной аренды Confidential Computing VM, у меня нет, так что про этот момент ничего не напишу.
Спасибо за прочтение статьи, устанавливайте GrapheneOS, настраивайте как я описал и будьте в безопасности!
Автор статьи: @chekist42