Криптостійкі андроїди. Як влаштовано шифрування даних на карті пам'яті в Android

  1. Зміст статті Шифрування даних в ОС Android тісно пов'язане з двома проблемами: контролем доступу...
  2. Особлива роль карти пам'яті
  3. Адаптуй це!
  4. INFO
  5. Альтернативне шифрування даних на карті пам'яті
  6. Продовження доступно тільки учасникам
  7. Варіант 2. Відкрий один матеріал

Зміст статті

Шифрування даних в ОС Android тісно пов'язане з двома проблемами: контролем доступу до карт пам'яті і перенесенням на них додатків. Багато програм містять дані активації, платіжну та конфіденційну інформацію. Її захист вимагає управління правами доступу, які не підтримуються типовою для карток файлової системою FAT32. Тому в кожній версії Android підходи до шифрування кардинально змінювалися - від повної відсутності криптографічного захисту змінних носіїв до їх глибокої інтеграції в єдиний розділ з шифруванням на льоту.

Тому в кожній версії Android підходи до шифрування кардинально змінювалися - від повної відсутності криптографічного захисту змінних носіїв до їх глибокої інтеграції в єдиний розділ з шифруванням на льоту

WARNING

У кожного гаджета з ОС Android є свої суттєві відмінності - як в прошивці, так і на апаратному рівні. Навіть різні версії однієї моделі можуть сильно відрізнятися. Карти пам'яті теж мають свої особливості. Тому детальні керівництва з використання шифрування на одному пристрої часто не працюють без модифікацій на іншому. Універсальних методів тут не існує. Є лише загальні підходи, які і описані в даній статті.

Особлива роль карти пам'яті

Спочатку розробники Android припускали використання карти пам'яті тільки як окремого сховища для користувача файлів. Це був просто склад мультимедіа без будь-яких вимог до його захисту і надійності. Картки microSD (HC) з FAT32 цілком справлялися з роллю найпростішої хранілкі, звільняючи внутрішню пам'ять від фоток, відеороликів і музики.

Можливість переносити на карту пам'яті не тільки мультимедійні файли, але і додатки вперше з'явилася в Android 2.2 Froyo. Реалізована вона була за допомогою концепції зашифрованих контейнерів на кожен додаток, але захищало це виключно від попадання не в ті руки карти - але не смартфона.

До того ж це була напівзахід: багато програм переносилися частково, залишаючи частину даних у внутрішній пам'яті, а деякі (наприклад, системні або містять віджети) переносилися на картку зовсім. Сама можливість перенесення додатків залежала від їх типу (встановлене або стороннє) і внутрішньої структури. У одних каталог з одними даними відразу розташовувався окремо, а у інших - в підкаталозі самої програми.

У одних каталог з одними даними відразу розташовувався окремо, а у інших - в підкаталозі самої програми

Інтерфейс перенесення даних на карту пам'яті

Якщо додатки інтенсивно використовували операції читання / запису, то надійність і швидкість роботи карток вже не могла задовольнити розробників. Вони навмисно робили так, що перенесення програм штатними засобами ставав неможливий. За рахунок такого хитрування їх творіння гарантовано отримувало прописку у внутрішній пам'яті з великим ресурсом перезапису і високою швидкодією.

З четвертої версії в Android з'явилася можливість вибрати, де розмістити додаток. Можна було призначити карту пам'яті як диск для установки програм за замовчуванням, але не всі прошивки коректно підтримували цю функцію. Як вона працює в конкретному пристрої - вдавалося з'ясувати лише досвідченим шляхом.

У п'ятому Андроїд Google знову вирішила повернути початкову концепцію і зробила все, щоб максимально ускладнити перенесення додатків на карту пам'яті. Великі виробники вловили сигнал і додали в прошивки власні функції моніторингу, що визначають спроби користувача примусово перемістити додатки на картку з використанням рута. Більш-менш працював тільки варіант зі створенням жорстких або символьних посилань. При цьому додаток визначалося за стандартним адресою у вбудованій пам'яті, а фактично перебувало на картці. Однак плутанину вносили файлові менеджери, багато з яких некоректно обробляли посилання. Вони показували невірний обсяг вільного місця, оскільки вважали, що додаток нібито займає місце і у вбудованій пам'яті, і на картці одночасно.

