Рубрика #письманашихчитателей
Выпуск 5.
@yura: "Есть у меня вопросс о защите данных на мобильном устройстве. Да, я знаю, оно не очень безопасно, но увы приходится пользоваться. Так вот, вектор атаки. Сижу я на работе, ничего не делаю, тоесть никого не трогаю, и тут залетают в офис "маски-шоу" и изымают устройства, в том числе телефон. Если с ПК всё в основном понятно, luks в помощь, то какие варианты защиты мобильного телефона под android/LineageOS вообще возможны в таком случае?"
Начну, пожалуй, хоть и издалека, но с самого главного. Если в отношении информации на твоих носителях проводится оффлайн-атака, то ты уже в полной жопе, да не в простой, а в такой, которая на goatse запечатлена. Однако на глубину погружения в эту самую жопу можно влиять. Не очень значительно, но всё же можно. О чём мы и будем вести речь.
Сразу очень хочется добавить пару оговорок к "с ПК всё понятно, luks в помощь". Следует помнить, что шифрование работает только тогда, когда зашифрованный контейнер закрыт. Иначе, есть куча способов выковырять ключи из оперативки. Ну и любое устройство, побывавшее в руках врага считается скомпрометированным. Даже если противник не смог вскрыть шифрование, он может залить модифицированный бут, ну а далее атака evilmaid в классическом её проявлении. Вариант выхода из этого я вижу такой: в первую очередь, бэкапы. Во-вторых, если (не когда, а если) тебе удалось вернуть устройства, то оставляешь от них только носители информации. Носители в режиме ридонли подключаешь к оффлайн-системе, сливаешь с них только требуемую информацию, и утилизируешь с остальным скомпрометированным железом. Дорого, долго, геморройно, но безопасность сейчас - роскошь. Увы.
Теперь об андроидах. Первый, и, внезапно, основной бастион безопасности - это пароль на блокировку экрана. Очевидно, никакой биометрии. Распознавание лица, отпечатки пальцев, скан жопы - забудь об этом как о страшном сне. Только пароли, только хардкор. В идеале - буквенные, если совсем ленивый - пин-код на 8+ символов. Никаких графических ключей. Вот здесь понятно написано, почему графические ключи и короткие пин-коды говно: https://tjournal.ru/flood/41924-metod-schityvaniya-pin-koda-s-pomoshchyu-teplovizora-srabotal-dlya-smartfonov
От подобного метода распознавания помогает ещё опция scramble layout (не знаю как её название локализовано, суть в том, что она перемешивает кнопки при вводе пина), но её можно использовать только в дополнение к длинному пину, не вместо него.
В андроидах есть такая функция, как отображение введённого символа в пароле в течение секунды или около того. Дефолтно включённая, если память не врёт. Я думаю, что любой человек, который дочитал до этого места её давным-давно выключил.
Теперь о шифровании. В андроиде были реализованы два вида шифрования: full disk encryption, оно же FDE и file-based encryption, оно же FBE. FDE было широко распространено во времена шестой версии андроида, сейчас же в большинстве устройств работает FBE. Жопоболь вызывает тот факт, что с FBE нельзя перейти на FDE и наоборот. Если у тебя устройство на андроиде 10+, у тебя без альтернатив FBE. Если старше, то у тебя и так всё довольно грустно с безопасностью, ибо апдейты безопасности на это старьё уже не прилетают и оно для рассматриваемого юзкейса непригодно.
Пару слов о FDE, чтобы было с чем сравнивать. Примерно как в десктопном линуксе: пока не введёшь пароль, система не загрузится. Дефолтно - это тот же пароль, что и на разблокировку экрана. Но его можно изменить одной консольной командой, и вот у тебя уже два пароля - один для загрузки, другой для разблокировки. Доустанавливаем вот эту https://f-droid.org/en/packages/org.nuntius35.wrongpinshutdown/ замечательную утилиту, которая позволяет выполнять заранее заданную команду при неверно введённом пароле, и при брутфорсе получаем совершенно непредсказуемые последствия для атакующего на наш выбор, начиная от ребута (а мы помним, что для загрузки у нас другой, более сложный пароль) до затирания ключей дешифровки и превращения данных в невосстановимую кашу. Даже терморектальный криптоанализ не поможет. Но при столь хардкорном подходе нельзя забывать о бэкапах.
Теперь о FBE. Если у тебя устройство на андроиде 10+, то FBE у тебя уже есть. За исключением случаев кривой прошивки с 4pda, портированной похмельным Васяном. Там нередко отключают шифрование в целях повышения совместимости, но не всегда. Отличается этот подход к шифрованию данных тем, что у тебя теперь один пароль. При перезагрузке система загружается, но до первого ввода пароля разблокировки работает в ограниченном режиме (приём звонков, будильник ну и ещё там что-то по мелочи). Не шифрует метаданные. Криптографически не хуже FDE, но комплексно предоставляет меньший уровень защиты взамен на чуть большее удобство. Так же, как и в случае FDE рекомендую поставить Wrong Pin Shutdown. Я не нашёл способа удалить криптоключи FBE с его помощью, однако ребутнуть телефон он всё ещё в силе, а это позволяет "закрыть" пользовательские данные от атакующего. Я уверен, что способ удаления ключей FBE существует, думаю, если поискать, можно найти.
Правда, стоит отметить и помнить каждую секунду, что если служители авторитарного режима поймут, что произошло безвозвратное удаление (не блокировка) криптоключей, то пиздюлей будет не избежать. Стоит делать на это поправку в своей модели угроз и при принятии решения о вайпе устройства.
Коротко о защите содержимого флешки: ничего лучше криптоконтейнеров предложить не могу. Сам не использовал, но из того, что есть в f-droid можно попробовать вот это: https://f-droid.org/en/packages/com.sovworks.edslite
В самом начале я сказал, что шифрование работает только когда шифроконтейнер закрыт. В случае андроида это тоже актуально. Поэтому я уделил столько внимания тому, как бы сбросить ключи шифрования из оперативной памяти в случае атаки путём ребута. Это важно, это максимально достижимый уровень защиты в полевых условиях, но не факт, что это получится сделать. Поэтому возникает вопрос, как нам жить, если условный контейнер расшифрован, но прикрыт заблокированным экраном. Именно такая ситуация на деле является наиболее частой. В этом случае ущерб минимизируется тремя совершенно простыми действиями в штатных настройках андроида:
1. Отключить отображение уведомлений на локскрине, или, как минимум, скрыть информацию на уведомлениях.
2. Отключить режим отладки.
3. При подключении к ПК выставить режим по умолчанию "только зарядка".
Эти три шага позволяют защититься от большей части атак на заблокированное расшифрованное устройство.
Если речь идёт о атаке с помощью комлексов типа Cellebrite и аналогов, то они в основном работают с разблокированными девайсами. Возможно, некоторые разновидности содержат эксплойты для снятия блокировки экрана, но от них спасают только своевременные апдейты. Ну и очевидное "не сообщать пароли третьим лицам".
Если же смартфон со снятой блокировкой экрана попал в руки тем самым третьим лицам, увы, уже не спасёт ничего. Дополнительные пароли на отдельные приложения помогают максимум от любопытных соседей. Файлы, пересланные в мессенджерах кэшируются в открытом виде, сообщения в большинстве случаев хранятся плейнтекстом.
Недавно прошла новость под заголовком "Подозреваемый смог удаленно стереть улики с телефона через функцию Google". Моё мнение по данному поводу весьма очевидно: во-первых, в самой новости написано что обычно для противодействия такому применяются специальные меры, которых в том случае почему-то не было. Во-вторых, вряд ли данные удалялись невосстановимым способом. В-третьих, гугл по официальному запросу выдаст всю информацию, которая у него есть на пользователя. Нередко в числе выдаваемой информации будут и логи переписок. Whatsapp, например, сохраняет всю переписку открытым текстом в гуглооблако. Вообще, гуглосервисы - это один большой троян и держать их на личном устройстве, а тем более с критичной информацией - редкостная глупость.
Сделаю акцент ещё на тот момент, что использовать нужно только чистые android/aosp/lineageos. Никаких вендорских прошивок нашлёпанных пьяным китайцем. С выбором кастома нужно также быть осмотрительным. Если устройство есть в списке официально поддерживаемых на lineageos.org - считай, что в лотерею выиграл.
В качестве ещё одной меры защиты аккаунтов в случае, если аккаунты привязаны на номер телефона (никогда, НИКОГДА не привязывайте аккаунты к личному номеру) стоит поставить пин-код на сим-карту. Тогда атакующий не сможет переставить сим в свой девайс и получить аутентификационные смс (которые являются в крайней степени небезопасной технологией).
Выводы. Из числа действенных мер, которые пользователь может применить для защиты данных на смартфоне у нас есть не так много. Гуглосервисы должны отсутствовать, а рут присутствовать, не наоборот. Иначе ничего не получится. Надёжный пароль на локскрине, своевременные апдейты безопасности и страховка в виде перезагрузки при слишком активном вводе неверного пароля. Ну и лично моя рекомендация: не хранить на смартфоне никакой хоть чуть-чуть критичной информации. Смартфон by design не предназначен для того, чтобы быть доверенным устройством, как бы нам не хотели навязать обратное. Что-то по-быстрому загуглить, срочно связаться в крайнем случае. Всё, чего-то большего доверять смартфону лично я не рекомендую. Но каждый ищет свой уровень безопасности самостоятельно.