iOS WebViews
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
The code of this page was extracted from here. Check the page for further details.
WebViews використовуються в додатках для інтерактивного відображення веб-контенту. Різні типи WebViews пропонують різні функціональні можливості та функції безпеки для iOS-додатків. Ось короткий огляд:
UIWebView, який більше не рекомендується з iOS 12 через відсутність підтримки вимкнення JavaScript, що робить його вразливим до ін'єкцій скриптів та атак Cross-Site Scripting (XSS).
WKWebView є переважним варіантом для інтеграції веб-контенту в додатки, пропонуючи покращений контроль над контентом та функціями безпеки. JavaScript увімкнено за замовчуванням, але його можна вимкнути за необхідності. Він також підтримує функції, щоб запобігти автоматичному відкриттю вікон JavaScript і забезпечує безпечне завантаження всього контенту. Крім того, архітектура WKWebView мінімізує ризик пошкодження пам'яті, що впливає на основний процес додатка.
SFSafariViewController пропонує стандартизований досвід веб-серфінгу в додатках, який можна впізнати за його специфічним макетом, включаючи поле адреси тільки для читання, кнопки спільного доступу та навігації, а також пряме посилання для відкриття контенту в Safari. На відміну від WKWebView, JavaScript не можна вимкнути в SFSafariViewController, який також ділиться куками та даними з Safari, зберігаючи конфіденційність користувача від додатка. Його потрібно відображати помітно відповідно до рекомендацій App Store.
У процесі вивчення конфігурацій WebViews акцентується на двох основних типах: UIWebView та WKWebView. Для ідентифікації цих WebViews у бінарному файлі використовуються команди, що шукають специфічні посилання на класи та методи ініціалізації.
UIWebView Identification
Ця команда допомагає знаходити екземпляри UIWebView, шукаючи текстові рядки, пов'язані з ним, у бінарному файлі.
Ідентифікація WKWebView
Аналогічно, для WKWebView ця команда шукає в бінарному файлі текстові рядки, що вказують на його використання.
Крім того, щоб дізнатися, як ініціалізується WKWebView, виконується наступна команда, яка націлена на підпис методу, пов'язаний з його ініціалізацією:
Для WKWebView підкреслюється, що вимкнення JavaScript є найкращою практикою, якщо це не потрібно. Скомпільований бінарний файл перевіряється, щоб підтвердити, що властивість javaScriptEnabled
встановлена на false
, що забезпечує вимкнення JavaScript:
WKWebView пропонує можливість виявлення проблем з змішаним контентом, на відміну від UIWebView. Це перевіряється за допомогою властивості hasOnlySecureContent
, щоб забезпечити завантаження всіх ресурсів сторінки через безпечні з'єднання. Пошук у скомпільованому бінарному файлі виконується наступним чином:
Динамічний аналіз передбачає перевірку купи на наявність екземплярів WebView та їх властивостей. Для цієї мети використовується скрипт під назвою webviews_inspector.js
, який націлений на екземпляри UIWebView
, WKWebView
та SFSafariViewController
. Він реєструє інформацію про знайдені екземпляри, включаючи URL-адреси та налаштування, пов'язані з JavaScript та безпечним контентом.
Перевірку купи можна проводити за допомогою ObjC.choose()
, щоб ідентифікувати екземпляри WebView та перевірити властивості javaScriptEnabled
та hasonlysecurecontent
.
Скрипт виконується з:
Ключові результати:
Екземпляри WebViews успішно виявлені та перевірені.
Перевірено налаштування активації JavaScript та безпечного контенту.
Цей підсумок охоплює критичні кроки та команди, що беруть участь в аналізі конфігурацій WebView через статичні та динамічні підходи, зосереджуючи увагу на функціях безпеки, таких як активація JavaScript та виявлення змішаного контенту.
Обробка контенту в WebViews є критично важливим аспектом, особливо при роботі з різними протоколами, такими як http(s)://
, file://
та tel://
. Ці протоколи дозволяють завантажувати як віддалений, так і локальний контент в додатках. Підкреслюється, що при завантаженні локального контенту необхідно вжити заходів, щоб запобігти впливу користувачів на ім'я або шлях файлу та редагуванню самого контенту.
WebViews пропонують різні методи для завантаження контенту. Для UIWebView, який зараз застарів, використовуються методи, такі як loadHTMLString:baseURL:
та loadData:MIMEType:textEncodingName:baseURL:
. WKWebView, з іншого боку, використовує loadHTMLString:baseURL:
, loadData:MIMEType:textEncodingName:baseURL:
та loadRequest:
для веб-контенту. Методи, такі як pathForResource:ofType:
, URLForResource:withExtension:
та init(contentsOf:encoding:)
, зазвичай використовуються для завантаження локальних файлів. Метод loadFileURL:allowingReadAccessToURL:
особливо помітний завдяки своїй здатності завантажувати конкретний URL або каталог у WebView, потенційно відкриваючи чутливі дані, якщо вказано каталог.
Щоб знайти ці методи в вихідному коді або скомпільованому бінарному файлі, можна використовувати команди, подібні до наступних:
Щодо доступу до файлів, UIWebView дозволяє його універсально, тоді як WKWebView вводить налаштування allowFileAccessFromFileURLs
та allowUniversalAccessFromFileURLs
для управління доступом з файлових URL, причому обидва за замовчуванням мають значення false.
Приклад скрипта Frida надається для перевірки конфігурацій WKWebView для налаштувань безпеки:
Нарешті, приклад JavaScript-пейлоада, спрямованого на ексфільтрацію локальних файлів, демонструє потенційний ризик безпеки, пов'язаний з неправильно налаштованими WebViews. Цей пейлоад кодує вміст файлів у шістнадцятковий формат перед їх передачею на сервер, підкреслюючи важливість суворих заходів безпеки в реалізаціях WebView.
З iOS 7 Apple надала API для зв'язку між JavaScript у WebView та нативними об'єктами Swift або Objective-C. Ця інтеграція в основному здійснюється через два методи:
JSContext: JavaScript-функція автоматично створюється, коли блок Swift або Objective-C пов'язується з ідентифікатором у JSContext
. Це дозволяє безперешкодно інтегрувати та взаємодіяти між JavaScript та нативним кодом.
JSExport Protocol: Спадкуючи протокол JSExport
, нативні властивості, методи екземпляра та методи класу можуть бути відкриті для JavaScript. Це означає, що будь-які зміни, внесені в середовищі JavaScript, відображаються в нативному середовищі, і навпаки. Однак важливо переконатися, що чутливі дані не відкриваються ненавмисно через цей метод.
JSContext
in Objective-CВ Objective-C JSContext
для UIWebView
можна отримати за допомогою наступного рядка коду:
WKWebView
Для WKWebView
прямий доступ до JSContext
недоступний. Натомість використовується передача повідомлень через функцію postMessage
, що дозволяє спілкування між JavaScript та нативним кодом. Обробники для цих повідомлень налаштовуються наступним чином, що дозволяє JavaScript безпечно взаємодіяти з нативним додатком:
JavaScript може взаємодіяти з нативним шаром, визначаючи обробник повідомлень скрипта. Це дозволяє виконувати операції, такі як виклик нативних функцій з веб-сторінки:
Щоб захопити та маніпулювати результатом виклику нативної функції, можна переопределити функцію зворотного виклику в HTML:
Сторона нативного коду обробляє виклик JavaScript, як показано в класі JavaScriptBridgeMessageHandler
, де результат операцій, таких як множення чисел, обробляється і надсилається назад до JavaScript для відображення або подальшої маніпуляції:
(Посібник, оснований на https://blog.vuplex.com/debugging-webviews)
Щоб ефективно налагоджувати веб-контент в iOS webviews, потрібна специфічна налаштування, що включає інструменти розробника Safari, оскільки повідомлення, надіслані до console.log()
, не відображаються в журналах Xcode. Ось спрощений посібник, що підкреслює ключові кроки та вимоги:
Підготовка на iOS пристрої: Необхідно активувати Safari Web Inspector на вашому iOS пристрої. Це робиться через Налаштування > Safari > Додатково, і увімкнення Web Inspector.
Підготовка на macOS пристрої: На вашій macOS розробницькій машині потрібно увімкнути інструменти розробника в Safari. Запустіть Safari, перейдіть до Safari > Налаштування > Додатково, і виберіть опцію Показати меню Розробка.
З'єднання та налагодження: Після підключення вашого iOS пристрою до комп'ютера macOS і запуску вашого додатку, використовуйте Safari на вашому macOS пристрої, щоб вибрати webview, який ви хочете налагоджувати. Перейдіть до Розробка в меню Safari, наведіть курсор на назву вашого iOS пристрою, щоб побачити список екземплярів webview, і виберіть екземпляр, який ви хочете перевірити. Для цього відкриється нове вікно Safari Web Inspector.
Однак, будьте уважні до обмежень:
Налагодження цим методом вимагає пристрою macOS, оскільки воно залежить від Safari.
Тільки webviews в додатках, завантажених на ваш пристрій через Xcode, підлягають налагодженню. Webviews в додатках, встановлених через App Store або Apple Configurator, не можуть бути налагоджені цим способом.
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)