Адаптуй це!

В Android Marshmallow з'явився компроміс під назвою «адаптованості сховище» - Adoptable Storage. Це спроба Google зробити так, щоб і вівці залишилися цілі, і солдати задоволені.

Функція Adoptable Storage дозволяє об'єднати користувальницький розділ у вбудованій пам'яті з розділом на картці в один логічний том. Фактично вона створює на картці розділ ext4 або F2FS і додає його до призначеного для користувача розділу внутрішньої пам'яті. Це чисто логічна операція об'єднання, що віддалено нагадує створення складеного томи з кількох фізичних дисків в Windows.

Меню включення Adoptable Storage

У процесі об'єднання з внутрішньою пам'яттю картка переформатується. За замовчуванням весь її обсяг буде використаний в об'єднаному томі. В такому випадку файли на картці вже не можна буде прочитати на іншому пристрої - вони будуть зашифровані унікальним ключем пристрою, який зберігається всередині довіреної середовища виконання.

В якості альтернативи можна зарезервувати на картці місце під другий розділ з FAT32. Збережені на ньому файли будуть видні на всіх пристроях, як раніше.

Спосіб поділу картки задається або через меню Adoptable Storage, або через оцінний міст для Android (Android Debug Bridge - ADB). Останній варіант використовується в тих випадках, коли виробник приховав Adoptable Storage з меню, але не видалив цю функцію з прошивки. Наприклад, вона прихована в Samsung Galaxy S7 і топових смартфонах LG. Останнім часом взагалі з'явилася тенденція прибирати Adoptable Storage з флагманських пристроїв. Вона вважається милицями для бюджетних смартфонів і планшетів, що не комплектуються достатнім об'ємом вбудованої Flash-пам'яті.

Втім, не маркетологам вирішувати, як нам використовувати свої пристрої. Через ADB на комп'ютері з Windows функція Adoptable Storage включається в такий спосіб.

  1. Робимо бекап всіх даних на картці - вона буде переформатована.
  2. Встановлюємо останню версію Java SE Development kit з сайту Oracle.
  3. Встановлюємо останню версію Android SDK Manager .
  4. Включаємо на смартфоні налагодження по USB.
  5. Запускаємо SDK Manager і в командному рядку пишемо: $ adb shell $ sm list-disks
  6. Записуємо номер диска, під яким визначається карта пам'яті (зазвичай він виглядає як 179: 160, 179: 32 або подібним чином).
  7. Якщо хочеш додати до внутрішньої пам'яті весь обсяг картки, то пиши в командному рядку: $ sm partition disk: x: y private

    де x: y - номер карти пам'яті.

  8. Якщо хочеш залишити частину для томи FAT32, то зміни команду з п. 7 на таку: $ sm partition disk: x: y mixed nn

    де nn - залишок обсягу у відсотках для томи FAT32.

Наприклад, команда sm partition disk: 179: 32 mixed 20 додасть до вбудованої пам'яті 80% обсягу картки і залишить на ній тому FAT32 в 1/5 її обсягу.

На деяких смартфонах цей метод в варіанті «як є» вже не працює і вимагає додаткових хитрувань. Виробники роблять все, щоб штучно розділити свою продукцію по ринкових нішах. Топові моделі випускаються з різним об'ємом вбудованої пам'яті, і бажаючих переплачувати за нього знаходиться все менше.

Деякі смартфони не мають слота для карти пам'яті (наприклад, серія Nexus), але підтримують підключення USB-Flash-носіїв в режимі OTG. В такому випадку флешку також можна використовувати для розширення обсягу вбудованої пам'яті. Робиться це за допомогою такої команди:

$ Adb shell sm set-force-adoptable true

