Застосування методології OWASP Mobile TOP 10 для тестування Android додатків

Згідно BetaNews, з 30 кращих програм з більш ніж 500 000 установок 94% містять щонайменше три уразливості середнього ризику, а 77% містять хоча б дві уразливості з високим рівнем ризику. З 30 додатків 17% були уразливі для атак MITM, піддаючи всі дані перехоплення зловмисниками.

Крім того, 44% додатків містять конфіденційні дані з жорсткими вимогами до шифрування, включаючи паролі або ключі API, а 66% використовують функціональні можливості, які можуть поставити під загрозу конфіденційність користувачів.

Саме тому мобільні пристрої є предметом багатьох дискусій з питань безпеки. Беручи все це до уваги, ми Hacken вирішили розглянути методологію OWASP Mobile TOP10 з метою продемонструвати процес проведення аналізу мобільних додатків на уразливості.

OWASP Mobile TOP 10 — одна з основних методологій тестування додатків на уразливості. В таблиці 1 наведено 10 вразливостей, які застосовуються для характеристики рівня безпеки додатка. [2,7,11]

Таблиця 1: Уразливості та їх опис

Вразливість Опис
М1 Обхід архітектурних обмежень (Improper Platform Usage) Ця вразливість охоплює зловживання особливостями платформи, обходу обмежень або невикористання систем контролю управління безпеки платформи. Характерно як для платформи Android, для iOS (обхід обмежень Touch ID і Keychain) і інших мобільних ОС. Зачіпає системи контролю безпеки, які є частиною мобільної операційної системи.
М2 Небезпечне зберігання даних (Insecure Data Storage) Ця вразливість являє собою комбінацію M2 + M4 Mobile Top Ten 2014. До неї відносяться небезпечне зберігання і ненавмисні витоку даних.
М3 Небезпечна передача даних (Insecure Communication) Недостатнє підтвердження достовірності джерел зв’язку, невірні версії SSL, недостатня перевірка узгодження, передача конфіденційних даних у відкритому вигляді (cleartext) і т. д.
М4 Небезпечна аутентифікація (Insecure Authentication) Ця уразливість відноситься до аутентифікації кінцевого користувача або неправильне управління сеансами. Включає наступні пункти:

  • Відсутність вимог перевірки ідентифікації користувача;
  • Відсутність перевірки контролю сеансу;
  • Недоліки управління сесіями.

М5 Слабка криптостійкість (Insufficient Cryptography) Застосування криптостойких алгоритмів для передачі sensitive інформації. Використання криптоалгоритмов може бути недостатнім у приватних випадках. Ця категорія описує варіанти неналежного використання криптографічних елементів, слабкої або недостатньої криптостійкості.
Все, що пов’язано з TLS або SSL відноситься до категорії M3. Якщо програма не використовує криптографічні засоби при необхідності, це відноситься до категорії М2.
М6 Небезпечна авторизація (Insecure Authorization) Ця вразливість описує недоліки авторизації (перевірка (валідація) на стороні клієнта, примусовий перегляд і т. д.). Такі події відрізняються від проблем аутентифікації (наприклад, пристрої реєстрації, ідентифікації користувачів і т. д.).
Якщо додаток не проходить перевірку автентичності користувачів при необхідності (наприклад, надання анонімного доступу до певних ресурсів або служб, при отсутстви автентифікації та заборони несанкціонованого доступу), це є помилкою перевірки автентичності, а не збоєм авторизації.
М7 Контроль вмісту клієнтських додатків (Client Code Quality) Ця категорія розглядає контроль за вхідними даними. Проблеми реалізації технологій коду в клієнт-сайд додатках, що відрізняються від написання коду та реалізації сервер-сайд додатках. До цього відноситься: переповнення буфера, format string уразливості, а також інші помилки на рівні коду, де рішенням є необхідність переписати код, який працює на мобільному пристрої.
М8 Модифікація даних (Code Tampering) Ця категорія описує зміну виконуваних файлів, локальних ресурсів, перехоплення викликів сторонніх процесів, підміна runtime методів і динамічну модифікацію пам’яті.
Після установки програми, його код залишається резидентнымв пам’яті пристрою. Це дозволяє зловредному додатком змінювати код, вміст пам’яті, змінювати або замінювати системні методи API, змінювати дані та ресурси програми. Це може забезпечити зловмиснику можливість маніпулювання сторонніми додатками для здійснення нелегітимних дій, крадіжки даних або отримання іншої фінансової вигоди.
М9 Аналіз вихідного коду (Reverse Engineering) Ця вразливість включає в себе аналіз бінарних файлів для визначення вихідного коду, бібліотек, алгоритмів і т. д. Програмне забезпечення, таке як IDA Pro, Hopper, otool та інші інструменти реверс-інжинірингу можуть дати уявлення про внутрішній роботі програми. Це може бути використано для пошуку вразливостей програми, вилучення критичної інформації, такої як бекенд-сервера ключів шифрування або інтелектуальної власності.
М10 Прихований функціонал (Extraneous Functionality) Часто розробники включають в код додатків приховані функціональні можливості, бекдори або інші механізми, функціональність яких призначена для загального використання. Під цю категорію підходить відоме визначення security through obscurity. Розробник може випадково залишити пароль в якості коментаря в гібридному додатку. Або це може бути відключення двофакторної аутентифікації під час тестування.

