Як популярні додатки засвідчують запити користувачів від свого мобільного додатка до свого сервера?


118

Скажімо, у мене є програма Android, яка підключається до .Net API для отримання / налаштування даних. Яке непорозуміння стосується того, як вперше зареєструватись / увійти до користувача та підтвердити автентифікацію кожного разу, коли він звертається до API.

  • Якщо я просто використовую аутентифікацію на основі імені користувача / пароля, вони не будуть достатньо безпечними?
  • І я не можу зберегти це ім'я користувача / пароль у пристрої, звичайно, з міркувань безпеки?
  • Чи потрібно видавати GUID кожному користувачеві під час реєстрації, зберігати його на своєму пристрої та отримувати щоразу під час запиту API?

Які інші схеми доступні, а які найбільш ефективні та безпечні, мені просто потрібен потік процесу для цього. Хтось може сказати мені, який метод відомих андроїд-додатків, таких як Facebook, FourSquare або Twitter, використовує для автентифікації кожного запиту, що надходить з мобільного додатку на їхній сервер?

Вибачте заздалегідь, якщо це не якась публічна інформація.

Відповіді:


48

Я думаю, що вони використовують систему безпеки на основі лексеми, тому пароль насправді ніде не зберігається, просто вперше використовується для автентифікації. Таким чином, програма спочатку публікує ім’я користувача / пароль (понад ssl), і сервер повертає маркер, який зберігає додаток. Для наступних спроб синхронізації маркер спочатку надсилається, сервер перевіряє, чи він дійсний, а потім дозволяє розміщувати інші дані.

Маркер повинен мати термін дії, щоб сервер міг повторно запросити спробу аутентифікації.

Якщо ви підключите адаптер синхронізації з Android Framework, який надасть вам можливість синхронізувати та автентифікувати всі під кришкою.

http://developer.android.com/training/sync-adapters/creating-sync-adapter.html

Якщо ви перевірите облікові записи в розділі Налаштування на своєму пристрої, ви побачите, що я маю на увазі.


19

В основному ці відомі використовують протокол OAuth (1) / Framework (2). Незважаючи на те, що це повинно бути стандартом, кожен з них мав різні реалізації цього протоколу / рамки. Тому ми повинні бути дуже обережними, коли мова йде про інтеграцію.

Приклад: Dropbox все ще використовує OAuth 1 і нещодавно придумав підтримку OAuth 2.

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

Цікавим є те, що область доступу до ресурсів може бути визначена, а не дозволяє клієнтській програмі зберігати імена користувачів, паролі яких небезпечні.

Це основна ілюстрація того, як це працює.

введіть тут опис зображення

Відповідь я оновлю після того, як отримаю детальнішу інформацію про це, оскільки працюю в цій галузі в наші дні :)


13

Якщо я просто використовую аутентифікацію на основі імені користувача / пароля, вони не будуть достатньо безпечними?

Ні, тому що ви визначаєте лише ВООЗ, який здійснює доступ до сервера API, але не ЩО має доступ до нього.

Різниця між ВООЗ і ЩО - це доступ до сервера API

Щоб краще зрозуміти відмінності ВООЗ і ЩО мають доступ до сервера API, давайте скористаємося цією картиною:

Людина в середній атаці

Канал призначеного зв'язку представляє мобільний додаток, який використовує законний користувач без будь-яких зловмисних намірів, використовуючи незахищену версію мобільного додатка та спілкуючись безпосередньо з сервером API, не будучи нападеним людиною.

Фактичний канал може представляти кілька різних сценаріїв, як, наприклад, легальний користувач із шкідливими намірами, який може використовувати перепаковану версію мобільного додатка, хакер, що використовує справжню версію мобільного додатка, а людина в середині його атакує, щоб зрозуміти, як зв’язок між мобільним додатком та сервером API здійснюється для автоматизації атак на ваш API. Можливе багато інших сценаріїв, але кожен тут не будемо перераховувати.

Я сподіваюсь, що до цього часу ви вже можете мати поняття, чому ВОЗ і ЩО не є однаковими, але якщо ні, це стане зрозумілим через мить.

ВООЗ є користувачем мобільного застосування , яке ми можемо аутентифікації, авторизації та ідентифікації декількома способами, наприклад , з використанням OpenID Connect або oauth2 потоки.

ВІН