За замовчуванням можливість використовувати USB-OTG для створення адаптованого сховища відключена, оскільки його несподіване витяг може привести до втрати даних. Імовірність раптового відключення карти пам'яті набагато нижче через її фізичного розміщення всередині пристрою.

Якщо з додаванням об'єму змінного носія або його розбиттям на розділи виникають проблеми, то спочатку видали з нього всю інформацію про колишнє логічної розмітки. Надійно це можна зробити за допомогою лінуксових утиліти gparted, яка на комп'ютері з Windows запускається із завантажувального диска або у віртуальній машині.

Згідно офіційній політиці Google додатки можуть одночасно бути встановлені в адаптується сховище або перенесені в нього, якщо розробник вказав це в атрибуті android: installLocation. Іронія в тому, що далеко не всі власні додатки Google поки дозволяють це робити. Якихось практичних лімітів у «адаптованого сховища» в Android немає. Теоретична межа для Adoptable Storage становить дев'ять зеттабайт. Стільки немає навіть в дата-центрах, а вже карти пам'яті більшого об'єму тим більше не з'являться в найближчі роки.

Сама процедура шифрування при створенні адаптованого сховища виконується за допомогою dm-crypt - того ж модуля ядра Linux, яким проводиться полнодісковое шифрування вбудованої пам'яті смартфона (див. Попередню статтю « Криптостійкі андроїди. Як працює полнодісковое і пофайлово шифрування в Android »). Використовується алгоритм AES в режимі зчеплення блоків шифртекста (CBC). Для кожного сектора генерується окремий вектор ініціалізації з сіллю (ESSIV). Довжина згортки хеш-функції SHA становить 256 біт, а самого ключа - 128 біт.

Така реалізація, хоча і поступається в надійності AES-XTS-256, працює набагато швидше і вважається досить надійною для користувача пристроїв. Цікавий сусід навряд чи розкриє зашифроване адаптоване сховище за розумний час, а ось спецслужби давно навчилися використовувати недоліки схеми CBC. До того ж реально не всі 128 біт ключа виявляються абсолютно випадковими. Мимоволі або навмисне ослаблення вбудованого генератора псевдовипадкових чисел - сама часто зустрічається проблема криптографії. Вона зачіпає не стільки гаджети з Android, скільки все споживчі пристрої в цілому. Тому найнадійніший спосіб забезпечення приватності - взагалі не зберігати конфіденційні дані на смартфоні.

Тому найнадійніший спосіб забезпечення приватності - взагалі не зберігати конфіденційні дані на смартфоні

INFO

Якщо після об'єднання пам'яті за допомогою Adoptable Storage скинути до заводських налаштувань, то дані на картці також пропадуть. Тому попередньо варто зробити їх бекап, а краще - відразу призначити хмарну синхронізацію.

Альтернативне шифрування даних на карті пам'яті

Тепер, коли ми розібралися з особливостями зберігання файлів на карті пам'яті в різних версіях Android, перейдемо безпосередньо до їх шифрування. Якщо у тебе девайс з шостим андроїдом і новіше, то з великою ймовірністю в ньому так чи інакше можна активувати функцію Adoptable Storage. Тоді всі дані на картці будуть зашифровані, як і у вбудованій пам'яті. Відкритими залишаться лише файли на додатковому розділі FAT32, якщо ти захотів його створити при переформатуванні картки.

Продовження доступно тільки учасникам

Варіант 1. Приєднайся до товариства «Xakep.ru», щоб читати всі матеріали на сайті

Членство в співтоваристві протягом зазначеного терміну відкриє тобі доступ до ВСІХ матеріалами «Хакера», збільшить особисту накопичувальну знижку і дозволить накопичувати професійний рейтинг Xakep Score! Детальніше

Варіант 2. Відкрий один матеріал

Зацікавила стаття, але немає можливості стати членом клубу «Xakep.ru»? Тоді цей варіант для тебе! Зверни увагу: цей спосіб підходить тільки для статей, опублікованих більше двох місяців тому.


Ru»?