Основні правила безпеки додатків в Cordova, та плагіни, які можуть вам домогти

Сьогодні я хотів би підняти тему безпеки, про яку мало хто думає на старті свої проектів. Це стосується застосунків, які створені за допомогою Cordova, Capacitor, ionic, або інших застосунків. Тема піде про те, як захиститися від взлому вашого додатку, хочаб на ранніх етапах. 

Рутовані пристої

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

Проблеми у багатьох розробників зʼявляються на тому этапі, коли їх додатки запускають на рутованих пристроях. Де хакери легко можуть отримати доступ до localStorage, до данних дотку, а також до памʼяті пристрою, звідки вони можуть перехоплювати навіть внутрішні процеси додатків.

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

Обфускація

Рано чи підно ваш додаток все одно зільють, від цього не змолгли застрахуватися навіть дуже велики мульти-мільярдні компанії. Якщо хакер новенький, то його вже спинить неможливість запуску на емуляторах, чи в серидовищі, через заборону запуску на рут пристроях. Але він все ще зможе розпакувати ваш додаток, та переглянути чистий код додатку. Від цього процесу теж на 100% вам не вдасться захиститися, але ви можете створити проблеми для хакера, і якщо ви не мульти-мільярдна компанія, то зашифрувавши код, і якщо це зробити правильно, то у хакерів може підти на дешифрації від декількох місяців, до декількох років. Якщо вони не будуть бачити вигоди, то навряд хтось захоче витрачати декілька років життя на те, щоб дешифрувати ваш додаток.

С шифрації додатку вам доможе така технологія ях обфускація. Це не плагін кордови, це окремий пакет, який ви можете налаштувати, та зашифрувати ваш додаток до компіляції в кордові. Тобто я маю на увазі, після зборки наприклад vuejs, той код, що ви отримали в dist vuejs, ви приганяєте через javascript-obfuscator, а тільки після з того шо вийшло, компілюєте додаток кордови. 

По факту обфускація перетворює код на мішанину символів, 0 та 1, якесь сміття, яке взагалі не можна розібрати. Тут є певні мінуси, те що одне слово буде перетворено в 5, та щей замішано з купою лівих змінних, створених неіснуючих функціх, які всі теж зашифровані. По факту обфускація може перемішати ваш код так, що його практично неможливо буде відтворити. Але тут є нюанс, це розмір файлу. При тяжкій обфускації 1 мегабайт файлу, може перетворитися в 5. Це не вплине на швидкість роботи додатку, оскільки додаток кордова знаходится на локальному пристрої, і буде він важити 20, чи 300 мегабайт, по факту для кінцевого користувача не так і важливо, але це створить багато проблем для хакерів.

Не використовуйте localStorage

Навіть не на рутованих пристроях localStorage може бути підвержена XSS атакам. Для того щоб цього частково уникнути, важливі данні користувача зберігайте в secured-storage. Це плагін, який зашивається в памʼяті додатку, і по факту, якщо навіть хакер буде намагатися перехопити пакет, чи памʼять, то ції данних там бути не повинно. А localStorage просто скачується цілком через debug режим.

Безпека мережевих запитів

Використовуйте тільки HTTPS зʼєднання, я думаю не варто пояснювати чому. Налаштуйте CORS та CSP таким чином, щоб дозволити тільки необхідні джерела. Якщо використовуєте сокети, то тілько WSS.

Sentry

Є такий сервіс - Sentry. Який допоможе вам відстежувати абсолютно всі дії в додатку, від запитів до помилок. Це доможе вам зрозуміти куди ломится хакер, де виникають помилки в додатку. Це по факту сервіс логування, і по факту може бути цікавим не тільки для захисту, і відстежування дій хакера. А і для того, щоб розуміти, де у звичайних користувачів виникають помилки.

SonarQube та OWASP Dependency-Check

Ну і на фіналочку, не забувайте прогянаяти ваш додаток через сервіси тестування. Є цілі фреймворки, які тестують всякі вразливості, починаючи від тих же XSS, і закінчуючи дирами в памʼяті. Я би рекомендував для початку проганути через ці 2 - SonarQube та OWASP Dependency-Check. Один встановлюється локально, і його треба вивчати, по іншому є онлайн сервіси, але обидва маст хев для старту додатку.