Як правило, OAuth надає клієнтам "захищений делегований доступ" до ресурсів сервера від імені власника ресурсу. Він визначає процес для власників ресурсів, щоб дозволити стороннім доступом до ресурсів свого сервера, не ділившись своїми обліковими даними. Розроблений спеціально для роботи з протоколом передачі гіпертексту (HTTP), OAuth, по суті, дозволяє видавати жетони доступу стороннім клієнтам сервісом авторизації за згодою власника ресурсу. Потім третя сторона використовує маркер доступу для доступу до захищених ресурсів, розміщених сервером ресурсів.

OpenID Connect

OpenID Connect 1.0 - простий рівень ідентичності поверх протоколу OAuth 2.0. Це дозволяє Клієнтам перевірити особу Кінцевого користувача на основі аутентифікації, виконаної сервером авторизації, а також отримати основну інформацію про профіль Кінцевого користувача в оперативному режимі та схожий на REST спосіб.

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

Тепер нам потрібен спосіб визначити, ЩО викликає сервер API, і тут справи стають складнішими, ніж може вважати більшість розробників. Що це те , що робить запит до сервера API. Це справді справжній екземпляр мобільного додатка, або це бот, автоматизований скрипт або зловмисник, який вручну обмірковує сервер API, використовуючи такий інструмент, як Postman?

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

Що ж, щоб визначити, ЩО ТАКІ , розробники, як правило, вдаються до ключа API, який зазвичай жорстко кодують у коді свого мобільного додатка. Деякі розробники проходять додаткову милю і обчислюють ключ під час роботи мобільного додатку, таким чином він стає секретом виконання, на відміну від колишнього підходу, коли в код вбудований статичний секрет.

Наведене вище опис було витягнуто з статті, яку я написав під назвою ЧОМУ ВАШОГО МОБІЛЬНОГО ПРИКЛАДАЄТЬСЯ КЛЮЧ API? , і що ви можете повністю прочитати тут , це перша стаття з серії статей про ключі API.

Зберігання чутливих даних на клієнтському пристрої

І я не можу зберегти це ім'я користувача / пароль у пристрої, звичайно, з міркувань безпеки? Чи потрібно видавати GUID кожному користувачеві під час реєстрації, зберігати його на своєму пристрої та отримувати щоразу під час запиту API?

Все, що ви зберігаєте на пристрої, навіть якщо воно зашифроване, може бути реконструйоване під час роботи інструментами, такими як Frida або Xposed.

Фріда

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

xPosed

