Якщо я просто використовую аутентифікацію на основі імені користувача / пароля, вони не будуть достатньо безпечними?
Ні, тому що ви визначаєте лише ВООЗ, який здійснює доступ до сервера 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 - це централізований ресурс, призначений для надання розробникам та командам безпеки ресурсів, необхідних для створення та підтримки захищених мобільних додатків. Завдяки проекту наша мета - класифікувати мобільні ризики безпеки та забезпечувати контроль розвитку, щоб зменшити їх вплив чи ймовірність експлуатації.