Для тестування програми «PasswordManager-1.3-release.апк», відповідно до OWASP Mobile TOP 10, ми не застосовували онлайнові і файлообмінні ресурси, а лише використовували набір програм, опис яких наведено в Таблиці 2. [6 — 10]

Таблиця 2: Використовувані програми

Назва Опис
1 Apktool Програма для розпаковування apk-файлів. Використовується для локалізації програмного забезпечення, аналізу структури програми та ін.
2 adb Це інструмент, який встановлюється разом з Android-SDK дозволяє управляти пристроями під керуванням ПРОЅ Android. Працює за принципом клієнт-сервер. Використовує 5037 порт.
3 dex2jar Це інструмент, який використовується для перетворення зміненого APK-файлу jar-файл.
4 Drozer Це фреймворк, який містить інструменти, що дозволяють шукати уразливості мобільних пристроїв і програм. Він функціонує як додаток і взаємодіє з віртуальною машиною Dalvik, іншими програмами й операційною системою.
5 VCG scanner Це інструмент для статичного аналізу вихідного коду і може аналізувати наступні мови програмування: С/С++, Java, C #, VB і PL/SQL.
6 JD-GUI Це інструмент, який використовується разом з dex2jar. Він забезпечує відкриття декомпилированного вихідного коду.
7 Genymotion Програмне забезпечення, яке призначене для створення тестових віртуальних машин під управлінням OS Android.
8 Pidcat Програма для відображення логів роботи програми і операційної системи.

Спочатку виробляємо декомпіляцію програми «PasswordManager-1.3-release.апк» за допомогою інструменту Apktool (див. Рис.1). Декомпіляція програмою Apktool не дозволяє отримати вихідний код в зрозумілій формі, але дозволяє отримати доступ до інших ресурсів програми, які розкажуть про архітектуру, бібліотеках, які використовує програма та ін.

Рис. 1. Декомпіляція «PasswordManager-1.3-release.апк».

Рис. 2. Структура «PasswordManager-1.3-release.апк».

На рис. 2. показана структура apk-файлу програми, а саме:

  • файл AndroidManifest.xml — описує дозволу, компоненти, версію SDK, яку рекомендується використовувати й інші налаштування програми;
  • файл apktool.yml — містить службову інформацію, необхідну Аpktool, для повторної компіляції;
  • директорія lib – зберігаються бібліотеки, які додатково завантажені в програмне додаток розробником. В даному випадку, використовується бібліотека з розширенням .so;
  • директорія original зберігаються службові файли програмного додатка;
  • директорія res — містить файли, графічні та інші ресурси програмного додатка;
  • smali — зберігаються файли вихідного коду у вигляді байт-коду.