Xposed - це рамка для модулів, які можуть змінювати поведінку системи та додатків, не торкаючись жодних APK-файлів. Це чудово, адже це означає, що модулі можуть працювати для різних версій і навіть ПЗУ без будь-яких змін (до тих пір, як початковий код

У пристрої контролює атакуючі , він також може використовувати проксі - сервер для виконання атаки посередника , щоб витягти будь - яких секрет , ви можете використовувати , щоб ідентифікувати ЩО або ХТО , як я показую в статті Крадіжки , що ключ API з людиною в нападі :

Хоча ми можемо використовувати передові методи, такі як JNI / NDK, щоб приховати ключ API в коді мобільного додатка, це не завадить комусь здійснити атаку MitM, щоб вкрасти ключ API. Насправді атака на MitM є легкою до того, що її можуть домогтися навіть не розробники.

Так що тепер ... Чи я приречений на те, що я не можу захистити свій сервер API від зловживань ??? Ні тихо, так ... надія все ще існує !!!

Можливі рішення

Хтось може сказати мені, який метод відомих андроїд-додатків, таких як Facebook, FourSquare або Twitter, використовує для автентифікації кожного запиту, що надходить з мобільного додатку на їхній сервер?

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

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

Таким чином, все, що працює на клієнті та потребує певного секрету для доступу до API, можна зловживати різними способами, і ви можете дізнатися більше про цю серію статей про техніку безпеки мобільного API. Ця стаття навчить вас, як ключі API, маркери доступу користувачів, HMAC та TLS Pinning можна використовувати для захисту API та як їх можна обійти.

Щоб вирішити проблему ЩО отримує доступ до свого мобільного додатка, вам потрібно використовувати одне чи всі рішення, згадані в серії статей про Техніка безпеки мобільного API, про які я згадував вище, і визнали, що вони можуть ускладнити лише несанкціонований доступ до вашого сервера API обхід, але не неможливий.

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

Атестація мобільних додатків

Використання рішення для мобільних програм атестації дозволить серверу API дізнатися, ЩО надсилає запити, тим самим дозволяючи відповідати лише на запити справжнього мобільного додатка, відхиляючи всі інші запити з небезпечних джерел.

Роль рішення для мобільних додатків - це гарантувати під час запуску те, що ваш мобільний додаток не підробляється, не працює на вкоріненому пристрої, не інструментується рамкою, як xPosed або Frida, не атакується MitM, і це досягається за допомогою запуску SDK у фоновому режимі. Послуга, що працює в хмарі, кидає виклик додатку, і на основі відповідей це засвідчить цілісність мобільного додатка та пристрою, завдяки чому SDK ніколи не несе відповідальності за будь-які рішення.

Після успішної атестації цілісності мобільних додатків недовговічний маркер JWT видається та підписується з таємницею, про яку знають лише сервер API та послуга мобільного оцінювання додатків у хмарі. У разі відмови в атестації на мобільний додаток маркер JWT підписується секретом, про який не знає сервер API.

Тепер додаток має надсилати з кожним API виклику маркер JWT у заголовках запиту. Це дозволить серверу API обслуговувати запити лише тоді, коли він може перевірити підпис і термін придатності в маркері JWT та відмовити їх, коли не вдасться перевірити.

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

Послуга мобільного оцінювання додатків вже існує як рішення SAAS у Approov (я працюю тут), що забезпечує SDK для декількох платформ, включаючи iOS, Android, React Native та інші. Інтеграція також потребує невеликої перевірки коду сервера API, щоб перевірити маркер JWT, виданий хмарною службою. Ця перевірка необхідна для того, щоб сервер API міг вирішити, які запити подавати та які відмовити.

Висновок

Зрештою, рішення, яке слід використовувати для захисту свого сервера API, повинно вибиратися відповідно до значення того, що ви намагаєтесь захистити, та законодавчих вимог щодо такого типу даних, як, наприклад, норми GDPR в Європі.

ВИ ХОЧЕТЕ ПЕРЕБИТИ ВНІШНУ МІЛ?

Проект мобільної безпеки OWASP - Топ-10 ризиків

Проект OWASP Mobile Security - це централізований ресурс, призначений для надання розробникам та командам безпеки ресурсів, необхідних для створення та підтримки захищених мобільних додатків. Завдяки проекту наша мета - класифікувати мобільні ризики безпеки та забезпечувати контроль розвитку, щоб зменшити їх вплив чи ймовірність експлуатації.



3

Я новачок, але спробую дати логічне рішення для даного питання.

Будуть два варіанти: [1] Для кожного URI буде виконуватися автентифікація http, де введені облікові дані користувача будуть перевірені та користувач отримає доступ до ресурсів.

[2] Інший підхід може бути, користувач повинен підтвердити автентифікацію, і при кожній аутентифікації буде створено унікальний маркер. Використовуючи створений маркер, користувач має доступ до ресурсів.

Хоча я не впевнений, який підхід може бути найкращим чином підходить для мобільних додатків.


3

Приклад аутентифікації - хороше місце для початку. Android зберігає облікові дані в Менеджері облікових записів, ви можете переглядати облікові записи в налаштуваннях Android. Це автоматично зберігає маркери, спонукає користувача до облікових даних, якщо термін дії закінчився або відсутній, оновіть маркери тощо. Я вважаю, що частина http цього прикладу відсутня або стара. Розширення облікового запису AndroidAuthenticatorActivity на Android є прекрасним помічником для аналізу серіалізованих даних до макета та повернення до Інтернету.


-7

Ім'я користувача та паролі можуть бути безпечними, якщо їх розміщувати в SharedPreferences. Використання https для підключення до сервера також має бути досить хорошим.


Ви можете використовувати SharedPreferences, але ваші дані там за замовчуванням не шифруються. Якщо ви переживаєте з цього приводу, дивіться, наприклад, цю дискусію на SO: stackoverflow.com/questions/785973/…
Michael Helwig

3
SharedPreferences не є безпечним місцем для зберігання облікових даних. Будь-який укорінений пристрій (що не важко зробити) викриє ці дані. Натомість використовуйте вбудований API акаунта.
Брілл Паппін

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

@BrillPappin Питання про ваш коментар. Дані, що зберігаються, - це електронна адреса та пароль користувача, а також маркер для надсилання, який представляє поточну автентифікацію з цим електронним листом. Якщо користувач вирішив викрити власні повноваження для себе через вкорінення, то як це ризик?
ToolmakerSteve

Ризик подвійний. 1) будь-які важкодоступні чутливі дані, які ви повинні припустити, будуть доступними. Можливо, вам не все одно, але хтось інший може. 2) будь-яке зберігання парольної фрази є небезпечним.
Брілл Паппін
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.