Безпека мобільних додатків, або «Хто перевірить перевіряючих?»

Вітаю, Ви друга людина,
який зламав сьогодні сейф Ван дер Воде.
Таким чином, містер Оушен,
Ви вступили в довгі ряди тих,
хто доклав титанічних зусиль,
щоб досягти мети
і, в підсумку, стати лише другим.
Вам невідомі імена цих людей,
тому що вони покриті забуттям.
Вам знайоме слово «забуття»?
Це означає, що про Вас
забувають все і назавжди".
Містер Нічний Лис (к/ф «12 друзів Оушена»)





Привіт, читачу Хабра!

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





Але дозвольте, ти говориш людині, який жовтий колір? Який пожежу і капюшон? Це ж костюм для офіційних заходів. Чоловік каже, що і сам здивований і стурбований. Костюм йому подобається, та й чудово зшитий. І ви радите йому забити на цього гостя і не кликати його більше, щоб уникнути ще який-небудь подібної фігні. Ви обидва смієтеся, бажаєте один одному приємного вечора і прощаєтеся. Володар Думки відданий забуттю.

Ось і ми опинилися на місці цього кравця. Зробили компанії-клієнту мобільний додаток на замовлення. Обговорювали кожен крок з урахуванням потреб користувачів (користувачів конкретно цього додатка, а не в цілому БУДЬ-якого мобільного додатка), погодили кожен елемент. Всі щасливі, включаючи користувачів, але тут намалювався якийсь Гість зі своєю ДУМКОЮ. І засунути куди-небудь це його ДУМКУ, так воно таке кострубате і незграбне, що навряд чи куди влізе.

Судіть самі
Всі ми (практично всі) користуємося смартфонами і мобільними додатками. І, звичайно, всі ми (деякі з нас) замислюємося над безпекою наших особистих даних, які ми зберігаємо в телефоні. Але, так чи інакше, більшість покладається на розробників додатків. Дійсно, завдання безпечного зберігання і передачі даних — одна з найважливіших задач, якою займаються розробники. Не дивно, що компанії-замовники намагаються перестрахуватися і іноді віддають розроблене додаток на рев'ю третьої компанії (бажано, широко відомої).
З нами теж стався такий випадок, і додаток нашої компанії потрапило на так звану «перевірку». В результаті утворилася якась презентація з описом того, як все погано. Нижче ми привели аргументи перевіряючих, свої коментарі і висновки. Насолоджуйтеся



Безпека з'єднання
Аргумент
З'єднання із сервером виконується з використанням протоколу https і TLS-шифрування трафіку, що де-факто є стандартом для сучасних додатків. Тим не менш, реалізація на пристрої не відповідає всім вимогам коректного використання https. Зокрема, додаток встановлює з'єднання, отримавши будь-TLS-сертифікат. Ця уразливість дозволяє здійснити повне прослуховування конфіденційних даних додатка:
• Можна прочитати у відкритому вигляді всі передані дані або змінити їх.
• Витік піддаються PAN-номери кредитних карт, CVC/CVV-коди, особисті дані користувача.
• Підміна форм оплати, перехоплення даних.

Контраргумент
Колеги, ну адже все-таки не будь-TLS-сертифікат, а будь-довірений на рівні операційної системи. Звичайно, користувач може «ненавмисно» додати сертифікат зловмисника, що отримав контроль над каналом зв'язку. Така «вразливість» властива в принципі всім сайтам. Проте життя не зупиняється, і люди реєструються і роблять покупки на сайтах. Тут дуже багато залежить від обережності самого користувача. У разі додатки можна підвищити безпеку, запровадивши в додаток конкретний сертифікат, що використовується сервером (SSL Pinning). Але це вимагає узгодження з замовником і перешкоджає зміні сертифіката (принаймні, відповідного йому ключа) на сервері без оновлення програми.

Висновок
Аргумент в цілому не зовсім точний. Більшість додатків, а також браузери працюють на тому ж рівні безпеки з'єднання. Написаний таким чином, він може сильно налякати замовника, в чому очевидно і була мета.

Дані програми
Аргумент
Дані клієнта зберігаються на пристрої у відкритому вигляді. Не використовуються ні системні засоби захисту (Keychain iOS Data Protection), ні шифрування даних. Дана уразливість дозволяє:
На будь-якому пристрої (без jailbreak і інших модифікацій) при підключенні до комп'ютера за хвилину отримати дані користувача. Це можна зробити, наприклад, файловим менеджером iFunBox.