Для перегляду вихідного коду програми використовуємо інструмент dex2jar (див. Рис. 3). Це дало можливість проаналізувати вихідний код програми статичним аналізатором коду VCG-scanner і вручну (див. Рис. 4).

Рис. 3. Отримання вихідного коду «PasswordManager-1.3-release.апк» за допомогою dex2jar

Рис. 4. Структура пакетів і класів «PasswordManager-1.3-release.апк», показана за допомогою dex2jar

M1. Обхід архітектурних обмежень (Improper Platform Usage)

Рис. 5. Файл AndroidManifest.xml

Доступ до файлу AndroidManifest.xml дає наступну інформацію про програму:

  • мінімально допустима версія Android — uses-sdk minSdkVersion = “23” (Чоловічий 6.0). Ця інформація дозволяє відразу зрозуміти необхідні вимоги для пристроїв (або віртуальної машини) на якій буде працювати (або тестуватися) програма, а звідси, з допомогою відкритих джерел, дізнатися уразливості цільових операційних систем;
  • перелік активностей: WelcomeActivity (загальна), ContentActivity, FormActivity. Ця інформація дає уявлення про компоненти програмного додатка, які забезпечують взаємодію користувача і backend-а програми;
  • сервіс: PasswordGeneratorService. Наявність цього сервісу дозволяє швидко знайти клас, який працює з криптографічними функціями;
  • контент провайдер: UsersProvider (экспортований). Наявність контент провайдера дозволяє знайти клас, який взаємодіє із зовнішніми ресурсами і базами даних.

M2. Небезпечне зберігання даних (Insecure Data Storage)

У програмі частина налагоджувальної інформації може відображатися в логах системи (див. Рис. 6 і 7). У цьому випадку стороння програма, яка має права READ_LOGS (наприклад, logcat або pidcat), може отримати доступ до чутливої інформації, тим самим порушуючи її конфіденційність.

Під час тестування використовувалася програма pidcat (див. Рис. 7). Уразливість була виявлена в програмному коді (див. Рис. 8) — розробник залишив функцію Log.d(), яка використовується для налагодження вихідного коду. [6 — 8]

Рис. 6. Паролі в зашифрованому вигляді. Рис. 7. У процесі роботи програми, пароль, який зберігається, відображається в логах.

Рис. 8. Місце у програмному коді, яке призводить до витоку даних.

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

При аналізі програми фреймворком Drozer, були знайдені експортовані компоненти – ContentProvider (див. Рис. 9), це дозволяє переглянути URI програми і отримати доступ до локальної бази даних, яку використовує програма [9].

За допомогою модуля app.provider.query отримуємо доступ до локальної бази даних програми.

Рис. 9. Експортовані URI-ContentProvider і приклади реалізації уразливості.

Аналізуючи вихідний код була знайдена вставка в локальну базу даних програми (див. Рис. 10). Знайдені дані дають можливість отримати несанкціонований доступ до системи.

Рис. 10. Зберігання даних у відкритому вигляді у вихідному коді.

Рекомендації по виправленню знайденої уразливості:

  • файл AndroidManifest.xml для даного ContentProvider встановити наступні прапорці: android: exported = false і android: protectionLevel = “signature»;
  • доступ до ContentProvider необхідно здійснювати за допомогою параметризованих запитів: query(), update() і delete().

M3. Небезпечна передача даних (Insecure Communication)

Мінімальна версія OS Android, яка визначена в програмі, не дозволяє використовувати Proxy. Ця особливість операційної системи дозволяє забезпечити захист від дешифрування трафіку на Proxy шляхом підміни сертифіката.
Але в програмі реалізовано автоматичне перемикання з протоколу HTTPS НТТР, якщо останній не підтримує шифрування, що може призвести до передачі інформації відкритим каналом передачі.

M4. Небезпечна аутентифікація (Insecure Authentication)

У вихідному коді немає функціоналу, який повинен забезпечувати аутентифікацію на віддаленому сервері, який проводить перевірку за наступними пунктами:

  • відсутність вимог щодо перевірки ідентифікації користувача;
  • відсутність перевірки контролю сесій;
  • недоліки управління сеансами.

M5. Слабка криптостійкість (Insufficient Cryptography)

З допомогою ручного аналізу вихідного коду програми був проаналізований клас FastCrypto.java, який здійснює перетворення масиву байт в хеш-суму алгоритму MD5 (див. Рис. 11). Алгоритм MD5 на час тестування вже був визнаний ненадійним. Його хеш-суму можна підібрати, як за допомогою онлайн-ресурсів, так і за допомогою програмних інструментів. [13]

Паролі в локальній базі даних програми зберігаються в хеш-значення «без солі» (див. Рис. 12). З допомогою Drozer, було отримано доступ до бази даних і знайдені паролі. Після цього, використовуючи онлайн сервіс MD5 Decrypter було підібрано пароль (див. Рис. 13).

Рис. 11. Підключення бібліотеки і визначення алгоритму хешування.

Рис. 12. Пароль, хеш-сума якого генерується алгоритму MD5.

Рис. 13. Результат підбору хеш-суми.

Вихідний код просканували програмою VCG scanner і знайшли, що програма підключає вразливу бібліотеку (див. Рис. 14 і 15), яка використовується для генерації блоків ключа. На момент написання статті, при використанні бібліотеки java.util.Random є можливість знайти наступне випадкове значення і рекомендується використовувати бібліотеку java.security.SecureRandom. [12]

Рис. 14. Знайдена уразливість після сканування VCG scanner.

Рис. 15. Вразлива бібліотека java.util.Random.

M6. Небезпечна авторизація (Insecure Authorization)

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

M7. Контроль вмісту клієнтських додатків (Client Code Quality)

Наступні уразливості були знайдені з допомогою VCG scanner (див. Рис. 16). Червоним кольором виділені уразливості контролю за введенням імені файлу і використання блоків try/catch. Це може привести до помилок при роботі програми, завантаження і запуску виконуваного файлу. Зеленим кольором виділені проблеми, пов’язані з використання об’єкта Intent. Згідно OWASP, прийняття об’єкта Intent з іншого компонента, без перевірки вважається вразливістю.
Рекомендації:

  • використання блоків контролю за виключенням try/catch;
  • контроль за вхідними параметрами та іменами файлів;
  • перевірка об’єктів Intent при їх отриманні.

Рис. 16. Результат сканування.

M8. Модифікація даних (Code Tampering)

З допомогою фреймворку Drozer була знайдена потенційна уразливість SQL-injection (див рис.17). Ця вразливість може надати можливість модифікувати дані, збережені в локальній базі даних. Для верифікації була зроблена спроба модифікувати дані в базі даних (див. Рис. 18), але на запит зміни інформації була отримана відповідь — «Not yet implemented» (див. Рис. 18). Це означає, що запит на модифікацію даних не реалізовано в програмі (див. Рис. 19), тому з допомогою фреймворку Drozer, на час проведення тестування, не має можливості модифікувати дані. [9]

Рис. 17. Перевірка уразливості бази даних.

Рис. 18. Верифікація знайденої уразливості.

Рис. 19. Вразливе місце модифікації даних.

M9. Аналіз вихідного коду (Reverse Engineering)

Вихідний код програми не обфусцирован, що дає можливість аналізувати вихідний код. Для аналізу програмного коду використовували програми apktool і dex2jar. Після цього були проаналізовані архітектура і фукционал, а також проведено статичний сканування коду (див. Рис. 1 — 5, 8, 10 — 11, 14 — 16, 18) і виявилися потенційні уразливості, які описувалися вище.

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

M10. Прихований функціонал (Extraneous Functionality)

Прихований функціонал не був знайдений на час тестування.

Висновки