Контраргумент
Це твердження оманливе: схоже, що колеги перевіряли додаток на розблокований телефон. Справа в тому, що для захисту даних використовується iOS Data Protection (прапор NSFileProtectionComplete — і ми це перевірили). Це означає, що коли пристрій з налаштованим pin'ом або Touch ID заблоковано, файл зашифрований, і може бути розшифрований тільки після розблокування. Якщо пристрій заблоковано, то говорити про захист даних від зловмисника, що має фізичний доступ до вашого пристрою, безглуздо: він може просто запустити програму і все подивитися.
Варіант підвищення безпеки за допомогою пін-коду нами розглядався. Проте його використання додатку для захисту даних — ідея досить спірна. Якщо зробити його необов'язковим, користувач може його не встановити, точно так само, як і не встановити його на весь пристрій. Якщо зробити його обов'язковим, користувачам доведеться вводити два пін-коду: на телефон і на додаток. Крім того, без пін-коду на пристрої незахищеними залишаються такі речі як пошта, браузер (з кешем і збереженими паролями), дзвінки та повідомлення. Маючи доступ до них, зловмисник може не тільки завдати і без того значний збиток, але і швидше за все отримати доступ до облікового запису користувача на сервері (якщо він є і, наприклад, має функцію “забули пароль"). Та й навряд чи програма зберігає дані більш критичні, ніж перелічені речі.

Висновок: Аргумент є помилковим. Ми вважаємо, що мала місце помилка перевіряючого або перевіряючий навмисне розраховував, що це зробить помилку замовник, якщо спробує перевірити це сам. Прочитати дані на заблокованому телефоні не можна, а маючи пристрій у руках можна робити все у відкритому додатку.

Загроза JailBreak
Аргумент
При наявності встановленого jailbreak є можливість дистанційно скопіювати дані програми разом з базою даних і іншими файлами

Контраргумент
Що-небудь захищати або гарантувати «при наявності встановленого jailbreak» — це зовсім інша історія. Ми рекомендуємо взагалі нічого нікому «при наявності встановленого jailbreak» не гарантувати. Наприклад, буває і таке: github.com/iSECPartners/ios-ssl-kill-switch. Як можна захищати користувача, який собі це поставить? Пропонується перевірка на встановлений jailbreak? По-перше, будь-яку перевірку на jailbreak можна обійти. По-друге, навряд чи користувач не в курсі, що у нього jailbreak; і тут варто задуматися, кого ми захищаємо: користувача від атак або додаток від користувача. По-третє, наявність деяких перевірок може призвести до проблем при проходженні appstore review, або при роботі додатка, адже багато хто перевірки полягають у тому, що програма намагається робити те, чого програм на не-jailbreak пристроях робити недозволена.

Висновок: Аргумент є помилковим. Не будемо захищати додаток і дані користувача від самого користувача.

Системні скріншоти
Аргумент
Системні скріншоти не маскуються, і можуть містити приватні платіжні дані клієнтів. Системні скріншоти зберігаються в пам'яті пристрою і легко доступні при підключенні до комп'ютера.

Контраргумент
Ну знову ж таки, скоріше перевірявся незалоченный телефон. Для системних скріншотів теж використовується «iOS Data Protection», і в залоченном телефоні вони недоступні. А якщо телефон розблоковано і до нього є доступ щось побачити скріншоти не складе труднощів нікому.

Висновок
Аргумент надуманий і покликаний посіяти паніку, адже скріншоти захищені на рівні системи.

Відладчик


Аргумент
Додаток при старті не здійснює перевірок на наявність відладчика, що дозволяє відновити алгоритми роботи програми і модифікувати його.

Контраргумент
Відновити алгоритми роботи — незрозуміло в чому мета цієї дії і навіщо про нього писати? Ніяких секретних алгоритмів у нас немає, а модифікувати програму можна лише при наявності jailbreak, і ми про це уже писали — це може пошкодити тільки самому користувачеві.

Висновок
Аргумент безглуздий. Незрозуміло, навіщо він приведений і розуміє автор так званої «презентації» сенс того, про що пише.



ПІДСУМОК:






Як бачите, пункти безпеки в експрес-аналізі порушені вірні, але їх трактування і подача викликають деякі питання.

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

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



Як кажуть, хто перевірить того, хто перевіряв?
Ми завжди раді конструктивній критиці за своїм продуктам, але тут рівень аргументації та адекватність підходу компрометують саму ідею перехресного аналізу.
Вдалого всім дня і успіхів у розробці додатків… безпечних додатків.

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.