Проаналізувавши можливість застосування методології OWASP Mobile TOP 10 для тестування на уразливості мобільних додатків, можемо зробити висновок, що воно дозволяє наочно і в цифрах проаналізувати кількість потенційних вразливостей, які можуть призвести до порушення конфіденційності, цілісності та доступності інформації, яку програма отримує, зберігає й обробляє. Але в той же час були відзначені деякі недоліки, а саме деякі уразливості можна одночасно віднести до різних категорій, що ускладнює можливість оцінки ризику знайденої уразливості і способу її закриття. Таким чином було проведено наочна демонстрація використання методології OWASP Mobile TOP 10 і зроблено висновок, що програму не можна виставляти в реліз. Кількість вразливостей наведено в Таблиці 3.

Таблиця 3:

Категорія Кількість вразливостей
М1 Обхід архітектурних обмежень 1
М2 Небезпечне зберігання даних 2
М3 Небезпечна передача даних 1
М4 Небезпечна аутентифікація
М5 Слабка криптостійкість 2
М6 Небезпечна авторизація
М7 Контроль змісту клієнтських додатків 2
М8 Модифікація даних 1
М9 Аналіз вихідного коду 1
М10 Прихований функціонал

Список використаних джерел

  1. Sreenivasa Rao Basavala, Narendra Kumar, Alok Agarrwal. Mobile Applications -Vulnerability Assessment. Through the Static and Dynamic Analysis. — Conference on Advances in Communication and Control Systems 2013.
  2. Vulnerability Testing: A Security Health Check-Up for Mobile Apps. [Електронний ресурс] — Режим доступу: https://www.wired.com/insights/2013/04/vulnerability-testing-a-security-health-check-up-for-mobile-apps/ — Назва з екрану
  3. Alejandro Argudo, Gabriel López, Franklin Sánchez. Privacy vulnerability analysis for Android Applications: A practical approach (2017). Електронна бібліотека IEEE Xplore Digital Library. [Електронний ресурс] — Режим доступу: http://ieeexplore.ieee.org/document/7962545/
  4. Ricky M., Monique L. Magalhaes. Assessing the Security of Mobile Applications – Part 1. Planning. [Електронний ресурс] — Режим доступу: http://techgenix.com/assessing-security-mobile-applications-part1/ — Назва з екрану
  5. Ricky M., Monique L. Magalhaes. Assessing the Security of Mobile Applications – Part 2. Testing the application. [Електронний ресурс] — Режим доступу: http://techgenix.com/assessing-security-mobile-applications-part2/ — Назва з екрану
  6. Mobile Security Wiki. [Електронний ресурс] — Режим доступу: https://mobilesecuritywiki.com – Назва з екрану
  7. DefconRU. Mobile security. [Електронний ресурс] — Режим доступу: https://defcon.ru/category/mobile-security/ — Назва з екрану
  8. Information security. Basic to Advanced. Android. [Електронний ресурс] — Режим доступу: https://securitylabexpert.wordpress.com/android/ — Назва з екрану.
  9. MWR Labs. Drozer. [Електронний ресурс] — Режим доступу: https://labs.mwrinfosecurity.com/tools/drozer/ — Назва з екрану
  10. Appie – Android Pentesting Portable Integrated Environment. [Електронний ресурс] – Режим доступу: https://manifestsecurity.com/appie/ — Назва з екрану
  11. OWASP Mobile Security Project [Електронний ресурс] — Режим доступу: https://www.owasp.org/index.php/OWASP_Mobile_Security_Project — Назва з екрану
  12. Злом генератора випадкових чисел Java. [Електронний ресурс] – Режим доступу: https://xakep.ru/2015/07/20 /java-random-hack/ — Назва з екрану
  13. Всі методи злому MD5. [Електронний ресурс] – Режим доступу: https://xakep.ru/2013/10/13/md5-hack/ — Назва з екрану
Читайте також  Створена технологія для повного знищення вірусів в донорських органах

Степан Лютий

Обожнюю технології в сучасному світі. Хоча частенько і замислююся над тим, як далеко вони нас заведуть. Не те, щоб я прям і знаюся на ядрах, пікселях, коллайдерах і інших парсеках. Просто приходжу в захват від того, що може в творчому пориві вигадати людський розум.

You may also like...

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *